AI·News
뒤로

다양한 모델에 맞춰 딥 에이전트 조정하기

Tuning Deep Agents to Work Well with Different Models

주요 요점

‍💡TL;DR: Deep Agents는 이전에 모든 모델 계열에서 잘 작동하도록 일반적인 방식으로 설계되었습니다. 오늘 우리는 프롬프트, 도구 및 미들웨어를 조정하기 위한 모델별 프로필을 추가하고 있습니다. 이를 통해 모델 계열별 프롬프팅 가이드를 더 잘 준수할 수 있습니다. 우리는 OpenAI, Anthropic 및 Google 모델에 대한 프로필을 기본으로 제공하며, 이는 기본 하네스에 비해 tau2-bench의 일부에서 10-20포인트의 성능 향상을 가져옵니다.

오늘까지, deepagents모든 대규모 언어 모델에서 잘 작동하도록 설계된 단일 프롬프트, 도구 및 미들웨어 세트로 배포되었습니다. 개발자는 다양한 모델을 선택하거나 시스템 프롬프트에 추가 도구 확장으로 하네스를 확장할 수 있었습니다. 하지만 기본 프롬프트, 도구 및 미들웨어는 고정되어 있었고 모델별로 최적화되지 않았습니다.

오늘부터 우리는 하네스 프로필을 출시하여 이러한 매개변수를 모델별로 제어할 수 있는 방법을 제공하게 되었습니다. 이것이 중요한 이유는 다음과 같습니다:

  • 프롬프팅 가이드는 모델별로 다릅니다. OpenAI의 Codex 프롬프팅 가이드는 Codex 모델에서 성능을 높이는 특정 도구 구현 및 이름(apply_patch, shell_command)을 규정합니다. Anthropic의 Claude 프롬프팅 가이드는 다른 규약 세트를 강조합니다. 같은 계열 내에서도 Opus 4.6 → 4.7 마이그레이션 가이드는 적용할 가치가 있는 프롬프트 수준의 변경 사항을 지적합니다.
  • 평가 리더보드는 동일한 모델이 다른 하네스에서 매우 다른 성능을 낼 수 있음을 보여줍니다. Terminal-Bench 2.0은 가장 명확한 공개 사례입니다. Claude Code 하네스는 Opus 4.6 제출물 중에서 마지막 순위입니다. 우리는 이전 작업에서 신중한 하네스 엔지니어링의 유사한 효과를 보았습니다: Improving Deep Agents with harness engineering. 여기서 우리는 gpt-5.2-codex를 Terminal-Bench 2.0에서 52.8%에서 66.5%로 높였습니다(발표 당시 상위 30에서 상위 5로) 프롬프트 및 미들웨어 훅과 같은 하네스 레이어 변경만으로.

단일 하네스는 모든 모델에 최적일 수 없습니다. 따라서 우리는 모델별로 하네스를 다양하게 지원하기 쉽게 만들었습니다.

이것이 얼마나 중요할까요?

프로필의 효과 측정 결과

이것이 얼마나 중요한지 판단하기 위해 우리는 tau2-bench (다중 턴 도구 사용 + 명령 따르기)의 부분 집합에 대한 성능을 측정했습니다. 우리는 최첨단 모델이 아직 포화시키지 않은 더 어려운 작업의 큐레이션된 부분 집합을 사용하여 에이전트에 대한 하네스 레벨 변경의 영향을 더 잘 측정할 수 있습니다.

모델 기본 Deep Agents 하네스 사용자 정의 프로필 포함
GPT 5.3 Codex 33% 53%
Claude Opus 4.7 43% 53%

모델별로 변경된 사항

우리는 CodexClaude 프롬프팅 가이드를 각 프로필별로 적용할 변경 사항의 출처로 사용했습니다.

Codex의 경우 주요 변경 사항은 다음과 같습니다:

  • 도구 변경: deepagents의 기본 edit_file 구현을 권장되는 apply_patch 도구로 재정의하고, deepagentsexecute 도구 이름을 shell_command로 별칭 지정
  • 프롬프트 변경: 주로 프롬프팅 가이드의 세부 사항을 사용하는 도구 호출 및 계획 관련
도구를 호출하기 전에 필요한 모든 파일과 리소스를 결정하세요. 읽기, 검색 및 기타 독립적인 작업을 한 번에 하나씩 발행하는 대신 병렬 도구 호출로 일괄 처리하세요.

Opus의 경우 주요 변경 사항은 모두 도구 사용 및 계획에 초점을 맞춘 프롬프팅이었습니다. 예를 들어, 다음은 프롬프트에 추가된 두 스니펫입니다.

