乐于分享
好东西不私藏

AI Agent三层落地:Prompt、Context 与 Harness

AI Agent三层落地:Prompt、Context 与 Harness

SUMMARY · 核心结论

把大模型想成一颗很强的推理引擎,它每轮能「看见」的只有上下文窗口里的信息。工程上叠三层分工:Prompt Engineering 管「怎么说清楚」,Context Engineering 管「此刻给它看什么」,Harness Engineering 管「工具循环怎么在真实世界里长期可靠地跑下去」。三层不是谁取代谁,而是责任边界越来越像正经系统工程。

色块区分引言 / 注意 / 推荐;零基础从阅读指南起读,再按章扫清单与排障表。

READ FIRST

阅读指南:按你的背景跳读

零基础先读「先把地基打稳」,再读「先把边界说清楚」与后文三章(Prompt / Context / Harness),最后看案例、术语表与 FAQ。

进阶地基可快扫;重点看各章清单、失败模式、层间交界。

工程把地基当目录;用术语表对齐语言,用 FAQ 收口争论。

FUNDAMENTALS

先把地基打稳:5 个概念

  1. LLM 在工程里像什么?
     像函数:文本进、文本出。默认没有线程、没有持久内存、不能自己开硬盘——除非你用程序接能力。
  2. Token
     是模型处理文本的基本单位;计费、速度、上下文上限多按 token 计。
  3. 上下文窗口
     是「这一轮推理能同时看见」的上限;超出就要丢、压、拆、外置——正是 Context 与 Harness 要接手的部分。
  4. Agent(极简定义)
    LLM 在循环里自主调用工具。没有工具循环,多数「Agent」只是聊天。
  5. 为何不是「提示词写长点」就结束?
     长任务会产生工具输出、日志、历史,都会挤进窗口;要把「写清楚」(Prompt)与「看得见、传得下去」(Context / Harness)分开治理。

BOUNDARIES

先把边界说清楚

三层为并列职责;窄屏下三列会纵向堆叠,阅读顺序不变。

LAYER 01

Prompt

目标、约束、格式、边界、少量示例。更像一份可执行的说明书。

LAYER 02

Context

每轮推理前,挑选、裁剪、组织进入窗口的信息。更像内存与缓存策略。

LAYER 03

Harness

工具、权限、会话、落盘、验收与交接。更像运行时与编排器。

词源 Harness 借「托架 / 夹具」意象:模型是零件,harness 是把零件接进流水线的支架。业界讨论长时编码 Agent 时常用 agent harness 指 SDK 与配套机制整体(含工具与上下文管理等)。

TRIAGE

对照表:日常排障

抱怨 / 现象
更像哪层
通常先动什么
格式不稳、指令不听
Prompt
结构、输出契约、反例、少量高质量示例
关键事实没出现 / 被噪声淹没
Context
注入时机、裁剪、工具返回清洗、按需再取(JIT)
长跑胡写、提前完工、工程越改越脏
Harness
会话策略、进度工件、清单、验收工具、交接协议

CHAPTER I

Prompt Engineering:重要,但不是万能钥匙

结构化 system prompt、输出契约、少量 few-shot,往往仍是最便宜的增益。任务变长后,prompt 只是进窗口的一部分信息源;把业务流程写成超长规则清单,通常脆弱难维护——那是系统结构,不该硬塞进一段字符串。

它解决什么,不解决什么

IN SCOPE

Prompt 主要解决

目标、边界、风格、输出结构;用少量高质量示例把「你想要的形态」钉住。

OUT OF SCOPE

交给 Context / Harness

证据缺失、长任务状态丢失、工具输出淹没窗口、验收与回归。

为什么 system prompt 仍值得认真写

它决定默认行为、风险偏好与输出契约。很多失败是系统侧含糊,模型就用「最安全的通用答案」糊弄过去。

高质量 prompt 硬规则(可当评审表)

  • 先成功标准,再约束
     — 先定义「完成长什么样」。
  • 输出当 API
     — JSON/表格写清字段、缺省、排序。
  • 少洗衣清单,多代表性示例
     — 覆盖典型与反例。
  • 分层组织
     — 工具规范、输出格式、异常分章。
  • 别把业务流程写成超长 if-else
     — 外置状态机、清单、工具接口。

常见误区

误区
为什么痛 / 怎么改
把公司知识整本贴进 system prompt
成本高、更新难、噪声大;外置 + Context 按需取回。
只调用户提示,不调系统提示
用户一句话承载不了协作契约;系统侧才是主杠杆。
验收标准只写在 prompt 里
验收要可执行证据(测试、日志、回放)。

层间交界

「明明会」却总漏条件:先查证据是否进窗口(Context)。单轮好、多轮崩:先查外部状态与验收(Harness)。

RECOMMENDEDPrompt 把行为讲清楚;「此刻该不该把某段日志、文档、工具输出塞进窗口」交给 Context Engineering。

CHAPTER II

Context Engineering:上下文是会贬值的资产

重心从「只写 prompt」迁到持续策展上下文:凡将进入采样的信息,都在范围内。目标不是措辞玄学,而是证据到位、噪声可控。

ATTENTION

上下文不是越多越好;窗口变长可能带来注意力稀释(业界常谈 context rot)。主目标压成一句:

用尽可能少的高信号 token,提高下一轮做出正确决策的概率。

硬技能常包括:工具返回克制、小集合、语义不重叠;JIT 用路径/链接/查询替代一次性灌满大对象;长时程用压缩摘要、外部笔记、子 Agent 只回传蒸馏结果。context reset + handoff:清空会话并用交接工件续跑。

