面试 · 实战 · 综合手册

Agent 开发 100 问

一份覆盖招聘高频考点的 AI Agent 工程师完整知识图谱 · 基础概念 / 框架 / RAG / MCP / 多智能体 / 评测 / 部署

00

写在前面

这份 100 问适合谁

本手册综合 2026 年国内外 AI Agent / LLM 应用工程师岗位 JD 与高频面试题整理而成,适用于:

  • 正在准备 AI Agent / LLM 应用开发工程师 面试的同学
  • 已在做大模型应用、希望系统梳理 Agent 设计模式与工程实践的工程师
  • 从后端 / 算法 / 前端转向 AI 工程方向、需要快速建立知识地图的从业者

如何使用本手册

每个问题分为三档:基础 必答类 / 进阶 区分度题 / 高阶 设计与落地题,高频 表示在 JD 与面经中重复出现。建议先扫读问题列表自测,对答不出的 30%+ 题目展开精读。

0H

招聘要求剖析:Agent 工程师要什么人

JD 高频技能词云(按出现频次降序)

领域关键词说明
编程语言Python / TypeScript / FastAPI主流后端栈,Python 占 90%+,前端工具链常用 TS
大模型GPT / Claude / Qwen / DeepSeek / GLM闭源 + 开源双线掌握,能本地化部署是加分项
Agent 框架LangChain / LangGraph / LlamaIndex / AutoGen / CrewAILangGraph 状态图建模在生产级岗位中地位上升明显
低代码平台Dify / Coze / FastGPT / n8n面向产品化场景,部分公司明确写入 JD
RAG向量检索 / 重排 / 切片 / 多路召回 / 知识图谱JD 中提及频次最高(123 次/样本),几乎人人必问
向量数据库Milvus / Chroma / Qdrant / pgvector / Elasticsearch能讲清索引类型 (HNSW/IVF) 与召回率/吞吐权衡
EmbeddingBGE / text2vec / OpenAI / Cohere能区分通用 vs 领域微调嵌入模型
工具调用Function Calling / MCP / OpenAPI / JSON SchemaMCP 协议在 2026 年成为新晋必考点
规划ReAct / Plan-Execute / ToT / Reflection能讲清不同范式适用场景与优劣
工程化Docker / K8s / 流式输出 / 异步并发 / 限流降级部分高级岗要求懂 LLM Gateway / Token 池
评测RAGAS / DeepEval / LangSmith / Phoenix有"上线后持续评测"经验的候选人极少,溢价高
安全Prompt Injection / 越狱 / 沙箱 / GuardrailsTo B 与金融、政企岗位重点考察

JD 中典型职责描述(综合归纳)

  1. 调研业务场景,设计 Agent 工作流与 Prompt 体系,并完成原型落地
  2. 基于 LangChain / LangGraph / Dify 等框架搭建 智能体应用,对接业务系统
  3. 设计与维护 RAG 检索链路:数据清洗、切片、嵌入、向量入库、召回与重排
  4. 实现 工具体系(Function Call / MCP Server)与权限/审计/降级机制
  5. 建设 评测、追踪、监控、A/B 实验 体系,保障线上效果
  6. 跟进开源模型与论文(ReAct / Reflexion / Toolformer / Voyager 等),将新方法落地
01

一、Agent 基础概念(1-10)

Q1什么是 AI Agent?它与传统的 LLM 调用、Workflow、Copilot 有什么本质区别?基础高频

一句话定义:Agent = LLM 大脑 + 循环 感知→决策→行动→观察 + 工具 + 记忆,由模型在运行时动态决定下一步。

四种范式的"控制权"在哪里
单次 LLM 调用 Q LLM A 无状态 · 一问一答 Workflow(编码期固定路径) Step1 Step2 Step3 End 人写死路径 · 步骤固定 Copilot(副驾·建议) User 建议 User 人是决策者 · AI 出建议 Agent(LLM 在运行时决定下一步) LLM Tool action observation ↻ 循环 · 路径由模型决定
维度LLM 调用Workflow / ChainCopilotAgent
状态线性会话循环+记忆
路径决策编码期人决定运行时 LLM
工具调用固定辅助动态
自主性
调试难度
判定法则:执行路径如果在编码阶段就被人固定,那就是 Workflow;只要存在"LLM 在循环中决定下一步动作"这一环,就具备 Agent 特征。能用 if-else 解决的问题,别上 Agent。
Q2一个 AI Agent 至少由哪些核心模块组成?基础

参考架构:4 + 1(大脑 / 规划 / 记忆 / 工具 + 环境闭环),工程化版本再补 4 个外围(调度、护栏、可观测、UI)。

Agent 核心架构:以 LLM 为枢纽的星状结构
LLM 推理 · 决策 Planner 目标→子任务 Memory 短期 + 长期 Tools 搜索/代码/API Environment +1 反馈闭环
① 大脑 LLM

理解任务、推理、生成动作。Agent 的"决策器"。

② 规划 Planner

把高阶目标拆为子任务。可与大脑合一,也可单独跑。

③ 记忆 Memory

短期=对话上下文;长期=向量库/KV/事件日志。

④ 工具 Tools

搜索、代码执行、数据库、浏览器、内部 API。

+1 环境闭环

工具结果回流到大脑形成"observe → act"循环。

生产级再补四件套:SchedulerGuardrailObservabilityUI Layer。面试不要漏 +1 环境闭环——这是 Agent 与 Chain 的核心差异。
Q3Agent 与 Chain 的区别是什么?为什么 2026 年大家从 Chain 转向 Graph?进阶高频

三者本质都是"LLM + 工具"的组合,区别在于能不能表达分支、循环和断点续跑。Chain → Agent → Graph 是逐步加强表达力的演化路径。

Chain · Agent · Graph 三种执行图
① Chain · 线性 A B C 无循环 · 不分支 · 失败即终 ② Agent · 隐式循环 LLM ReAct 能循环 · 难观测 · 难恢复 ③ Graph · 显式状态图 plan act verify retry done 显式节点 / 条件边 / 可恢复
能力ChainAgent (隐式循环)Graph (LangGraph)
分支决策prompt 里黑盒显式 conditional edge
循环回退
状态持久化外挂麻烦原生 Checkpoint
断点续跑
Human-in-the-loop补丁原生 interrupt()
调试可视trace 难还原图结构天然可视
Graph 把 Agent 的"隐式循环"显式化:节点 / 边 / 状态 / 检查点都是一等公民。生产环境长任务(> 30s)、需要人在环、需要崩溃恢复,几乎都倒向 Graph。
Q4Agent 的"自主性"是怎么实现的?为什么 LLM 能"自己决定"做什么?基础

"自主"不是魔法,本质是把 LLM 当策略函数 π(a|s),外面套一个 while 循环,每次把"该做什么"转化成模型的下一个 token 预测

Agent 主循环(observe → think → act → observe)
① Perceive 观察环境 ② Think LLM 决策 ③ Act 调用工具 ④ Observe 写入记忆 done? max_steps / FINAL
while not done and step < max_steps:
    obs    = perceive(env)                              # ① 观察
    state  = update_memory(state, obs)                  # 写入短期记忆
    action = LLM(prompt(state, tools_schema, history))  # ② 模型 = 策略函数
    result = execute(action)                            # ③ 工具执行
    state  = update_memory(state, result)               # ④ 反馈回灌
    done   = is_finished(state)                         # 终止条件
模型并不真的"自己决定"。开发者用 System Prompt + 工具 JSON Schema + ReAct/Function Calling 协议,把"接下来做什么"转成一道选择题/续写题,模型基于训练分布给出概率最大的解。本质:把决策伪装成续写
Q5常见的 Agent 设计模式有哪些?进阶高频

Andrew Ng 总结的四大设计模式(Reflection / Tool Use / Planning / Multi-Agent),工程上再补两种编排模式(Router / Hierarchical)。

六种核心设计模式速览
① Reflection 反思 Draft Revise critique ② Tool Use 工具调用 LLM search db code ③ Planning 规划 先出完整计划 → 逐步执行 ④ Multi-Agent 多智能体 Plan Code Test 分工 / 评审 / 投票 ⑤ Router 路由 R RAG Code Search ⑥ Hierarchical 分层 Lead A B C
前 4 个是 Andrew Ng The Batch 总结的"基本招式",后 2 个是工程上常见的"编排招式"。多数生产 Agent = Planning + Tool Use + Reflection + Hierarchical 的组合,而不是单一模式。
Q6Agentic AI 和 AI Agent 有区别吗?进阶

工业界经常混用,但严格说是"实体"对"范式"的差别。类比就是 Microservice(一个服务) vs Microservices Architecture(一种架构风格)。

"实体" vs "范式"
AI Agent · 一个实体 Agent a single instance "我写了一个 customer-service agent" Agentic AI · 一种范式 A1 A2 A3 A4 "我们建了一套 Agentic 系统"
Agentic AI = 强调智能体特性(自主规划工具反思协作)的 AI 系统范式,可由单 Agent 或多 Agent 构成。Anthropic 的《Building Effective Agents》用的是"agentic systems"统称。
Q7从 0 到 1 设计一个 Agent,你的标准设计流程是什么?高阶

推荐 8 步设计法。顺序很重要——评测要先于 Prompt,工具要先于规划范式。

从 0 到 1 标准设计流
定目标

输入/输出/成功率 SLO

定边界

能做/不能/禁止

拆任务

单 Agent / 多 Agent

定工具

JSON Schema + 权限

选范式

ReAct / Plan / Graph

设记忆

短期+长期

建评测

评测集→Prompt

上观测

Trace/Cost/反馈

常见反模式 ✗
  • 先 Prompt 再评测 → 永远在追噪声
  • 工具一上 30+ 个不分组 → 选择准确率崩
  • 没有边界声明 → 上线被薅羊毛
高 ROI 做法 ✓
  • 第 7 步前永远先做50 条评测集
  • 边界声明放 system prompt 末尾
  • 观测和评测打通同一份 trace schema
Q8什么场景下不该上 Agent,而应该用 Workflow?进阶高频

四个判定维度:任务确定性 × 步骤稳定性 × 容错成本 × 延迟敏感度。任一个偏紧,都倾向 Workflow。

决策树:Workflow / Agent / Hybrid
需求是? 步骤固定? 路径开放? SOP / 报表 / ETL 编程 / 研究 / 客服 延迟 < 500ms? 容错代价高? 是 → Workflow 否 → Chain 是 → Hybrid + 硬规则 否 → Agent ⚠ 金融下单 / 医疗诊断 / 删数据 → Workflow + 强约束 Tool,不要放权给 LLM
一句话:能用 if-else 解决的别上 Agent。Agent 的价值是"路径不可枚举",没有这个特性就是花钱买不确定性。
Q9Agent 的"幻觉"和"无限循环"是怎么产生的,工程上怎么解?高阶高频

两类故障都是"自由度太高"的副产物。幻觉是输出失真,循环是动作失控,解法在于多层约束

故障树 vs 防御层
幻觉来源
  • 训练分布外的知识
  • 提示约束不足 / 模糊
  • 工具返回错误数据
  • 上下文被截断/压缩丢失
幻觉解法(多层叠加)
  • RAG 注入权威事实
  • JSON Schema / Constrained Decoding 强格式
  • 工具结果校验 + 引用回链
  • Reflection / CoVe 二次审
无限循环来源
  • 反复调同一工具(相同参数)
  • 找不到 FINAL 停止条件
  • 工具 429 / 5xx 后疯狂重试
  • 多 Agent 互相把球踢回去
无限循环解法
  • 硬限制:max_iterations / max_tokens / 全局超时
  • 状态去重:缓存 (tool, args) 哈希,重复直接拦截
  • 显式停止:FINAL_ANSWER 标记 / is_done 字段
  • 退避兜底:连续失败 N 次切人工或返回缺省
