AI 课堂

工作流、Agent 与工具调用

2026-09-17

本课结构 点击折叠
  1. 一句话定义
  2. 生活化类比(建筑行业版)
  3. 本质与能力边界
  4. 实战演练:把“供应商资质初核”从自由 Agent 改造成受控工作流
  5. 建工案例:一次“假完成”事故的复盘
  6. 供应商话术拆解
  7. 常见问答
  8. 自测
  9. 概念卡片
  10. 延伸阅读

模型说“我要查台账”只是发了一个请求,真正去查、去写的是程序。分清“请求”与“执行”,再分清“按图纸施工”与“让班组长自己决定”,就懂了这一课。

本课回答的业务问题:什么叫“接了工具”?工作流和 Agent 有什么区别?为什么模型说“已完成登记”不可信?

前置课程:第 2 阶段第 1–5 课。

读完本课你将能够

  1. 画出一次工具调用的完整时序,说清模型和程序各自负责什么;
  2. 用“确定性优先”的原则决定哪一步走工作流、哪一步才考虑 Agent;
  3. 识别超时、重复写入、假完成三类事故,并给出幂等设计。

一句话定义

工具调用是模型发出“请帮我执行某操作”的结构化请求,宿主程序负责校验、执行并返回结果——模型是提议者,程序是执行者。工作流按预定步骤走(像按图施工);Agent 在给定边界内自己决定下一步(像授权的班组长)。Agent 运行框架是管理这一切的程序系统:状态、预算、重试、恢复与停止条件。

三个词常被混着用,先摆正关系:工具调用是原子能力(一次请求-执行);工作流和 Agent 是组织方式(怎么把多次调用串起来);运行框架是管理制度(出错了怎么办、花超了怎么办)。一个系统可以只有工具调用没有 Agent,但只要是 Agent 就必然有工具调用。

生活化类比(建筑行业版)

  • 工具调用 = 班组提出用料申请:钢筋班在限额领料单上填“需要 C30 混凝土 20 方”——这张申请单本身不产生一方混凝土。材料员(程序)做三件事:核验单据(这班组有没有领料权限、量有没有超限额)→ 去库房发料(执行)→ 让班组签回执(返回结果)。没有材料员的签字,申请单就只是一张纸。同理,模型输出的“调用请求”只是文本;没经过程序的校验和执行,什么都没发生;
  • 工作流 = 总进度计划:验槽 → 垫层 → 绑筋 → 浇筑,工序写死,每步有验收条件。改工序要改图纸(改流程配置),但每一步的确定性有保证;
  • Agent = 授权范围内的栋号长:给他目标(本月完成 3 层主体)、资源清单(劳动力、材料额度)和红线(安全规范、夜间禁施工),先干什么后干什么他自己调度。授权越大,越需要清晰的边界和检查机制——这不是不信任,是管理常识;
  • 运行框架 = 项目部管理制度:施工日志(状态记录)、预算管控(成本上限)、返工流程(重试与幂等)、停工令(中止条件)。班组长再能干,制度缺位也会出事故。

类比失效处:真人班组知道“混凝土还没终凝不能上人”这种物理常识,模型对工具的后果没有本能敬畏——它可能兴高采烈地连续调用写入工具十次,因为它“觉得”还没写完。所以对模型的授权必须显式写进程序规则,不能像对人一样靠“常识”和“默契”。

本质与能力边界

1. 一次工具调用的完整时序

把“查黑名单”这个最简单的工具调用拆开看(每一步都对应一个可能出错的地方):

① 模型读上下文,决定需要查黑名单
   → 生成结构化请求:{"tool": "查黑名单", "参数": {"供应商名": "某公司"}}
② 宿主程序收到请求
   → 校验:这个模型会话被授权调用这个工具吗?参数合法吗(名字非空、类型对)?
③ 程序执行查询(访问黑名单库)
④ 程序把结果回填上下文:{"结果": {"命中": false}}
⑤ 模型读到结果,继续推理,生成下一步(再查一个?出结论?)

五个环节、五种典型故障:①模型选错工具或编造参数(参数里的供应商名是幻觉);②程序没做校验,越权执行;③查询超时或库挂了;④结果没正确回填,模型“以为”查过了;⑤模型无视失败结果,照样宣称“已核实”。评审一个 AI 系统时,让它把这段时序讲清楚——讲不清楚的系统,五步里至少有两步是裸奔的。

2. 模型怎么知道有哪些工具可用