<tool_result_reflection>
도구 결과를 받은 후 그 품질을 신중하게 반영하고 진행하기 전에 최적의 다음 단계를 결정하세요. 이 새로운 정보를 바탕으로 계획하고 반복하기 위해 사고를 사용한 다음 최선의 다음 조치를 취하세요.
</tool_result_reflection>
<tool_usage>
작업이 파일, 테스트 또는 시스템 출력의 상태에 따라 달라지는 경우 도구를 사용하여 그 상태를 직접 관찰하기보다는 메모리에서 추론하세요. 파일을 설명하기 전에 읽으세요. 테스트가 통과한다고 주장하기 전에 실행하세요. 기호가 존재하거나 존재하지 않는다고 주장하기 전에 코드베이스를 검색하세요. 도구를 사용한 능동적 조사가 폴백이 아닌 기본 작업 모드입니다.
</tool_usage>

우리의 결론은 모델별로 하네스를 사용자 정의하기 위한 인터페이스를 노출하는 것이 개발자가 에이전트별 프로필을 관리하고, 버전을 지정하고, 구성 차이를 쉽게 테스트할 수 있는 유용한 기본 기능이라는 것입니다.

오늘 바로 사용해보세요

이를 오늘 사용하려면 다음을 사용하기만 하면 됩니다:

deepagents: uv add deepagents
agent = create_deep_agent(
    model="google_genai:gemini-3.1-pro-preview",
    tools=[internet_search],
    system_prompt=research_instructions,
)

프로필은 지원되는 모델에 대해 자동으로 적용됩니다. 각 기본 프로필이 현재 어떤 모습인지에 대한 세부 사항을 확인하려면 저장소의 코드를 검사할 수 있습니다. 자신의 프로필을 등록하는 방법을 알아보려면 계속 읽으세요.

프로필의 내부 작동 방식

하네스 프로필은 모델별로 다양한 하네스 부분에 대한 선언적 재정의 레이어입니다: 시스템 프롬프트 접두사/접미사, 도구 포함 및 이름 지정, 미들웨어 선택, 하위 에이전트 구성 및 기술. 모델이나 제공자에 대한 프로필을 등록하거나 YAML에서 기존 프로필을 로드하고, create_deep_agent는 모델을 바꿀 때 적응합니다. 중요한 점은 호출 사이트가 변경되지 않는다는 것입니다.

우리는 OpenAI, Anthropic 및 Google 모델에 대한 기본값을 제공합니다. 이를 재정의하거나, 자신의 것을 계층화하거나, 플러그인으로 프로필을 배포할 수 있습니다.

from deepagents import (
    HarnessProfile,
    register_harness_profile,
)

register_harness_profile(
    "openai:gpt-5.4",
    HarnessProfile(
        system_prompt_suffix="Respond in under 100 words.",
        excluded_tools={"execute"},
        excluded_middleware={"SummarizationMiddleware"},
    ),
)

또는 YAML로 프로필을 선언합니다:

# openai.yaml
base_system_prompt: You are helpful.
system_prompt_suffix: Respond briefly.
excluded_tools:
  - execute
  - grep
excluded_middleware:
  - SummarizationMiddleware
  - my_pkg.middleware:TelemetryMiddleware
general_purpose_subagent:
  enabled: false

더 자세한 내용은 프로필 문서에서 전체 필드 표면, 병합 의미 체계 및 플러그인 패키징을 읽으세요. 시작 시 사용하는 모델에 대한 프로필을 등록하거나 우리가 제공하는 기본 제공 프로필을 사용하세요.

Deep Agents를 기반으로 구축하고 프로필을 공유하려면 PR을 여세요 또는 진입점을 통해 플러그인으로 배포하세요. 우리는 모델 전반에 걸쳐 프로필 표면을 계속 확장할 것입니다. 목표는 어떤 모델을 선택하든 Deep Agents가 작업에 최고의 하네스를 만들기 위한 도구와 기본값을 제공하는 것입니다. 우리는 개발자가 작업에 맞게 에이전트 하네스를 사용자 정의하는 방법을 보여주는 더 많은 정보와 연습을 공개할 예정입니다.

Key Takeaways

‍💡TL;DR: Deep Agents was previously designed in a generic way to work well across model families. Today we’re adding model-specific profiles to adjust prompts, tools, and middleware. This allows us to better conform to prompting guides specific to model families. We ship profiles for OpenAI, Anthropic, and Google models out of the box, which we see leads to a 10–20 point jump on a subset of tau2-bench over the default harness.

Until today, deepagents shipped with a single set of prompts, tools, and middleware aimed to work well across all Large Language Models. Builders could swap in different models or extend the harness with additional tools extensions to the system prompt. But the base prompts, tools, and middleware were fixed and not optimized per model.