动作去重示意(防 (tool, args) 重复)
LLM 拟动作 hash(tool,args) 缓存查重 命中? 拦截 · 强制 replan 执行 + 记录哈希 回灌 LLM
没有银弹,靠多层防御叠加:① 输入层(RAG、Schema) ② 推理层(Reflection、CoVe) ③ 执行层(去重、限速) ④ 终止层(max_steps、预算)。所有限制必须工程化为代码,不要写在 prompt 里求模型自觉。
Q10Agent 与 RPA(机器人流程自动化)有什么区别?基础

本质差异:"模仿动作" 还是 "理解意图"。RPA 是录屏式重放,Agent 是带脑子的执行者。

RPA · Agent · 融合体
RPA · 规则驱动 click type copy 录屏 / xpath / 坐标 遇 UI 改版 → 崩 ✗ Agent · 语义驱动 LLM 理解 + 推断 UI 改版? 规划替代路径 ✓ 融合 · LLM-RPA click type api Agent 出脑 · RPA 出手脚 UiPath / Automation Anywhere
维度RPAAgent融合
定位元素xpath/坐标语义/截图两者皆可
UI 变更容错
规划能力
稳定性高(不出错就一直对)
实现成本
2026 年的趋势是融合:UiPath、Automation Anywhere、影刀都已经在产品里引入 LLM 节点。RPA 提供执行的"肌肉记忆",Agent 负责"认知判断"。
02

二、LLM 与提示工程基础(11-20)

Q11Transformer 的核心结构是什么?为什么它适合做 Agent 大脑?基础

核心 = Self-Attention + FFN + Residual + LayerNorm,N 层堆叠。关键公式:Attention(Q,K,V) = softmax(QKT/√d)·V

单层 Transformer Block + Token 统一接口
Transformer Block Multi-Head Self-Attention Add & Norm Feed Forward (MLP) Add & Norm Residual × N 层堆叠 Token 统一接口 文本 JSON 代码 图像 patch tool_call Transformer 所有模态/协议 → 同一 token 序列 为什么适合 Agent 大脑 ① 长上下文 — 一次塞下对话+工具+RAG ② In-context learning — few-shot 学新协议 ③ 统一 token 接口 — 工具/代码/JSON 同构
Self-Attention 的核心是"任意位置 token 之间都可建立联系",所以模型能把"我刚才说过的需求"和"工具描述里的某个字段"关联起来——这就是 Agent 决策的基础。
Q12System Prompt / User Prompt / Assistant Prompt 三者各自什么作用?基础

三段式 = 宪法 + 输入 + 历史。理解关键:从上到下,稳定性递减、长度变化递增,所以缓存策略也是从上到下递减。

三段提示 + 缓存友好排序
System 角色 / 边界 / 格式 / 安全 — 全程不变 Tools / RAG Context 工具描述 / 检索结果 — 多轮内基本不变 Assistant history 历史回复 — 每轮追加(前缀稳定) User (last) 本轮新输入 — 完全变化 Prompt Cache 命中 变化频率 → 缓存策略 ⬆ 稳定 / 缓存友好 System Tools / RAG History User input ⬇ 变化 / 不缓存
OpenAI / Anthropic / Gemini 都做了前缀 Prompt Cache。"固定内容前置,变动内容后置"是省钱省延迟的第一性原则——首 Token 延迟可降 50%+,命中部分按 1/10 价格计费。
Q13什么是 Few-Shot / Zero-Shot / Chain-of-Thought?分别什么时候用?基础

三种"喂法",对应"不给例 / 给例 / 让它想"三档强度,token 成本递增,效果也递增。

三种 prompt 风格的输入构成
Zero-Shot [Instruction] 把下面文本翻译成英文 [Input] 今天天气真好 → 直答 token 最省 简单任务 / 想看基线 Few-Shot (1-5 例) [Inst] 翻译 例1: 你好 → Hello 例2: 谢谢 → Thanks [Input] 今天天气真好 → 仿例输出 结构化输出 / 风格统一 Chain-of-Thought [Inst] 计算: A 商品 12.5×3 Let's think step by step: 12×3=36, 0.5×3=1.5 → 37.5 答: ¥37.5 → 推理后给答 数学 / 规划 / 多步事实
方式Token 成本适用场景注意
Zero-Shot简单任务 / 看基线
Few-Shot★★固定格式 / 风格 / 私域示例质量比数量重要
CoT★★★数学 / 规划 / 多步推理小模型可能"想错"
原生 thinking★★★Claude 4.x / GPT-5 thinking不要再写"Let's think"
2026 年趋势:显式 CoT 让位于"thinking 参数"。Claude/GPT/Qwen3-thinking/DeepSeek-R1 都有原生 thinking 模式——再写 "Let's think step by step" 反而干扰,让模型自己决定怎么想。
Q14怎么写出"工程级"的 Prompt?说说你的方法论。高阶高频

推荐 RICE-O 五段式:RoleInstructionContextExampleOutput

RICE-O 五段结构与 token 占比建议
R · Role 你是 X 领域的 Y 专家 I · Instruction 动词 + 步骤;做什么 / 不做什么 C · Context 背景 / 工具描述 / 检索片段 E · Example (few-shot) 1-3 个高质量例 + 1 个反例 O · Output Contract JSON Schema / 字段 / 错误兜底 Token 占比建议 R 5% I 15% C 35-40% E 15-20% O 15% 高 ROI 实战技巧 • 用 XML / Markdown 分段(<context>...</context>) • 关键约束放末尾(近因效应) • few-shot 至少 1 个反例(你该这样答) • 输出契约必给 JSON Schema 或 BNF • Anthropic:用 <thinking> 标签隔离推理 • 同任务 prompt 入版本控制 + 评测集 每次 PR 都把变更跑回归
把 Prompt 当代码:命名规范、版本管理、单元测试、回归集 一个不少。"对着一个例子调 prompt" 一定会过拟合到这个例子。
Q15Temperature / top-p / top-k / frequency_penalty 在 Agent 场景如何设置?进阶

采样参数本质都是"从 LLM 输出概率分布里选哪个 token"的策略。Agent 不同环节对"创造力 vs 稳定性"需求不同。

温度滑尺:场景 → 建议值
0.0 0.2 0.5 0.7 1.0 工具调用 0~0.2 · top-p=1 避免幻参数 规划 / 思考 0.3~0.5 少量探索空间 摘要 / 改写 0.5~0.7 兼顾稳定与多样 创意 0.7~1.0 文案 / 故事 ↩ 确定性 ↪ 创造性
参数作用建议
temperature缩放 logits(越大越平坦)0 / 0.2 / 0.5 / 0.7 四档够用
top-p (nucleus)仅采样累计概率 ≤ p 的 token默认 1.0;想削尾巴用 0.9
top-k仅采样前 k 个候选很少独立调,多模型已弃用
frequency_penalty抑制重复Agent 循环 0.1~0.3 防"原地踏步"
presence_penalty鼓励出现新词头脑风暴 0.3~0.6
即使 temperature=0,GPU 浮点 + KV 缓存差异也会让多次调用结果不完全可复现。评测要做 N 次平均,不能只跑一次。
Q16什么是 Structured Output / JSON Mode / Constrained Decoding?进阶高频

三个强度递增的"给模型套笼子"方案。越往下越严格、合规率越高,但灵活性越低。

三档结构化强度对比
① JSON Mode(最宽) 保证:合法 JSON ✓ 不保证:字段结构 合规率 ~95% ② Structured Output / JSON Schema(推荐) 保证:字段名/类型/枚举/必填 ✓ OpenAI · Anthropic · Gemini 原生 合规率 ~99.9% ③ Constrained Decoding / Grammar(最严) 解码层 FSM/CFG 限制每个 token outlines · guidance · llama.cpp grammar 合规率 100% ⬇ 强度递增 ⬇ 灵活性递减 ⬇ 实现成本递增
{
  "type": "object",
  "properties": {
    "intent":  { "type": "string", "enum": ["refund", "complaint", "query"] },
    "order_id":{ "type": "string", "pattern": "^O[0-9]{8}$" },
    "amount":  { "type": "number", "minimum": 0 }
  },
  "required": ["intent", "order_id"],
  "additionalProperties": false
}
Agent 工程里,凡是"下一步模型输出会被代码 parse"的场景,都必须用 Structured Output。否则上线就是 JSONDecodeError 不断的故事。
Q17Prompt Caching 是什么?怎么用它降本?高阶

本质 = 复用注意力的 KV Cache。命中部分按 ~1/10 价格计费,首 Token 延迟降 50%+。这是 Agent 降本最快的杠杆。

前缀缓存命中条件:长公共前缀
第 1 次请求 · 全部按全价 System (不变) Tools 描述 (不变) RAG 文档 User 问题 ↓ 写入 KV Cache(Anthropic 5 min / 1h TTL) 第 2 次请求 · 前缀命中(同会话或同模板) System ✓ 命中 Tools ✓ 命中 RAG ✓ 命中 新问题 → 前缀按 1/10 价格 · 仅 User 段按全价 ⚠ 反模式:把变化内容放在前面 User System Tools → 第一个 token 不同 → 缓存全部失效
✓ 缓存友好
  • System / Tools / 大段知识 前置
  • User / 检索结果 后置
  • Agent 循环只追加尾部,不改前缀
  • Anthropic 显式 cache_control 标记
✗ 缓存杀手
  • 把时间戳 / UUID 放在前缀
  • 每轮重排 messages 顺序
  • RAG 把检索拼到 system 顶部
  • 动态拼接工具描述
Anthropic 默认 5 分钟 TTL,可显式标记 1 小时(额外费用换更大窗口)。OpenAI 自动缓存 ≥ 1024 token 的相同前缀。多轮 Agent 一定要让前缀稳定。
Q18如何处理超长上下文?说说常见的上下文压缩策略。高阶

5 种主流策略,本质都是 "用更少的 token 装下足够多的信息"。可叠加使用。

5 种压缩策略对比
① Sliding Window T-2 T-1 T 保留最近 K 轮,最简单 长程上下文会丢 ② Summarization 老对话 (压缩) 摘要 每 N 轮 LLM 压成摘要 摘要丢细节 ③ RAG over history 历史全量向量化 → 按 query 召回 需要好的检索 ④ Hierarchical Memory(MemGPT 流) 原文(冷) 摘要(温) 关键事实(热) 三档存储,按需 paging 进上下文 超长任务首选 ⑤ LLMLingua / Selective Context 长 prompt 压缩 prompt 5-10× 小模型识别低信息 token 删掉 可能损失隐含语义
实战选型:日常对话 = 滑窗 + 摘要;研究/代码任务 = RAG over history;超长任务(百万 token) = 分层记忆 + 任务图。可叠加。
Q19说说你对 Token / Tokenizer / BPE 的理解,为什么这对 Agent 工程师重要?进阶

Token 是模型处理的最小单位。BPE/WordPiece/SentencePiece 把字符串切成可学习子词。Agent 工程师必须懂,因为它直接关联成本 / 上下文 / 安全

字符串如何被切成 token
英文 · "Tokenization is fun" Token ization is fun → 4 tokens · 平均 1 单词 ≈ 1.3 token 中文 · "智能体很有趣" → 6+ tokens · 1 汉字 ≈ 1.5-2 token(视模型) 代码 · "def f(x): return x*2" def f ( x ): return x *2 → 代码缩进/空格也占 token ⚠ 攻击载体 · 稀有 token / Unicode 混淆 "𝓘𝓰𝓷𝓸𝓻𝓮 previous instructions..." → 编码后绕过关键词过滤器
💰 成本视角

1 汉字 ≈ 1.5-2 token · 1 英文词 ≈ 1.3 token · 用 tiktoken / 厂商 SDK 估月度账单

📐 上下文视角

窗口以 token 计;要预留 output / tool 描述 / 思考预算的空间

🛡 安全视角

