
TL;DR:Deep Agents 之前采用的是一种通用设计,目标是在各个模型家族上都能较好工作。今天,我们加入了模型专属的 profile,用来调整提示词、工具和中间件。这样一来,我们就能更好地贴合不同模型家族各自的提示词指南。我们开箱即用提供了 OpenAI、Anthropic 和 Google 模型的 profile。我们观察到,在 tau2-bench 的一部分子集上,这能比默认 harness 带来 10 到 20 分的提升。
直到今天,deepagents 一直只提供一套提示词、工具和中间件,目标是在所有大语言模型上都能较好工作。开发者可以切换不同模型,也可以通过额外的工具扩展来补充 system prompt。但基础提示词、工具和中间件本身是固定的,并没有针对每个模型分别优化。
从今天开始,我们很高兴推出 harness profiles,用它来按模型控制这些参数。这件事之所以重要,是因为:
-
不同模型的提示词指南并不一样。 OpenAI 的 Codex Prompting Guide 推荐了特定的工具实现和命名方式,比如
apply_patch、shell_command,这些做法对 Codex 模型确实有明显帮助。Anthropic 的 Claude 提示词指南强调的是另一套约定。即使在同一个家族内部,Opus 4.6 → 4.7 的迁移指南里也指出了一些值得在提示词层面做出的调整。 -
评测榜单表明,同一个模型放在不同 harness 里,性能可能差很多。 Terminal-Bench 2.0 是目前最清晰的公开案例。Claude Code harness 在 Opus 4.6 的提交中排在最后。我们在之前的工作中也看到过类似现象:通过 harness engineering 改进 Deep Agents。在那次工作里,我们把 gpt-5.2-codex 在 Terminal-Bench 2.0 上的成绩从 52.8% 提升到 66.5%(发布时从 Top 30 提升到 Top 5),仅仅是通过应用 prompts 和 middleware hooks 这类 harness 层改动做到的。
单一的 harness 不可能对每个模型都最优。所以我们把按模型变化 harness 这件事做得更容易了。
这件事到底有多重要?
衡量 profiles 影响的结果
为了判断这件事到底有多重要,我们在 tau2-bench 的一个子集上测量了性能表现(多轮工具使用 + 指令遵循)。我们选用了一个经过整理、难度更高的任务子集,因为前沿模型在这些任务上还没有完全做满,这样更便于衡量 harness 层改动对 agent 的影响。
https://docs.langchain.com/oss/python/deepagents/profiles#ship-a-profile-as-a-plugin
每个模型具体改了什么
我们以 Codex 和 Claude 的提示词指南作为依据,决定在各个 profile 里应用哪些改动。
对于 Codex,主要改动包括:
-
工具改动: 用推荐的
apply_patch工具覆盖 deepagents 默认的file_edit实现,并把 deepagents 里的execute工具名别名为shell_command -
提示词改动: 主要围绕工具调用和规划,采用了提示词指南中的细节
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.
对于 Opus,主要改动都集中在提示词上,重点是工具使用和规划。比如,下面这两段内容就是后来加入提示词的。
<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>
我们的结论是,提供一个能按模型自定义 harness 的接口,是一个很有价值的基础能力。这样开发者就能为不同 agent 管理 profile,对它们做版本管理,也能更方便地测试配置差异。
现在就试试
如果今天就想用起来,直接开始使用 deepagents 就行:uv add deepagents
https://github.com/sierra-research/tau2-bench
对于受支持的模型,这些 profile 会自动生效。如果你想看今天每个默认 profile 具体是什么样,可以直接去仓库里看代码。想了解如何注册你自己的 profile,继续往下看。
profiles 在底层是怎么工作的
harness profile 是一层声明式覆盖,用来处理那些会因模型不同而变化的 harness 部分,比如 system prompt 的前缀和后缀、工具的启用和命名、中间件选择、subagent 配置以及 skills。你可以为某个模型或 provider 注册一个 profile,也可以从 YAML 加载现成的 profile;这样当你切换模型时,create_deep_agent 就会自动适配。重要的是,你的调用方式不用改。
我们默认提供 OpenAI、Anthropic 和 Google 模型的配置。你可以覆盖它们,在它们上面叠加自己的配置,或者把 profile 作为插件分发出去。
https://www.langchain.com/blog/tuning-deep-agents-different-models
https://docs.langchain.com/oss/python/deepagents/profiles
如果想看更细的定制细节,可以阅读 Profiles 文档,里面有完整字段范围、合并语义和插件打包方式。你可以在启动时为自己使用的模型注册 profile,也可以直接依赖我们内置提供的 profile。
如果你正在基于 Deep Agents 构建东西,并且想分享一个 profile,可以提一个 PR,或者通过 entry points 把它作为插件分发。我们会继续扩展不同模型上的 profile 能力。目标是,无论你最终选择哪个模型,Deep Agents 都能给你提供合适的工具和默认配置,让你为自己的任务搭出最好的 harness。后续我们也会分享更多信息和实操演示,说明开发者怎样为各自的任务定制 agent harness。

感谢 @masondrxy @hwchase17 和 @chester_curme 参与评审、共同撰写,并帮助推动这次发布!LangChain Blog 上的版本链接在这里。