智能体是入口,工作流是它挂的一个工具。用户跟智能体说话,智能体决定调不调。 七句话分三类:调工作流、直接答、闲聊。判对六句。 判错的那句「board 有几个意思」被当成闲聊,用户得到一句自我介绍——这比报错更糟。
前面八节做的是一条链,这一节给它装一个门。门开错了,链做得再好也没人用。 和第 8.9 节一样,最后一步是「让智能体调用工作流」。区别在这一节多了一层判断:该不该调。 书里用的是意图识别节点。 本沙箱没有模型,下面用关键词表代替——它漏判的那一条,正是关键词表永远补不齐的那一类。
一、入口和工具
用户打开的是一个智能体,不是一条工作流。工作流在智能体的工具列表里,像插件一样挂着。 智能体做两件事:听懂用户在说什么、决定用哪个工具。工作流只管干活。 这个分工很重要。 把判断塞进工作流,工作流就变成「什么都要会」的怪物; 把干活塞进智能体,智能体就开始瞎编。
所以工作流的开始节点只收一个图片地址,其余一概不管。判断谁做?智能体做。
二、三类请求
用户的话大致三类:要学英语(调工作流)、问语法(直接答)、闲聊(也直接答)。
| 用户说什么 | 该走哪条 | 为什么 |
|---|---|---|
| 这张图上的英文怎么读 | 调工作流 | 有图,要抽字段 |
| 虚拟语气和条件句有什么区别 | 直接答 | 常识,不需要图 |
| 今天天气不错 | 闲聊 | 跟英语无关 |
演示里七句话,判对六句。三句该调、一句该直接答、两句闲聊,都对了。 错的是第七句:「board 有几个意思」。它该调工作流(问词义),被判成了闲聊。 原因很朴素:那句话里没有一个中文关键词,只有一个英文词。关键词表只认它列过的词。
三、判错的代价
判错有两个方向,代价不一样。 该调没调:用户问词义,智能体回一句「你好,我可以帮你看图片学英语」。用户觉得它没听懂,走了。 不该调调了:用户说「今天天气不错」,智能体把这句话丢进图片理解,拿到空地址,抽出零个字段, 回一句「这张图我没看懂」。用户觉得它坏了。
两种都比报错糟。报错用户会重试;这两种用户直接走,还不告诉你为什么。 所以判断这一层要偏保守:拿不准就别调,用一句话问回去。「你是想让我看一张图吗?」比瞎调强。
四、三条路
关键词表:便宜、快、可解释,但漏同义说法。演示里漏的就是这一类。 加英文词检测:句子里有连续三个以上英文字母也算命中。补上了第七句,但「今天好 fine」这种会被误判。 意图识别节点:交给模型判,能覆盖同义说法。代价是多一次调用,慢一点贵一点。
书上用的是第三种。选哪条看误判的代价:误判贵就上模型,误判便宜关键词表够用。
五、人设别和工具打架
智能体的人设写「英语学习助手」,工具挂「看图学英语工作流」,这是一致的。 如果人设写「售后客服」,又挂了「推文生成器」,模型会犹豫——它不知道该按哪个身份说话。 犹豫的结果通常是不调:它选最保守的做法,用文字回你一句。
所以人设和工具要同一个方向。 第 8.9 节讲过一次,这里再讲一次,因为这是上线后最常见的「明明配了却不生效」。
六、动手 Demo:智能体调用工作流:先判该不该调
七句真实说法,三类去向。用关键词表判,看它漏哪一句。 再列三条路,比较各自的代价。
LEARN = [u'图', u'单词', u'音标', u'怎么读', u'翻译', u'卡片', u'例句']
def intent(t):
if any(k in t for k in LEARN): return u'调工作流'
if any(k in t for k in (u'什么区别', u'语法', u'为什么')):
return u'直接答'
return u'闲聊'
实跑输出:
--------------------------------------------------------------------
智能体调用工作流:先判该不该调
--------------------------------------------------------------------
① 七句话,分三条路
--------------------------------------------------------------------
| 用户说什么 | 判成 | 该走哪条 | 对不对 |
|---|---|---|---|
| 这张图上的英文怎么读 | 调工作流 | 调工作流 | 对 |
| 帮我看看这个单词什么意思 | 调工作流 | 调工作流 | 对 |
| 这个单词能再造个例句吗 | 调工作流 | 调工作流 | 对 |
| 虚拟语气和条件句有什么区别 | 直接答 | 直接答 | 对 |
| 今天天气不错 | 闲聊 | 闲聊 | 对 |
| 你叫什么名字 | 闲聊 | 闲聊 | 对 |
| board 有几个意思 | 闲聊 | 调工作流 | 错 |
七句判对 6 句。错的那句是「board 有几个意思」——整句没一个中文关键词,只有个英文词。
② 判错了会怎样
--------------------------------------------------------------------
「board 有几个意思」被判成闲聊,智能体的回答是:「你好,我可以帮你看图片学英语」。
用户问的是词义,得到一句自我介绍。这比报错更糟——报错用户会重试,这个用户直接走了。
③ 三条路,代价不同
--------------------------------------------------------------------
| 办法 | 靠什么判 | 代价 |
|---|---|---|
| 关键词表 | 「例句」「单词」这类中文词 | 漏掉整句只有一个英文词的提问 |
| 加英文词检测 | 连续 3 个以上英文字母也算命中 | 「今天好 fine」这种会被误判 |
| 意图识别节点 | 交给模型判,覆盖同义说法 | 多一次模型调用,慢一点贵一点 |
书上用的是第三种:智能体里挂一个意图识别节点,判成「学英语」才跳工作流。
这里用关键词是因为沙箱没有模型。
! 三条路都能走通,选哪条看误判的代价:误判贵,就上模型;误判便宜,关键词表够用。
①第一张表七行:三句调工作流、一句直接答、两句闲聊、一句判错。 ②判对六句。错的那句是「board 有几个意思」,整句只一个英文词,没有中文关键词。 ③第二段讲判错的后果:用户问词义,得到一句「我可以帮你看图片学英语」。 ④这句比报错更糟——报错用户会重试,这个用户直接走了。 ⑤第三张表三条路:关键词表、加英文词检测、意图识别节点,各自的代价不同。
30 秒实验
- 把你自己的智能体打开,看人设和工具是不是同一个方向。不是的,改人设比改工具便宜。
- 列十句真实用户可能说的话,人工标一遍该走哪条,再让你的判断逻辑跑一次,数错几句。
- 找一句你拿不准的,试一次「问回去」而不是「猜一个」。看用户是不是更好受。
常见误区
- 「工作流配好了,用户自然会用。」入口在智能体那儿,判断错了链再好也没人走到。
- 「判错就判错,重试一次。」用户不会重试。他得到一句不相干的回答就走了。
- 「人设随便写,不影响功能。」人设和工具打架时,模型选最保守的做法——不调。
自测三问(点开对答案)
1. 智能体和工作流各管什么? —— 智能体管听懂和决定用哪个工具,工作流管干活。判断别塞进工作流,干活别塞进智能体。 2. 判错的两个方向,哪个更糟? —— 两个都糟,且都不报错。该调没调用户觉得没听懂,不该调调了用户觉得坏了。都直接走。 3. 拿不准的时候怎么办? —— 问回去,别猜。「你是想让我看一张图吗」比瞎调一条链强,也比冷场强。第二个案例完了。下一章换场景:从一段视频里把文案扒出来,再改写成自己的话。
- ☐ (本篇完,下一篇 10.1 项目背景与整体思路)
相关笔记
- 创建智能体调用工作流:上一章同样的位置
- 智能体开发设计思路:这条链的设计思路
- 扣子快速开发入门:智能体怎么建
- 🐦 扣子开发 AI Agent · 索引