稀有 token、Unicode 同形字、emoji 编码是 prompt injection 高频载体

Q20怎么评估 Prompt 的好坏?有没有量化方法?高阶

核心原则:"Prompt 是代码,必须有测试"。流程化 4 步 + 4 类指标 = 可量化的迭代闭环。

Prompt 评测闭环("先测试 → 后改 prompt")
① 建评测集 50-200 条 正常+长尾+对抗 ② 定指标 准确率 / JSON合法 LLM-as-Judge ③ 跑 A/B 新旧 prompt 对比 置信区间不重叠 ④ 上回归 PR 触发 LangSmith / Phoenix 回归失败 → 进对抗集 → 更新评测集 准确率 规则可判定的任务 合规率 JSON / 工具调用 LLM-as-Judge 主观质量 1-5 分 人工抽检 校准 Judge + 长尾
最大避坑:不要"对着一个例子调 Prompt"——必然过拟合到这个例子,线上效果波动巨大。先有评测集,再写 prompt。
03

三、Planning 与 Reasoning(21-30)

Q21什么是 ReAct?写一个最小可运行的 ReAct Prompt。基础高频

ReAct = Reasoning + Acting。模型在 ThoughtActionObservation 三种 token 之间交替,把"决策过程"显式化为可被代码解析的 token 流。

ReAct 一轮完整 trace("巴黎天气"示例)
User: 巴黎今天天气怎么样?要不要带伞? Thought (think) 我需要先查天气 Action (do) get_weather("Paris") Observation (see) {"temp":18,"rain":"yes"} Thought 下雨 → 建议带伞 Final Answer 巴黎 18 ℃ 有雨,建议带伞。 代码层做什么 ① 解析 Action 行 → 调用真实工具 ② 把 Observation 拼回 prompt ③ 检测 Final Answer 退出循环 ④ max_iterations / max_tokens / 去重哈希等限制由代码强制
You can use the following tools:
- search(query): web search
- calc(expr):    math

Use this format:
Thought:  ... what to do next
Action:   tool_name(arg)
Observation: <tool result>
... (repeat Thought / Action / Observation)
Thought:  I now know the answer.
Final Answer: ...
ReAct 是 2022 年提出的、至今最稳定的"显式推理 + 工具调用"范式。OpenAI/Anthropic 的 Function Calling = ReAct 的结构化版本(Action 用 JSON 而非自由文本,更可靠)。
Q22ReAct 与 Plan-and-Execute 的区别?各自适用什么场景?进阶高频

核心差别:"步步为营 vs 一次画图"。前者灵活高 token,后者高效但僵化。混合模式(Plan 出大纲 + 子任务跑 ReAct)是生产首选。

ReAct · Plan-Execute · Hybrid
ReAct · 边想边做 T₁ A₁ O₁ T₂ A₂ O₂ T₃ A₃ err T₄ A₄ O₄ ✓ 决策灵活 · 自纠错 ✗ token 高 · 错一步雪崩 适合:研究 / 开放探索 / 客服 Plan-and-Execute · 先画图 ① Plan: A→B→C→D 一次性出完整计划 A B C D ✓ token 省 · 可并行 ✗ 错估前提 · 计划僵化 适合:流水线 / 报告生成 / ETL Hybrid · 推荐 Plan (大纲) ABC A ↻ReAct B ↻ReAct C ↻ReAct ✓ 大局稳 + 局部灵 代表:Claude Code · MetaGPT LangGraph + Subagent
Q23什么是 Reflection / Reflexion?怎么用它提升效果?进阶

"让模型自我审查"。Reflection = 单次审查;Reflexion = 把失败教训写进记忆,跨轮可用。原论文在 HumanEval、HotpotQA 提升 10-20%。

Reflection vs Reflexion
Reflection · 单次自审 Draft Critique ↑ 让模型挑自己输出的毛病 Revise Final 代价 ~2x token · 单条任务有效 Reflexion · 带记忆 尝试 t 评估失败 写入 Memory "这次因为 X 失败" 下一轮读取 尝试 t+1(带教训)→ ✓ 代价 2-3x · 跨轮持续提升
通常用于高价值、可离线的任务:代码生成、论文写作、复杂报告。不适合低延迟在线场景——延迟会乘 2-3 倍。
Q24Tree of Thoughts(ToT)和 Graph of Thoughts(GoT)是什么?高阶

把"线性 CoT"升维成"搜索树/图":每一步生成多个候选,按评分剪枝。表达力强但 token 爆炸。

CoT → ToT → GoT 的演化
CoT · 线性 1 2 3 A 一条路径 ToT · 树搜索 root A B C BFS/DFS + 评分剪枝 N 倍 token GoT · 图结构 A B M A' 允许合并 / 回溯
生产中很少直接上 ToT/GoT,token 爆炸是硬伤。轻量替代:Best-of-N + Self-Consistency + LLM-as-Judge——效果接近,成本可控。
Q25什么是 Self-Consistency?和 Best-of-N 有什么关系?进阶

两者都属于"多次采样 + 选最优"家族。Self-Consistency 用投票,Best-of-N 用评分器——前者是后者的特例。

同一 prompt × N 次采样 → 不同聚合策略
同一 Prompt (temp=0.7) 答: 42 答: 42 答: 41 答: 42 答: 43 Self-Consistency · 多数投票 42 ×3 41 ×1 43 ×1 → 选 42(频次最高) 前提:答案离散可统计 Best-of-N · 评分器 0.81 0.78 0.52 0.94 ★ 0.41 → 选 0.94 的样本(reward model / LLM Judge) 通用 · 适合自由文本输出
关系:Self-Consistency 是 Best-of-N 的特例(评分函数 = 频次)。生产里多数业务输出不是单一答案,Best-of-N + LLM-as-Judge 更通用。
Q26什么是 Hierarchical / 分层 Agent?什么场景必须用?高阶

"大脑分层"——高层 Planner 决定做什么,低层 Executor 决定怎么做。任务超过 10+ 子步骤、跨多领域时必须分层,否则上下文爆炸 + Plan 漂移。

分层架构(Lead + Workers + 独立上下文)
Lead Agent 理解 / 路由 / 验收 Research search/scrape Code edit/run Write draft/edit 独立工具/Prompt/上下文 独立工具/Prompt/上下文 独立工具/Prompt/上下文 共享状态(Postgres / KV / LangGraph State)
✓ 必须分层的信号
  • 子任务 > 10 步
  • 跨多个领域 / 工具集
  • 不同子任务对模型/思考预算需求不同
  • 单 Agent 上下文已超 128k
✗ 不要分层
  • 子任务 < 3 步
  • 子任务高度相似(一个 Worker 能干)
  • 对延迟极敏感(分层多一跳)
代表实现:MetaGPT(角色化 SOP)、Claude Code SubAgent(按需派生)、AutoGen GroupChat(讨论型)、LangGraph + Send API(Map-Reduce 风格)。
Q27什么是 Chain-of-Verification(CoVe)?进阶

Meta 提出的事实校验范式:模型先答 → 自己出验证问题 → 逐题查证 → 修订答案。在事实型问答上能显著降幻觉。

CoVe 四步流程
① 初答 "乔布斯生于 1956" (可能错) ② 出验证题 "乔布斯生年?" "工作公司?" ③ 逐题查证 独立 LLM 调用 + RAG 检索 ④ 修订 "1955-02-24" ✓ 修正完成 关键:每个验证问题独立调用,避免上下文污染 + RAG 注入权威来源 → 最大化降幻觉效果
与 RAG 天然契合:每个验证题触发一次检索,把检索结果作为校验依据。代价:4× token 延迟,只用于高价值事实型问答
Q28怎么判断模型该"思考"还是"直答"?如何控制 thinking 预算?高阶

2026 年主流模型(GPT-5 thinking / Claude 4.x extended thinking / Qwen3-thinking / DeepSeek-R1)都支持显式思考。关键不是"开 vs 关",而是"按任务难度调档"

Thinking 预算分档(按任务难度选)
off / minimal ~ 0 token low ~ 1k token medium ~ 4k token high ~ 16k token max (开放) ⚠ 长尾爆炸 事实问答 分类 / 路由 工具选择 短答案 规划拆解 摘要 / 改写 代码生成 数学推理 研究 / SWE 长链推导 建议:始终设 thinking_budget_tokens 硬上限,防长尾
Agent 主循环里,每一步是否思考可由 Router 单独决定——比如 LangGraph 的 thinking_router 节点。简单步骤直答省钱,复杂步骤开 high 提质。
Q29怎么处理"模型不会规划长任务"的问题?高阶

"长任务规划漂移"的本质是:模型记不住自己最初的目标。解法是把规划从模型脑里搬到外部 state

四个抗漂移杠杆
① 外部 Plan 持久化

把 plan 写进 Postgres / LangGraph State,每步只读相关子任务条目,避免上下文里全局漂移。

② 子目标分解

模型先出 milestones(M1/M2/M3),每个 milestone 再触发子 Agent,缩小作用域。

③ 失败回退 + Replan

每步完成自检;未达成 → 触发 replan 节点(LangGraph 条件边),不让错误传染。

④ Human-in-the-loop

关键节点(金额、删除、外发邮件)暂停 → 等用户确认 → 恢复执行。

长任务执行状态机示意
Plan Execute ok? Verify Milestone Next Replan / HITL
Q30如何评测一个规划模块的好坏?高阶

规划评测是多维向量,不能只看"是否解决"。下面 5 个维度组成一个雷达图就是规划质量画像。

规划质量五维雷达
完成率 步数效率 恢复能力 Plan 一致性 工具准确率 ① 任务完成率 (Task Success Rate) 终态是否正确 · 业务最关心 ② 步数 / Token 效率 同任务用多少 step / token,越少越好 ③ 恢复能力 (Robustness) 注入失败 / 超时后能否自纠正 ④ Plan 一致性 执行过程是否偏离初始计划 ⑤ 工具调用准确率 选错工具 / 参数错位的比例 公开基准: AgentBench / GAIA / WebArena / SWE-bench τ-bench / OSWorld / AppWorld
04

四、工具调用 & Function Calling & MCP(31-40)

Q31Function Calling 是什么?OpenAI 与 Anthropic 的实现有何差异?基础高频

本质 = 把"调用哪个函数 + 参数" 作为模型的结构化输出。SDK 拿到后调用真实函数,把结果作为新消息回灌——这就是 Agent 工具循环的标准范式。

Function Calling 的请求 / 响应循环
① 请求 messages + tools ② 模型决定调工具 tool_call(name,args) ③ SDK 执行函数 真实代码 ④ 结果回灌 tool_result 回到模型 · 决定是否继续调工具 / 直接回答 OpenAI · tool_calls • 一条消息 role="assistant",tool_calls=[...] • 工具结果 role="tool", tool_call_id=... • strict: true → JSON Schema 100% 合规 • tool_choice = "auto" / "required" / name 默认并行调用 Anthropic · tool_use blocks • content 是 block 数组:text / tool_use / thinking • 结果用 user 消息 + tool_result block • 支持 thinking blocks 与 tool 并行 • disable_parallel_tool_use 关闭并行 Claude 4.x 思考 + 工具并行
Q32怎么写一份让 LLM"用得对"的工具描述?高阶高频

工具描述本质是给模型看的 API 文档。四个高 ROI 点把"能用"提升到"用得对"。

优劣对比:同一个 search 工具
糟糕描述
{
  "name": "helper_1",
  "description": "搜索",
  "parameters": {
    "q": {"type": "string"}
  }
}
  • 名字无语义
  • 边界不清晰
  • 参数无示例 / 单位