一句话定义

Context engineering 管每次调用前窗口里拼什么:system prompt、历史、检索、工具输出、结构化数据等一切进入采样的 token。

TWO FACTS

事实 1 上下文会贬值:信息变多 ≠ 更准;要裁剪、外置、压缩与再取回。

事实 2 注意力是预算:低信号挤占关键证据;Context 本质是预算分配。

上下文由哪些部分组成

  • 系统提示
     · 稳定规则与输出契约
  • 用户输入
     · 任务与补充材料
  • 对话历史
     · 最易膨胀
  • 工具输出
     · 隐形成本大户
  • 检索(RAG)
     · 相关性、重复、冲突要治理
  • 元数据
     · 路径、时间戳、环境信息常更能定位下一步

三种策略:预取、JIT、外置记忆

📥

预取

先备好材料,首轮能答;变化慢、边界清晰时优先。

🔗

JIT

窗口里先放引用,需要再取;大仓大表大文档。

💾

外置记忆

状态落盘再拉回;长跑与跨会话。

长时程手段(先记名)

  1. Compaction
     — 摘要续跑;连续但可能丢细节
  2. Tool result hygiene
     — 只留结论与指针
  3. Structured note-taking
     — NOTES / TODO / 决策外置
  4. Sub-agent
     — 深挖在子窗口,主窗口收蒸馏结果

Context checklist

□ 关键证据是否都在窗口里?有没有在外面没取回?□ 工具输出是否过长?要摘要 / 分页 / 只取字段?□ 历史是否堆满失败尝试?要折叠 / 清理?□ 材料是否冲突?要显式冲突提示?□ 跨多步才重要的约束是否需要外置笔记?

CHAPTER III

Harness Engineering:可接力、可验收

零记忆开工:像轮班开发,新会话默认不知道上一班做了什么——必须把状态写进环境。Harness 把内部状态变成可见、可继承、可验收的外部状态:initializer 搭脚手架,coding 增量推进,清单与端到端测试配合。

「自我打分」不可靠时,要外部回路:生成与评估分离,评估基于可操作证据。Planner / Generator / Evaluator — 做什么、怎么做、做得对不对。

ENGINEERING LENS每个 harness 组件都在编码「假设模型独自做不到什么」。模型变强后假设会过期,要持续做减法实验,避免架得过重。

一句话定义

Harness 是把模型接进真实世界的运行时:工具权限、循环控制、外部工件、跨会话状态、验收方式。

Initializer + Coding

  • Initializer
     — 脚手架、进度文件、初始提交、条目化需求
  • Coding
     — 增量推进;提交信息、进度说明、可运行基线

结构化清单对抗「一口吃完」与「过早宣布完成」。

Harness checklist

□ 「完成」是否可验证(测试 / 脚本 / 回放 / 契约)?□ 会话起手式是否固定(读进度、跑基线、再开工)?□ 是否避免仓库留在不可运行状态?□ 高危操作是否有确认门槛与权限边界?□ 是否记录每次变更的目的、验证、欠账?

层间交界

上下文裁得很好但多会话仍失控:基本缺 Harness。Harness 很重仍胡写:回到 Context 证据与 Prompt 契约。

STACK

三层怎么叠(从里到外)

                Harness · 编排 / 会话 / 工件 / 验收
                                 ↓ 
                约束与目标  Context · 每轮上下文策展
                                 ↓  
                        Prompt · 指令与示例

读图规则:外层为内层提供约束与目标。单靠措辞很难解决「跨会话零记忆」这类 harness 问题。

CLOSING

写在最后

别把三件事理解成「互相替代」。Prompt 让模型知道你要什么;Context 让每一轮看得见、看得清;Harness 让系统在长时间尺度上接得住、验得了、传得下去。能把问题准确归类,就从「调模型运气」进入「搭系统能力」。

CASE STUDY

案例:登录页加「记住我」

目标:加复选框,状态写入本地存储

Prompt
改哪些文件、别动哪些模块、UI 约束、交付物;禁止无关重构。
Context
取回关键段;不塞 node_modules;大仓 JIT;日志只留失败片段。
Harness
固定跑 lint / 单测 / dev server;UI 验证;多会话进度文件与基线。

缺什么会痛 缺 Prompt 乱改;缺 Context 改错或漏依赖;缺 Harness 第 N 轮工程不可运行且难定位。

GLOSSARY

术语表(节选)

术语
人话
Prompt / System prompt
定义行为与输出契约
Context / Context window
本轮可见输入与上限
Tool / MCP
接外部世界的接口形态之一
Compaction
摘要后续跑
Context reset + handoff
清空会话,交接工件续跑
Harness
编排:工具、权限、验收、跨会话状态
Artifact
落盘可继承工件:进度、清单、提交、测试报告

FAQ

6 个高频争论(极简答)

1) prompt 仍重要,不能单独扛长任务全部复杂度。2) Context ≠ 只有 RAG;还有历史、工具输出、压缩、JIT、外置记忆。3) 窗口再大也不够;噪声与跨会话不自动消失。4) 多 Agent 不一定更好;看协调成本与噪声隔离。5) 短平快:Prompt + 少量 Context;长跑 / 生产:Harness + 验收。6) 用排障表贴标签,优先补最外层缺失。

练习 选最近 3 次 Agent 失败,分别贴上 Prompt / Context / Harness;下一轮每次只修一类问题。

REFERENCES

延伸阅读 · Anthropic Engineering

Effective context engineering for AI agents

Effective harnesses for long-running agents

Harness design for long-running application development

— · —

相关学习资料