这份 52 页的深度幻灯片建议在 ≥ 1024px 宽度的桌面屏幕上浏览。
从 Prompt 到 Environment,每一层都在补上一层依赖的事实源。
Agent 不会一次成型——它像洋葱一样,每一层都在解决上一层不可靠的那一寸边界。
从"怎么说清楚"到"在哪学习与验证",按洋葱层递进。点击任一卡片直接跳转。
Karpathy 2025 年的命名——LLM 应用的核心是"在每一步为模型填入正确上下文"。
Context Engineering = 在 LLM 每一步推理所看到的 context window 里,选什么、放哪、怎么压、何时刷。
涵盖 指令、检索结果、工具定义、记忆、历史消息、可用资源 等多源信息的选型、组织、压缩与注入。
5 年时间,Context 从"把所有文档塞进 prompt"演化成独立学科。
私有数据 / 时效性 / 领域知识 / 个性化——Prompt 阶段的四个"信息缺口"。
从源文档到 LLM 回答:加载 → 切分 → 嵌入 → 索引 → 检索 → 重排 → 注入 → 生成 → 后处理。
RAG 把"凭印象"变成"凭证据",但工程复杂度大幅上升。
| 维度 | CONTEXT 阶段的优势 | CONTEXT 阶段的代价 |
|---|---|---|
| 事实性 | 基于证据回答,幻觉率 ↓ 50%+ | 检索不到时模型依旧会编 |
| 时效性 | 分钟级增量更新,无需重训 | 索引可能"过期",需冷启动重建 |
| 可解释 | 强制带引用,用户可验证 | 引用格式不统一,反而增加前端复杂度 |
| 成本 | 比 fine-tuning 便宜 1 个数量级 | embedding + 检索 + rerank 增加 ~10-30% 成本 |
| 可更新 | 文档更新即生效 | chunk 边界变更需重新 embedding |
| 可定制 | 按权限 / 部门 / 时间过滤 | 元数据治理常被忽视 |
| 可扩展 | 百万到亿级文档 | 向量库运维成本随规模指数上升 |
| 长上下文 | 200K-1M 模型加持下长文档 RAG 变简单 | Lost-in-the-Middle 问题仍存在 |
| 跨文档 | GraphRAG 解决"综合 N 份报告"问题 | 传统 RAG 难以跨文档全局推理 |
| 安全性 | 检索内容可做权限隔离 | Prompt Injection 通过检索内容注入 |
RAG 框架、向量库、Embedding、Rerank、记忆系统——每一环都有多种选择。
RAG 已经从"问答工具"演化成"AI 应用的操作系统"。
围绕 LLM 的所有外部系统——工具调度、状态管理、权限控制、人机协作的"运行时"。
Harness = 让 LLM 能真动手所需的运行时,Tool Registry + Permission Layer + State Store + Loop Controller + Observation Handler。
它不是模型本身,而是模型的"操作系统"——负责把 LLM 的"思考"翻译成对真实世界的安全、可观测、可恢复的操作。
3 年时间,Agent 从论文范式演化成生产级软件栈。
把模型从"聪明的回答者"升级为"能完成任务的执行者"——这就是 Harness 要解决的事。
Tool Registry 调度、State Store 记忆、Permission Layer 把关、Loop Controller 推、Observation Handler 收。
class AgentHarness: def __init__(self, llm, tools, permissions): self.llm = llm self.tools = ToolRegistry(tools) self.perms = PermissionLayer(permissions) self.state = StateStore() # 持久化 self.trace = Tracer() def run(self, task, max_steps=20): self.state.add("user", task) for step in range(max_steps): # ① 思考 thought = self.llm.think(self.state.history) self.trace.log(step, "thought", thought) # ② 决策动作 action = self.llm.decide(thought, self.tools.schemas()) if action.type == "finish": return action.result # ③ 权限把关 if not self.perms.allow(action, self.state.user): action = self.perms.ask_human(action) # ④ 执行 + 错误恢复 try: observation = self.tools.call(action) except ToolError as e: observation = ErrorRecovery(e).handle(action) # ⑤ 更新状态 self.state.add("assistant", thought, action) self.state.add("tool", observation) self.state.checkpoint() # 每步存档 raise MaxStepsError("循环未收敛")
// MCP Server 示例(Cloudflare) import { Server } from "@modelcontextprotocol/sdk" const server = new Server({name: "cloudflare"}) server.setRequestHandler("tools/list", () => ({ tools: [{ name: "deploy_worker", description: "Deploy a Worker script", inputSchema: { script: "string" } }] }))
让 Agent 真干活——但 Harness 还无法保证"能干一整天"。
| 维度 | HARNESS 阶段的能力 | HARNESS 没解决的 |
|---|---|---|
| 动手能力 | 真能调工具、改文件、跑命令 | 长任务容易半途而废(进入 Loop 阶段) |
| 工具接入 | MCP / Function Calling 标准化 | 工具间依赖、组合、版本管理仍是痛点 |
| 状态管理 | State Store + Checkpoint | 长上下文下历史压缩仍是难题 |
| 权限控制 | 工具级白名单 / 黑名单 | 动态权限(如"删除前必须确认")实现复杂 |
| 可观测性 | Trace / 工具调用记录齐全 | Agent "为什么这么决定"难以归因 |
| 错误恢复 | Retry / 降级 / Fallback | 复合错误(多个工具连锁失败)难处理 |
| 多 Agent 协作 | A2A / ACP 协议起步 | 协作中的冲突、循环、死锁常发生 |
| 可移植性 | MCP 让工具一次开发多平台运行 | 不同 Harness 间的 Agent 仍难迁移 |
| 安全性 | 沙箱 + 权限分离 | Prompt Injection 仍可穿透工具调用 |
| 成本控制 | 按 token / 调用计费透明 | 长循环 / 错误重试导致成本爆炸 |
Agent 框架、Harness / Runtime、MCP 实现、Computer Use ——百花齐放。
Agent 框架与 MCP 协议正在重塑企业 AI 应用的开发方式。
让 Agent 能跨多步推理、持续反思、记忆与恢复的执行循环。
Agent Loop = Planner → Executor → Observer → Reflector → Memory Updater → (loop),直到任务收敛。
Loop 阶段关注 长任务执行:规划、反思、记忆、Checkpoint、容错续跑。它把 Harness 的"单次调用"变成持续推进的系统。
3 年时间,Agent 学会"自己想想、自己再试一次"。
5 个驱动力把 Agent 从"单次调用"逼成长跑系统。
Planner → Executor → Observer → Reflector → Memory Updater → (loop) — 反思与记忆是 Loop 的两大支柱。
class LoopAgent: def __init__(self, llm, tools, memory): self.llm, self.tools = llm, tools self.memory = Memory() # 短期/工作/长期/情景 self.checkpoint = CheckpointStore() def run(self, goal, max_iter=30): plan = self._plan(goal) # Planner self.memory.short_term.add("goal", goal) self.memory.short_term.add("plan", plan) for it in range(max_iter): # ① 选择下一个子任务 sub = self._select_next(plan, self.memory) if sub is None: break # ② 执行 + 观察 action = self.llm.act(sub, self.memory.short_term) obs = self.tools.call(action) self.memory.short_term.add("obs", obs) self.checkpoint.save(self.memory) # ③ 反思 (Reflection) reflection = self.llm.reflect(sub, action, obs) if reflection.is_failure(): plan = self._revise(plan, reflection) # ④ 长期记忆更新 if obs.is_novel(): self.memory.long_term.add(obs.summary) # ⑤ 收敛判断 if self._is_goal_met(plan, self.memory): return self._compose_answer() raise UnfinishedError("达到迭代上限") def resume(self, ckpt_id): state = self.checkpoint.load(ckpt_id) self.memory = state.memory return self.run(state.remaining_goal)
┌──────────────────────────────────┐ ▼ │ Planner → Executor → Observer │ (action) (result) │ │ │ ▼ Memory Updater ← Reflector │ (是否成功 / 怎么改) └─────────────────── loop ───────┘ // 直到目标收敛 或 步数耗尽
单轮 Prompt vs Workflow vs Loop Agent——看清边界。
| 维度 | 单轮 Prompt | Workflow | Loop Agent |
|---|---|---|---|
| 能力范围 | 单步推理 / 创意 | 固定流程多步 | 动态探索长任务 |
| 可预测性 | 高 | 高 | 中 · 取决于 prompt 与工具 |
| 适应性 | 低 | 中 | 高 · 可应对意外 |
| 成本 | 低 · 1 次调用 | 中 · N 次固定 | 难预测 · 长循环可能爆炸 |
| 延迟 | 秒级 | 分钟级 | 小时级 |
| 错误恢复 | 无 | 无 | 强 · 反思 + 重试 + 降级 |
| 状态管理 | 无 | 中间结果传上下文 | 完整 Checkpoint |
| 可观测 | 1 次 trace | N 次 trace | 完整 trajectory + reflection |
| 适用场景 | 翻译 / 摘要 / 写代码片段 | ETL / 多步但确定的流程 | SWE-Bench / 复杂调试 / 长任务 |
| 典型工具 | GPT-4o / Claude 直接调用 | LangChain LCEL / n8n | Devin / Claude Code / OpenHands |
反思框架、长任务 Agent、规划框架、状态机、记忆系统——每一类都是 Loop 阶段的关键拼图。
从 SWE-Bench 到长文档翻译,Loop Agent 正在把"AI 完成复杂任务"变成现实。
一段被送进 LLM 的文本——它决定了模型"想做什么",是所有 AI Coding 工程的起点。
Prompt = 发送给语言模型的结构化指令,由角色 + 任务 + 约束 + 示例组成。
Prompt Engineering(提示工程)就是为 LLM 设计最优输入的实践。它不修改模型权重,而是通过措辞、结构、示例来激发模型的潜在能力。
Prompt 工程的演化史,本质上是"如何让模型听懂人话"的探索史。
Prompt 阶段回答了"模型能听懂",但回答不了"模型能做什么"。
高质量 prompt = 角色 × 任务 × 约束 × 示例 × 格式 × 思维链。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ C · Capacity and Role 角色与能力 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 你是一位拥有 10 年经验的[领域]专家, 擅长把复杂概念讲给一线工程师听。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ R · Request 任务陈述 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 请帮我写一篇关于 [主题] 的 [文体], 目标读者是 [受众],核心目的是 [目的]。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ I · Insight 背景与上下文 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 背景:[领域现状 / 用户痛点 / 已有方案] 限制:[字数 / 风格 / 时间 / 预算] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ S · Statement 输出要求 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 结构:[开头 / 主体 / 结尾 应包含哪些要素] 风格:[语言 / 节奏 / 称呼 / 段落长度] 长度:[字数范围 / 段落数] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ P · Personality 个性化 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 语气应该像:[人物 / 文章 / 品牌的风格] 避免:[口癖 / 套话 / 偏见词] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ E · Experiment 示例与反例 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 示例输入 1:[真实场景] 理想输出 1:[完整示例] 错误输出 → 修正:[反例 + 修正版]
Question 科罗拉多州东方部落区域的面积? Thought 1 需要查科罗拉多州 + 东方部落 + 面积。 Action 1 Search[科罗拉多州 东方部落 区域] Observation 1 面积约 482,000 km² Thought 2 还需要确认是"东方部落"区域。 Action 2 Lookup[东方部落] Observation 2 东方部落 = Ute 部落 Thought 3 已知面积且属于 Ute。 Action 3 Finish[科罗拉多州东方部落区域 面积约 482,000 km²]
零成本、快迭代——但写好 prompt 不代表系统可靠。
| 维度 | PROMPT 阶段的优势 | PROMPT 阶段解决不了 |
|---|---|---|
| 成本 | 零额外成本,纯文本输入 | 需要长 CoT 时 token 成本爆炸 |
| 速度 | 实时调优,无需训练/部署 | 当 prompt > 10K 字符,延迟显著上升 |
| 可解释 | 纯文本,可读、可审计、可分享 | 无法解释"模型为什么不听话" |
| 可复用 | 同一 prompt 跨模型 / 跨产品复用 | 模型版本一换,效果可能突变 |
| 事实性 | Few-shot 可校准输出格式 | 模型依然会幻觉,缺乏外部事实源 |
| 私有数据 | 无需改造模型 | 训练集外的私有数据,prompt 无能为力 |
| 实时性 | 可秒级更新 | 训练数据截止日之外的世界"看不见" |
| 复杂推理 | CoT / ToT / ReAct 显著提升 | > 10 步推理准确率常 < 40% |
| 鲁棒性 | Few-shot 可稳定输出 | 措辞微调 / 注入攻击即可击穿 |
| 可评测 | Promptfoo / RAGAS 等工具可批量测 | 主观任务(创意 / 风格)评测困难 |
从 prompt 模板库到自动化评测——选对工具链是 Prompt 阶段的核心工程能力。
写好 prompt 能直接产生业务价值——尤其在 LLM 推理成本还很高的 2022-2023 年。
让 Agent 在运行时修改自己的 prompt、工具、策略甚至代码骨架——从"被工程优化"变成"自己优化自己"。
Self-Harness = 让 Agent 根据评估信号自动改写自己的 prompt / 工具 / 架构,再部署到下一轮执行。
Loop 阶段解决"长任务跑得动";Self-Harness 解决"跑得越来越聪明"——把产品迭代本身外包给 Agent 自身。
Self-Harness 不是 2024 的新发明——它的思想骨架来自 1987 年的 Gödel Machine,只是 LLM 让它第一次变得工程可落地。
5 个天花板把工程从"写 Prompt"逼到"让 Agent 自己改 Prompt"。
A 提示进化 / B 强化学习 / C 代码自改——三条路径殊途同归到"用评估信号驱动 Agent 自身的迭代"。
import dspy
class QA(dspy.Signature):
"""给定问题,从上下文回答。"""
question = dspy.InputField()
context = dspy.InputField()
answer = dspy.OutputField()
class CoT_QA(dspy.Module):
def __init__(self):
super().__init__()
self.gen = dspy.ChainOfThought(QA)
def forward(self, question, context):
return self.gen(question=question, context=context)
agent = CoT_QA()
# 自动用 200 条标注做 BootstrapFewShot 优化
optimizer = dspy.BootstrapFewShot(metric=dspy.evaluate.answer_exact_match)
optimized = optimizer.compile(agent, trainset=trainset)
# 输出:新 prompt 比人手写的准确率高 +14%
# DeepSeek-R1 / GRPO 核心
for each prompt q:
sample G responses {o_1, ..., o_G} from π_θ_old
compute reward r_i for each o_i (e.g. 答案是否正确)
advantage A_i = (r_i - mean(r)) / std(r)
update θ to maximize:
J(θ) = E[min(ρ_i·A_i, clip(ρ_i, 1-ε, 1+ε)·A_i)]
- β · KL(π_θ || π_ref)
where ρ_i = π_θ(o_i|q) / π_θ_old(o_i|q)
# 关键:去掉 critic 模型,纯组内相对优势
# 训练成本比 PPO 砍 ~50%
Self-Harness 让 Agent 真正"越用越聪明"——但也打开了潘多拉魔盒:奖励黑客、改坏自己、合规失守。
从 prompt 优化、RL 训练到自指 Agent——四个梯队。
从 DeepMind 优化 Google Borg,到 Sakana 写论文——Self-Harness 已经从论文走进了生产。
Agent 不再是单个程序——它住在由沙箱、协议、记忆、可观测性、治理共同组成的"数字工作场所"里。
Environment = Agent + Sandbox + Tools + Memory + Observability + Eval + Governance + 跨 Agent 协议(MCP/A2A/ACP)。
前 5 层都在 Agent 内部做文章;Environment 把视野拉到 外部系统——它问的不是"Agent 聪不聪明",而是"它住在什么世界里、那个世界是否可被信任"。
Environment 不是一夜出现的——它由可观测性、协议层、容器化、可验证奖励逐步叠加而成。
5 个翻车把 Self-Harness 逼进 Environment——没有可信世界,再聪明的 Agent 也是失控的火。
Agent 不再是孤岛——它住在 Sandbox 里、通过 MCP 调工具、通过 A2A 谈协作、通过 Gateway 接受治理。
// my-mcp-server/index.ts
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";
const server = new McpServer({ name: "weather", version: "1.0.0" });
server.tool("get_weather", {
city: z.string().describe("城市名"),
}, async ({ city }) => {
const r = await fetch(`https://api.weather.com/${city}`);
const data = await r.json();
return {
content: [{ type: "text", text: `${city}: ${data.temp}°C ${data.desc}` }],
};
});
const transport = new StdioServerTransport();
await server.connect(transport);
// 任何 MCP 客户端(Claude Code / Cursor / Continue)即可调用
10 个维度的对比——单 Agent 部署在 Demo 里 OK,Production 必须 Environment-aware。
Environment 不是单一产品——它是一组互相替代又互补的工具栈。
从 Anthropic 内部 90% PR 由 Agent 提交,到 Stripe 全链路 Langfuse——Environment 已在生产。
6 层洋葱的每一层都在把"假设"换成"证据"——最终交付的不只是模型,而是 Agent 生存的世界。
从读懂到上手——核心论文 / 项目 / 工具 + 8 条工程行动清单。