合格描述
{
  "name": "search_internal_kb",
  "description": "在内部知识库(HR/IT政策)做语义检索。
    适用:员工提问的政策问题。
    不适用:实时数据、外部新闻。",
  "parameters": {
    "query":   {"type":"string", "example":"年假天数"},
    "top_k":   {"type":"int", "default":5, "max":20},
    "lang":    {"type":"string", "enum":["zh","en"]}
  },
  "errors": {"INVALID_LANG":"lang 必须是 zh/en"}
}
工具数 vs 选择准确率(30 是分水岭)
5 15 30 60 100+ 工具数 95% 75% 55% ⚠ 30 工具阈值 → 用 Router 分组 / 动态加载
当工具集 > 30,必须分组:① Router Agent 先选工具组 ② 子 Agent 拿到该组工具再行动。Claude Code 的"按需 ToolSearch"就是这个思路。
Q33什么是并行 Function Calling?什么时候启用?进阶

同一轮生成多个独立 tool_call,并行执行。优势:一次回合搞定多事情,减少 round-trip。前提:工具间无依赖。

串行 vs 并行
串行 · 4 个回合(慢) LLM 天气 LLM 股价 LLM 新闻 总耗时 ≈ 4 × (LLM+tool) 并行 · 2 个回合(快) LLM 天气 股价 新闻 LLM 总耗时 ≈ 2 × LLM + max(tools) ⚠ 何时关掉并行 ① 工具间有顺序依赖 先 search 拿 id → 再 get_detail(id) ② 写入类操作:  create + update 并发可能竞态 ③ 限流敏感外部 API:  突发 N 并发 → 429 → Anthropic: disable_parallel_tool_use → OpenAI: parallel_tool_calls=false
Q34MCP 是什么?它解决了什么问题?基础高频

MCP(Model Context Protocol)= Anthropic 提出、已成行业事实标准的开放协议。最大价值是把 M×N 集成爆炸收敛为 M + N

没有 MCP(M×N) vs 有 MCP(M+N)
⚠ 没有 MCP · M × N 集成 Cursor Claude Desktop VS Code LangChain GitHub Slack Postgres Browser 4 客户端 × 4 工具 = 16 个集成 N 个客户端 × M 个工具 = N×M ✓ 有 MCP · M + N 集成 Cursor Claude Desktop VS Code LangChain MCP protocol GitHub Srv Slack Srv PG Srv Browser Srv 4 + 4 = 8 个适配点 N 客户端 + M 服务 = N+M 附加价值 统一权限 / 审计 / 订阅 / Sampling / 进度回传 / OAuth · 工具能力跨 IDE / CLI / 桌面 App 复用
Q35MCP 的核心概念有哪些?Tool / Resource / Prompt 分别什么用?进阶

记住一个核心区分:谁来决定加载。Tool 由模型主动调用,Resource 由用户/客户端决定,Prompt 由用户唤起,Sampling 由服务器反向请求客户端。

MCP 五大原语:按"控制权归属"分类
模型主动 客户端 / 用户 服务器反向 Tool 类似 Function Call e.g. search_web, run_sql model-controlled Resource 只读上下文资源 文件 / DB 行 / API doc client / user-controlled Sampling Server 借 Client 的 LLM 推理 双向通信 server-initiated Prompt 服务器预定义模板 e.g. /summarize, /translate user-invoked Roots / Elicitation 声明工作目录边界 向用户索取额外输入 capability negotiation
新手最易混的两点:① Tool ≠ Resource — 前者是"动作",后者是"上下文";② Prompt 是用户主动唤起(如 / 命令),不是 system prompt。
Q36MCP 的传输层有哪几种?怎么选?进阶

三种传输,差别在本地 vs 远程 / 单向 vs 双向

三种传输层 + 选型决策
stdio · 本地子进程 Client Server stdin / stdout 双向 ✓ 零网络开销 ✓ 进程级隔离 ✗ 不能跨机器 Streamable HTTP · 远程 Client POST SSE 流 Server HTTP/1.1 + SSE ✓ 跨机器 / 浏览器 ✓ 支持 OAuth 2.1 → SaaS / 多租户首选 WebSocket (实验) Client Server 长连接 / 双向流 ✓ 实时性高 ✗ 中间件代理弱 规范仍在演进
实战经验:开发期用 stdio 迭代快、调试方便;生产远程用 Streamable HTTP + OAuth 2.1 + 限流。WebSocket 暂时观望。
Q37自己实现一个 MCP Server 的最小骨架是什么?进阶

Python 用 mcp 官方 SDK(FastMCP 风格),15 行代码就能跑起来。

from mcp.server.fastmcp import FastMCP

mcp = FastMCP("my-tools")

@mcp.tool()
def add(a: int, b: int) -> int:
    """两数相加。a/b 为整数,返回它们的和。"""
    return a + b

@mcp.resource("file:///{path}")
def read_file(path: str) -> str:
    """读取本地文件的纯文本内容。"""
    return open(path).read()

@mcp.prompt()
def summarize(text: str) -> str:
    """总结一段长文。"""
    return f"请用 3 句话总结:\n{text}"

if __name__ == "__main__":
    mcp.run()                                       # stdio
    # mcp.run(transport="streamable-http", port=8080)  # 远程
SDK 自动做了什么
Python 函数 def add(a: int, b: int) 类型注解 + docstring → 自动生成 JSON Schema MCP tool 定义 客户端直接可用 ⚠ 注意 返回值必须 JSON 可序列化 · docstring 是工具描述 · 复杂参数用 Pydantic Model
Q38工具调用的失败 / 超时 / 限流怎么处理?高阶高频

工具调用是 Agent 故障的"前沿"。四层防御一个都不能少:分层超时 / 重试退避 / 结构化错误回传 / 降级兜底

分层超时金字塔
单次调用 5-30s 单步循环 1-2 min 整任务硬上限 5-15 min
错误类型典型例子策略回传给 LLM?
网络抖动TCP reset / DNS指数退避重试 3 次
5xx 服务错503 / 504指数退避 + 备用 endpoint
限流 429Rate limit exceeded令牌桶 + 等待队列否(防死循环)
4xx 参数错InvalidArgument不重试是,让模型改参数
业务异常OrderNotFound不重试是,让模型换策略
超时Read timeout重试 1 次后兜底是(带降级标记)
最容易踩的坑:把 429 直接回灌给模型——模型看到"再试一次"会立即再调,瞬间触发熔断。限流要由代码消化(等待 / 排队),不要让 LLM 看见。
Q39怎么给工具加权限与审计?高阶

"四层防线 + 审计闭环"。每一层独立、可单独审计,缺一层都可能被绕过。

工具调用四层防线
LLM ① 白名单 能力裁剪 ② 参数校验 Schema + 业务 ③ 危险动作 HITL 人工 ④ 真实执行 外部 API / DB / 文件 审计总线 · traceId 贯穿所有层 每层入参/出参/耗时/拒绝原因/调用人/时间 → 持久化(OTel + 数据库) ⚠ 危险动作示例:transfer · delete · send_email · drop_table · execute_shell
Q40如何让 Agent"知道工具不存在"或"放弃执行"?进阶

模型默认不会主动放弃——它倾向于"乱造一个动作交差"。给它合法的退出路径是关键。

三个让 Agent 优雅放弃的抓手
① 边界声明

System prompt 末尾明确:"如果超出工具范围,请直接说"我无法完成",不要尝试创造新工具。"

② Fallback 工具

给模型几个"合法出口"工具:ask_user(q)escalate(reason)give_up(reason)。模型自然会选它们而不是硬造动作。

③ 预算感知

每步把"已用 X 步 / 预算 Y 步、已用 Z token"塞回 prompt,模型会主动收敛、提早 give up。

[System Prompt 末尾]
=========================
你的能力边界:
- 你可以读取/搜索代码、执行 bash、修改文件
- 你不能:访问内网生产数据库 / 发送邮件 / 修改 CI 配置

如果用户请求超出能力:
1) 调用 ask_user(question)  追问澄清
2) 调用 escalate(reason)    升级给人类
3) 直接回答:"这超出我的能力,我无法完成"

不要尝试发明不存在的工具名。
05

五、RAG 与知识检索(41-50)

Q41RAG 是什么?端到端流程包含哪些环节?基础高频

RAG = Retrieval-Augmented Generation:用检索结果增强生成。完整链路分离线侧(建库)在线侧(查询)

RAG 端到端流水线(离线 + 在线)
📦 离线 · 建库 数据接入 清洗去噪 Chunking Embedding Vector DB ⚡ 在线 · 查询 用户 Query 查询改写 向量召回 BM25 召回 融合 + Rerank LLM 生成 引用 读取 ⚠ 各环节对最终效果的贡献(经验) Chunking 25% Embedding 20% Rerank 20% 改写 15% Hybrid 10% Vector DB 5% 其他 5% "换个向量库就能起飞"是误区——基本盘在 Chunking + Embedding + Rerank
Q42怎么做合理的文档切片(Chunking)?进阶高频

切片质量直接决定召回上限。"按字数硬切" vs "按语义切" 的效果差距可达 20-30%。

5 种 Chunking 策略
① 固定长度滑窗 chunk 1 chunk 2 chunk3 512-1024 token + 10-20% overlap ② 结构感知 # 标题 1 ## 子标题 按 Markdown / DOM / PDF 段落切 ③ 语义切片 语义突变处 相邻句子 embedding 距离突变切 ④ 父子切片(生产推荐) Parent (1024 tok · 完整段落) 注入 prompt 的内容 child 1 child 2 child 3 小 chunk 检索 → 命中后回传对应 Parent ⑤ 命题切片(最细) 原文:"2020 年苹果发布 M1 芯片" → LLM 拆为原子事实: • 苹果在 2020 年发布了芯片 • 该芯片名为 M1 最适合:FAQ / 法律条文
策略实现成本召回质量适用
固定滑窗★★★原型 / 杂混内容
结构感知★★★★★★技术文档 / 规章
语义切片★★★★★★★叙事 / 长报告
父子切片★★★★★★★生产首选
命题切片★★★★★★★★★FAQ / 法条 / KG
Q43Embedding 模型怎么选?BGE、text-embedding-3、Cohere、Voyage 各有什么特点?进阶

五个选型维度:语种 / 任务 / 长度 / 成本 / 私有化。先看 MTEB/C-MTEB 排行,再用自有评测集小样本对比。

主流 Embedding 模型定位
成本 → 质量 → BGE 开源 / 中英 BGE-M3 稀疏+稠密 OpenAI 3-large Matryoshka Voyage-3 领域版强 Cohere v3 英文搜索 GTE/E5
BGE-M3

开源 / 中英多语 / 稠密 + 稀疏 + ColBERT 多向量。私有化首选

OpenAI 3-large

Matryoshka 维度可截断(256/1024/3072)。预算够 + 省心场景。

Cohere v3

区分 search_document / search_query,英文搜索强。

Voyage-3

长上下文 32k;领域版 code/law/finance 表现亮眼。

GTE / E5

性价比高;自训私有库的稳定选择。

Q44向量数据库怎么选?Milvus / Chroma / Qdrant / pgvector / Elasticsearch 各自适合什么?进阶高频

选向量库主要看数据规模,其次看是否需要复杂过滤 / SQL 联表 / 多模态

按规模决策树
100k 1M 10M 100M 1B+ 小规模 < 1M pgvector Chroma 原型 / SQL 联表 中等 1M ~ 100M Qdrant / Weaviate Elasticsearch + dense payload 过滤 / Hybrid 友好 大规模 > 100M Milvus / Zilliz Vespa 分布式 / 多副本 向量规模
优势典型场景
Chroma几行代码起步原型 / PoC
pgvectorACID + SQL 联表已有 PG 的产品
Qdrantpayload 过滤强 / Rust多条件过滤 RAG
Weaviate模块化 + GraphQL多模态
ElasticsearchBM25 + 向量混合老搜索升级
Milvus / Zilliz分布式 / 亿级企业大规模
Q45HNSW、IVF、SCANN、DiskANN 这些索引算法是什么?高阶

四大主流 ANN(近似最近邻)索引。所有索引都在做"召回率 ↔ 延迟 ↔ 内存"的三角形权衡。

