本文是对博客《What is a Harness?》的总结,用攀岩安全带作比喻,向非专业人士解释 AI 圈常说的 Agent Harness 到底是什么。核心可以浓缩成一句话:Agent = Model + Harness,模型负责“思考”,Harness 负责让思考沿着想要的方向。
https://earendil.com/posts/what-is-a-harness/

一段运行环境软件,套在 AI 大模型外面。和模型最大的区别:用户可以自己拥有、本地运行、改系统提示、加扩展。
| 基础定位 | ||
| 核心作用 | ||
| 可替换性 | ||
| 可定制性 | ||
| 谁拥有它 | ||
| 运作方式 | ||
| 对应产物 |
攀岩 Harness 让你安全地挂在岩壁上干活,Agent Harness 让你安全地挂着模型干活。
模型是发动机,Harness 是车架、方向盘和安全带;没有 Harness,LLM 只是答题机,有了 Harness,它才成了你能管得住的 Agent。
以一个具体的真实场景为例:帮用户完成「调研三家 SaaS 竞品并生成对比报告」。以下是完整的工作流程,每一步都对应 Harness 的四个核心组件(System Prompt、Tools、Agent Loop、Translation Layer)。
场景设定
• 用户输入:「帮我调研 Asana、Monday.com、ClickUp 这三家项目管理工具的定价、核心功能和用户评价,做成表格给我」
• Harness 配置:System Prompt 设定为「你是专业 SaaS 分析师,所有数据必须标注来源和时间,不做推测」
• 可用工具:search_web(query)、read_url(url)、write_file(filename, content)、confirm_with_user(message)
完整执行流程
Step 1:接收任务,注入 System Prompt
用户消息 → Harness 收到
Harness 拼接:System Prompt + 用户请求 → 发给 LLM
LLM 返回:思考后的第一步计划 LLM 实际返回(内部思维):
我需要分别搜索三家产品的定价页面和 G2/Capterra 评分。先搜 Asana。
Step 2:第一轮工具调用
LLM 输出:tool_call → search_web("Asana pricing 2026")
Harness 的 Agent Loop 拦截到 tool_call
→ 经过 Tool Registry 匹配到 search_web
→ 执行搜索,拿到结果
→ 将结果追加到 messages 列表(role: tool)
→ 再次发给 LLM 此时 messages 结构:
[
{role: "system", content: "你是专业SaaS分析师..."},
{role: "user", content: "帮我调研三家..."},
{role: "assistant", content: "我先搜索Asana定价", tool_calls: [...]},
{role: "tool", tool_call_id: "call_xxx", content: "Asana Starter $10.99/月..."}
] Step 3:第二轮 —— 读取详情页
LLM 看到搜索结果后判断:需要读取具体定价页面
→ 输出 tool_call → read_url("asana.com/pricing")
→ Harness 执行,拿到 HTML 正文
→ 追加到 messages,继续循环 Step 4:第三轮 —— 发现需要用户确认
LLM 读完 Asana 定价后发现:三家价格区间接近,要不要深入对比功能?
→ 输出 tool_call → confirm_with_user("Asana定价已获取,是否继续对比Monday和ClickUp的功能差异?")
→ Harness 暂停循环,等待用户回复
→ 用户回复「继续」
→ Harness 将用户确认追加到 messages,继续 Step 5:重复搜索 + 读取 Monday.com、ClickUp
LLM 依次调用:
search_web("Monday.com pricing 2026") → read_url(...)
search_web("ClickUp pricing 2026") → read_url(...)
search_web("G2 Asana vs Monday vs ClickUp reviews 2026") → read_url(...)
每步都由 Harness 的 Agent Loop 接管:执行 → 追加结果 → 重新发给 LLM Step 6:生成最终产出
LLM 收集完所有数据后判断:信息足够,不需要再调工具
→ 输出纯文本(无 tool_call)
→ Harness 检测到无 tool_call → 跳出循环
→ 将 LLM 的回答返回给用户 LLM 最终输出(由 Harness 原样传递给用户):
这个过程中 Harness 做了哪些幕后工作
关键设计决策点