Deep Agents v0.6

TMT

https://x.com/sydneyrunkle/status/2056419909941522687

이번 Deep Agents 릴리스는 모델 레벨, 에이전트 레벨, 대규모 환경, 장기 실행 환경에서의 성능에 초점을 맞췄습니다. 이를 뒷받침하는 다섯 가지 변화는 다음과 같습니다:

  • Code interpreter: 에이전트가 도구를 조합하고, 상태를 관리하며, 어떤 정보가 모델 컨텍스트에 들어갈지를 제어할 수 있게 해 주는 경량 런타임입니다. 완전한 샌드박스 환경이 가지는 오버헤드 없이 이를 구현합니다.
  • Harness profiles: 사용하는 모델이 무엇이든, 특히 Kimi, Qwen, DeepSeek 같은 오픈 가중치(open-weight) 모델에서도, 그 모델이 가진 성능을 최대한 끌어낼 수 있도록 하는 모델별 튜닝 기능입니다.
  • Streaming: 메시지, 도구 호출, 서브에이전트, 사용자 정의 애플리케이션 이벤트에 대한 타입이 분리된 프로젝션을 제공해, 원시 스트림 출력 전체를 파싱할 필요 없이 애플리케이션이 필요한 것만 구독할 수 있게 합니다.
  • DeltaChannel: 에이전트가 더 오래 실행되고 컨텍스트가 축적되더라도, 에이전트의 재개 가능성, 관측 가능성, 복원력을 보장하는 내구성 있는 실행 특성을 유지하면서, 체크포인트 저장을 효율적으로 처리합니다.
  • ContextHubBackend: LangSmith Context Hub를 백엔드로 사용하여, 에이전트 행동을 좌우하는 스킬, 정책, 메모리를 버전 관리되는 협업형 저장소에 보관합니다. 한 번의 실행에서 에이전트가 학습한 내용이 다음 실행에서의 성능 향상으로 이어지도록 해 줍니다.

Code interpreter

Deep Agents에는 설치해서 사용할 수 있는 code interpreter가 새로 추가됩니다. 이를 통해 에이전트는 데이터를 변환하고, 도구 호출을 조율하고, 중간 작업물을 모델 컨텍스트 밖에 유지할 수 있는 프로그래머블 워크스페이스를 갖게 됩니다. 에이전트는 자신의 의도를 코드로 작성하고, 인메모리 런타임은 그 코드를 실행한 뒤 관련 결과만 돌려줍니다.

샌드박스가 명령 실행, 의존성 설치, 파일 수정 등 환경에 직접 작용하기 위한 “코드 우선” 방식이라면, 인터프리터는 에이전트 루프 내부에서 동작하기 위한 “코드 우선” 방식입니다. 도구를 조합하고, 상태를 보존하며, 어떤 정보가 모델에 다시 전달될지를 결정하는 역할을 합니다.

Image

이것은 특히 다음과 같은 새로운 기능들을 가능하게 합니다.

Model-agnostic PTC

표준적인 도구 호출 루프에서는 모든 단계에서 모델이 트래픽 컨트롤러 역할을 합니다. 모델이 도구 호출을 요청하고, 그 전체 결과를 컨텍스트로 받은 뒤, 그 결과를 바탕으로 다시 추론을 수행하고, 이 과정을 반복합니다. 중간 결과가 단지 다음 입력을 계산하기 위한 용도에 불과하더라도, 매번 여러 번의 모델 호출을 거치게 됩니다.

Programmatic Tool Calling(PTC)은 이 워크플로우를 바꿉니다. 모델이 실행 런타임 내부에서 도구를 호출하는 코드를 작성하면, 워크플로우는 개별 도구 호출마다 매번 모델을 왕복 호출하지 않고도 진행될 수 있습니다. 중간 결과는 런타임 상태로 남겨 두고, 인터프리터는 이 안에서 시끄러운 출력(noisy output)을 걸러내고, 데이터를 처리하고, 실패를 재시도하며, 진짜로 모델에 다시 전달할 가치가 있는 컨텍스트만 되돌려줄 수 있습니다.

Image

이런 도구 호출 패턴은 토큰 사용량을 줄이고, 불필요한 모델 왕복 호출을 줄이며, 에이전트의 추론 단계 자체를 더 작게 만듭니다.

Anthropic은 이 패턴을 자사 모델 패밀리에 적용된 API 동작으로 제공하면서 대중화했지만, 인터프리터를 사용하면 이제 어떤 모델이든(오픈소스 모델 포함) 어떤 에이전트에서도 동일한 패턴을 구현할 수 있습니다.

Recursive workflows

