에이전트는 루프 방식으로 작동합니다. LLM 이 무엇을 할지 결정하고, 도구가 이를 실행하며, 모델이 결과를 평가한 후 작업이 완료될 때까지 해당 루프를 계속 반복합니다.
초기에는 에이전트와 LLM 을 소프트웨어 애플리케이션에 통합하기 어려웠습니다. 소프트웨어는 구조화된 데이터와 예측 가능한 인터페이스에 의존하기 때문입니다. 이 문제를 훨씬 쉽게 해결해 준 두 가지 기본 요소가 등장했습니다:
- 도구 호출(Tool calling)을 통해 모델은 구조화된 요청을 하고 구조화된 결과를 받을 수 있게 되었습니다.
- 구조화된 출력(Structured outputs)을 통해 모델은 구조화된 결과를 반환할 수 있게 되었습니다.
하지만 이러한 기능이 도입되었음에도 불구하고, 에이전트 루프는 여전히 느리고 비용이 많이 듭니다. 모든 의사결정마다 추가적인 모델 호출이 필요하기 때문입니다.
여기에 Jev 가 등장했습니다. Jev 는 TypeSafe AI 에서 공개한 새로운 모델입니다. 회사는 분류 작업에서 동급의 LLM 대비 추론 속도는 최대 200 배 빠르고 비용은 400 배 낮다고 보고했습니다.
https://x.com/CompleteSkeptic/status/2099925682726002904
이 글에서는 Jev 의 작동 방식, 에이전트 루프에서의 위치, 그리고 LangChain 과 함께 사용하는 방법을 다룹니다.
Jev 에 대한 모든 것
Jev 는 사실 전통적인 LLM 이 아니며, 텍스트를 생성하지 않습니다. 이는 TypeSafe AI 팀이 System One 모델이라고 부르는 것입니다:
📖 System One 모델은 소프트웨어가 직접 사용할 수 있는 빠르고 구조화된 의사결정을 내리도록 설계된 AI 모델 클래스입니다. System One 모델은
상태(state)를 평가하여
타입이 지정된 답변과 확률을 반환합니다.
이 모델은 보정된 의사결정을 위한 강화 학습(RLCD)을 사용하여 훈련됩니다. 코드는 이러한 결과를 활용하여 각 의사결정마다 전체 채팅 LLM 호출 없이 에이전트의 다음 행동을 안내합니다.
Jev 모델을 호출하려면 해당 상태(컨텍스트)와 그 상태에 대한 질문들을 보내면 됩니다. 아래는 공식 문서에 있는 지원 티켓 예제의 단일 질문 버전입니다:
1{2 "model": "jev-latest",3 "state": "Hi, I've been trying to connect my Stripe account for 3 days and it keeps failing. I'm losing sales. Please help ASAP.",4 "questions": {5 "is_urgent": {6 "type": "noul",7 "instructions": "The message conveys urgency or time-sensitivity"8 }9 }10}
공식 문서의 예제에서는 다음과 같은 긴급성 답변을 제공합니다. 여기서는 나머지 응답 부분을 생략했습니다:
1{2 "is_urgent": {3 "type": "noul",4 "noul": 0.9995 }6}
이는 메시지가 긴급할 확률이 99.9% 라는 뜻이며, 애플리케이션은 이를 활용해 티켓 우선순위를 정할 수 있습니다.
지원되는 질문 유형은 세 가지입니다:

- 선택(Choice): 옵션 세트 중 하나를 선택합니다. 각 옵션에 대한 확률과 전반적인 신뢰 점수를 반환합니다.
- 점수(Score): 입력값을 낮은, 중간, 높은 등의 순서화된 수준으로 평가합니다. 연속적인 점수, 기본 분포 및 신뢰 값을 반환합니다.
- Noul: 예 또는 아니오 질문에 답합니다. 문장이 참일 확률을 반환합니다.
여기서의 주요 특징 중 하나는 동일한 상태에 대해 여러 질문을 한 번의 요청으로 할 수 있다는 점입니다.
💡 System One 모델은 요청 내의 모든 질문을 병렬로 평가합니다. 질문을 추가해도 응답 시간은 거의 변하지 않으며, 추가 질문에 필요한 토큰 비용만 발생합니다. 이 비용은 매우 저렴합니다.
지원 티켓에 대해 여러 질문을 하는 예제는 TypeSafe Quickstart를 참조하세요.
요약하자면, 전통적인 LLM 과 달리 Jev 는 텍스트 생성이나 순차적 의사결정에 구애받지 않습니다!
LangChain 으로 Jev 사용하는 방법
LangChain 의 프로바이더 독립적 모델은 수천 개의 다른 통합 및 모델 프로바이더와 함께 Jev 를 지원하는 데 적합합니다.
LangChain 통합은 TypeSafeClassifier 를 통해 Jev 를 노출합니다. 상태와 질문을 .invoke() 에 전달하면 채팅 응답 대신 분류 결과를 얻게 됩니다.
langchain-typesafe 를 설치하고 TYPESAFE_API_KEY 를 설정한 후 호출하세요:
1from langchain_typesafe import Noul, TypeSafeClassifier23classifier = TypeSafeClassifier()45response = classifier.invoke(6 state=(7 "The deploy failed twice and customers are seeing 500s. "8 "Can someone look now?"9 ),10 questions={11 "urgent": Noul(12 instructions="Does this need attention right now?"13 ),14 },15)1617urgency = response.nouls["urgent"].noul
상태는 텍스트, 구조화된 데이터 또는 LangChain 메시지일 수 있습니다. 이를 통해 에이전트가 이미 가진 컨텍스트를 사용하여 노드나 미들웨어 훅에서 Jev 를 간단히 호출할 수 있습니다.
이를 커스텀 미들웨어 또는 도구로 구축할 수도 있습니다!
사용 사례
Jev 는 LLM 을 대체하는 드롭인 솔루션이 아닙니다. 텍스트를 생성하지 않지만, 오늘날 우리가 LLM 에게 자주 맡기는 분류 작업을 동일한 지연 시간과 비용 없이 처리할 수 있습니다. 이는 에이전트를 구동하는 모델에 유망한 보완재가 됩니다. 개방형 추론과 생성에는 LLM 을 사용하고, 그 과정에서 빠르고 구조화된 의사결정에는 Jev 를 사용하세요.
모델 라우팅
단순 조회 작업은 어려운 디버깅 작업과 동일한 모델을 필요로 하지 않습니다. 모델 라우팅 미들웨어를 사용하면 Jev 가 요청을 평가하고 사용자가 정의한 기준에 따라 모델을 선택할 수 있습니다. 이를 통해 단순한 작업에는 빠르고 저렴한 모델을, 복잡한 작업에는 더 강력한 모델을 사용할 수 있습니다.
1from langchain.agents import create_agent2from langchain_typesafe.experimental.middleware import (3 ModelChoice,4 ModelRouterMiddleware,5)67router = ModelRouterMiddleware(8 choices={9 "fast": ModelChoice(10 model="openai:luna",11 criteria="Direct lookups, extraction, and localized changes.",12 ),13 "powerful": ModelChoice(14 model="openai:sol",15 criteria="Architecture and high-stakes decisions.",16 ),17 },18 instructions="Choose the least costly model that can complete the task.",19)2021agent = create_agent("openai:gpt-5.6-luna", middleware=[router])
라우터는 최신 사용자 메시지를 기반으로 모델을 선택하고 실행 내내 이를 사용합니다. 확률과 신뢰 값은 에이전트 상태에서도 계속 확인할 수 있습니다.
자동 모드(Auto Mode)
에이전트는 여전히 본질적으로 완전히 신뢰하기 어렵습니다. 에이전트는 나쁜 지침(자연스럽게 발생하거나 공격자가 의도적으로 주입한 경우)을 받아 원치 않는 행동을 하도록 설득당할 수 있습니다.
claude, codex, cursor 와 같은 코딩 하네스는 행동이 취해지기 전에 위험한 작업을 분류하는 방식을 도입했으며, 이를 통해 에이전트에 대한 신뢰를 서서히 구축해 왔습니다. 지금까지 이 분류 단계는 하네스의 클로즈드 소스 부분에 잠겨 있었습니다.
이제 저렴하고 성능 좋은 분류 모델이 존재하게 되었으므로, 동일한 패턴을 모든 에이전트에 적용할 수 있습니다!
1from langchain.agents import create_agent2from langchain_typesafe.experimental.middleware import (3 AutoModeMiddleware,4)56guardrail = AutoModeMiddleware(tools=["bash"])78agent = create_agent("openai:gpt-5.6-luna", middleware=[guardrail])
AutoModeMiddleware는 Jev 를 사용하여 도구 호출 시 발생할 수 있는 위험한 결정을 확인하고, 도구가 실행되기 전에 호출을 차단합니다.
시작해 보세요!
저희는 Jev 와 그것이 가져올 가능성에 대해 매우 흥분하고 있습니다. 이미 목격한 몇 가지 흥미로운 프로젝트로는 Browserbase 의 Kyle Jeong이 브라우저 사용 에이전트를 1 센트의 일부 비용으로 구동하고 있으며, Jarrod Watts는 실시간 트레이딩 에이전트를 구축했고, Ryan Vogel은 대규모 이메일 트리아지를 수행하고 있습니다.
최근에는 매주 새로운 모델이 출시되고 있지만, 이번 모델은 특히 큰 반응을 불러일으켰습니다. 여러분이 LangChain 과 Jev 로 무엇을 만들지 기대됩니다.
포럼에서 여러분의 생각을 알려주시거나, X에서 저희를 태그하여 만들고 있는 것을 공유하거나, LangChain 이슈에 참여해 주세요!
감사의 말
세심한 검토와 기여를 해주신 @huntlovell, @hwchase, @ccurme, @veryboldbagel, Nathan Drenzer 님께 감사드립니다.