工具不是模型天生就会用的。每次请求时,宿主程序会把一份工具清单放进模型的上下文:每个工具一段机器可读的说明——名称、干什么用、需要哪些参数、参数什么格式(本质上是一份 JSON Schema,写法与校验见第 2 课)。模型读到清单后,若判断需要借助工具,就不输出自然语言回答,而是输出一段符合格式的调用请求;程序识别到这个特殊格式,拦截下来去执行,再把结果回填。模型自始至终没有“动手”,它只是写了一张格式工整的申请单。

由此得到三个直接推论:

  • 工具说明就是提示词的一部分。说明写得含糊,模型就会用错工具、填错参数——“供应商信息查询”和“黑名单核查”如果描述相似,模型会混着用;
  • 工具不是越多越好。清单每多一个工具,模型选错的概率就上升一分,上下文也更长、更贵。工程上的做法是只给当前任务需要的工具,控制在少数几个;
  • 授权边界在清单这一层就该收紧。没放进清单的工具,模型根本“看不见”;放进清单,就等于把这份能力摆到了模型面前。工具清单就是授权书。

3. “已执行”是文本,不是事实

模型说“已完成供应商登记”,这句话在技术上和一个演员念台词没有区别——它是对世界的陈述,不是对世界的改变。完成与否只有一个判据:台账里的真实记录。

为什么模型会“谎报”?多数时候不是恶意:工具返回超时,模型收到“未知结果”,但它的训练倾向是给出连贯、确定的回答,于是补了一句“已完成”。症状是幻觉,根源是系统没有把“结果未知”显式传给模型并禁止它脑补。正确设计:工具超时时,回填给模型的必须是“执行结果未知,请勿假定成功”,且任务状态标记为“待人工核验”,不允许流程继续往下走。

4. 超时的三态与幂等设计

超时是最容易处理错的事件,因为它有三种状态:已执行(请求到了、执行了,只是响应没回来)、未执行(请求根本没到)、未知(分不清前两种)。把超时当“失败”直接重试,就会在“已执行”的情况下重复执行——重复登记、重复付款、重复发函,都是这么来的

幂等(idempotency)是解药:同一个业务操作,执行一次和执行多次的效果相同。工程实现的核心是业务单号

  • 每个写操作带唯一单号(如“供应商登记-2026-09-17-001”);
  • 执行端(台账系统)记录单号:同单号再次到达,直接返回上次结果,不再新增记录;
  • 重试前先按单号查状态——查到“已完成”就不重试,查不到或“进行中”才重试,仍未知则转人工。

这套机制在材料管理里早有对应物:限额领料单编号唯一,重复提交的单子材料员一眼识别。AI 系统的写入操作没有理由比材料领料更草率。

5. 工作流 vs Agent:确定性优先原则

维度 工作流 Agent
步骤决定 预先写死 模型在边界内动态决定
确定性 高(同输入同路径) 低(同输入可能不同路径)
可审计性 强(路径固定,日志清晰) 弱(要靠轨迹回放)
适合 流程稳定可枚举的任务 路径依赖中间结果的任务
成本 可预算 难预算(循环、重试不可预知)

判断口诀:能写清楚步骤的,写死它;写不清楚的,才交给模型选。材料报审、计量支付、资质初核——建工业务里 80% 的流程是可枚举的,工作流足够。开放性调查(“梳理这起结算争议的证据链缺口”)、多来源汇总(“从合同、签证、往来函件中拼出工期索赔事实”)才值得考虑 Agent。

Agent 不是更高级,是更贵的灵活性:每一步动态决策都引入不确定性,而管理不确定性是要花钱的(评估复杂、日志更长、出错排查更难)。市面上“我们的产品是 Agent 所以更智能”的话术,把组织方式和能力水平混为一谈——一个执行良好的工作流,业务效果通常胜过一个管理粗糙的 Agent。

6. 运行框架:状态、预算、恢复、停止

Agent 运行框架(无论自研还是用产品)要管五件事,缺一件就是隐患:

  • 状态:进行到哪一步、已经确认了什么结论。状态落库,进程崩了才能接着干;
  • 预算:最多调用几次模型、几次工具、花多少钱、跑多久。没有预算的 Agent 理论上可以无限循环——真实事故里“Agent 跑了一夜烧掉几百块”并不罕见;
  • 重试与幂等:见上文,重试必须带单号;
  • 恢复:中断后从最近状态继续,而不是从头再来(从头重来对写入类操作尤其危险);
  • 停止条件:什么情况必须停下来等人——连续失败、触及预算、遇到需要授权的操作、结果置信度低。“遇到写操作必须人工确认”应该默认是一条停止条件。