인터프리터를 사용하면 에이전트가 하니스(harness)와 상호작용하는 방식도 더 다양해집니다. 도구와 서브에이전트를 코드에서 직접 호출할 수 있기 때문에, 에이전트는 한 서브에이전트의 출력을 받아 검사하고, 변환한 다음, 그 결과를 다른 단계에 넘길 수 있습니다. 이 모든 것을 매번 중간 산출물을 메인 모델로 다시 라우팅하지 않고 처리합니다.

이로 인해 재귀적 워크플로우가 가능해집니다. 에이전트는 질문 큐를 유지하고, 다음 질문에 대해 서브에이전트를 호출하고, 결과를 저장하고, 그 결과로부터 후속 작업을 생성하고, 충분한 증거가 모였다고 판단될 때까지 이를 계속해서 반복한 뒤 최종 답변을 합성합니다. (이는 단순히 “전체 입력 컨텍스트에 대해 다른 LLM을 한 번 더 호출한다”와는 다릅니다. 핵심은 모델 컨텍스트 바깥에서 작업 상태를 유지하고, 선택된 브랜치에만 모델 또는 서브에이전트를 호출하며, 각 다음 모델 호출에 어떤 정보가 들어갈지 제어한다는 점입니다.)

Image

이는 **Recursive Language Models(RLM)**의 아이디어와 인접한 개념입니다. 작업 상태를 모델 컨텍스트 밖에 유지하고, 선택된 브랜치에만 모델을 호출하며, 다음 모델 호출에 어떤 정보가 들어갈지를 제어한다는 공통점이 있습니다. Recursive Language Models (https://www.notion.so/paper%20link)

Deep Agents에서는, 인터프리터가 이 패턴의 실행 런타임 역할을 수행합니다. 다만, 해당 개념이 처음 정의될 때의 “모델 레벨에서의 RLM을 구현한다”고 주장하지는 않습니다.

이 모든 기능은 pypi에서 deepagents[quickjs]를 설치하거나, npm에서 @langchain/quickjs를 설치한 뒤 이를 미들웨어로 추가하면 사용할 수 있습니다.

Image

인터프리터에 대한 더 자세한 내용은 docs에서 확인할 수 있습니다.

Harness profiles

Kimi K2.6, GLM 5.1, DeepSeek V4 같은 오픈 가중치 모델은 이제 프로덕션 에이전트 작업에도 충분히 쓸 수 있을 정도로 성숙해졌고, 종종 클로즈드 프런티어 모델 대비 20배 이상 저렴한 비용으로 사용할 수 있습니다. 하지만 모델마다 툴 호출 포맷과 프롬프트 관례가 다르게 사후 학습(post-training)되어 있고, 대부분의 하니스는 작성자가 처음 맞추어 둔 클로즈드 모델에 특화되어 있습니다. 그런 상태에서 모델만 바꿔 끼우면, 모델이 사용하는 “방언”을 하니스가 이해하지 못해 실제 성능의 일부분만 보게 되는 경우가 많습니다.

그 격차는 상당히 크고, 수치로도 확인 가능합니다. 우리의 테스트에서 하니스 레벨 변경만으로도 gpt-5.2-codex는 Terminal-Bench 2.0에서 52.8% → 66.5%로 올라갔고(Top 30 → Top 5), gpt-5.3-codex는 tau2-bench에서 20% 향상, opus-4.7은 10% 향상을 보였습니다. tau2-bench 전반에서, 프롬프트와 미들웨어만으로도 모델 자체를 바꾸지 않고 점수를 10~20포인트까지 끌어올릴 수 있습니다.

여기서 말하는 “하니스(harness)”는 모델 주변부 전체를 의미합니다. 기본 시스템 프롬프트, 도구와 그 설명, 각 턴을 형성하는 미들웨어 등이 모두 하니스에 포함됩니다. 하니스 프로파일은 이러한 모델별 오버라이드를 하나의 이름 붙은, 버전 관리 가능한 단위로 캡처한 것입니다.

DeepAgents v0.6에서는 하니스 프로파일을 일급 추상화(first-class abstraction)로 격상했습니다. 모델과 함께 프로파일을 비교(diff)하고, 버전 관리하고, 교체할 수 있어서, 튜닝 결과를 그대로 이어갈 수 있습니다. 주요 모델들에 대해서는 강한 성능이 기본값이 되도록 내장 프로파일을 제공하며, 동일한 메커니즘을 여러분의 스택에도 그대로 쓸 수 있습니다.

자세한 내용은 여러 모델에 걸쳐 Deep Agents를 튜닝하는 방법에서 볼 수 있습니다. 직접 작성하는 방법은 docs를 참고하세요.

Streaming

에이전트는 최종 답변을 돌려주기 전에 이미 많은 작업을 수행합니다. 좋은 사용자 경험을 제공하려면 이 작업 과정을 실시간으로 보여주고, 그 과정에서 사용자가 에이전트를 조정할 수 있어야 합니다. 이를 가능하게 해 주는 핵심 프리미티브가 바로 스트리밍입니다. LangChain의 이번 릴리스는 스트리밍을 애플리케이션의 일급 프리미티브로 끌어올렸습니다. stream_events(…, version=“v3”)를 사용하면, 에이전트와 그래프가 통합 이벤트 스트림을 내보내고, 개발자가 실제로 렌더링하고 싶은 프리미티브(메시지 텍스트, 추론 블록, 도구 호출, 상태 업데이트, 서브그래프, 서브에이전트, 커스텀 채널, 최종 출력 등)에 대해 사용하기 쉬운(projection) 인터페이스를 제공합니다. 스트림은 콘텐츠 블록 단위로 조직되기 때문에, UI가 각 청크가 텍스트인지, 추론인지, 미디어인지, 도구 호출 데이터인지를 추측할 필요가 없습니다. 모든 것이 타입이 지정된 이벤트, 네임스페이스, 채널 중심으로 구조화되어 있으며, 새로운 Agent Streaming Protocol과 정렬되어 있습니다.

Image

이 스트리밍 모델은 새로운 Agent Server 엔드포인트와 SDK 지원을 통해 네트워크 경계 바깥까지 이어집니다. LangGraph SDK는 client.threads.stream(…)을 통해 원격 이벤트 스트리밍을 노출하며, 멀티모달 콘텐츠, 재연결/재생(replay) 동작, SSE나 WebSocket을 가리지 않는 트랜스포트 방식 등을 지원합니다. 로컬과 원격 스트림이 이제 동일한 프로토콜을 따르기 때문에, 개발자는 스크립트, 백엔드 서비스, 프로덕션 프론트엔드 전반에서 일관된 방식으로 에이전트 실행을 관찰할 수 있습니다. 애플리케이션은 특정 서브에이전트의 메시지, 커스텀 채널의 업데이트, 특정 네임스페이스 안의 이벤트 등, 실행 중 일부 구간만 골라서 구독할 수 있습니다.

프론트엔드 측에서는 이번 릴리스에 @langchain/react, @langchain/vue, @langchain/svelte, @langchain/angular에 대한 v1 프레임워크 통합이 포함되어 있어, 팀이 이벤트 파서를 직접 구현하지 않고도 풍부한 스트리밍 UI를 만들 수 있는 관용적인 훅과 유틸리티를 제공합니다. 새로운 스택을 쉽게 탐색할 수 있도록, Streaming Cookbook도 함께 공개했습니다. 메시지 스트리밍, 서브그래프, 서브에이전트, 커스텀 스트림 변환기, 멀티모달 UI, 재연결 동작, 프레임워크별 패턴 등을 다루는 실행 가능한 예제 모음입니다. 그 결과, 이 스트리밍 기반은 정밀함이 필요한 곳에서는 더 저수준으로, 생산성이 중요한 곳에서는 더 고수준으로 동작하면서, 에이전트 런타임부터 사용자 인터페이스까지 일관된 경험을 제공합니다.

Delta channels

Deep Agents는 LangGraph 런타임 위에 구축되어 있으며, 이 런타임은 에이전트의 모든 단계를 체크포인트로 남깁니다. 이 덕분에 관측 가능성, 사람 개입(human-in-the-loop), 장애 복구가 가능해집니다. 에이전트가 지금 정확히 어디까지 진행되었는지 항상 알 수 있고, 어떤 지점에서든 다시 실행을 재개할 수 있기 때문입니다.

에이전트가 더 강력해질수록 다음과 같은 변화가 생깁니다.

  1. 더 오래 실행되며, 메시지 히스토리가 수십, 수백 단계에 걸쳐 누적됩니다.
  2. 더 많은 컨텍스트를 사용하며, 파일시스템을 컨텍스트 관리와 오프로딩(offloading)에 적극 활용합니다.

deepagents에서는 메시지 히스토리와 파일이 에이전트 상태에 저장되고, 매 단계마다 전체 스냅샷을 남기는 방식이기 때문에, 체크포인트 저장 용량은 O(N²)로 증가합니다.

Delta channels는 이러한 런타임을 확장하기 위해 우리가 도입한 방식입니다. 매 체크포인트마다 전체 스냅샷을 직렬화하는 대신, 변경분(diff)만 저장합니다. Deep Agents에서는 메시지 히스토리와 파일에 대해 델타 기반 저장을 적용합니다.

Image

여전히 에이전트 진행 내역 전체에 대한 완전한 히스토리를 얻을 수 있지만, 저장 비용은 그 일부에 불과합니다. 이는 장기 실행 에이전트에서 체크포인터(데이터베이스)에 대한 쓰기 병목을 완화하고, 대규모 환경에서의 스토리지 비용 또한 훨씬 관리하기 쉬운 수준으로 낮춰 줍니다.

대화 길이와 컨텍스트 크기에 따라 다르지만, 델타 채널로 전환하면 체크포인트 저장 공간을 10~100배까지 줄이는 것이 충분히 가능합니다.

예를 들어, 에이전트가 파일을 작성하고, 문서를 검색하고, 자신의 작업을 추론하는 등, 실제로 강력한 코딩 에이전트가 수행하는 것과 같은 방식으로 동작하는, 다중 파일 코딩 세션을 시뮬레이션했다고 가정해 보겠습니다. 200턴에 걸친, 장기적이고 컨텍스트가 무거운 작업입니다. 델타 채널 없이 이 세션을 실행하면 체크포인트 저장 공간이 5.27GB까지 쌓입니다. 델타 채널을 사용할 경우에는 129MB로 줄어듭니다.

다음은 동일한 에이전트에 대해 델타 채널을 사용하기 전과 후의 체크포인터 저장 공간을 비교한 것입니다.

Image

그리고 이 폭발적 증가를 그래프로 표현한 모습은 다음과 같습니다.

Image

장기 실행 에이전트와 깊은 컨텍스트는 이 분야가 나아가고 있는 방향이며, 델타 채널은 이러한 미래를 뒷받침하기 위해 우리 런타임이 확장되는 방법입니다.

자세한 내용은 전체 글에서 확인할 수 있습니다.

ContextHub Backend

Context Hub는 Deep Agents를 위한 LangSmith 기반 파일시스템입니다. 에이전트 행동을 형성하는 파일들을 위한 버전 관리되는 저장소를 제공하므로, 프롬프트, 스킬, 그 밖의 컨텍스트를 개선한 내용이 실행 간에 이어질 수 있습니다.

기본적으로 에이전트는 Hub 리포지토리로부터 읽고(또는 여기에 쓰기도) 합니다. 이러한 쓰기는 히스토리, 리뷰, 환경 태깅이 붙은 커밋으로 남습니다. 따라서 스테이징 환경에서 반복(iterate)한 뒤, 별도의 스토리지 레이어를 구성하지 않고도 프로덕션 환경으로 승격(promote)할 수 있습니다.

Image

이를 에이전트의 파일시스템 백엔드로 사용하려면 다음과 같이 구성합니다.

Image

또는 /memories/ 경로에 대해서만 Hub를 사용하고, 나머지 파일시스템은 스레드 범위로 유지하는 방식도 가능합니다.

Image

읽기 작업은 캐시에서 제공되고, 쓰기 작업은 Hub 리포지토리에 커밋됩니다. 아직 리포지토리가 없다면 첫 쓰기 시 자동으로 생성되며, 이후에는 다른 버전 관리되는 컨텍스트와 마찬가지로 diff 비교, 리뷰, 태깅을 수행할 수 있습니다.

ContextHubBackend를 사용하기 전에 LANGSMITH_API_KEY를 설정해야 합니다. 충돌 처리와 한계에 대한 자세한 내용은 전체 문서를 참고하세요.

Wrapping Up

Deep Agents v0.6 릴리스 전체를 관통하는 주제는 성능입니다.

  • Harness profiles는 모델에 최적화된 하니스를 통해 모델의 성능을 최대한 끌어내고, 프런티어 API 대비 훨씬 낮은 비용으로도 오픈 가중치 모델로 실용적인 에이전트 실행을 가능하게 합니다.
  • Code interpreter는 에이전트가 코드를 작성하고 실행할 수 있는 자율성을 높여, 복잡한 작업을 수행하고 컨텍스트 윈도우 사용을 최적화할 수 있게 해 줍니다.
  • Streaming은 도구와 서브에이전트의 진행 상황에 대한 구독 기반 모델을 통해, 고도로 병렬화된 시스템을 지원합니다.
  • DeltaChannel은 장기 실행, 장기 컨텍스트 에이전트를 위한 체크포인트를 뒷받침하는 저장 프리미티브를 도입합니다.
  • ContextHubBackend는 에이전트 행동을 구동하는 파일들을 위한, LangSmith Context Hub 기반의 버전 관리되는 저장소를 제공하여, 한 번의 실행에서 이뤄진 컨텍스트 개선이 다음 실행에까지 이어지도록 합니다.

최신 deepagents를 직접 사용해 보시길 기대하고 있습니다. 피드백도 들려주세요!

릴리스 노트: Python, TypeScript

Edit this page