召回率 / 延迟 / 内存 三角权衡
召回率 低延迟 省内存 HNSW 高召回 + 快 / 内存大 IVF-PQ 省内存 / 召回略低 SCANN CPU 极致快 DiskANN SSD / 十亿级
算法结构构建查询内存常用场景
HNSW分层小世界图大多数 RAG(默认)
IVF (-PQ)聚类倒排+量化大规模 / 内存敏感
SCANN非对称量化极快Google / CPU 部署
DiskANNSSD 图索引磁盘十亿级单机
Q46为什么仅向量检索不够,要做 Hybrid / 多路召回?高阶高频

向量擅长"语义相近但词不同",对精准实体(人名、编号、产品ID、SKU)反而弱。BM25 正好相反。两者互补 → Hybrid 召回。

Hybrid 召回:稠密 + 稀疏 → RRF → Rerank
User Query 向量召回 (dense) 语义相近 · top-K 20-50 BM25 / 关键词 (sparse) 精准实体 · top-K 20-50 融合(RRF / 加权) score = Σ 1/(k+rank) Cross-Encoder Rerank → top-N (5~10) 入 prompt
查询类型向量检索BM25Hybrid
"如何注销账户"★★★★★★★★
"订单 #2026-A88"★★★★★★
"乔布斯演讲"★★★★★★★★★
"型号 X-9527"★★★★★★
RRF(Reciprocal Rank Fusion)是默认融合方案:score = Σ 1/(k + rank_i),k 通常取 60。无需调参、稳健、跨场景表现好
Q47什么是 Rerank?为什么效果显著但很多团队懒得做?进阶

Rerank 用Cross-Encoder 把 query + 单条 doc 一起喂入模型计算精细相关性。比 embedding 相似度更准。RAG 单 trick 中 ROI 最高

Bi-Encoder(召回) vs Cross-Encoder(精排)
Bi-Encoder · 召回 query → vec doc → vec · 两次独立编码 → 余弦 ✓ 文档可预编码、批量快 ✗ 上下文交互弱 用途:在百万文档里找 top-50 Cross-Encoder · Rerank [CLS] query [SEP] doc → Transformer → score query 与 doc 同时输入 ✓ 上下文充分交互,精度高 ✗ 每对 query-doc 都要算 用途:top-50 精排 → top-5
不做 Rerank 的原因:多一次 GPU 调用,+50-200ms 延迟。落地优化:① 异步预热 ② 自建 GPU 服务化 ③ 只对 top 50 rerank、输出 top 5 ④ 用小尺寸 reranker(bge-reranker-base / Cohere rerank-3-lite)。
Q48查询改写(Query Rewrite)有哪些技巧?进阶

用户的原始 query 通常对检索不友好(指代、模糊、口语化)。查询改写是检索前的"润色"环节。

4 种查询改写技巧
① Multi-Query(多查询展开) "如何注销" "账户删除流程" "销户步骤" "取消使用账号" ② HyDE(假想答案) query LLM 假想答 vec→检索 用"假想答案"的 embedding 去查 缓解 query/doc 表达不一致 ③ Step-back(先抽象再具体) Q: "iPhone 15 Pro 最大充电功率?" → Step-back: "iPhone 充电规格在哪查?" → 检索官方文档 → 回答具体问题 先找文档范围,再精确回答 ④ Contextual Rewrite(历史改写) 上轮: "Foo 是什么?" 本轮: "它怎么用?" ✗ → 改写: "Foo 怎么用?" ✓ 解决指代消解
Q49RAG 怎么评测?说说你的评测指标体系。高阶高频

三层评测:检索 → 生成 → 业务。任何一层出问题都会拖累整体效果,但定位故障源需要每层都有独立指标。

RAG 三层评测指标
① 检索层 Recall@K 前 K 个里多少标注 doc 命中 MRR 第一个命中位置的倒数 nDCG@K 考虑相关度分级的累积增益 需要标注集 100-500 (query, relevant_docs) ② 生成层 Faithfulness 答案是否完全基于检索内容 Answer Relevance 答案是否真的回答了问题 Context Precision/Recall 检索结果的精确率/召回率 工具 RAGAS / DeepEval / TruLens ③ 业务层 用户解决率 "问题已解决" 比例 转人工率 未解决转给人工的比例 引用点击率 用户点击引用的频次 首响时间 P50 / P95 人工 SxS 100-200 例
Q50什么是 Agentic RAG?和经典 RAG 有啥区别?高阶

把 RAG 从"一锤子买卖"升级为"可被 Agent 多次调用的工具",循环 Retrieve → Reflect → Retrieve 直到足够。

经典 RAG vs Agentic RAG
经典 RAG · 一次直答 query retrieve generate ✓ 快 · 便宜 ✗ 多跳问答失败 ✗ 检索不到就胡说 Agentic RAG · 循环 Agent LLM retrieve() reflect() enough? answer ✓ 多跳问答 / 自校验 ✗ 延迟 + 成本 2-5×
生产里的常见模式:"先一次普通 RAG,置信度(Faithfulness/Self-check)不足才升级 Agentic"——简单问题走快路径,难题再花钱。
06

六、Memory 记忆系统(51-60)

Q51Agent 的"记忆"分哪几种?基础

类比认知科学,Agent 记忆分"按时长""按内容"两组分类。两个分类正交,不要混淆。

两种分类视角
按时长 Working Memory · 短期 单次会话上下文(prompt 内) Long-term · 长期 跨会话(向量库 / KV / RDB) 按内容 Semantic · 语义 事实性知识 / 用户偏好 Episodic · 情景 "什么时候做了什么" Procedural · 程序性 技能 / 工具模板 / SOP 两个维度正交:长期 × 内容 = 6 种细分 长期语义 = 用户偏好 · 长期情景 = 历史会话日志 · 长期程序性 = 流程模板库
Q52怎么实现一个最小可用的对话记忆?基础

最小可用 = 滚动窗口 + 阈值摘要 + 持久化。50 行代码足够。

最小记忆链路
User input 取最近 N 轮 Redis / PG LLM 调用 messages = [sum, ...recent] 写回 (session_id, ts) 追加新一轮 触发条件:历史 token > 阈值 → 调用 summarize_chain 把超出窗口的老内容压成摘要 → 摘要存进 session.summary 字段;新内容继续滚动追加 索引必备:(session_id, ts) · 方便回放与排错
def chat(user_input, session_id):
    history = redis.lrange(f"sess:{session_id}", -20, -1)  # 取最近 N 轮
    summary = redis.get(f"sess:{session_id}:summary") or ""
    messages = [{"role":"system","content": SYSTEM}, {"role":"system","content": summary},
                *history, {"role":"user","content": user_input}]
    reply = llm.chat(messages)
    redis.rpush(f"sess:{session_id}", json.dumps({"u":user_input, "a":reply}))
    if count_tokens(history) > 8000:                   # 超阈值 → 压缩
        new_summary = llm.summarize(history[:-10])
        redis.set(f"sess:{session_id}:summary", new_summary)
        redis.ltrim(f"sess:{session_id}", -10, -1)
    return reply
Q53长期记忆怎么写入?什么时候写、写什么?进阶

"什么都存"是新手最大坑——信噪比骤降,召回时混杂大量垃圾。"按价值过滤"是核心原则。

写入策略矩阵:何时写 / 写什么
✓ 应该存
  • 偏好:用户习惯、口味、沟通风格
  • 事实:用户身份 / 业务实体
  • 长期目标:项目、KPI、deadline
  • 失败教训:上次为什么错了
  • 流程模板:可复用的工作流
✗ 不要存
  • 原始对话(量大噪音多)
  • 临时上下文(解决完即过时)
  • PII / 敏感信息(合规风险)
  • 已经在 KB 里的公共知识
  • 模型输出的废话 / 客套
三种触发时机
① 显式工具触发 tool: memorize(content) LLM 自主决定 最灵活 ② 规则触发 "记住…" / 关键词 偏好检测分类器 最稳定 ③ 会话末摘要 结束时 LLM 总结 事实 + 偏好 + 待办 最稳产出
Q54长期记忆怎么读取?进阶

"召回 + 排序"两步走,类似 RAG。新鲜度 / 相关性 / 重要性 三者加权排序。

读取链路 + 排序公式
本轮 query ① 召回 embedding + 标签过滤 ② 排序 综合分数 ③ 注入 prompt top-K 条 score = α · relevance + β · recency + γ · importance α≈0.5(相关性)· β≈0.2(时间衰减 e^(-t/τ))· γ≈0.3(LLM 打分 1-5) 前置 retrieve 每轮自动召回 → 拼进 prompt 工具触发 tool: retrieve_memory(q) 按需
Q55MemGPT / Letta 的核心思想是什么?高阶

把 LLM 当操作系统上下文 = 主存,外部存储 = 硬盘。Agent 自己用工具 paging in/out 数据,从而突破上下文限制。

MemGPT 三层记忆类比 OS
Core Memory ≈ CPU 寄存器 persona + user 永远在 prompt 里 Recall Memory ≈ 内存 / 主存 近期对话历史 按需 paging in Archival Memory ≈ 硬盘 / SSD 向量库长期事实 archival_search() LLM (CPU) 通过工具调度记忆 关键工具 API core_memory_append() · recall_memory_search() · archival_memory_insert() · archival_memory_search()
Letta 是 MemGPT 团队的商业化产品,把 MemGPT 思想做成"agent server"。提供 REST API、UI、多 Agent,2026 年是长程对话场景的主流选择之一。
Q56怎么避免记忆"越积越脏"?高阶

"记忆熵增"是长期 Agent 的天敌:重复 / 冲突 / 过期 / 跨域污染。需要主动维护。

记忆生命周期:写入 → 维护 → 淘汰
① 定期合并 同主题多条 → LLM 合并为 1 条 ② 冲突解决 新 vs 旧 覆盖 / 合并 / 标矛盾 ③ 过期淘汰 低频 + 老 + 不重要 归档 / 删除 ④ 分桶隔离 user / workspace / skill 分库 过期淘汰公式 keep = importance > 0.5 · OR last_access < 7d · OR access_count > 3 否则进归档区 30 天,仍无访问则删
Q57对话历史的"摘要 + 检索"双轨制怎么落地?进阶

双轨制 = 摘要保宏观连贯 + 检索保精准引用。两者并行注入 prompt,相互补强。

摘要轨 + 检索轨 并行架构
原始对话历史 摘要轨 每 N 轮 → LLM session.summary "我们在 2 月讨论了 X 方案, 3 月切到 Y,待办 Z..." 检索轨 消息级 embedding vector DB 本轮 query → 检索 top-k "用户在 2/15 说过:..." 合并注入 prompt
Q58多用户场景下记忆隔离怎么做?高阶

多租户场景"记忆串了"=数据安全事故。必须从代码层强制隔离,不能依赖 prompt 自觉。

三级隔离防线
① 字段过滤 所有 read/write 带 tenant_id / user_id 向量库 payload 过滤 where user_id = ? 必须代码强制 ② 命名空间 collection / namespace 物理切分 memory_{tenant_id} 独立索引 医疗/金融用独立实例 ③ 审计 + 单测 每次 query 写日志 (who, what, when) 越权检测单元测试 test_user_a_cannot_see_b 合规审计可查
千万不要把"记忆只属于用户 A"写在 prompt 里求模型遵守——一旦 prompt injection,模型会泄露其他用户记忆。必须在数据访问层物理隔离。
Q59知识图谱式记忆(KG Memory)与向量记忆怎么选?高阶

不是 OR,是 AND。向量擅长模糊语义,KG 擅长精确关系。生产用法是"向量主存 + KG 处理实体关系子集"。

