一句话总结
Agent = LLM + 工具 + 循环:模型不再只输出文字,而是通过 Function Calling 输出结构化的"工具调用请求",系统执行后把结果回填,模型再决定下一步——推理 → 行动 → 观察循环往复直到完成任务(ReAct 模式)。Agent 的工程难点不在"智能",在可靠性:护栏、超时、成本和可观测性。
初级理解
Function Calling 四步流程(面试必背):
关键认知:模型不执行任何东西——它只输出"想调什么工具、传什么参数",执行永远在你的代码里。所以工具描述(description)写得越清楚,模型选工具越准——工具描述就是给模型看的"API 文档"。
中级深入
ReAct 模式:Reason + Act 交替——模型先输出思考(我要先查库存),再输出行动(调用工具),观察结果后再思考。相比一次性输出计划,ReAct 能根据每步结果动态纠偏,是目前 Agent 框架的默认范式。
记忆系统:
- 短期记忆:当前对话上下文(窗口有限,要管理截断/摘要)
- 长期记忆:跨会话持久化——对话历史/用户偏好向量化入库,需要时检索注入
- 工作记忆:任务状态、中间结果(通常落库或状态文件,别全塞上下文)
工具设计三原则:① 数量克制(工具太多选择准确率下降,10~20 个内);② 描述精确(含参数含义、返回示例、何时该用/不该用);③ 粒度合适("查订单+查物流"合并成一个工具往往比两个更好——减少模型出错机会)。
高级拓展
多 Agent 协作:复杂任务拆给多个专职 Agent(规划者/执行者/审查者),通过消息传递协作。适用场景:单 Agent 上下文装不下、职责需要隔离(如"写代码的"和"审代码的"分开)。代价:通信成本、错误传播放大、调试复杂度——能单 Agent 解决就不要多 Agent。
MCP(Model Context Protocol):Anthropic 开源的"工具接入标准协议"——工具提供方实现一次 MCP Server,任何支持 MCP 的模型/客户端都能直接用,避免每个应用重复写胶水代码。类比:USB 接口标准化。面试提 MCP 说明你跟到了 2025 年后的生态。
护栏(Guardrails)与可观测:
- 执行护栏:工具白名单、参数校验、危险操作(删数据/转账)强制人工确认
- 循环护栏:最大步数、最大 Token 预算、同一步骤重复 N 次强制终止
- 可观测:每步记录(思考/调用/结果/耗时/费用),链路追踪——不然线上排障是玄学
- 评估:任务成功率、平均步数、单位任务成本,用固定任务集回归
实战场景
场景一:运维助手 Agent 设计(设计题高频)
场景二:Agent 死循环烧钱
场景三:工具太多模型选错
面试模拟
Q:Function Calling 和普通让模型输出 JSON 有什么区别?
A:本质都是结构化输出,但 FC 是模型厂商原生支持:参数 Schema 经过训练对齐、带"是否该调用"的判断、API 层面保证格式合法(失败重试由厂商处理)。自己正则抠 JSON 则全靠提示词硬约束。另外 FC 让"多工具选择"成为模型内建能力——这正是 Agent 循环的基础。没有 FC 能力的模型,用严格的 JSON Schema 提示词也能做,只是可靠性低一档。
Q:Agent 可靠性差的根源是什么?你们怎么保证线上可用?
A:根源是多步决策的误差累积——每步 95% 正确,10 步下来只剩 60%。所以工程上:① 缩短任务链(拆小任务、能单步不循环);② 关键路径"生成建议 + 人工确认"而不是全自动;③ 强护栏(步数/预算/白名单/审计);④ 用固定任务集持续测任务成功率,不达标不放量。核心理念:把 Agent 当"初级员工"管理——授权有限、汇报勤、有 mentor 兜底。
Q:MCP 解决了什么问题?
A:工具接入的碎片化——以前每个 AI 应用接每个数据源都要写一次胶水代码(鉴权、Schema、传输),MCP 把它标准化成协议:工具方实现 MCP Server(工具描述+执行),宿主应用实现 MCP Client,两边即插即用。生态意义类似数据库的 ODBC/JDBC。局限:协议还在演进、企业级鉴权与审计方案尚不成熟,核心敏感系统接入仍需自建网关层。