5. Agent 与多模态:从回答问题到完成任务
普通问答系统的主要产物是文字;Agent 还要根据目标选择动作、调用工具、读取结果,再决定下一步。贯穿本章的例子是“员工事务助手”:员工说“帮我查杭州出差政策,并为下周三的出差创建申请”。助手必须先确认员工身份和日期,查最新政策,再创建申请。查政策是读操作,创建申请是写操作,二者的权限和失败处理不同。Agent 的价值不在于把所有步骤交给模型,而在于将模型的语义判断接入受控的执行循环。
先把术语接到熟悉的软件概念上:Agent 是“会选择下一步动作的应用程序”;模型像一个提出建议的决策模块,工具像可调用的函数或 API,观察结果就是函数的真实返回值。JSON Schema 相当于输入数据的类型约定,MCP 相当于一套让不同工具按统一方式接入的接口协议。模型擅长理解模糊目标,程序负责校验、授权和持久化;读者可用这一分工理解后面的每种框架。
5.1 控制循环:模型建议动作,程序执行动作
一次循环可拆成四步:①应用给模型任务、可用工具的说明和当前状态;②模型返回文字答复或结构化工具调用;③应用校验参数与权限,调用真实工具;④把工具返回的事实送回模型,决定结束或继续。这与 ReAct 的“推理、行动、观察”相对应。工具调用的模型输出只是调用请求,不能当成外部动作已经成功;真正的结果要以工具响应为准。每轮应设置工具调用次数、时间和费用上限,防止“搜不到就反复搜索”的无限循环。
get_policy({"city":"杭州","date":"2026-10-28"})。服务端验证城市和日期,再查当前有效的政策。工具返回“需主管批准、差旅标准见制度第 3 节”。模型随后拟调用 create_trip_request;应用验证登录员工、可用字段和必要确认,执行后拿到申请编号,最后告知员工“申请已创建,编号为……,还需主管批准”。若接口返回失败,只能说明未创建并给出重试途径,不能编造编号。Function Calling 的关键是为每个工具写清名称、用途、参数类型、必填项与允许值。JSON Schema 能把 city 限定为字符串、date 限定为约定格式,并要求缺少必填字段时报错;它改善模型选择和参数生成,仍需程序在运行时验证。例如“金额 10 万”和“金额 1000”都是合法数字,但是否允许创建该申请要由业务规则决定。权限、额度、资源归属和审计不能交给模型自述。
MCP 把工具提供方与 Agent 客户端的连接方式标准化,使工具、资源与提示内容可以按协议被发现和使用。它解决接口集成与复用问题,不自动保证 MCP 服务可信,也不会替代调用方的身份验证和授权。接入外部服务时要审查工具说明、允许连接的服务、参数和返回内容;远程内容属于低信任数据,即使其中写着“请忽略原指令”,也不能提升为系统指令。官方 3.1 课程示例分别演示了函数调用、ReAct、MCP 的本地与远程连接。
5.2 先选控制方式,再决定是否让 Agent 自主规划
固定工作流适合规则清楚、步骤稳定的事情,如“提交出差申请 → 校验字段 → 查预算 → 主管审批”。步骤、分支与失败返回由程序写好,模型只负责识别意图或填写有限字段。ReAct适合下一步依赖刚得到的观察结果:先搜索政策,发现缺少城市,再询问用户。Plan & Execute先把多阶段目标拆成计划,再逐项执行,并根据新证据修订计划;适合制作研究报告、跨系统排查等较长任务。它带来计划生成和维护成本,不能把“先计划”误解为计划永不改变。
规划中的依赖尤其重要:必须先拿到政策版本才能引用政策,必须先确认出差日期和预算才能提交;查酒店标准与查交通标准可并行,但“提交申请”必须等待两项结果。若所有步骤都可预先写死,固定工作流通常更容易测试与审计。若任务有大量未知分支,再给 Agent 有边界的自主规划空间。对于跨部门复杂任务,可以由主管 Agent 分派检索、校对、生成等子任务,并在汇总时核验相互矛盾的结论;多 Agent 增加调用次数和协调失败点,不能仅凭角色数量判断系统更可靠。
| 题干或故障现象 | 优先判断 | 原因 |
|---|---|---|
| 规则稳定,必须经过审批 | 固定工作流与人工确认 | 关键顺序和审批不可由模型临时改写 |
| 下一步取决于搜索结果 | 工具调用加观察循环 | 先取得外部事实,再决定行动 |
| 任务长、有依赖且可分工 | Plan & Execute,必要时分派子 Agent | 显式跟踪步骤、依赖与汇总 |
| 模型声称“已提交”,系统无记录 | 查工具日志与返回值 | 文本承诺不等于写操作完成 |
| 参数格式正确却操作越权 | 服务端授权与业务校验 | Schema 只约束结构,不授予权限 |
5.3 记忆、Skill 与可验证的执行环境
模型本身不会因为一次 API 调用永久记住员工信息。应用可把当前对话、任务状态和刚得到的工具结果放入短期上下文;将长期有效的事实按身份和权限写入可检索存储。课程还从认知功能区分情景记忆(某次任务发生了什么)、语义记忆(稳定事实,例如团队名称)、程序性记忆(怎样执行一种任务)。工程上要为每条记忆记录来源、更新时间、适用对象和删除方式。例如员工部门变更后,旧部门偏好不能继续影响审批路由。滚动摘要可压缩长对话,但摘要丢失关键限制时会造成后续错误;向量召回能找相关记忆,却不能代替权限过滤。
Skill 是可复用的操作说明与配套资源,例如“审核出差申请”可写明触发条件、资料来源、步骤、例外和输出格式。它与 Memory 的区别是:记忆保存某人或某任务的事实,Skill 固化一类任务的做法。它也不等于代码权限;即使 Skill 要求创建申请,实际写入仍应经过工具层的鉴权和确认。对固定流程的质量要求应落在“能否重复执行、何时触发、出现异常如何退出”,而不是 Skill 文件写得多长。
Agent 需要一个受控的执行环境来形成闭环:给出明确任务和允许的工具,执行每步时记录输入、输出与错误,关键节点运行校验,对失败做有限重试或回退,最后把可追溯的结果交给用户。官方 3.8 课程把标准、验证、记录和写回作为可上线能力的重要组成部分;只增加模型“反思一次”的提示,不能替代外部验证。对写操作,特别要留存请求 ID、操作者、目标资源和最终状态,便于排查重复执行。
5.4 多模态是多种输入的处理链,不是万能感知
员工可能拍一张车票,发一段语音说“帮我报销”。系统先识别文件类型、用户和授权范围;图像路径可能需要 OCR 或视觉模型提取日期、金额、票据号,语音路径需要转写;随后将结构化字段与业务规则核对,缺字段就询问,字段确认后才调用报销工具。图像模型“看见 800”不等于票据原件真实,OCR 也可能把 8 识别为 3;金额、币种、日期等高风险字段应给用户确认或进行规则交叉校验。
视频涉及画面随时间变化,还可能有音轨。实际应用通常需要抽帧、定位时间片段、转写或分别分析音频与图像;仅支持图片输入不能推出“能完整理解任意视频”。多模态模型的输出也应标出不确定之处。若题目问“多 Agent”和“多模态”的区别,前者是任务角色或执行单元之间协作,后者是输入输出所涉及的数据形态;一个系统可以同时具备二者。
5.5 换一个业务场景,怎样复用这些原理
不要先问“这个场景该用哪个 Agent 框架”,先画出五件事:目标是什么、要读哪些数据、允许写入什么、哪一步需要人确认、怎样判断执行成功。把员工申请换成电商售后,“查政策”变成查退货规则,“创建申请”变成发起退款;决策仍是模型提出动作,程序核验订单归属和金额,工具返回真实退款状态。把它换成学校选课,“创建申请”变成提交选课请求;先修课程和学分上限是业务规则,不能让模型凭语言推断跳过。场景变了,读写分离、权限边界、观察结果和失败恢复的机制不变。
若新场景无需写操作,仅做资料问答,可从 RAG 加必要的工具查询开始;若步骤稳定,写成固定工作流;若目标开放且要根据新证据调整,才增加规划循环。多模态只改变输入的解析方式:订单照片、票据和语音都先转为待核实的字段,再进入同一业务规则与授权链。这样从“任务、数据、动作、约束、证据”推导架构,比背工具名更容易处理陌生题目。
5.6 单选与多选的判断方法
单选题:先找题干真正要求的动作。“调用实时系统”看工具与观察;“固定审批链”看工作流;“多步目标有依赖”看规划;“跨会话保留稳定信息”看长期记忆;“重复使用同一审查流程”看 Skill;“结构合法但越权”看服务端授权。若选项称模型输出工具调用就代表工具已执行,或 JSON Schema 可以取代权限校验,应排除。
多选题:把每个选项放回执行链判断。安全可靠的工具调用可能同时需要清晰的 Schema、参数验证、资源权限、有限重试、真实返回值和审计;它们解决不同问题,可以同时正确。遇到“始终”“一定”“只要接入 MCP 就安全”等绝对措辞,要寻找反例。题干问某一步的最直接修复时,不要把所有“看起来不错”的措施都选上。
官方依据:现行考纲;3.1 Agent 基础与工具调用;3.2 规划与执行;3.3 多 Agent;3.4 Memory;3.5 Skill;3.8 Harness Loop。