向量 vs KG · 同一份知识两种表示
向量记忆 "乔布斯创立了苹果" 语义点 ✓ 模糊语义 / 便宜 / 易扩展 ✗ 多跳关系弱 / 不可解释 知识图谱(KG) 乔布斯 苹果 创立 M1 芯片 发布 ✓ 精确多跳 / 可解释 ✗ 构建成本高
2026 年主流方案:GraphRAG (Microsoft) / LightRAG / Neo4j + LangChain。先用 LLM 抽取实体 + 关系建图,查询时图遍历 + 向量召回并行融合。
Q60怎么评测 Memory 的好坏?高阶

"三类技术指标 + 业务指标"。仅看召回率会漏掉关键问题——召回了但模型没用、用了但已过时。

Memory 评测三维 + 业务侧验证
① 召回 Recall 标注集中关键事实 是否被检出 Recall@K 最容易测 ② 使用 Attribution 召回的记忆 是否被回答真正引用 最易被忽视 ③ 陈旧度 Staleness 被引用的记忆 是否被新事实推翻 合规风险 业务侧 • 复购率 / 留存率:体现"它记得我,我愿意再来" • 长期任务成功率:跨会话目标是否被正确推进 • 用户满意度评分:直接问"它对你的了解准确吗?"
07

七、主流框架(61-70)

Q61LangChain 解决了什么问题?它的核心抽象是什么?基础

LangChain 提供 LLM 应用的通用抽象层。最有生命力的是 LCEL(LangChain Expression Language)——用 | 把组件像 Unix Pipe 一样串起来。

LCEL 管道范式
Prompt | LLM | OutputParser | Validator | Sink (DB/API) chain = prompt | llm | parser | validator | sink 核心抽象 PromptTemplate · LLM · Tool · Retriever · Memory · Runnable · Document · OutputParser
优势:统一了模型/向量库/工具接口,组件复用方便;劣势:抽象层多、调试链路深、版本变化快。所以 Agent 编排逐步搬到 LangGraph(Q62)。
Q62LangGraph 是什么?为什么它正在取代 LangChain Agent?进阶高频

LangGraph 把 Agent 显式建模为有状态有向图StateNodeEdgeConditional Edge。每个节点是函数(含 LLM),状态在节点间流转。

LangGraph 典型形态
State (TypedDict) messages / scratchpad / done router 分类节点 tool_node 执行工具 agent_node LLM 决策 END 终止 条件边 done? Checkpointer(PG / SQLite / Redis)
可视化 / 可恢复

显式图结构 + Checkpoint,崩溃后从任意节点续跑。

Human-in-the-Loop

原生 interrupt(),关键节点暂停等用户。

Map-Reduce

Send API 派生 N 个并行 worker,自动汇总。

Subgraph

子图嵌套,复杂多 Agent 系统结构清晰。

Q63LlamaIndex 与 LangChain 怎么选?进阶

核心定位差异:"数据中心" vs "编排中心"。在生产里其实常混用——LlamaIndex 做检索子模块,LangGraph 做主流程。

两家定位 + 选型决策
LlamaIndex · 数据中心 核心抽象: • Document / Node / Index • Retriever / Workflow 最强: RAG 链路全流程(解析→索引→召回→生成) 多种 Retriever / Reranker 集成 → 纯文档 QA / KB 系统首选 LangChain / LangGraph · 编排中心 核心抽象: • Chain / Agent / Graph • Tool / Memory / Callback 最强: Agent 状态图编排 + 多工具 Checkpoint + HITL + 子图 → 复杂 Agent / 多工具 / 多 Agent 首选
务实选型:纯文档 QA → LlamaIndex;复杂 Agent + 多工具 → LangGraph;两者可混用——LlamaIndex 做检索子图,LangGraph 做主流程
Q64AutoGen / Magentic-One 的多智能体范式是什么?进阶

AutoGen 把多 Agent 抽象为"对话型协作"——每个 Agent 是一个角色,通过 Group Chat / Sequential / Nested chat 互相发消息。

AutoGen 三种对话编排
Group Chat A B C Mgr Manager 决定下一个发言者 Sequential A B C 流水线 A→B→C Nested Lead Subchat1 Subchat2 主 chat 嵌套子 chat
Magentic-One 是 AutoGen 之上的 Orchestrator 范式:一个 Lead Agent 拆任务 + 追踪进度,调度专家 Worker。适合研究、Web 浏览、Office 任务自动化等开放协作场景。
Q65CrewAI 与 AutoGen 有什么不同?进阶

"流程驱动 vs 消息驱动"。CrewAI 像编剧给角色发剧本,AutoGen 像把演员扔进房间让他们自己聊。

CrewAI vs AutoGen vs LangGraph 三选一
维度CrewAIAutoGenLangGraph
核心范式角色 + 任务 + 流程消息 + 对话State Graph
流程灵活度中(固定模式)高(自由聊)高(显式定义)
调试可视日志找事图结构
持久化原生 Checkpoint
HITL手动UserProxy原生 interrupt
上手难度中高
典型场景To B 流程固化研究 / 探索生产级长流程
务实选型:流程固定 + 上线快 → CrewAI;研究 / 探索 → AutoGen;生产级长流程、需要崩溃恢复 → LangGraph。
Q66Dify、Coze、FastGPT、n8n 这类低代码平台是给谁用的?基础高频

定位 = 面向产品 / 业务方的可视化 Agent 工厂。开发者用代码框架,产品 / 业务方用低代码平台——是互补不是竞争。

主流低代码 Agent 平台定位
Dify

开源 / 自托管友好。覆盖 Workflow + RAG + Agent + 评测。企业自部署首选

Coze(扣子)

字节出品,模板 + 插件生态丰富。C 端创作者 + 国内 B 端

FastGPT

知识库 + 工作流为主,对话流程编排好。私有化 KB 场景

n8n / Make

通用自动化 + AI 节点。Workflow 多于 Agent 的集成场景。

代码框架 vs 低代码平台 决策线
原型快 极致控制 低代码平台(Dify / Coze) 代码框架(LangGraph / 自研) 分界:是否需要 定制延迟 / 复杂 state / 私有依赖
面试金句:"会用低代码 ≠ 会写代码,但两者不冲突"。判断标准是"延迟 / 复杂状态 / 私有依赖"——任一个紧,就得写代码。
Q67Claude Code / Cursor / Cline 这类编程 Agent 内部怎么工作?高阶

看似不同的产品(CLI / IDE 插件 / 桌面)共用一套"5 层"架构:主循环 + 分层指令 + 权限 + 子代理 + 记忆/技能。

编程 Agent 通用架构
① 主循环 ReAct 风格:LLM ↔ Tool(Read / Write / Edit / Bash / Search / Glob) 每次 token by token 流式 → 检测到 tool_call 暂停 → 执行 → 回灌 → 继续 ② 分层指令 System prompt + 项目 CLAUDE.md / .cursorrules + 用户消息 越靠近用户输入 → 优先级越高 → 但 system 仍是"宪法" ③ 权限与确认 危险动作(写文件 / git push / shell)默认需要 user approval Allow-list、autoApprove 模式、HITL,是工程化关键 ④ Sub-Agent / Worktree 独立 git worktree 并行任务 ⑤ 记忆与技能 Memory 文件 + Skills / Slash Commands
Claude Code 把"主循环 → tool 调用 → 子代理 → 记忆"都做成可观察的 API/SDK;Cursor 主要在 IDE 体验 + Context 管理;Cline 是开源派别。三者本质相同
Q68OpenAI Agents SDK 与 Anthropic 的 Claude Agent SDK 有什么区别?进阶

两家都在把"主循环 SDK 化",开发者越来越少手写 ReAct prompt。差别主要在生态绑定 / 协议侧重

两家 SDK 取舍对比
OpenAI Agents SDK • 基于 Responses API(新一代) • 内建 handoff / guardrail / tracing • 亲和官方工具: web_search · file_search code_interpreter · computer_use 特点:闭环、贴 OpenAI 生态 优势:一键开箱、自家工具最稳 Claude Agent SDK • 主循环 + 工具 + 记忆原语 • 强调本地工具 + MCP 接入 • Subagent / Skills / Slash 一等公民 • 与 Claude Code 共享底层 特点:通用脚本宿主 优势:开放协议、可深度定制
Q69什么场景适合不用任何框架,自己手写?高阶

"能用框架的尽量用,框架卡死的果断自研"。三类场景框架会成为累赘

何时该手写 vs 何时用框架
用框架
  • 常见 RAG / Multi-Agent 场景
  • 组件较多、需要标准抽象
  • 团队多人协作、需要可读性
  • 需要现成 evaluator / tracing
该手写
  • 极简业务:1-2 个工具调用,引入框架反而拖累
  • 极致延迟 / 成本:自己控 prompt 拼装、缓存、并发
  • 奇特协议:自定义流式工具、多通道流、特殊事件
  • 合规要求:审计需精确到每个调用
面试金句:"框架解决 80% 通用问题,剩下 20% 决定生死,得自己写。" 多数厂内 Agent 平台都是 LangGraph 灵感 + 自研落地。
Q70Pydantic AI / Mastra / Vercel AI SDK 是什么?进阶

2026 年新派的 Agent 框架,主打"类型安全 + DX 现代化"。语言生态决定了它们的目标用户。

三家新派框架定位
Pydantic AI Python

类型安全(Pydantic 出品) + 依赖注入 + 评测一体化。工程师文化强的团队首选。

Mastra TypeScript

Workflow + Memory + Eval 集成。前端 / 全栈团队常用,可与 Next.js / Hono 无缝结合。

Vercel AI SDK TS · UI

偏前端流式 UI(useChat, generative UI)。"AI 化的 Next.js 应用"首选,常配合后端 Agent SDK。

Python 团队 → Pydantic AI;TS 全栈 → Mastra;想做"边响应边渲染 UI" → Vercel AI SDK(generative UI / RSC 流式)。
08

八、多智能体系统(71-80)

Q71什么时候应该上多智能体,什么时候坚持单智能体?高阶高频

"能单 Agent 做好的,绝不上多 Agent"。多 Agent 的通信代价 + 一致性难度会迅速吃掉收益。

收益 vs 代价 决策天平
✓ 上多 Agent 的信号 ① 子任务清晰独立,几乎不互相依赖 ② 每个子任务需要不同 prompt / 工具 / 模型 ③ 单 Agent 上下文已被工具描述 + 历史挤爆 ④ 子任务可并行(如 map-reduce) ⑤ 角色分工有 "评审" 价值 收益:分工 + 隔离 + 并行 ⚠ 保持单 Agent ① 子任务强依赖、共享上下文 ② 延迟极敏感 — 多 Agent 多一跳 ③ 状态一致性敏感(金融 / 事务) ④ 团队尚未把单 Agent 做扎实 ⑤ 仅为"看起来 fancy" 代价:通信 + 一致性 + 调试
Q72常见多智能体编排模式有哪些?进阶

六种主流编排模式,按"中心化程度"排列:从最强中心化(Supervisor)到最松散(Swarm)。

六种编排模式形态
① Supervisor Lead 一对多 · 中心调度 ② Pipeline A B C 顺序传递 ③ Group Chat / Debate 讨论 / 投票 ④ Hierarchical 多层嵌套调度 ⑤ Map-Reduce in M1 M2 M3 Σ 并行拆分 → 汇总 ⑥ Swarm / Network 无中心 · 直接消息
Q73多 Agent 通信用什么协议?A2A、ACP 是什么?高阶

三大协议正在形成"分工矩阵":MCP 管 Agent↔Tool,A2A / ACP 管 Agent↔Agent。

协议分工:谁管谁
Agent A Agent B Tool MCP MCP A2A / ACP Agent-to-Agent MCP (Anthropic 主导):工具 / 资源 / 提示 — 已成事实标准
A2A (Google 主导)

跨厂商 Agent 互操作:discovery / message / artifact / Agent Card。已有 50+ 公司站台。

ACP (IBM / LF 主导)