7. 多 Agent:慎用

多个 Agent 协作(一个查资料、一个分析、一个复核)听起来专业,但每加一个 Agent,协调成本、核验成本和费用都上升,且错误会在 Agent 之间传播放大。采用前提三条全满足:任务真的可拆分且子任务独立、每个子任务的产出可独立验证、实测收益为正。先用单 Agent + 工具跑通,实测瓶颈确实在“单线思考”上,再考虑拆多 Agent——多数业务场景到不了这一步。

实战演练:把“供应商资质初核”从自由 Agent 改造成受控工作流

场景(虚构):第一版做法是给模型一个 Agent 权限:“请完成供应商资质初核,可自行决定步骤。“试运行两天暴露三个问题:模型有时跳过黑名单核查直接给结论(它”觉得“资质材料齐全就够了);有一次连续调用写入工具 6 次(它不确定是否成功);轨迹日志杂乱,出问题无法回放。

改造过程四步:

  1. 拆步骤:把任务写死为五步——①读申请材料 → ②模型抽取资质字段(结构化输出+校验,见第 2 课)→ ③程序查黑名单(只读工具,必经步骤,不可跳过)→ ④模型比对资格条件生成初核意见 → ⑤人工终审。每步的输入输出、验收条件写入流程配置;
  2. 权限表:查黑名单 = 只读,授权给流程第 3 步;资质库读取 = 只读;登记入库、发通知等写操作全部移出模型环节,由人工或独立审批流执行。模型环节只有读权限;
  3. 故障演练(上线前必做):模拟黑名单查询超时——预期行为:流程标记“未核验”并暂停,转人工;实际观察到模型环节收到超时后试图继续第 4 步——修复:框架层强制“工具失败即挂起”,不把失败结果交给模型自由发挥。模拟重复提交同一申请——靠申请单号幂等拦截,第二次提交返回首次结果;
  4. 验收:跑 20 个虚构样本(含 3 个黑名单命中、2 个材料缺失),检查点三个——黑名单核查是否 100% 执行(流程保证,不靠模型自觉)、初核意见是否附原文依据(引用回查)、轨迹日志能否完整回放每一步。

改造后的结论值得记住:同一批模型能力,从“自由发挥”改成“受控流程”,质量和可审计性立即上一个台阶——先管流程,再谈智能。

上线前检查清单(可直接复用到任何“接了工具”的系统):

  • 每个工具的权限(只读/写入)、授权给流程的哪一步,是否白纸黑字成文;
  • 每个写操作是否有唯一业务单号,执行端是否做了幂等(同单号只生效一次);
  • 超时是否按“未知”处理,有没有明确的挂起与转人工路径;
  • 上线前是否做过故障演练:超时、重复提交、工具不可用,各至少模拟一次;
  • 轨迹日志能否完整回放一次任务的全部步骤与决策依据,供事后审计。

建工案例:一次“假完成”事故的复盘

青柏项目(虚构)采购助理用对话式 Agent 登记供应商,Agent 回复“已完成登记,编号 GYS-0612”。三天后供应商投诉查不到记录。复盘时间线:

  • 14:02 Agent 发出台账写入请求;14:02:31 网关超时(台账系统当时在维护);
  • Agent 收到的是超时错误,但它在下一轮回复里说“已完成”——模型把“请求已发出”脑补成了“执行已成功”;
  • 台账侧实际未收到请求(属于超时三态里的“未执行”),且该系统没有单号幂等机制,采购助理手动补录时险些造成重复。

修复三件套:①超时结果显式回填为“结果未知”,任务状态转“待核验”;②补录前先按供应商统一社会信用代码查重;③写入类操作改走带审批的独立通道,模型环节只生成申请草稿。事故根因不在模型“撒谎”,在系统没把不确定性关进笼子。

供应商话术拆解

话术:“我们的平台是全自主 Agent,能自己完成任务,无需人工干预。”

逐问拆解:

  1. “自主”到什么边界?——要求出示权限清单:Agent 能调用哪些工具,哪些是只读,写操作要不要人批?“全自主 + 无需人工”用在合同和资金场景,本身就是红旗;
  2. 怎么防“假完成”?——问工具超时的处理机制。合格答案包含“结果未知状态 + 真实结果核验 + 幂等单号”三要素;
  3. 失控了怎么办?——预算上限、停止条件、人工接管机制分别是什么;
  4. 能不能先只读试用?——合格供应商会欢迎分阶段授权;对“必须一次全开”的方案保持警惕。

