01. AI Agent 与 Harness:概念梳理
mingzaily / Codex / 2026-03-29
最近一直在反复想几个词:agent、harness、skill、tool、MCP、context、memory。
它们在视频、推文、产品宣传、框架文档里经常被混着说,结果就是每个词都像懂了,又都不算真懂。
这篇文章想做的事很简单:把这些词放回工程语境里,先理顺它们之间的关系,再把这组文章的阅读顺序摆清楚。
这一组现在会分成六篇:
- 本文:梳理
Model / Agent / Harness / Skill / MCP这些概念 - 02. AI Agent 与 Harness:从 Prompt 到 Harness
- 03. AI Agent 与 Harness:Anthropic 和 LangChain 的 Harness Engineering
- 04. AI Agent 与 Harness:V2 Harness 的验证设计
- 05. AI Agent 与 Harness:Agent Harness、Graph 与退款 Agent
- 06. AI Agent 与 Harness:Repo Instructions、Skills 与团队工作流
总览
Model / LLM是底层推理与生成能力,不等于完整 agentAgent是带有目标、状态、工具使用和多步行动能力的 LLM 系统Harness不是某个单独组件,而是让 agent 稳定完成任务的整套工程化装置Skill、Tool、MCP往往都是 harness 的组成部分,但它们单独都不等于 harnessPrompt engineering解决的是“怎么说”,context engineering解决的是“让模型看到什么”,harness engineering解决的是“怎么让整个系统稳地做完”
压成一句话就是:
model 负责想,agent 负责持续做,harness 负责让它做得稳、做得可控。
概念地图
Model- 提供理解、推理、生成能力
Prompt- 决定你怎么和模型说话
Context- 决定当前这一轮让模型看见什么
Memory- 决定哪些经验和状态可以跨轮次复用
Tool- 决定 agent 能调用哪些外部能力
MCP- 决定外部系统如何以统一方式接进来
Skill- 决定一类任务该按什么方法做
Agent- 决定系统是否能围绕目标持续行动
Harness- 决定这个 agent 最终能不能稳定、可控、可交付
从工程视角,可以同时记两层关系:
- 依赖关系:
model -> agent -> harness - 组成关系:
agent ~= model + state + tool use + action loop - 外层系统:
harness ~= 围绕 agent 的上下文、权限、验证、返工和观测装置
也就是:
model是能力底座agent是基于 model 搭起来的行动闭环harness不是 agent 的同义词,而是把 agent 约束、放大并稳定下来的外层工程系统
Model、Prompt、Context、Memory 到底是什么关系
Model 比较像大脑。
它负责理解上下文、生成内容、进行推理、总结、归纳、给出下一步建议。
但它本身并不天然拥有文件系统权限、数据库权限、浏览器能力、测试能力,也不天然具备长期状态管理和任务闭环能力。
所以只把一个模型放在网页对话框里,它更像一个“会聊天、会分析、会写东西的超级大脑”,还不是一个完整 agent。
Prompt engineering 是最早也最容易理解的一层。
它主要解决:
- 怎么设角色
- 怎么约束输出格式
- 怎么让回答风格更稳定
但它的边界也很明显。
只靠 prompt,你很难解决长任务失忆、工具调用、状态持久化、自动验证、失败返工这些问题。
Context 和 Memory 也经常被混淆。
我的理解是:
Context是当前轮次直接可见的工作记忆Memory是跨轮次、跨会话可复用的经验和状态
如果打比方:
context像工作台上摊开的资料memory像档案室里存着的长期记录
所以:
context != memory
这个区别很重要,因为很多所谓“记忆问题”,其实本质上是上下文管理问题,而不一定真的是长期 memory 问题。
Tool、MCP、Skill 分别是什么
这三个词经常一起出现,但它们在系统里的位置并不一样。
Tool 是什么
Tool 最好理解。
它就是 agent 运行时可调用的能力接口,比如:
- 读文件
- 写文件
- 执行命令
- 搜索代码
- 调订单系统
- 调退款接口
- 跑浏览器自动化
所以:
tool 是能力,不是协议。
MCP 是什么
MCP 则更像接线标准。
它的意义是让 agent 用统一方式连接外部系统和资源,比如 GitHub、Jira、Slack、数据库、浏览器、内部知识系统。它更像 USB-C 或 HTTP 这种协议层,而不是具体能力本身。
更准确地拆开看:
MCP是协议层MCP server是基于这套协议提供的具体接入实现- agent 真正拿到的,是这些 server 暴露出来的工具和资源能力
所以在概念上:
MCP 更接近协议,不直接等于能力。
但在日常语境里,大家说“装了 MCP”“接了 MCP”,很多时候其实是在说:
装了某个具体的 MCP server。
Skill 是什么
Skill 则最像 SOP,但又不只是 SOP。
它可以是:
- 一段纯文本规则
- 一套作业指导书
- 一个带脚本、模板、资源文件的能力包
所以 skill 可以先粗略理解成:
- SOP
- 作业指导书
- 岗位能力包
但它比普通 SOP 更强,因为它常常还能附带:
- 可执行脚本
- 模板
- 结构化资源
- 推荐工具用法
顺手澄清一个常见误解:
skill 可以依赖 MCP server,但 MCP server 本体一般不算 skill 的组成内容。
到底什么才叫 AI Agent
这是最容易被说乱的部分。
在比较宽泛的市场语境里,很多人会把“模型 + 提示词”也叫 agent。
这么叫不算完全错,但如果进入工程讨论,这个定义太松了。
放到工程语境里,一个更实用的定义是:
AI agent = LLM + state + tool use + planning/orchestration + action loop
也可以从能力角度理解:
- 能感知环境和上下文
- 能规划下一步
- 能调用工具去行动
- 能维持状态或记忆
- 能根据中间结果继续推进,而不是只回答一次
所以在工程语境里:
模型 + prompt更像一个角色化 assistant- 只有当系统具备目标驱动的多步行动能力时,才更适合叫 agent
也正因为这样:
Codex、Claude Code 这种更像已经封装好的现成 agent 产品。
而单纯一个网页聊天框,更多还是 assistant。
几个直观的 coding agent 例子
先说最熟悉的一类,也就是 coding agent。
Claude 和 Claude Code 其实不是一回事。
Claude 是 Anthropic 的模型家族,Claude Code 才是 Anthropic 做的 coding agent 产品。Anthropic 官方在文档里直接把它叫做 an agentic coding tool。
Codex 也是一样。
这里说的不是早年那个模型名,而是 OpenAI 现在的 coding agent 产品。OpenAI 官方文档把它描述成可以读代码、改代码、运行代码的 coding agent,Codex CLI 的 README 也直接写着它是 a coding agent from OpenAI that runs locally on your computer。
OpenCode 则是社区开源实现的例子。
它的 README 直接写的是 The open source AI coding agent。
这几个例子的共同点不是“都会写代码”这么简单,而是:
- 它们都能读取真实环境
- 都能调用工具
- 都能分步推进任务
- 都能根据中间结果继续行动
所以它们更像真正的 agent,而不是只会回复一段文字的 assistant。
再看几个业务 agent 的例子
agent 当然不只存在于写代码场景。
比如一个 客服分诊 agent,它的工作可能是:
- 先理解用户问题
- 判断属于售前、售后、技术支持还是退款
- 再把请求转给正确的下游流程或人工坐席
再比如一个 退款 / 订单管理 agent,它可能会:
- 查询订单状态
- 检查退款政策
- 判断是否满足条件
- 调用退款接口,或者转人工审批
OpenAI 在官方的 agent building guide 里,也把 refund approval、order tracking、returns or refunds 当作典型场景。
还有一些更偏运营和风控的例子,比如:
风控 / 欺诈分析 agent研究 / 报告 agent销售线索筛选 agent采购单 / 发票解析 agent
它们的共同点也很像:
- 不是只回答一个问题就结束
- 而是要读上下文、接系统、用工具、持续推进
所以更准确地说:
coding agent是 agent 的一个垂直类型客服 agent、退款 agent、风控 agent、研究 agent都属于业务 agent- 差别不在于它们是不是 agent
- 而在于它们服务的任务域、接入的工具和所需的护栏不同
Agent 的分类
如果只用一条线来给 agent 分类,很容易把产品形态和技术实现揉在一起。
更清楚的办法,是把它拆成两个维度来看。
产品视角:通用型 vs 垂直型
通用型 agent- 面向开放任务空间
- 任务类型更杂,边界更宽
- 比如通用研究 agent、个人助理型 agent、开放式任务助手
垂直型 agent- 面向某个明确业务域
- 目标、流程、工具和风控都更具体
- 比如客服 agent、退款 agent、招聘 agent、发票解析 agent
这一维看的是任务空间:
这个 agent 服务的到底是通用任务,还是某个垂直业务。
技术视角:Workflow-First vs Agentic
这里说的 workflow 是广义概念,指预定义流程、规则节点和 orchestration 层,不特指某个具体框架。
- 在 coding 场景里,
OpenSpec / Spec Kit这类东西属于 workflow 的一种,更准确说是 spec-driven workflow / planning workflow - 在业务 agent 场景里,退款、审批、工单分流、风控校验这些,也都属于 workflow
所以这一维讨论的,不是某一个产品名,而是:
系统主要靠预定义流程推进,还是更多靠模型在执行中动态决策。
这里最容易让人误会的一点是:
有 graph,不等于它就是 workflow-first。
几乎所有生产级 AI 系统,最终都能被画成某种状态图、流程图或 orchestration graph。
业务一旦真的落地,也很难完全脱离流程骨架、权限边界和状态管理。
真正的区别不在于“有没有图”,而在于:
- 这个图里的主要路径是不是预先写死的
- 中途的路由、工具选择、循环和返工,是不是更多由模型动态决定
- 这个 graph 是在规定每一步怎么走,还是主要提供一个运行骨架和边界约束
换句话说,graph 更像一种 orchestration 表达方式,本身并不天然站在 workflow-first 这一边。
真正会把系统往 workflow-first 推过去的,是你在图里写死了多少业务步骤、审批节点和规则分支。
workflow-first- 主干路径预定义得更多
- 规则节点更清晰
- 模型更多是在固定节点里完成局部判断或生成
agentic- 仍然可能有 graph 和系统骨架
- 但中途决策更多
- 更强调目标驱动的多步执行
放到工程实现里看:
- 固定 DAG、审批流、规则路由,更像
workflow-first - 带动态路由、循环、自我修正、子 agent 分工的 graph,更像
agentic
所以画 graph 这件事本身没有问题。
更常见的现实其实是:
- 外层有一个明确的 graph 骨架
- 内层某些节点依然保留很强的自主决策空间
这类系统并不是“不 agentic”,而是:
在受约束的骨架里运行 agentic 能力。
这一维看的是执行方式:
这个系统主要靠固定流程推进,还是主要靠 agent 自主决策推进。
这两条轴不是一一对应的。
- 通用型 agent 更常见
agentic - 垂直型 agent 更常见
workflow-first - 但真实落地里,很多系统其实都是
workflow-first + 局部 agentic 能力
比如:
Codex / Claude Code这类虽然是垂直在 coding 场景里的 agent,但技术形态上很偏agentic退款 agent、客服分诊 agent往往是垂直型 agent,但底层常常是workflow-firstOpenSpec / Spec Kit这类东西,不是在定义 agent 类型,而是在给 coding 场景补一层 planning workflow
所以很多所谓“业务 agent”,落地时往往更像 workflow-first + 局部 agentic 能力。
这不是降级,反而通常更符合业务系统的现实。
说得直白一点:
目前真正“完全没有流程骨架”的业务 AI 产品非常少。更常见的现实是:
先有一个可控的 graph 骨架,再把规划、路由、返工这些更 agentic 的能力放进其中某些节点和循环里。
Harness 到底是什么
如果说 agent 是开始干活的数字员工,harness 就是把这个数字员工变得可控、可交付、可复用的整套工程装置。
它通常会落到这些东西上:
- 系统提示和角色约束
- 上下文注入
- 工具系统
- skill
- MCP 接入
- 权限控制
- 状态持久化
- 验证循环
- 失败返工机制
- 任务交接物
- traces 和日志
如果要打一个直观的比方,可以把它理解成“马和马具”:
model = 马harness = 马具agent = 套上马具并开始执行任务的工作体
这个比喻的好处在于,它说明了一件很重要的事:
harness 不是替代模型,而是把模型的力量引导到稳定、正确、可控的方向。
Harness 的四个关键抓手
如果把各种零散说法压缩一下,我觉得比较好记的四个抓手是:
1. 上下文工程
核心问题是:
每一轮让模型看到什么,怎么组织,怎么避免关键信息丢失。
常见做法包括:
- 系统提示
- 状态注入
- 项目结构注入
- 技能加载
- 历史摘要
- 文件式交接
2. 架构约束
核心问题是:
怎么给 agent 上护栏,不让它在错误的时候做错误的动作。
常见做法包括:
- 角色分工
- 权限限制
- 工具白名单
- 审批节点
- middleware
- checklist
3. 反馈循环
核心问题是:
不能只靠模型说“我已经完成了”,而要让它接受外部验证。
典型循环是:
生成 -> 执行 -> 观察 -> 验证 -> 反馈 -> 再生成
这也是为什么测试、evaluator、浏览器自动化、数据校验这么重要。
4. 熵管理
这是长任务里最容易被忽略、但其实最关键的部分。
任务一长,上下文就会膨胀,信息会漂移,状态会变乱,模型还会反复修同一个地方。
这其实就是熵在上升。
所以需要:
- context compaction
- context reset
- handoff artifact
- 结构化状态文件
- loop detection
- 增量推进
一句话就是:
不要让长任务越跑越糊。
Harness 与仓库规则
讲到 harness,最容易混在一起的,其实是两类东西。
一类是产品或系统本身的 agent harness;
另一类是团队写进仓库里的 repo instructions、skills、验证命令和交付流程。
这组文章里说的 harness,主要就是前者。
也就是:模型外面那整套让 agent 能稳定运行、调用工具、推进状态、做验证、交付结果的系统骨架。
后面这类 repo instructions、skills、验证命令和 review / CI 流程,不是另一种官方意义上的 harness,更适合直接按仓库规则和团队工作流来写。
使用现成 agent 产品时,产品本身已经带了一层 harness
如果是在团队里使用 Codex、Claude Code、OpenCode 这类产品,很多底层能力其实已经被产品方做好了。
以 Codex 为例,产品自带的 agent harness 至少已经包括:
- shell / 文件编辑这类内置工具
- sandbox 和 approval policy
AGENTS.md/.codex/config.toml这类指令加载- MCP server 接入与工具暴露
- 长任务里的上下文压缩和上下文管理
- diff / review / plan 这类辅助能力
这些都不是模型自己天然会的,而是产品方预先搭好的系统骨架。
所以从使用者视角看,团队真正要补的,往往不是再造一套底层 harness,而是把仓库自己的工作方式写清楚。
自己开发业务 agent 时,重点就会落到 agent harness
如果是自己做退款 agent、审批 agent、客服分诊 agent,情况就反过来了。
这时候你不再只是使用一个现成 agent 产品,而是在搭一套真正属于自己业务的 agent harness。
你要补的是:
- graph / orchestration
- state schema
- tool adapters
- policy engine
- validators
- retry / handoff / audit
也就是说,真正需要写代码、定义节点、处理状态和路由的,通常就是这一层。
分层图
用户 -> 仓库规则 / skills / 验证流程 -> agent harness -> model / llm
拆开看会更清楚:
用户- 提目标、给反馈、决定任务是否值得继续
仓库规则 / skills / 验证流程AGENTS.md- skills
- 业务规则和代码规范
- 验证命令
- review / CI / 交付格式
agent harness- 上下文管理
- 工具调用
- 权限与边界控制
- 状态推进
- 路由 / 验证 / 重试
model / llm- 底层推理与生成能力
这里最容易误会的是:仓库规则也在约束 agent,但它们不等于 harness 本身。
前者规定的是:
- 这个仓库里怎么做事
- 哪些规范必须遵守
- 什么结果才算 done
后者规定的是:
- 系统如何运行
- 节点和状态怎么流转
- 工具调用、验证、返工、人工接管怎么实现
退款 agent 里,这两层怎么落
拿一个 退款 agent 来看,会更好分。
- “未签收不能自动退款”“高金额要人工审批”“超过 48 小时必须升级” 这类内容,属于业务规则和验收边界
- 订单查询节点、规则检查节点、审批节点、退款 API 调用、结果验证和审计链路,属于
agent harness的实现
如果这个系统跑在现成 coding agent 之上,那么仓库里还可能再补一层使用约定,告诉 agent:
- 代码要放在哪个目录
- 改完跑哪些命令
- trace / log / DB 该怎么查
- 最终报告要交代什么
为什么很多能力会下沉到底层
今天经常会听到一种说法:以后也许不需要那么多显式 harness 了。
更准确的说法是,不是 harness 消失了,而是越来越多能力会下沉到底层平台和基础设施里。
比如:
- 上下文压缩、历史摘要、状态恢复,可能越来越自动
- 工具选择、权限控制、失败重试,可能越来越多地由平台默认接管
- 但仓库规则、业务规则、验收标准、团队工作流这类东西,通常仍然需要显式维护
所以变化不是“有没有 harness”,而是:
哪些能力已经变成系统默认能力,哪些还需要团队自己写清楚。
把这些概念串成一句话
把前面的概念压成一条线,大概就是:
model决定系统有没有基本智能prompt决定你怎样和它沟通context决定它当前能看到什么memory决定它未来还能记住什么tool决定它能做什么动作MCP决定外部系统怎么接进来skill决定它遇到某类任务时按什么方法做agent决定它会不会围绕目标持续推进harness决定它最后能不能稳定交付
我真正想说明的,不是又多记住了几个新名词,而是这些词终于能落到同一张工程地图里。
延伸阅读
如果你更想看“为什么大家会从 prompt 工程一路谈到 harness engineering”,可以接着读:
如果你想看外部两篇代表性文章在各自强调什么,可以接着读:
如果你更关心落地阶段最硬的一层,也就是验证闭环,可以接着读:
如果你想继续把 agent harness 和仓库规则 / skills / 工作流分开看,可以接着读:
- 05. AI Agent 与 Harness:Agent Harness、Graph 与退款 Agent
- 06. AI Agent 与 Harness:Repo Instructions、Skills 与团队工作流
十句话总结
Model是大脑,不是完整 agent。Agent是具有感知、规划、行动、状态闭环的 LLM 系统。模型 + prompt可以被宽泛地叫 agent,但在严格工程语境里更像角色化 assistant。Tool是能力;MCP在概念上是协议,日常语境里常常代指具体的MCP server接入。Skill很像 SOP,但可以带脚本、模板和资源。Harness不是一个组件,而是一整套让 agent 稳定工作的工程化装置。- 这组文章里说的
harness,主要指 agent 外面那套系统骨架;仓库规则、skills 和验证流程是另一层配套。 反馈循环和熵管理是 harness 里很容易被低估的两层。skill / tool / MCP可以是 harness 的组成部分,但都不等于 harness 本身。- 今天讨论 harness,不是在讨论新名词,而是在讨论如何把 AI 从“能聊”推进到“能稳定交付”。
参考
- OpenAI: A practical guide to building agents
- OpenAI: Harness engineering: leveraging Codex in an agent-first world
- Anthropic: Effective harnesses for long-running agents
- LangChain: Improving Deep Agents with harness engineering