Agent 开发 100 问
一份覆盖招聘高频考点的 AI Agent 工程师完整知识图谱 · 基础概念 / 框架 / RAG / MCP / 多智能体 / 评测 / 部署
写在前面
这份 100 问适合谁
本手册综合 2026 年国内外 AI Agent / LLM 应用工程师岗位 JD 与高频面试题整理而成,适用于:
- 正在准备 AI Agent / LLM 应用开发工程师 面试的同学
- 已在做大模型应用、希望系统梳理 Agent 设计模式与工程实践的工程师
- 从后端 / 算法 / 前端转向 AI 工程方向、需要快速建立知识地图的从业者
如何使用本手册
每个问题分为三档:基础 必答类 / 进阶 区分度题 / 高阶 设计与落地题,高频 表示在 JD 与面经中重复出现。建议先扫读问题列表自测,对答不出的 30%+ 题目展开精读。
招聘要求剖析:Agent 工程师要什么人
JD 高频技能词云(按出现频次降序)
| 领域 | 关键词 | 说明 |
|---|---|---|
| 编程语言 | Python / TypeScript / FastAPI | 主流后端栈,Python 占 90%+,前端工具链常用 TS |
| 大模型 | GPT / Claude / Qwen / DeepSeek / GLM | 闭源 + 开源双线掌握,能本地化部署是加分项 |
| Agent 框架 | LangChain / LangGraph / LlamaIndex / AutoGen / CrewAI | LangGraph 状态图建模在生产级岗位中地位上升明显 |
| 低代码平台 | Dify / Coze / FastGPT / n8n | 面向产品化场景,部分公司明确写入 JD |
| RAG | 向量检索 / 重排 / 切片 / 多路召回 / 知识图谱 | JD 中提及频次最高(123 次/样本),几乎人人必问 |
| 向量数据库 | Milvus / Chroma / Qdrant / pgvector / Elasticsearch | 能讲清索引类型 (HNSW/IVF) 与召回率/吞吐权衡 |
| Embedding | BGE / text2vec / OpenAI / Cohere | 能区分通用 vs 领域微调嵌入模型 |
| 工具调用 | Function Calling / MCP / OpenAPI / JSON Schema | MCP 协议在 2026 年成为新晋必考点 |
| 规划 | ReAct / Plan-Execute / ToT / Reflection | 能讲清不同范式适用场景与优劣 |
| 工程化 | Docker / K8s / 流式输出 / 异步并发 / 限流降级 | 部分高级岗要求懂 LLM Gateway / Token 池 |
| 评测 | RAGAS / DeepEval / LangSmith / Phoenix | 有"上线后持续评测"经验的候选人极少,溢价高 |
| 安全 | Prompt Injection / 越狱 / 沙箱 / Guardrails | To B 与金融、政企岗位重点考察 |
JD 中典型职责描述(综合归纳)
- 调研业务场景,设计 Agent 工作流与 Prompt 体系,并完成原型落地
- 基于 LangChain / LangGraph / Dify 等框架搭建 智能体应用,对接业务系统
- 设计与维护 RAG 检索链路:数据清洗、切片、嵌入、向量入库、召回与重排
- 实现 工具体系(Function Call / MCP Server)与权限/审计/降级机制
- 建设 评测、追踪、监控、A/B 实验 体系,保障线上效果
- 跟进开源模型与论文(ReAct / Reflexion / Toolformer / Voyager 等),将新方法落地
一、Agent 基础概念(1-10)
一句话定义:Agent = LLM 大脑 + 循环 感知→决策→行动→观察 + 工具 + 记忆,由模型在运行时动态决定下一步。
| 维度 | LLM 调用 | Workflow / Chain | Copilot | Agent |
|---|---|---|---|---|
| 状态 | 无 | 线性 | 会话 | 循环+记忆 |
| 路径决策 | 无 | 编码期 | 人决定 | 运行时 LLM |
| 工具调用 | 无 | 固定 | 辅助 | 动态 |
| 自主性 | 低 | 低 | 中 | 高 |
| 调试难度 | 易 | 易 | 中 | 难 |
参考架构:4 + 1(大脑 / 规划 / 记忆 / 工具 + 环境闭环),工程化版本再补 4 个外围(调度、护栏、可观测、UI)。
① 大脑 LLM
理解任务、推理、生成动作。Agent 的"决策器"。
② 规划 Planner
把高阶目标拆为子任务。可与大脑合一,也可单独跑。
③ 记忆 Memory
短期=对话上下文;长期=向量库/KV/事件日志。
④ 工具 Tools
搜索、代码执行、数据库、浏览器、内部 API。
+1 环境闭环
工具结果回流到大脑形成"observe → act"循环。
三者本质都是"LLM + 工具"的组合,区别在于能不能表达分支、循环和断点续跑。Chain → Agent → Graph 是逐步加强表达力的演化路径。
| 能力 | Chain | Agent (隐式循环) | Graph (LangGraph) |
|---|---|---|---|
| 分支决策 | ✗ | prompt 里黑盒 | 显式 conditional edge |
| 循环回退 | ✗ | ✓ | ✓ |
| 状态持久化 | ✗ | 外挂麻烦 | 原生 Checkpoint |
| 断点续跑 | ✗ | ✗ | ✓ |
| Human-in-the-loop | ✗ | 补丁 | 原生 interrupt() |
| 调试可视 | 易 | trace 难还原 | 图结构天然可视 |
"自主"不是魔法,本质是把 LLM 当策略函数 π(a|s),外面套一个 while 循环,每次把"该做什么"转化成模型的下一个 token 预测。
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) # 终止条件
Andrew Ng 总结的四大设计模式(Reflection / Tool Use / Planning / Multi-Agent),工程上再补两种编排模式(Router / Hierarchical)。
工业界经常混用,但严格说是"实体"对"范式"的差别。类比就是 Microservice(一个服务) vs Microservices Architecture(一种架构风格)。
推荐 8 步设计法。顺序很重要——评测要先于 Prompt,工具要先于规划范式。
定目标
输入/输出/成功率 SLO
定边界
能做/不能/禁止
拆任务
单 Agent / 多 Agent
定工具
JSON Schema + 权限
选范式
ReAct / Plan / Graph
设记忆
短期+长期
建评测
评测集→Prompt
上观测
Trace/Cost/反馈
常见反模式 ✗
- 先 Prompt 再评测 → 永远在追噪声
- 工具一上 30+ 个不分组 → 选择准确率崩
- 没有边界声明 → 上线被薅羊毛
高 ROI 做法 ✓
- 第 7 步前永远先做50 条评测集
- 边界声明放 system prompt 末尾
- 观测和评测打通同一份 trace schema
四个判定维度:任务确定性 × 步骤稳定性 × 容错成本 × 延迟敏感度。任一个偏紧,都倾向 Workflow。
两类故障都是"自由度太高"的副产物。幻觉是输出失真,循环是动作失控,解法在于多层约束。
幻觉来源
- 训练分布外的知识
- 提示约束不足 / 模糊
- 工具返回错误数据
- 上下文被截断/压缩丢失
幻觉解法(多层叠加)
- RAG 注入权威事实
- JSON Schema / Constrained Decoding 强格式
- 工具结果校验 + 引用回链
- Reflection / CoVe 二次审
无限循环来源
- 反复调同一工具(相同参数)
- 找不到 FINAL 停止条件
- 工具 429 / 5xx 后疯狂重试
- 多 Agent 互相把球踢回去
无限循环解法
- 硬限制:max_iterations / max_tokens / 全局超时
- 状态去重:缓存 (tool, args) 哈希,重复直接拦截
- 显式停止:FINAL_ANSWER 标记 / is_done 字段
- 退避兜底:连续失败 N 次切人工或返回缺省
本质差异:"模仿动作" 还是 "理解意图"。RPA 是录屏式重放,Agent 是带脑子的执行者。
| 维度 | RPA | Agent | 融合 |
|---|---|---|---|
| 定位元素 | xpath/坐标 | 语义/截图 | 两者皆可 |
| UI 变更容错 | 差 | 好 | 好 |
| 规划能力 | 无 | 有 | 有 |
| 稳定性 | 高(不出错就一直对) | 中 | 中 |
| 实现成本 | 低 | 中 | 高 |
二、LLM 与提示工程基础(11-20)
核心 = Self-Attention + FFN + Residual + LayerNorm,N 层堆叠。关键公式:Attention(Q,K,V) = softmax(QKT/√d)·V。
三段式 = 宪法 + 输入 + 历史。理解关键:从上到下,稳定性递减、长度变化递增,所以缓存策略也是从上到下递减。
三种"喂法",对应"不给例 / 给例 / 让它想"三档强度,token 成本递增,效果也递增。
| 方式 | Token 成本 | 适用场景 | 注意 |
|---|---|---|---|
| Zero-Shot | ★ | 简单任务 / 看基线 | — |
| Few-Shot | ★★ | 固定格式 / 风格 / 私域 | 示例质量比数量重要 |
| CoT | ★★★ | 数学 / 规划 / 多步推理 | 小模型可能"想错" |
| 原生 thinking | ★★★ | Claude 4.x / GPT-5 thinking | 不要再写"Let's think" |
推荐 RICE-O 五段式:RoleInstructionContextExampleOutput。
采样参数本质都是"从 LLM 输出概率分布里选哪个 token"的策略。Agent 不同环节对"创造力 vs 稳定性"需求不同。
| 参数 | 作用 | 建议 |
|---|---|---|
| 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 |
三个强度递增的"给模型套笼子"方案。越往下越严格、合规率越高,但灵活性越低。
{
"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
}
JSONDecodeError 不断的故事。
本质 = 复用注意力的 KV Cache。命中部分按 ~1/10 价格计费,首 Token 延迟降 50%+。这是 Agent 降本最快的杠杆。
✓ 缓存友好
- System / Tools / 大段知识 前置
- User / 检索结果 后置
- Agent 循环只追加尾部,不改前缀
- Anthropic 显式
cache_control标记
✗ 缓存杀手
- 把时间戳 / UUID 放在前缀
- 每轮重排 messages 顺序
- RAG 把检索拼到 system 顶部
- 动态拼接工具描述
5 种主流策略,本质都是 "用更少的 token 装下足够多的信息"。可叠加使用。
Token 是模型处理的最小单位。BPE/WordPiece/SentencePiece 把字符串切成可学习子词。Agent 工程师必须懂,因为它直接关联成本 / 上下文 / 安全。
💰 成本视角
1 汉字 ≈ 1.5-2 token · 1 英文词 ≈ 1.3 token · 用 tiktoken / 厂商 SDK 估月度账单
📐 上下文视角
窗口以 token 计;要预留 output / tool 描述 / 思考预算的空间
🛡 安全视角
稀有 token、Unicode 同形字、emoji 编码是 prompt injection 高频载体
核心原则:"Prompt 是代码,必须有测试"。流程化 4 步 + 4 类指标 = 可量化的迭代闭环。
三、Planning 与 Reasoning(21-30)
ReAct = Reasoning + Acting。模型在 ThoughtActionObservation 三种 token 之间交替,把"决策过程"显式化为可被代码解析的 token 流。
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: ...
核心差别:"步步为营 vs 一次画图"。前者灵活高 token,后者高效但僵化。混合模式(Plan 出大纲 + 子任务跑 ReAct)是生产首选。
"让模型自我审查"。Reflection = 单次审查;Reflexion = 把失败教训写进记忆,跨轮可用。原论文在 HumanEval、HotpotQA 提升 10-20%。
把"线性 CoT"升维成"搜索树/图":每一步生成多个候选,按评分剪枝。表达力强但 token 爆炸。
两者都属于"多次采样 + 选最优"家族。Self-Consistency 用投票,Best-of-N 用评分器——前者是后者的特例。
"大脑分层"——高层 Planner 决定做什么,低层 Executor 决定怎么做。任务超过 10+ 子步骤、跨多领域时必须分层,否则上下文爆炸 + Plan 漂移。
✓ 必须分层的信号
- 子任务 > 10 步
- 跨多个领域 / 工具集
- 不同子任务对模型/思考预算需求不同
- 单 Agent 上下文已超 128k
✗ 不要分层
- 子任务 < 3 步
- 子任务高度相似(一个 Worker 能干)
- 对延迟极敏感(分层多一跳)
Meta 提出的事实校验范式:模型先答 → 自己出验证问题 → 逐题查证 → 修订答案。在事实型问答上能显著降幻觉。
2026 年主流模型(GPT-5 thinking / Claude 4.x extended thinking / Qwen3-thinking / DeepSeek-R1)都支持显式思考。关键不是"开 vs 关",而是"按任务难度调档"。
thinking_router 节点。简单步骤直答省钱,复杂步骤开 high 提质。
"长任务规划漂移"的本质是:模型记不住自己最初的目标。解法是把规划从模型脑里搬到外部 state。
① 外部 Plan 持久化
把 plan 写进 Postgres / LangGraph State,每步只读相关子任务条目,避免上下文里全局漂移。
② 子目标分解
模型先出 milestones(M1/M2/M3),每个 milestone 再触发子 Agent,缩小作用域。
③ 失败回退 + Replan
每步完成自检;未达成 → 触发 replan 节点(LangGraph 条件边),不让错误传染。
④ Human-in-the-loop
关键节点(金额、删除、外发邮件)暂停 → 等用户确认 → 恢复执行。
规划评测是多维向量,不能只看"是否解决"。下面 5 个维度组成一个雷达图就是规划质量画像。
四、工具调用 & Function Calling & MCP(31-40)
本质 = 把"调用哪个函数 + 参数" 作为模型的结构化输出。SDK 拿到后调用真实函数,把结果作为新消息回灌——这就是 Agent 工具循环的标准范式。
工具描述本质是给模型看的 API 文档。四个高 ROI 点把"能用"提升到"用得对"。
糟糕描述
{
"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"}
}
同一轮生成多个独立 tool_call,并行执行。优势:一次回合搞定多事情,减少 round-trip。前提:工具间无依赖。
MCP(Model Context Protocol)= Anthropic 提出、已成行业事实标准的开放协议。最大价值是把 M×N 集成爆炸收敛为 M + N。
记住一个核心区分:谁来决定加载。Tool 由模型主动调用,Resource 由用户/客户端决定,Prompt 由用户唤起,Sampling 由服务器反向请求客户端。
三种传输,差别在本地 vs 远程 / 单向 vs 双向。
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) # 远程
工具调用是 Agent 故障的"前沿"。四层防御一个都不能少:分层超时 / 重试退避 / 结构化错误回传 / 降级兜底。
| 错误类型 | 典型例子 | 策略 | 回传给 LLM? |
|---|---|---|---|
| 网络抖动 | TCP reset / DNS | 指数退避重试 3 次 | 否 |
| 5xx 服务错 | 503 / 504 | 指数退避 + 备用 endpoint | 否 |
| 限流 429 | Rate limit exceeded | 令牌桶 + 等待队列 | 否(防死循环) |
| 4xx 参数错 | InvalidArgument | 不重试 | 是,让模型改参数 |
| 业务异常 | OrderNotFound | 不重试 | 是,让模型换策略 |
| 超时 | Read timeout | 重试 1 次后兜底 | 是(带降级标记) |
"四层防线 + 审计闭环"。每一层独立、可单独审计,缺一层都可能被绕过。
模型默认不会主动放弃——它倾向于"乱造一个动作交差"。给它合法的退出路径是关键。
① 边界声明
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) 直接回答:"这超出我的能力,我无法完成"
不要尝试发明不存在的工具名。
五、RAG 与知识检索(41-50)
RAG = Retrieval-Augmented Generation:用检索结果增强生成。完整链路分离线侧(建库)和在线侧(查询)。
切片质量直接决定召回上限。"按字数硬切" vs "按语义切" 的效果差距可达 20-30%。
| 策略 | 实现成本 | 召回质量 | 适用 |
|---|---|---|---|
| 固定滑窗 | ★ | ★★★ | 原型 / 杂混内容 |
| 结构感知 | ★★ | ★★★★ | 技术文档 / 规章 |
| 语义切片 | ★★★ | ★★★★ | 叙事 / 长报告 |
| 父子切片 | ★★ | ★★★★★ | 生产首选 |
| 命题切片 | ★★★★ | ★★★★★ | FAQ / 法条 / KG |
五个选型维度:语种 / 任务 / 长度 / 成本 / 私有化。先看 MTEB/C-MTEB 排行,再用自有评测集小样本对比。
BGE-M3
开源 / 中英多语 / 稠密 + 稀疏 + ColBERT 多向量。私有化首选。
OpenAI 3-large
Matryoshka 维度可截断(256/1024/3072)。预算够 + 省心场景。
Cohere v3
区分 search_document / search_query,英文搜索强。
Voyage-3
长上下文 32k;领域版 code/law/finance 表现亮眼。
GTE / E5
性价比高;自训私有库的稳定选择。
选向量库主要看数据规模,其次看是否需要复杂过滤 / SQL 联表 / 多模态。
| 库 | 优势 | 典型场景 |
|---|---|---|
| Chroma | 几行代码起步 | 原型 / PoC |
| pgvector | ACID + SQL 联表 | 已有 PG 的产品 |
| Qdrant | payload 过滤强 / Rust | 多条件过滤 RAG |
| Weaviate | 模块化 + GraphQL | 多模态 |
| Elasticsearch | BM25 + 向量混合 | 老搜索升级 |
| Milvus / Zilliz | 分布式 / 亿级 | 企业大规模 |
四大主流 ANN(近似最近邻)索引。所有索引都在做"召回率 ↔ 延迟 ↔ 内存"的三角形权衡。
| 算法 | 结构 | 构建 | 查询 | 内存 | 常用场景 |
|---|---|---|---|---|---|
| HNSW | 分层小世界图 | 慢 | 快 | 大 | 大多数 RAG(默认) |
| IVF (-PQ) | 聚类倒排+量化 | 快 | 中 | 小 | 大规模 / 内存敏感 |
| SCANN | 非对称量化 | 中 | 极快 | 中 | Google / CPU 部署 |
| DiskANN | SSD 图索引 | 慢 | 中 | 磁盘 | 十亿级单机 |
向量擅长"语义相近但词不同",对精准实体(人名、编号、产品ID、SKU)反而弱。BM25 正好相反。两者互补 → Hybrid 召回。
| 查询类型 | 向量检索 | BM25 | Hybrid |
|---|---|---|---|
| "如何注销账户" | ★★★ | ★★ | ★★★ |
| "订单 #2026-A88" | ✗ | ★★★ | ★★★ |
| "乔布斯演讲" | ★★★ | ★★★ | ★★★ |
| "型号 X-9527" | ✗ | ★★★ | ★★★ |
score = Σ 1/(k + rank_i),k 通常取 60。无需调参、稳健、跨场景表现好。
Rerank 用Cross-Encoder 把 query + 单条 doc 一起喂入模型计算精细相关性。比 embedding 相似度更准。RAG 单 trick 中 ROI 最高。
用户的原始 query 通常对检索不友好(指代、模糊、口语化)。查询改写是检索前的"润色"环节。
三层评测:检索 → 生成 → 业务。任何一层出问题都会拖累整体效果,但定位故障源需要每层都有独立指标。
把 RAG 从"一锤子买卖"升级为"可被 Agent 多次调用的工具",循环 Retrieve → Reflect → Retrieve 直到足够。
六、Memory 记忆系统(51-60)
类比认知科学,Agent 记忆分"按时长"和"按内容"两组分类。两个分类正交,不要混淆。
最小可用 = 滚动窗口 + 阈值摘要 + 持久化。50 行代码足够。
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
"什么都存"是新手最大坑——信噪比骤降,召回时混杂大量垃圾。"按价值过滤"是核心原则。
✓ 应该存
- 偏好:用户习惯、口味、沟通风格
- 事实:用户身份 / 业务实体
- 长期目标:项目、KPI、deadline
- 失败教训:上次为什么错了
- 流程模板:可复用的工作流
✗ 不要存
- 原始对话(量大噪音多)
- 临时上下文(解决完即过时)
- PII / 敏感信息(合规风险)
- 已经在 KB 里的公共知识
- 模型输出的废话 / 客套
"召回 + 排序"两步走,类似 RAG。新鲜度 / 相关性 / 重要性 三者加权排序。
把 LLM 当操作系统:上下文 = 主存,外部存储 = 硬盘。Agent 自己用工具 paging in/out 数据,从而突破上下文限制。
"记忆熵增"是长期 Agent 的天敌:重复 / 冲突 / 过期 / 跨域污染。需要主动维护。
双轨制 = 摘要保宏观连贯 + 检索保精准引用。两者并行注入 prompt,相互补强。
多租户场景"记忆串了"=数据安全事故。必须从代码层强制隔离,不能依赖 prompt 自觉。
不是 OR,是 AND。向量擅长模糊语义,KG 擅长精确关系。生产用法是"向量主存 + KG 处理实体关系子集"。
"三类技术指标 + 业务指标"。仅看召回率会漏掉关键问题——召回了但模型没用、用了但已过时。
七、主流框架(61-70)
LangChain 提供 LLM 应用的通用抽象层。最有生命力的是 LCEL(LangChain Expression Language)——用 | 把组件像 Unix Pipe 一样串起来。
LangGraph 把 Agent 显式建模为有状态有向图:StateNodeEdgeConditional Edge。每个节点是函数(含 LLM),状态在节点间流转。
可视化 / 可恢复
显式图结构 + Checkpoint,崩溃后从任意节点续跑。
Human-in-the-Loop
原生 interrupt(),关键节点暂停等用户。
Map-Reduce
Send API 派生 N 个并行 worker,自动汇总。
Subgraph
子图嵌套,复杂多 Agent 系统结构清晰。
核心定位差异:"数据中心" vs "编排中心"。在生产里其实常混用——LlamaIndex 做检索子模块,LangGraph 做主流程。
AutoGen 把多 Agent 抽象为"对话型协作"——每个 Agent 是一个角色,通过 Group Chat / Sequential / Nested chat 互相发消息。
"流程驱动 vs 消息驱动"。CrewAI 像编剧给角色发剧本,AutoGen 像把演员扔进房间让他们自己聊。
| 维度 | CrewAI | AutoGen | LangGraph |
|---|---|---|---|
| 核心范式 | 角色 + 任务 + 流程 | 消息 + 对话 | State Graph |
| 流程灵活度 | 中(固定模式) | 高(自由聊) | 高(显式定义) |
| 调试可视 | 中 | 日志找事 | 图结构 |
| 持久化 | 弱 | 弱 | 原生 Checkpoint |
| HITL | 手动 | UserProxy | 原生 interrupt |
| 上手难度 | 低 | 中 | 中高 |
| 典型场景 | To B 流程固化 | 研究 / 探索 | 生产级长流程 |
定位 = 面向产品 / 业务方的可视化 Agent 工厂。开发者用代码框架,产品 / 业务方用低代码平台——是互补不是竞争。
Dify
开源 / 自托管友好。覆盖 Workflow + RAG + Agent + 评测。企业自部署首选。
Coze(扣子)
字节出品,模板 + 插件生态丰富。C 端创作者 + 国内 B 端。
FastGPT
知识库 + 工作流为主,对话流程编排好。私有化 KB 场景。
n8n / Make
通用自动化 + AI 节点。Workflow 多于 Agent 的集成场景。
看似不同的产品(CLI / IDE 插件 / 桌面)共用一套"5 层"架构:主循环 + 分层指令 + 权限 + 子代理 + 记忆/技能。
两家都在把"主循环 SDK 化",开发者越来越少手写 ReAct prompt。差别主要在生态绑定 / 协议侧重。
"能用框架的尽量用,框架卡死的果断自研"。三类场景框架会成为累赘。
用框架
- 常见 RAG / Multi-Agent 场景
- 组件较多、需要标准抽象
- 团队多人协作、需要可读性
- 需要现成 evaluator / tracing
该手写
- 极简业务:1-2 个工具调用,引入框架反而拖累
- 极致延迟 / 成本:自己控 prompt 拼装、缓存、并发
- 奇特协议:自定义流式工具、多通道流、特殊事件
- 合规要求:审计需精确到每个调用
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。
八、多智能体系统(71-80)
"能单 Agent 做好的,绝不上多 Agent"。多 Agent 的通信代价 + 一致性难度会迅速吃掉收益。
六种主流编排模式,按"中心化程度"排列:从最强中心化(Supervisor)到最松散(Swarm)。
三大协议正在形成"分工矩阵":MCP 管 Agent↔Tool,A2A / ACP 管 Agent↔Agent。
A2A (Google 主导)
跨厂商 Agent 互操作:discovery / message / artifact / Agent Card。已有 50+ 公司站台。
ACP (IBM / LF 主导)
关注异步消息 + 长流任务(BeeAI 出品)。事件总线风格。
MCP (Anthropic)
Agent ↔ Tool 协议,已成事实标准。Cursor / VS Code / Claude Desktop 默认支持。
三种范式:黑板(共享内存)/ 消息(Actor)/ 事件(发布订阅)。耦合度递减,可观测性递增。
"任务漂移"是多 Agent 最常见故障:Worker 越做越偏。解法是把"目标"显式化、可校验、可终止。
多 Agent 死循环模式:A→B→A→B... 或 调用图爆炸。四道闸门按"轻 → 重"逐层守。
"测试金字塔"在多 Agent 同样适用:底层大量单 Agent 单测,向上递减,顶层少量 E2E + 故障注入。
"你是一个 X 专家"是新手最大误区——所有 Agent 都听这一句,最后都长得一样。责任 + 边界 + 输出契约 才是关键。
糟糕版本
你是一个资深的代码工程师。
你的工作是帮助用户完成编码任务。
请认真完成。
- 泛泛而谈,没有边界
- 所有 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 }
类比微服务的"服务注册中心":每个 Agent 暴露 manifest,Supervisor 按能力检索 + 健康状态选择最合适的 Worker。
多 Agent 的token 消耗很容易 5-10× 单 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 次相同失败" → 直接放弃 / 升级人工,不再死磕。
九、评测、可观测性、安全(81-90)
四层金字塔评测:从底层组件到顶层业务,每层独立可测、可定位故障。
| 层 | 关键指标 | 工具 |
|---|---|---|
| 组件 | Recall@K · JSON 合法率 · 工具调用准确率 | Promptfoo · Ragas · DeepEval |
| 路径 | 步数 · token 用量 · Trajectory 是否走对 | LangSmith · Phoenix |
| 结果 | 任务完成率 · LLM-as-Judge · 人工 SxS | Braintrust · Helicone |
| 业务 | 用户解决率 · 转人工率 · 首响 · 留存 | 自建 DW + BI |
LLM-as-Judge 失败率最高的两个原因:① 打分尺度模糊 ② 位置偏差。五个技巧叠加可以让相关性从 ~0.5 提到 0.8+。
"答对了 ≠ 走对了"。终态评测看不到过程浪费、绕路、违规调用,轨迹评测补上这一层。
Agent 可观测 = 传统三柱(Trace/Metrics/Logs) + LLM 专属属性(gen_ai.*)。OTel + LLM 语义约定已成事实标准。
Prompt Injection 是 LLM 应用的"SQL 注入"。攻击载体已从用户输入扩展到所有外部内容:网页、邮件、文档、工具结果。没有单点银弹,只有多层防御。
Jailbreak 是"诱使模型违反 system prompt"。Prompt Injection 是注入新指令,Jailbreak 是绕过现有指令——常组合使用。
Guardrails = 在 LLM 输入 / 输出 / 工具调用前后插入策略检查点。早拦便宜,晚拦兜底。
PII 不是"用了再说",要在入口/中间/出口都设防。四原则:最小化 / 区域合规 / 不记忆 / 全审计。
"线上效果一定会衰减"是事实,问题是多久能发现 / 多久能修。四个衰减源头各有对策。
红队不是"上线前测一次",而是"持续对抗 + 永不退役回归集"。每次模型 / Prompt / 工具变化都要触发。
十、工程化、部署与商业落地(91-100)
生产级架构 = 统一入口 + Agent 服务 + 多支撑组件。核心是模型走 Gateway 而非直连 SDK。
路由 = "把对的请求发给对的模型"。常见 5 个维度,可组合使用。
三种流式传输的核心差异:单向 vs 双向 / 浏览器友好 vs 自定义协议。
| 方式 | 方向 | 浏览器 | 典型场景 |
|---|---|---|---|
| SSE | 单向 server→client | 原生支持 | OpenAI / Anthropic 默认 |
| WebSocket | 双向 | 原生 | Voice / 屏幕共享 / 实时多模态 |
| HTTP Chunked / Streamable HTTP | 单向 | 框架封装 | MCP 远程标准 / 内部 API |
"Key 是钱、是 QPS、是合规风险"。一个 Key 池管理不善的 Agent 系统,可能 24h 内被刷爆。
Agent 总延迟 = Σ(LLM 推理 + 工具调用 + 网络)。优化按 ROI 排序:缓存最先做。
"Agent 没法回归测试到位"——必须靠灰度 + A/B 在真实流量上验证。关键是对照指标 + 自动回滚。
exp_id=prompt_v17。
Agent 服务的特点是"长任务 + 高并发 IO"。Python 部署有 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 必须全异步。
私有化部署的 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 兼容矩阵 | 新模型可能"指令理解风格"变化 |
"立项时算 ROI,上线后看真账单"。三块成本 vs 三种收益的对照表。
STAR-R 五段式:Situation / Task / Action / Result + Reflection。比纯技术细节更打动面试官的是"反思"那一段。
结语:成为一名"靠得住"的 Agent 工程师
100 个问题背完只是开始。真正区分初级与资深 Agent 工程师的,是:
- 能讲清"为什么要这么选",而不是"我用过 X";
- 把 Prompt / 工具 / Memory / 评测当作代码工程来对待,而不是玄学;
- 对延迟、成本、安全、可观测性有"工程师的直觉",而非只追新论文;
- 能从一个失败的 Agent 项目里,归纳出可复用的设计原则。
愿你写出来的 Agent,能跑、能改、能上线、能赚钱。