Agent 开发
Agent Loop · 上下文管理 · 工具调用 · AI 巡检落地
🧠 一句话记忆锚点
Agent = Prompt + Tools + Memory + Loop + Guardrails + Evaluation,六件缺一都会在生产坏掉。核心闭环 Perception→Plan→Act→Reflect;工具要幂等 + 校验 + 截断 + 可回滚;上下文靠分层记忆(短期原文 / 中期摘要+关键事实 pin 住 / 长期向量库)。Demo 跑通只是 20%,剩下 80% 是评测与护栏。
🗺️ 本篇是 Agent 方向的枢纽页
全篇给的是结论与全景:闭环、范式、协议、坑清单、框架选型——面试前先过这一篇。三处深潜按需展开:
| 想追问到实现层 | 去哪篇 |
|---|---|
| 调度循环怎么写、记忆什么时候读写、压缩在哪一步做、工具沙箱怎么隔离、预算怎么熔断 | Agent 运行时深水区 |
| 多 Agent 怎么组织、Agent 间怎么通信、BC 结论不一致时听谁的 | Multi-Agent 系统 |
| 成功率口径怎么定、轨迹怎么判分、线上怎么归因、灰度看什么指标 | Agent 评测与线上运营 |
| 这些能力在游戏研发各阶段怎么落(巡检 / QA / 反外挂 / 客服) | AI 与游戏研发周期 |
| 影游与长视频创作 Agent 怎么编排、长程一致性怎么保 | 互动影游与长视频创作 Agent |
名词速查
首次阅读可跳过本表,直接看「场景问题」,遇到生词再回查。
本篇是Agent 范式与协议这一组名词的归属页——"Agent 有哪些搭法、它怎么调工具"这一组词在这里展开。运行时实现、多 Agent 协作、评测口径三组词归各自的深潜篇(见文末引用表)。
作为枢纽页,这张表刻意只收本篇自有名词,不把六篇深潜的词全列一遍——那些词走上面的枢纽导航表抵达更清楚。
| 名词 | 后台类比 | 在系统里干什么 | 类比失效边界 |
|---|---|---|---|
| Agent | 一个带重试和外部依赖的常驻 worker——自己决定下一步调哪个接口 | 让模型在循环里自主决策、调用工具、观察结果,直到完成目标或触发终止条件 | worker 的执行路径由代码写死,同样输入必走同样分支;Agent 的下一步由模型现场决定,同样输入可能走出完全不同的路径。所以它没有"覆盖所有分支"的测试方法,只能按结果分布统计成功率 |
| Agent Loop | 事件循环 / 消息队列消费循环——取一件事、做、看结果、再取下一件 | Agent 的主循环:把上一轮的观察结果拼回上下文,让模型决定下一步,执行,再回来。所有 Agent 框架的骨架 | 事件循环的退出条件明确(队列空、收到信号);Agent Loop 的"任务完成"由模型自己宣布,它可能过早宣布完成、也可能永不宣布。必须外挂轮数、预算、无进展三条硬闸,实现见 Agent 运行时深水区 |
| Perception → Plan → Act → Reflect | 采集 → 决策 → 执行 → 校验的标准控制回路(类似 PID 或对账补偿流程) | Agent 最小闭环的四个阶段:读取环境与上下文、决定做什么、调工具、检查结果是否达成目标 | 控制回路的反馈量是客观测量值;这里的 Reflect 是模型自己评判自己——它可能把失败的结果判成成功(尤其工具返回了模棱两可的内容时)。自我反思不能替代外部断言 |
| CoT(Chain-of-Thought,思考链) | 让程序打印中间计算步骤而不只返回最终结果——先想再答 | 引导模型把推理过程逐步写出来再给结论,显著提升多步推理任务的准确率。是 ReAct 里"Reasoning"那一半的基础 | 打印中间步骤不改变计算结果,日志是旁路的;CoT 写出的思考会进上下文并影响后续输出——推理链一步错,结论就跟着错,而它读起来依然条理清晰。且它不是"真的在推理",只是让输出分布偏向更可靠的路径,所以不能把思考链当作解释来审计(模型可能给出正确答案配一段错误的理由) |
| ReAct | 边打日志边执行的调试式流程——每步先写"我要干什么、为什么"再动手 | 让模型交替输出 Reasoning(思考)与 Action(工具调用),思考过程显式写进上下文 | 日志是旁路的、不影响执行;ReAct 的思考文本会进上下文并影响后续决策——一旦某一步推理错了,错误会被当成既有事实沿用下去(错误累积)。且它每步都产出思考文本,token 消耗明显高于直接调工具 |
| Plan-and-Execute | 先出执行计划再逐步跑——像 DB 的查询计划或 CI 的 pipeline 定义 | 先让模型一次性产出完整计划,再逐步执行。计划可被审核、复用、缓存,token 也更省 | 查询计划由优化器基于统计信息生成,执行中可回退重规划;这里的计划是在信息最少的时刻(一开始)定的,执行到一半发现前提错了,框架不会自动重规划——得显式设计"重新规划"的触发条件,否则它会硬着头皮走完错误的计划 |
| PlanAct | 计划与执行分离部署——计划产物是可评审、可版本化的独立制品 | 在 Plan-and-Execute 之上把计划显式物化:可人工审核、可复用、可回放 | 版本化制品是确定的可执行描述;这里的计划是自然语言或半结构化的,同一份计划两次执行结果可能不同——它约束的是步骤而非精确语义 |
| Reflexion | 失败后带着失败原因重试——把上次的错误信息写进下次的输入 | 执行失败后让模型先总结"为什么失败",把反思结论加进上下文再重试,避免原地重复同一个错 | 普通重试是无状态的,重试次数可控且每次代价相同;Reflexion 每轮都在加长上下文(多一份反思),成本递增且可能反思出错误结论,把自己带得更偏。必须设反思轮数上限 |
| ToT(Tree of Thoughts) | 多路探索 + 剪枝的搜索——像并行跑多个候选方案再选最优 | 同时展开多条推理分支,逐层评估剪枝,适合有明确评分标准的搜索类问题 | 搜索的剪枝依据是精确的代价函数;ToT 的分支评分也是模型给的,评分不准就剪错枝。且分支数乘以深度,token 成本呈指数增长——绝大多数业务场景负担不起 |
| CodeAct | 从"调 API"换成"直接执行一段脚本"——表达力换安全性 | 让模型生成可执行代码来代替结构化 tool call,一段代码里可完成循环、条件、多次调用的组合逻辑 | 内部脚本执行的是可信代码;CodeAct 执行的是模型现场生成的代码,等于把任意代码执行权交出去,必须强沙箱隔离。它的取舍是:表达力远高于 Function Calling,但攻击面也大得多,见 LLM 应用安全 |
| Tool Use / Function Calling | RPC 接口定义 + 参数校验——你给出 schema,对端按 schema 传参调用 | 用 JSON Schema 声明工具名、参数、类型,模型输出符合 schema 的调用请求,由框架执行并回填结果 | RPC 的调用方是编译期校验过的程序,参数类型有保证;这里的调用方是模型,它会幻觉出不存在的工具名、编造参数、传错类型。所以 schema 校验不是可选项而是必需的运行时闸门——这是"信任边界"的位置 |
| MCP(Model Context Protocol) | 工具侧的通用协议标准——类似 JDBC/ODBC 之于数据库,把 N×M 适配收敛成 N+M | 标准化"模型如何发现与调用外部工具/数据源",让同一个工具服务被不同 Agent 框架复用 | JDBC 屏蔽了差异且语义等价;MCP 统一的是传输与描述格式,不统一工具的语义与质量——同一个工具描述写得好不好,直接决定模型会不会用错它。协议不能替你把工具描述写清楚 |
| Prompt Engineering 杠杆 | 配置调优——不改代码,改参数就能显著改变行为 | 用角色设定、few-shot 示例、输出格式约束、思维链引导等手段改变模型行为,是成本最低的干预手段 | 配置项的作用域和效果是文档化的、可预期的;prompt 的效果没有文档也不稳定——同一句措辞在不同模型、不同版本上效果不同,改一个词可能全盘变化。所以任何 prompt 改动都要跑评测集回归,不能凭感觉上线 |
本篇引用的其他上下文名词
本篇是枢纽,只给一句话定位与去处;这些词的完整解释(含类比与失效边界)在各自归属页:
| 名词 | 在本篇里的角色 | 完整解释去哪读 |
|---|---|---|
| 调度状态机 / 终止线 / 分层记忆 / 压缩水位 / pin / 工具沙箱 / 权限分级 / 并发工具调用 / 预算熔断 / 幂等键 | 六件套落到代码后的实现机制 | Agent 运行时深水区 · 名词速查 |
| 协作拓扑 / 黑板 / 消息总线 / 四级裁决阶梯 / MAS 特有失效 | 多 Agent 协作的组织与消解机制 | Multi-Agent 协作 · 名词速查 |
| 成功率分母 / 轨迹级 judge / span 树归因 / 回放 / 影子 / 灰度 | 评测与线上运营的口径 | Agent 评测与线上运营 · 名词速查 |
| context(本轮装配结果)/ memory(分层记忆) | 与推理侧同名异义,务必区分 | Agent 运行时深水区 · 名词速查 |
| RAG / 检索 / 向量库 | 长期记忆本质上就是一次 RAG 调用 | RAG · 名词速查 |
| 提示注入 / 越狱 / 信任边界 | 工具调用与 CodeAct 的攻击面 | LLM 应用安全 · 名词速查 |
场景问题
Agent 的最小闭环:Perception → Plan → Act → Reflect
┌────────────────────────────┐
│ Prompt / Task / Context │
└──────────────┬─────────────┘
│
┌─────────▼─────────┐
│ Reasoner (LLM) │
└─────┬───────┬─────┘
plan? │ │ need info?
┌────▼─┐ ┌─▼──────┐
│ Act │ │ Query │
│ Tool │ │ Memory │
└───┬──┘ └───┬────┘
│ │
┌───▼──────────▼───┐
│ Observation │
└─────────┬────────┘
│
┌─────────▼─────────┐
│ Reflect / Loop │
└───────────────────┘
主流 Agent 架构范式
| 范式 | 思路 | 代表 |
|---|---|---|
| ReAct | Thought → Action → Observation 循环,模型自主决定下一步 | LangChain / 多数原型 |
| Plan-and-Execute | 先出完整计划再逐步执行,中途可 replan | BabyAGI / MetaGPT / Devin |
| PlanAct | Plan-and-Execute 的强化:计划与执行彻底分离,计划本身是可存储、可人工审核、可复用的产物 | 需要审批闸门或计划复用的生产系统 |
| CodeAct | 用生成可执行代码替代结构化 tool call——一段代码里可含循环、条件、多次调用 | CodeAct 论文 / Open Interpreter 类 |
| Reflexion / Self-Correction | 每步执行完让模型自评,失败则修正 | Reflexion 论文 |
| ToT (Tree-of-Thought) | 并行多分支推理,最终打分选优 | Reasoning-heavy 任务 |
| Multi-Agent 协作 | 角色分工(Planner / Coder / Critic),消息互传 | AutoGen / CrewAI / MetaGPT |
CodeAct vs Function Calling 的取舍:CodeAct 表达力强得多——一次输出就能表达"遍历这 20 个文件、对每个满足条件的调用 X",用 tool call 要 20+ 轮。代价是必须有真沙箱(执行任意代码的攻击面远大于执行受限的 tool call),且失败模式从"参数错"变成"代码跑一半出错、副作用已部分发生"。判据:工具调用之间有复杂控制流 → CodeAct 划算;调用少且需要严格审计每一步 → Function Calling。
PlanAct 的价值在计划这个产物本身:计划落盘之后可以被人审、被复用、被 diff。它适合"执行有代价或不可逆"的场景(先让人批准计划再执行),而 ReAct 的隐式计划藏在推理里,没法审也没法复用。
Multi-Agent:五种拓扑与冲突消解(结论)
Multi-Agent 不是一种范式而是一个维度,它自己有五种拓扑。这里只给选型定位——各自什么时候该用、代价多大;「谁跟谁说话」这类机制定义与规模上限,见 Multi-Agent 系统 · 五种协作拓扑:
- Supervisor / 中心调度:默认选项。拆得出边界、收得回验收的活都用它,最常用,token O(N)。
- Pipeline / 流水线:工序顺序写死、每道工序交付什么很明确时首选,同为 O(N)。
- Group Chat / 群聊:只在「互相质疑」这件事本身值回票价时才用(方案评审、红蓝对抗),token O(N²),最贵。
- Blackboard / 黑板:长任务、要共享大量结构化状态时用,状态区必须带版本号。
- Contract Net / 市场竞标:默认不用。竞标要 Agent 自报擅长什么,而这个自报拿不到客观校验。
结果不一致怎么处理(一句话结论):先分类(事实 / 口径 / 时序 / 幻觉),再走四级有序阶梯——证据优先 → 置信度加权 → 第三方仲裁 Agent → 人工闸门,每级有明确进入判据。不用多数投票——两条独立的原因各自都足以否掉它,展开见深潜篇。还有一条时机要求:裁决要在主 Agent 装配上下文之前跑完,进它窗口的只能是裁决结果,不能是两份互斥的原始结论。
五种拓扑的规模上限与失效模式、三层通信机制(消息传递 / 黑板 / Handoff)、裁决阶梯每级的判据与代码骨架、MAS 五种特有失效、以及何时不该上 MAS 的三条否决判据——全部在 Multi-Agent 系统 展开,本页不重复。
实现方案
Tool Use / Function Calling
协议本质:LLM 输出结构化 JSON 声明"我要调用哪个工具、参数是什么",Runtime 执行、把结果作为 tool_result 塞回上下文,模型继续推理。
- OpenAI:
tool_calls(曾用function_call) - Anthropic:
tool_use/tool_result内容块 - Gemini:
function_calls - MCP (Model Context Protocol): 跨模型统一的工具协议,2024 起大厂共建
关键设计(工具四原则):
- 工具幂等(同参多次调用结果相同)
- 工具参数校验 + 错误消息友好(模型能读懂错误自我修正)
- 工具返回大小截断(避免打爆 context)
- 工具副作用可回滚(危险操作前二次确认)
四原则之上,生产还需要危险动作三级分级(只读 / 可写可回滚 / 不可逆走人工闸门)、执行侧隔离(独立进程、硬超时、资源上限)、凭据句柄化(模型只见
conn名,不见 DSN)。为什么白名单不够、为什么不能让模型自己判断危险 —— 见 运行时 · 工具沙箱与权限隔离。
打个比方:Agent Loop 就像新员工带 SOP 手册干活——每一步先想(Thought/Plan:这题是什么、下一步该干啥)、再翻手册决定用哪个工具(Act:调 search/db/write,参数按 schema 填)、看到结果再决定下一步(Observation → Reflect),旁边还有个 Planner 导师盯着别跑偏。工具幂等、参数校验、返回截断,就是 SOP 里写清"这个动作能重做几次、参数怎么填、别一次性把仓库搬回来"。类比失效边界:现实里新员工卡壳会举手问导师,Agent 卡壳却会幻觉出一个不存在的工具或参数名——它宁可编造一个 API 也不会说"我不会";一旦幻觉调用被执行,可能出现无限循环、无效副作用或权限越界。所以生产 Agent 必须靠外部兜底:JSON Schema 强约束参数、工具白名单硬拦不存在的工具、同调用去重 + 最大轮数熔断 + token/时长/费用三重预算——不能指望它自觉停下。
上下文窗口管理:滑动窗口 + 压缩水位
问题:一个复杂任务的对话历史 + 工具输出,很快就撑爆 200k context。
四种主流做法(可组合使用):
- 朴素滑动窗口:只保留最近 N 轮 → 简单,但丢关键事实
- 摘要压缩 (Summary):把旧对话周期性压成摘要塞回 system prompt → 关键但对细节不友好
- 语义分层 (Hierarchical Memory):
- 短期记忆:最近 N 轮原文
- 工作记忆:本任务的摘要 + 关键事实(KV 抽取)
- 长期记忆:向量库(历史相似任务)
- 工具输出截断 + 惰性回读:工具结果先只返摘要 + 存全文到磁盘,模型需要时再
read_full(id)
关键事实抽取(AI 巡检系统落地经验):
- 每 K 步做一次"pinning"——让模型自己列出必须记住的关键事实
- 关键事实以
key: value格式压入 system prompt - 滑动窗口只对"过程日志"生效,不动关键事实
实现细节详见深潜篇
三层各自的写入触发与读取时机、压缩水位线怎么定、pin 为什么必须物理上不进 messages(只在装配时注入 system 段,否则迟早被滑走)、以及三种失效(摘要漂移 / 滑窗误删指令 / 向量误召)各自的检测与兜底——全部在 Agent 运行时深水区 · 分层记忆 展开,本页不重复。
下图:短期记忆是一个滑动窗口(紫框右移,划出窗外的旧对话被丢弃/压缩),但被 pin 的关键事实(绿色 📌)永不滑走;窗外内容沉淀进中期摘要,更久远的进长期向量库。
Prompt Engineering 的核心杠杆
- System prompt 定角色、能力边界、输出格式
- Few-shot 只给 3~5 个高质量示例,覆盖典型/边界/失败三类
- CoT (Chain-of-Thought):思考链,先想再答
- Self-consistency:多次采样投票
- Structured output:JSON Schema / XML tag 强约束
- XML 分块 (Anthropic 推荐):
<task>、<context>、<examples>——模型解析更稳
为什么这么做
AI 巡检系统的滑动窗口设计(自研经验)
场景:巡检系统持续观察线上服务的日志 / 指标 / 告警,用 Agent 判断是否需要人工介入。
设计要点:
- 窗口分层:
- Layer-1(10 分钟):原始告警 & 核心指标,全量入 prompt
- Layer-2(1 小时):LLM 摘要 + 关键事实(服务名、错误码、责任团队)
- Layer-3(1 天):向量化历史事件用于相似性回溯
- 语义分析压缩:每 5 分钟触发一次压缩——
summarize + extract_facts;产出{time, service, symptom, root_cause_hypothesis, action} - 失效恢复:Agent 每步都要写
current_focus到独立 memory;崩溃后 replay 用current_focus+Layer-2 摘要快速恢复 - 护栏:涉及重启/回滚的动作必须走审批工具,不能自行执行
这三个时间参数为什么是 10 分钟 / 1 小时 / 1 天(跟着告警风暴聚集、值班升级决策、周期性对比三个业务判断周期走),以及巡检在游戏研发周期里的位置——见 AI 与游戏研发周期 · AI 巡检 Agent。
失败恢复三板斧
- 重试:工具超时/网络抖动,指数退避 + jitter
- 幂等:所有写操作用
idempotency_key;即使模型重试也不重复扣款/发货 - 护栏 (Guardrails):白名单工具集、参数域约束、危险操作 human-in-the-loop、tokens/时长/费用三重预算
幂等键为什么必须带
task_id(只用参数指纹会让同玩家两次合法补偿撞成一个指纹 → 漏发)、三重预算的计量点在哪、熔断后为什么要优雅收尾返回部分结果 +resume_token而不是抛异常 —— 见 运行时 · 并发、预算与幂等。
Agent 的评测方法
四种手段,各管一段:
- Golden Set(黄金集):人工构造 100~500 个典型任务,跑回归、看成功率、步数、成本 —— 发布闸门
- 红队测试:对抗性 prompt / 恶意输入 / 边界数据;检查是否越权、是否 leak 敏感信息 —— 安全侧,详见 LLM 应用安全
- 离线回放:录制真实用户轨迹,改 prompt/模型后回放对比 —— 改动影响面评估
- A/B 影子流量:新 Agent 与旧 Agent 并跑,只对比不生效 —— 上线前最后一道
成功率怎么定义才不骗人(分母必须是全样本、超时与熔断要单独归桶)、轨迹为什么不能比参考路径相似度(合法路径不唯一,改判关键步里程碑)、span 树怎么埋、灰度回滚该看人工接管率而非成功率 —— 全部在 Agent 评测与线上运营 展开。
为什么别的选择不行
Agent 系统的十大真实坑
清单全列(这是本页的记忆锚点),每条的根因与修法细节在末列的深潜篇:
| # | 坑 | 一句话修法 | 细节归属 |
|---|---|---|---|
| 1 | 无限循环:反复调同一工具、参数不变 | 同调用去重 + 最大轮数熔断 + 检测参数变化 | 运行时 · 调度循环(含指纹为什么要先剔 nonce) |
| 2 | 工具输出爆炸:一次 ls 输出 100MB | 分页 + 摘要 + head/tail 保护 | 运行时 · 工具沙箱 |
| 3 | 参数幻觉:模型编造参数名 | JSON Schema 强校验 + 出错时把 schema 塞回 error message | 运行时 · 工具沙箱 |
| 4 | 上下文中毒:早期错误结论污染后续推理 | checkpoint + 重开新窗口 | 运行时 · 分层记忆 |
| 5 | 多 Agent 死锁:A 等 B、B 等 A | 强制超时 + 指定 Coordinator + 编排期 tie-breaker | Multi-Agent · 特有失效(含"礼貌性死锁"与另外四种) |
| 6 | 副作用不可控:Agent 直接 rm -rf | 危险动作三级分级 + human-in-the-loop | 运行时 · 工具沙箱(为什么不能让模型自判) |
| 7 | 成本失控:一个任务打 200 次 API | token/时长/费用三重预算 + 提前熔断 | 运行时 · 预算 |
| 8 | latency 过高:每步 2s,10 步 20s | 只读工具本地并行 + 流式输出 | 运行时 · 并发(并行的回填顺序陷阱) |
| 9 | 评测失效:只在 demo 上跑通 | Golden set 回归 + 红队 + 影子流量 | 评测与线上运营(含分母口径陷阱) |
| 10 | 可观测缺失:出问题不知道哪一步 | Trace ID + 每步 span(OpenTelemetry / LangSmith) | 评测 · span 树归因 |
上下文压缩的边界事故
- 摘要漂移:多轮摘要后,关键约束("用 Python 3.10")在压缩过程丢失
- 滑动窗口误删指令:user 早期给的"必须遵守 XX"被踢出去后模型开始违反
- 向量检索误召:语义相近但事实相反的历史被错误召回,模型采用了
三种事故的共同点是都不会报错(只表现为"Agent 变笨了"),所以必须靠主动断言发现——检测手段与兜底见 运行时 · 三种失效。
主流 Agent 框架对比
| 框架 | 语言 | 定位 | 亮点 |
|---|---|---|---|
| LangChain / LangGraph | Python/JS | 通用,State Machine 化 (LangGraph) | 生态最大,模型/工具/存储齐全;LangGraph 引入图编排更适合生产 |
| Eino(字节) | Go | Go 生态的图编排框架 | Chain/Graph/Workflow 分层 + 泛型带来的编排期类型安全;抽象对照见 MAS · 框架抽象 |
| AutoGen (MSFT) | Python | Multi-Agent 对话 | GroupChat 抽象、ConversationalAgent |
| CrewAI | Python | Role-based Multi-Agent | 角色/任务/协作模型清晰 |
| Anthropic Claude Agent SDK | Python/TS | Anthropic 官方,围绕 Claude 优化 | 内建工具循环、缓存、思考模式;配合 MCP 生态 |
| Anthropic MCP | 协议 | 工具/资源统一协议 | 让不同模型都能接同一批工具 |
| Vercel AI SDK | TS | 前后端统一,UI 流式 | streaming UI + tool calling 一等公民 |
| LlamaIndex | Python | 重 RAG | Retrieval / index 抽象强 |
| Semantic Kernel (MSFT) | C#/Py/Java | 企业集成 | Plugin + Planner + Kernel |
沉淀结论
面试常见问题清单(按主题分类)
闭环与架构
- Q:Agent 的最小闭环是什么? A:Perception → Plan → Act → Reflect 循环,模型自主决定下一步、观察结果再迭代。
- Q:ReAct 和 Plan-and-Execute 区别? A:ReAct 每步现想现做(Thought→Action→Observation);Plan-and-Execute 先出完整计划再逐步执行、中途可 replan,适合长任务。
工具调用
- Q:Function Calling 的协议本质? A:LLM 输出结构化 JSON 声明"调哪个工具、参数是什么",Runtime 执行后把
tool_result塞回上下文继续推理;MCP 是跨模型统一的工具协议。 - Q:工具设计四原则? A:幂等(同参多次结果一致)、参数校验 + 友好错误(模型能自我修正)、返回截断(别打爆 context)、副作用可回滚(危险操作二次确认)。
上下文与记忆
- Q:对话历史撑爆 200k context 怎么办? A:分层记忆——短期留最近 N 轮原文、中期压成摘要 + pin 关键事实、长期进向量库;工具输出先返摘要、需要时再回读全文。
- Q:滑动窗口/摘要压缩的典型事故? A:摘要漂移丢关键约束、滑窗误删早期指令、向量误召语义相近但事实相反的历史——所以关键事实要 pin 住不参与滑动。
可靠性与评测
- Q:Agent 生产化最容易坏在哪? A:无限循环(同调用去重 + 最大轮数熔断)、工具输出爆炸(分页/摘要)、参数幻觉(JSON Schema 强校验)、成本失控(token 预算 + 熔断)、副作用不可控(白名单 + human-in-the-loop)。
- Q:Agent 怎么评测? A:Golden Set 回归(成功率/步数/成本)+ 红队对抗测试 + 离线回放 + A/B 影子流量;Demo 跑通只是 20%,评测和护栏是剩下 80%。
心法总结
Agent = Prompt + Tools + Memory + Loop + Guardrails + Evaluation。 缺任何一样都会在生产坏掉——Demo 跑通只是 20% 的工作,剩下 80% 是评测和护栏。
本域延伸
深潜三篇(本页的实现层与运营层)
- 调度状态机、分层记忆读写时机、工具沙箱五道闸、并发/预算/幂等:Agent 运行时深水区
- 成功率口径与分母陷阱、轨迹级 judge、span 树归因、回放/影子/灰度:Agent 评测与线上运营
- 巡检 / QA 自动化 / 反外挂 / 客服在游戏研发周期里的落地:AI 与游戏研发周期
相邻主题
记忆口诀
- 六件套:Prompt / Tools / Memory / Loop / Guardrails / Evaluation
- 最小闭环:Perception → Plan → Act → Reflect
- 工具四原则:幂等 / 校验+友好错误 / 返回截断 / 副作用可回滚
- 分层记忆:短期原文 / 中期摘要+pin关键事实 / 长期向量库
- 生产铁律:Demo 20% / 评测护栏 80% / 熔断+预算+白名单+Trace
内容来源
迁移自 guide/theme-agent-dev(综合整理)
综合整理:Anthropic / OpenAI / LangChain 官方文档、AI 巡检自研经验(2026-07;生态更新快,请以官方文档为准)
自测:合上资料能说清楚吗?
- Agent 的最小闭环由哪四步构成?它和一次普通的 LLM 调用最大的区别在哪?
参考答案
Perception → Plan → Act → Reflect 循环。区别:Agent 能自主调用工具获取外部信息、观察结果后迭代,普通调用是单轮无反馈的一问一答。
- 工具(Tool Use)设计的四条原则是什么?分别防的是什么坑?
参考答案
幂等(防重试重复扣款)、参数校验+友好错误(防参数幻觉、助自我修正)、返回截断(防打爆 context)、副作用可回滚/二次确认(防误删误操作)。
- 对话历史撑爆 200k context,分层记忆是怎么解决的?关键事实为什么要单独 pin?
参考答案
短期留最近 N 轮原文、中期压摘要+关键事实、长期进向量库按需召回。pin 是因为滑动窗口会误删早期指令、摘要漂移会丢约束,关键事实固定不参与滑动才不丢。
- 对比 ReAct 和 Plan-and-Execute:各自思路、适用场景与短板?
参考答案
ReAct 每步现想现做(Thought→Action→Observation),灵活但易跑偏、步数多。Plan-and-Execute 先出完整计划再逐步执行、中途可 replan,适合长任务,但初始计划可能不准。
- 为什么说"Demo 跑通只是 20%"?生产化最容易坏在哪几处,各配什么护栏?
参考答案
剩 80% 是评测+护栏。常坏点:无限循环(去重+轮数熔断)、输出爆炸(分页摘要)、参数幻觉(Schema 校验)、成本失控(token 预算+熔断)、副作用(白名单+human-in-the-loop)、可观测缺失(Trace+span)。