关注异步消息 + 长流任务(BeeAI 出品)。事件总线风格。

MCP (Anthropic)

Agent ↔ Tool 协议,已成事实标准。Cursor / VS Code / Claude Desktop 默认支持。

Q74多 Agent 共享状态如何同步?高阶

三种范式:黑板(共享内存)/ 消息(Actor)/ 事件(发布订阅)。耦合度递减,可观测性递增。

三种状态同步范式
① Blackboard 黑板 State (共享) LangGraph State 风格 ⚠ 上下文易爆 · 要做视图过滤 ② Message Passing A [state] B [state] message AutoGen 风格 ✓ 独立状态 · 解耦清晰 ③ Event Bus Kafka / Redis Streams 松耦合 · 易观测
Q75多 Agent 系统中"任务漂移"如何避免?高阶

"任务漂移"是多 Agent 最常见故障:Worker 越做越偏。解法是把"目标"显式化、可校验、可终止

任务契约 + 定期校准
任务契约(Supervisor → Worker) 目标 (goal):明确可校验 输入 (input):仅相关字段 期望输出 (expected_output):JSON Schema 禁止 (do_not):不要做 X / Y 预算 (budget):max_steps / token Worker 不允许引入新目标 每 N 步定期校准 Supervisor 让 Worker 汇报: • 当前已完成什么? • 离目标还差什么? • 是否需要 replan? ✓ 与原目标比对,偏差 > 阈值 → 中止 校准也可由独立"Critic Agent"做 Worker 只允许 4 种状态 ✓ 完成(return result) △ 部分完成(partial + reason) ✗ 失败(error + retryable?) ⚠ 升级(escalate + reason)
Q76多 Agent 中如何避免无限互调和死循环?进阶

多 Agent 死循环模式:A→B→A→B...调用图爆炸。四道闸门按"轻 → 重"逐层守。

四道闸门
① 深度上限 max_depth = 6 最便宜 ② 调用图无环 禁止 A→B→A 编排期约束 ③ 循环检测 hash(c,c,payload) 运行时去重 ④ 共享预算 token / cost 池 硬熔断 实战经验 • 全局共享一个 budget pool,每个 Agent / Tool 调用都扣 token 与 cost • 用 OpenTelemetry trace 看 call graph,事后审计死循环根因 • 自动 alert:单次 trace 深度 > N 或重复 (a,b) 调用 > M 立即报警
Q77多 Agent 系统怎么测试?高阶

"测试金字塔"在多 Agent 同样适用:底层大量单 Agent 单测,向上递减,顶层少量 E2E + 故障注入。

多 Agent 测试金字塔
④ 故障注入 5% ③ 整链路 E2E 10% · 精挑核心场景 ② 子图回放 25% · 用录制 trace 验证 ① 单 Agent 单测 60% · mock 输入/工具/上游
故障注入是多 Agent 独有需求:随机让某 Agent 返回 5xx / 超时 / 空,验证 Supervisor 是否会兜底、HITL 是否触发、降级是否生效。
Q78多 Agent 中怎么做"角色 Prompt"才不会千篇一律?进阶

"你是一个 X 专家"是新手最大误区——所有 Agent 都听这一句,最后都长得一样。责任 + 边界 + 输出契约 才是关键。

糟糕 vs 合格的角色 Prompt
糟糕版本
你是一个资深的代码工程师。
你的工作是帮助用户完成编码任务。
请认真完成。
  • 泛泛而谈,没有边界
  • 所有 Agent 都长这样
  • 没有输出契约
合格版本
你是 Code-Worker,专注 Python 后端实现。
职责:
- 根据 Lead 给的 spec 写代码、跑测试
不在你范围:
- 不要修改 CI/CD
- 不要新增依赖(如需 → escalate)
- 不要决定架构(架构 Q 由 Lead)
工具:read/write/bash/test
输出契约(JSON):
{ "status": "ok|partial|fail|escalate",
  "files_changed": [...],
  "tests_passed": int }
关键四要素:① 责任 ② 不在你范围 ③ 工具集(只列本角色用的) ④ 输出契约。再加 1-2 个 few-shot 强化风格。
Q79Agent 集群里如何做"动态发现"和"动态招募"?高阶

类比微服务的"服务注册中心":每个 Agent 暴露 manifest,Supervisor 按能力检索 + 健康状态选择最合适的 Worker。

Agent Registry + 动态招募
Agent Registry A2A Card · AgentCatalog Research Agent cap: web_search healthy · p95=2s Code Agent cap: edit · run · test healthy · p95=5s Data Agent cap: sql · viz healthy · p95=3s Email Agent cap: send_email degraded · 跳过 Lead 查询
manifest 关键字段:name / capability_description / input_schema / output_schema / health / sla / cost。Lead 用 embedding 匹配能力描述 + 关键词过滤 选最合适的 Worker。
Q80多 Agent 的成本怎么控制?高阶

多 Agent 的token 消耗很容易 5-10× 单 Agent。五个杠杆缺一不可。

多 Agent 成本控制五杠杆
① 分层模型

Supervisor 用 Opus/Pro,Worker 按任务选 Haiku/Sonnet/Mini。简单分类用最小模型。

② Cache 共享

通用 system prompt + 工具描述跨 Agent 共享前缀。Anthropic cache_control + 模板复用。

③ 工具合并 + 并行

能并行的同时发出,能合并的合成一个调用。减少 round-trip。

④ 预算配额

每个 Agent / Task max_tokens · max_cost · max_steps,超限熔断。

⑤ 失败短路

识别"连续 3 次相同失败" → 直接放弃 / 升级人工,不再死磕。

实战经验:上线后第一周持续看 trace,找出 token 消耗 top 3 的 Agent / Tool / Prompt 段,针对性优化能砍 60-80% 成本。
09

九、评测、可观测性、安全(81-90)

Q81怎么评测一个 Agent 的整体效果?高阶高频

四层金字塔评测:从底层组件到顶层业务,每层独立可测、可定位故障。

Agent 评测金字塔
业务层 解决率 / 留存 / 首响 结果层 完成率 / Judge / 规则 路径层 步数 / token / 轨迹 组件层 Recall / JSON / Tool
关键指标工具
组件Recall@K · JSON 合法率 · 工具调用准确率Promptfoo · Ragas · DeepEval
路径步数 · token 用量 · Trajectory 是否走对LangSmith · Phoenix
结果任务完成率 · LLM-as-Judge · 人工 SxSBraintrust · Helicone
业务用户解决率 · 转人工率 · 首响 · 留存自建 DW + BI
Q82LLM-as-Judge 怎么做才靠谱?高阶

LLM-as-Judge 失败率最高的两个原因:① 打分尺度模糊 ② 位置偏差。五个技巧叠加可以让相关性从 ~0.5 提到 0.8+。

5 个让 Judge 靠谱的技巧
① 固定打分量表 1-5 分,每档明确含义 1=完全无关 3=部分相关 5=精准且全面 少用"好/差"等模糊词 ② 用 Reference 给参考答案对比 "模型答 vs 参考答" 比自由打分稳定 30%+ 推荐 ③ 多模型聚合 2-3 个不同 Judge 模型 GPT-5 + Claude 4.x 取平均 / 中位数 单一评委有偏 ④ 校准 Judge prompt 拿 50-100 条人工标注 → 让 Judge 打分 → 相关性 r > 0.7 才上量 否则调整 prompt ⑤ 抗位置偏差 成对比较 "A vs B" → 随机交换顺序两次 → 两次结论一致才算数 模型更偏好"第一/第二"位置
Q83Agent 的"轨迹评测"(Trajectory Eval)是什么?高阶

"答对了 ≠ 走对了"。终态评测看不到过程浪费、绕路、违规调用,轨迹评测补上这一层。

两种 trace 对比:同样答对,过程一好一坏
✓ 高质量轨迹 plan search calc ans 4 步 · 800 token · 工具选择全对 ⚠ 答对但过程差 srch srch srch err srch calc ans 7 步 · 3500 token · 重复调 search 轨迹评测的 rubric • 工具选择是否正确(应选 A 却选 B) • 参数是否合理(参数缺失 / 类型错) • 有无不必要循环(重复调同一工具) • 是否遵守系统约束(顺序 / 权限) 实现:把 trace 拼成 JSON → Judge LLM 按 rubric 打分,或写规则做关键节点断言
Q84Agent 的可观测性体系包含什么?高阶高频

Agent 可观测 = 传统三柱(Trace/Metrics/Logs) + LLM 专属属性(gen_ai.*)。OTel + LLM 语义约定已成事实标准。

Agent 可观测三柱 + LLM 专属
Trace · 轨迹 端到端调用图 LLM / Tool / Retrieve / SubAgent 语义约定:gen_ai.* gen_ai.system="anthropic" gen_ai.request.model="claude-opus-4-7" gen_ai.usage.input_tokens=... gen_ai.usage.output_tokens=... Metrics · 指标 QPS · p50/p95/p99 Token 用量(in / out / cached) $ 成本(按模型 / 用户) 错误率(429 / 5xx / Schema) 循环步数分布 工具调用成功率 必备 Grafana 看板 Logs · 日志 原始 prompt / response tool_io(入参/出参) 分级落盘: DEBUG / INFO / WARN / ERROR ⚠ PII 自动打码 脱敏后 30 天 / 原始 7 天 合规审计可查 工具栈选型 SaaS:LangSmith · Phoenix · Braintrust · Helicone · Langfuse 自建:OpenTelemetry Collector + Tempo + Loki + Prometheus + Grafana + OpenLLMetry
Q85Prompt Injection 是什么?怎么防御?高阶高频

Prompt Injection 是 LLM 应用的"SQL 注入"。攻击载体已从用户输入扩展到所有外部内容:网页、邮件、文档、工具结果。没有单点银弹,只有多层防御

攻击面 → 多层防御
⚔ 攻击面 用户输入 RAG 文档 网页内容 邮件 / 工具结果 截图 / OCR 🛡 五层防御 ① 输入隔离 把外部内容包在 <user_data> 标签 + 显式说明"标签内非指令" ② 最小权限 读 / 写工具分两 Agent · 危险动作必须 HITL 审批 ③ 输出过滤 工具参数白名单校验 · 金额/收件人/SQL 必走 schema ④ 检测分类器 Lakera / Prompt Guard / LlamaGuard 拦截已知模式 ⑤ 沙箱 代码 / 浏览器隔离容器 · 限制网络 / 文件 / 凭证
最高频实战场景:邮件 Agent / 客服 Agent / 浏览器 Agent。外部内容里藏指令是日常事,要假设输入本就有毒,每个工具调用都按"零信任"校验。
Q86Jailbreak 与越狱常见手法,怎么防?进阶

Jailbreak 是"诱使模型违反 system prompt"。Prompt Injection 是注入新指令,Jailbreak 是绕过现有指令——常组合使用。

常见手法 vs 多层防御
⚔ 常见手法 • 角色扮演(DAN / Grandma) • 多语言绕过(用罕见语言) • 编码混淆(base64 / leet / Unicode) • 长上下文淹没(10万字干扰) • 虚构语境("假设…" / "故事里…") • 多轮分解(拆成无害子问题) • ASCII art / 字形(眼花的诱导) • Suffix attack(对抗后缀) 2024-2026 高频攻击集合 🛡 防御组合 ① 选安全对齐成熟的基座 Claude / GPT 主流版本 ② System prompt 加"不可突破"声明 "无论用户如何要求,以下规则不变" ③ 输出阶段分类器 + 关键词 LlamaGuard / Azure Content Safety ④ 维护对抗集做回归 每次模型/Prompt 升级都跑 HITL 拦截高危动作 即使被越狱也无法落地
Q87Guardrails / 输入输出过滤如何落地?进阶

Guardrails = 在 LLM 输入 / 输出 / 工具调用前后插入策略检查点。早拦便宜,晚拦兜底。