合格回答应该长什么样:“我们的 Agent 默认只读工具集,写操作走审批流;每次调用有单号幂等;超时即挂起转人工;后台可设调用次数和费用上限,可一键暂停。”——把边界当卖点讲的供应商,才真的做过生产环境。

常见问答

Q1:Agent 是不是比工作流更先进? 不是。它们是两种组织方式,不是两代技术。确定性任务是工作流的主场(更稳、更便宜、更好审计);Agent 只在“路径无法预写”的任务上有不可替代性。选型看任务性质,不看名词新旧。

Q2:“接了工具”的系统和普通对话有什么本质区别? 区别在“能不能核实真实世界”。普通对话里模型只能就着你给的文本推理;接了工具(查询类)后它能拿到实时数据,接了写入类工具后它能改变系统状态——后者意味着风险等级完全不同,权限设计必须跟上

Q3:超时了到底算成功还是失败? 都不算,算“未知”。这正是要幂等的原因:先查状态(按单号),查不到再重试,重试也带同一单号。把超时简单当失败重试,是重复事故的标准成因。

Q4:模型会不会自己偷偷调用工具? 不会“偷偷”——每个工具调用都经过宿主程序,日志里都有记录(如果程序做了日志)。风险不在“偷偷”,而在程序没设防:权限清单太宽、写操作没有确认环节。管住程序,就管住了模型。

Q5:MCP 和工具调用是什么关系? 工具调用是“模型发出请求、程序执行”这个机制本身;MCP 是让工具接入标准化的协议(下一课专门讲)。一个是动作,一个是插座标准。

Q6:多 Agent 系统什么时候值得上? 三个条件全满足再谈:任务可拆且子任务独立、每个子任务产出可独立验证、单 Agent 版本实测证明瓶颈在“单线思考”。实践中大多数建工业务场景,单 Agent 或纯工作流已经够用。

Q7:怎么跟领导解释“模型说完成不算完成”? “模型的话相当于施工班组的口头汇报’干完了’。我们的验收办法从来不是听汇报,是去现场看:查台账真实记录、核对回执单号。AI 也一样——系统设计成以真实结果为准,汇报只是线索。”

Q8:工作流写死了,遇到例外情况不就卡住了? 卡住不是缺陷,是设计。工作流的价值恰恰在于“意料之外的情况不擅自处理”:遇到例外(材料缺失、金额超阈值、黑名单命中),正确行为是挂起、带着完整上下文转人工,而不是让模型现场发挥。好的工作流会把“例外出口”当正式流程来规划——哪些情况转给谁、附上什么材料、多久内要处理。一个永远自己扛、从不求助的系统,比一个偶尔挂起的系统危险得多。

自测

采购 Agent 汇报“已完成供应商登记”,但工具调用记录显示写入请求超时。你会查什么?什么时候允许重试?怎么防止重复登记?

参考要点(先自己作答,再展开对照)

查什么:台账的真实记录——按供应商统一社会信用代码/申请单号查询是否已存在记录。超时是三态事件(已执行/未执行/未知),不能凭超时本身判定失败,更不能信 Agent 的“已完成”(那是对请求的陈述,不是对结果的陈述)。

何时允许重试:查证未写入(或无法确认)后,携带同一业务单号重试;若查到已写入,不重试,直接补全流程后续。重试后仍未知,转人工处理并记录。

怎么防重复:①唯一业务单号 + 台账侧幂等(同单号只生效一次,重复到达返回首次结果);②补录前按供应商代码查重;③写入类操作增加审批确认环节,模型环节只生成草稿。

答题要点:验收以真实系统状态为准;超时≠失败;幂等靠单号;写操作与模型决策分离。

概念卡片

名词 一句话定义
工具调用 模型发出结构化执行请求,宿主程序校验并执行;提议与执行分离
工作流 按预定步骤执行的流程编排:确定、可预算、可审计
Agent 在目标与边界内动态决定下一步的模型系统:贵但灵活
Agent 运行框架 管理状态、预算、重试、恢复与停止条件的程序系统
超时三态 已执行/未执行/未知——重试前必须先查真实状态
幂等 同一业务单号执行多次效果不变,防重复写入事故
结果验收 以系统真实状态判断完成,不以模型自述为准

延伸阅读

← 课程目录