As of today, we’re excited to launch harness profiles as a way to control these parameters on a per-model basis. This matters because:

  • Prompting guides differ per model. OpenAI's Codex Prompting Guide prescribes specific tool implementations and names (apply_patch, shell_command) that move the needle on Codex models. Anthropic's Claude prompting guidance emphasizes a different set of conventions. Even within a family, the Opus 4.6 → 4.7 migration guide flags prompt-level changes worth making.
  • Eval leaderboards show that the same model in a different harness can yield much different performance. Terminal-Bench 2.0 is the cleanest public example. The Claude Code harness ranks last among Opus 4.6 submissions.  We saw similar effects of careful harness engineering in previous work: Improving Deep Agents with harness engineering. Here we took gpt-5.2-codex from 52.8% to 66.5% on Terminal-Bench 2.0 (Top 30 → Top 5 at the time of publishing) just by applying harness layer changes like prompts and middleware hooks.

A single harness can't be optimal for every model. So we make it easy to support varying the harness per model.

How much does this matter?

Results on measuring the effect of profiles

In order to judge how much this matters, we measured performance on a subset of tau2-bench (multi-turn tool use + instruction following). We use a curated subset of more difficult tasks that frontier models haven’t yet saturated so we can better measure the impacts of harness level changes on agents.

Model Base Deep Agents Harness With Custom Profile
GPT 5.3 Codex 33% 53%
Claude Opus 4.7 43% 53%

What changed per model

We use the Codex and Claude prompting guides as the source for what changes we applied per profile.

For Codex the main changes included:

  • Tool changes: overriding the default edit_file implementation in deepagents with the recommended apply_patch tool, and aliasing the execute tool name in deepagents as shell_command
  • Prompt changes: largely around tool calling and planning using details from the prompting guide
Before any tool call, decide ALL files and resources you will need. Batch reads, searches, and other independent operations into parallel tool calls instead of issuing them one at a time.

For Opus the main changes were all prompting focused on tool usage and planning. For example, below are two snippets that were added to the prompt.

<tool_result_reflection>
After receiving tool results, carefully reflect on their quality and determine optimal next steps before proceeding. Use your thinking to plan and iterate based on this new information, and then take the best next action.
</tool_result_reflection>
<tool_usage>
When a task depends on the state of files, tests, or system output, use tools to observe that state directly rather than reasoning from memory about what it probably contains. Read files before describing them. Run tests before claiming they pass. Search the codebase before asserting a symbol does or does not exist. Active investigation with tools is the default mode of working, not a fallback.
</tool_usage>

Our takeaway is that exposing an interface for customizing the harness per model is a helpful primitive for builders to manage profiles per agent, version them, and easily test differences in configurations.

Try it today

To use this today, simply start using:

deepagents: uv add deepagents
agent = create_deep_agent(
    model="google_genai:gemini-3.1-pro-preview",
    tools=[internet_search],
    system_prompt=research_instructions,
)

The profiles will be automatically applied for supported models. If you want to look into the details of what each default profile looks like today, you can inspect the code in the repo. To learn how to register your own profile, keep reading.

How profiles work under the hood

A harness profile is a declarative override layer for the parts of the harness that vary per model: system prompt prefix/suffix, tool inclusion and naming, middleware selection, subagent configuration, and skills. You register a profile for a model or provider (or load a preexisting one from YAML), and create_deep_agent adapts when you swap the model. Importantly, your call site doesn't change.

We ship defaults for OpenAI, Anthropic, and Google models. You can override them, layer your own on top, or distribute profiles as plugins.

from deepagents import (
    HarnessProfile,
    register_harness_profile,
)

register_harness_profile(
    "openai:gpt-5.4",
    HarnessProfile(
        system_prompt_suffix="Respond in under 100 words.",
        excluded_tools={"execute"},
        excluded_middleware={"SummarizationMiddleware"},
    ),
)

Or declare a profile in YAML:

# openai.yaml
base_system_prompt: You are helpful.
system_prompt_suffix: Respond briefly.
excluded_tools:
  - execute
  - grep
excluded_middleware:
  - SummarizationMiddleware
  - my_pkg.middleware:TelemetryMiddleware
general_purpose_subagent:
  enabled: false

For more custom details read the Profiles docs for the full field surface, merge semantics, and plugin packaging. Register a profile at startup for the models you use, or rely on the built-in profiles we ship.

If you're building on Deep Agents and want to share a profile, open a PR or distribute it as a plugin via entry points. We'll keep extending the profile surface across models. The goal is that whichever model you reach choose, Deep Agents gives you the tools and defaults to create the best harness for your task. We’ll be releasing more information and walkthroughs showing how builders can customize their agent harness for their tasks.

원문 보기 https://www.langchain.com/blog/tuning-deep-agents-different-models