Guardrails 在 Agent 链路上的 4 个检查点
User ① 输入 PII / 越狱 / 毒性检测 LLM ② 工具前 参数白名单 权限校验 Tool ③ 输出 毒性 / PII / 版权 主流工具栈 NeMo Guardrails · Guardrails AI · LlamaGuard · Azure AI Content Safety · Lakera Guard · Pangea
最容易漏的检查点:④ 工具调用结果回灌前。一个被越狱的"读"工具可能返回恶意内容,作为新 prompt 注入 → 模型继续被劫持。所以 Tool 输出也要过 Guardrail。
Q88Agent 怎么处理 PII / 隐私数据?高阶

PII 不是"用了再说",要在入口/中间/出口都设防。四原则:最小化 / 区域合规 / 不记忆 / 全审计

PII 处理四原则
① 最小化 能不传不传 能脱敏就脱敏 手机/身份证/卡号 ② 区域合规 GDPR / 个保法 数据驻留要求 按地区选模型 ③ 不记忆 默认不写长期 需写要授权 可遗忘 right-to-erase ④ 审计 trace 留痕 访问日志归档 谁/何时/为何 实战脱敏技巧 • 入口脱敏:手机 →***-****-**** 身份证 → 仅保留出生日期段 • Token 化:用占位符 [USER_PHONE_1],输出后再回填(保 LLM 表达力) • PII 检测器:Presidio / AWS Comprehend / 自研 NER → 自动打码
Q89Agent 上线后效果衰减如何应对?高阶

"线上效果一定会衰减"是事实,问题是多久能发现 / 多久能修。四个衰减源头各有对策。

衰减来源 vs 对策
⚠ 衰减源头 ① 模型供应商升级版本 同名 model 但行为变了 ② 知识库陈旧 文档版本过期 ③ 用户输入分布漂移 新业务 / 新场景 ④ 上游工具行为变化 API 改字段 / 返回格式变 ✓ 对策 钉死版本号(用具体 id 不用 latest) 版本切换走灰度 知识库 TTL 监控 自动重建索引 持续回归 + 用户反馈闭环 差评样本进对抗集 工具响应 Schema 校验 字段变化时告警
Q90红队(Red Teaming)应该怎么搞?高阶

红队不是"上线前测一次",而是"持续对抗 + 永不退役回归集"。每次模型 / Prompt / 工具变化都要触发。

红队闭环
① 组队 产品+安全+业务 ② 定义维度 攻击/PII/偏见 ③ 自动+人工 Garak/PAIR/TAP ④ 修复 prompt/guard/工具 ⑤ 留痕 进回归 每次 模型 / Prompt / 工具 变化都触发 必覆盖维度 Prompt Injection · Jailbreak · PII 泄漏 · 工具滥用 · 业务规则违反 · 公平 / 偏见 · 版权
关键铁律:对抗成功的 case 必须永久进回归集,每次发版都跑——曾经成功一次的攻击在 6 个月后仍可能复活。
10

十、工程化、部署与商业落地(91-100)

Q91Agent 服务的典型架构(生产级)长什么样?高阶高频

生产级架构 = 统一入口 + Agent 服务 + 多支撑组件。核心是模型走 Gateway 而非直连 SDK

生产级 Agent 服务架构
Web / IM / IDE / API 客户端 API Gateway + Auth + 限流 Agent Service · FastAPI / Node / Go 主循环 · 状态机 · 任务编排(LangGraph / 自研) LLM Gateway routing key 池/限流 Tool Service MCP server 内部 API Vector DB + Reranker Milvus/Qdrant State Store PG / Redis Checkpoint Memory Letta / 自研 长期 / 短期 Trace / Log OTel Collector Tempo / Loki Observability + Eval + Admin(Grafana / Langfuse)
最关键的工程决策:所有模型调用走 Gateway(LiteLLM / Portkey / 自建)。这样切换模型 / 灰度 / Key 池 / 限流 / 计费 / Trace 都可以集中做。
Q92怎么做模型路由与多模型支持?高阶

路由 = "把对的请求发给对的模型"。常见 5 个维度,可组合使用。

模型路由 5 个维度
LLM Gateway LiteLLM / OpenRouter / 自研 ① 按任务 分类→mini · 推理→旗舰 ② 按租户 私有化 / 合规分流 ③ 故障切换 主备链 · 429/5xx 转备 ④ 预算限流 按 user / app 限额 ⑤ 灰度 / A/B 按 hash 分桶
Q93流式输出怎么实现?SSE / WebSocket / HTTP streaming 怎么选?进阶

三种流式传输的核心差异:单向 vs 双向 / 浏览器友好 vs 自定义协议

三种流式传输选型
方式方向浏览器典型场景
SSE单向 server→client原生支持OpenAI / Anthropic 默认
WebSocket双向原生Voice / 屏幕共享 / 实时多模态
HTTP Chunked / Streamable HTTP单向框架封装MCP 远程标准 / 内部 API
实战要点:流式不仅传文本,还要流式传 工具调用进度思考块引用中间结果。前端才能做"边想边说"的优雅 UX。
Q94Token 池 / API Key 池怎么管理?高阶

"Key 是钱、是 QPS、是合规风险"。一个 Key 池管理不善的 Agent 系统,可能 24h 内被刷爆。

Key 池管理 5 个要点
① 多 Key 轮询 按 QPS/配额/错误率加权 round-robin + 健康度 ② 失败隔离 被限流 Key 临时下线 circuit breaker + 自愈 ③ 分账户分级 研发 / 测试 / 生产严分 账单可见到团队 ④ 用量上报 每次调用记录:model · input_tokens · output_tokens · cached_tokens · cost · user_id · feature → DW 做财务核对 + 告警 ⑤ 安全 Key 走 Vault / KMS / AWS Secrets Manager 禁止落代码 · 禁止打日志 定期轮换 · 离职即吊销 ⚠ 真实故事 2024 有团队把 OpenAI Key 提交到 GitHub,48 小时被刷 $50,000 — Key 安全是 Day 0 议题
Q95Agent 的延迟优化有哪些招式?高阶高频

Agent 总延迟 = Σ(LLM 推理 + 工具调用 + 网络)。优化按 ROI 排序:缓存最先做。

延迟优化 7 招(按 ROI 排序)
① Prompt Caching 首 token 降 50%+ · 必做 ② 并行 Tool Call 无依赖工具同时发 ③ 预取 / 预生成 用户输入时就跑检索 ④ 分级模型 简单走 Haiku/mini ⑤ 提示压缩 LLMLingua / 关键事实 ⑥ 结构化输出 + 截断 避免啰嗦 · max_tokens ⑦ 边缘部署 检索 / 重排靠近 GPU ⑧ 投机解码 / Spec decode 大模型推理加速 ⑨ 流式 UI "边想边说"感知更快 P95 改进步骤 1) 找 trace top 慢链路 → 2) 看是 LLM 慢还是 Tool 慢 → 3) 按上表对症下药 不要"全栈优化",会迷失方向
Q96Agent 怎么做灰度发布和 A/B 实验?高阶

"Agent 没法回归测试到位"——必须靠灰度 + A/B 在真实流量上验证。关键是对照指标 + 自动回滚

A/B 实验流程
GrowthBook / Statsig Control 50%(旧版) Treat A 25%(新 prompt) Treat B 25%(新模型) 指标对照(业务 + 工程) 解决率 / 转化率 · p95 / 错误率 / 成本 显著性 + 置信区间 ⚠ 自动回滚:错误率 > X% / 成本 > Y% / 关键指标降 > Z% → 立即停
必须做的事:把实验 ID 写进 trace。事后才能归因——"为什么 5/12 的解决率掉了 3%" → grep exp_id=prompt_v17
Q97Python / FastAPI 部署 Agent 服务的最佳实践?进阶

Agent 服务的特点是"长任务 + 高并发 IO"。Python 部署有 6 个易踩坑点。

FastAPI Agent 部署 6 要点
① 全异步

httpx + asyncio禁止阻塞线程。LLM 并发用 asyncio.gather / TaskGroup

② 背压

限制并发上限 + 队列。Semaphore(50),超过排队 / 返回 503。

③ 优雅停机

流式请求未完成时等待 grace_period,否则用户看到 trace 中断。

④ 多进程

uvicorn + gunicorn -k uvicorn.workers 跑多核。GPU 推理下用 workers=1 + 内部并发

⑤ 健康检查

探针分 liveness(进程活)/ readiness(依赖可用:DB/LLM/向量库)。

⑥ 容器化

分层镜像 · 模型权重独立卷或 OCI 制品 · 不要每次构建拉权重

最坑:把 requests 同步库混进异步 endpoint —— 单个请求就把整个 worker 卡死。所有 IO 必须全异步
Q98本地化部署(私有化)有哪些坑?高阶

私有化部署的 6 大决策矩阵,每个决策错了都会显著影响吞吐 / 成本 / 合规。

私有化 6 大决策矩阵
决策选项关键考量
模型Qwen / DeepSeek / GLM / Llama上下文 32k vs 128k · 中英能力 · function calling
推理后端vLLM / SGLang / TGI / TRT-LLM性能 vs 门槛 vs 易部署
显存优化Paged Attention + Prefix Cache必开,否则吞吐打三折
function calling开源模型差异大必须用真任务评测,看 JSON 合规率
合规日志驻留 + 备案 + 内容审核政企客户硬需求
升级路径prompt 兼容矩阵新模型可能"指令理解风格"变化
最易踩坑:开源模型 function calling。同样支持 tool_call 协议,不同模型的合规率从 99% 到 60% 都有,必须用真实任务集打分。
Q99Agent 项目的成本结构是什么?怎么算 ROI?高阶

"立项时算 ROI,上线后看真账单"。三块成本 vs 三种收益的对照表。

成本三块 vs ROI 三种
💸 成本结构 模型成本 Token × 单价 · 占 60-80% 基础设施 向量库 / GPU / 中间件 · 10-25% 人力 + 评测 + 红队 最易被低估 · 长期持续投入 实战:上线后 1 个月做"成本归因" 💰 ROI 衡量 替代人力小时 每会话节省 X 分钟客服 转化率 / 留资率 销售场景 / 客户解决率 容量解锁 之前做不了的业务(24h / 多语言) ⚠ 立项时与业务方约定基线
避免事后口径之争:立项 PRD 必须写清基线(before)与目标(after)。否则上线后 ROI 永远扯皮,"我们的客服解决率从 70% 提到 75%" 才有意义。
Q100面试官最想听到的 Agent 项目复盘是什么样的?高阶高频

STAR-R 五段式:Situation / Task / Action / Result + Reflection。比纯技术细节更打动面试官的是"反思"那一段。

STAR-R 复盘结构
S 背景 业务是什么 为什么不能 用传统方式 谁是用户 3 句话 T 目标 要解决什么 长流程? 多工具? 强约束? 高并发? SLO 量化 A 方案 架构图 技术选型 设计取舍 关键 Prompt 工具设计 画白板 R 结果 成功率 A% → B% 单次成本 C 元 → D 元 业务指标 before/after R 反思 踩过什么坑 当时为何 没选另一条 再做一次 会怎么改 ⭐ 最加分
金句模板:"在 X 任务上把成功率从 A% 提到 B%,单次成本从 C 元降到 D 元,方式是 E + F;最大的教训是 G。" 这种回答直接拿 offer

结语:成为一名"靠得住"的 Agent 工程师

100 个问题背完只是开始。真正区分初级与资深 Agent 工程师的,是:

  • 能讲清"为什么要这么选",而不是"我用过 X";
  • 把 Prompt / 工具 / Memory / 评测当作代码工程来对待,而不是玄学;
  • 对延迟、成本、安全、可观测性有"工程师的直觉",而非只追新论文;
  • 能从一个失败的 Agent 项目里,归纳出可复用的设计原则。

愿你写出来的 Agent,能跑、能改、能上线、能赚钱