想象一下:孩子学校每周都发一批英文讲义——全是 PDF,纯文字,没有图片——每次都需要翻译成中文,好让祖父母一起看。这个任务每次都完全相同:打开文件、提取文字、翻译、保存结果。周复一周,一模一样。
回顾一下本系列讲过的内容。你已经知道有一位博览群书的图书馆员(大模型,LLM)坐在信箱口后面,几乎能回答你写在纸条(提示词,prompt)上的任何问题。你也知道有一位跑腿的(智能体,agent)负责图书馆员做不到的体力活:取文件、保存东西、点击按钮。
那么,问题来了:如果这个差事每次都一样,你真的需要每次重新想一遍怎么做吗?
把差事拆开来看
我们认真把这个"PDF 翻译成中文"的任务拆开,因为这样做会发现一件很重要的事。
第一步:打开 PDF,提取全部文字。 第二步:把这段文字从英文翻译成中文。 第三步:把中文文字保存成一个新文件。
再读一遍这三步。其中只有一步真正需要智慧。第一步——从 PDF 里提取文字——是一件机械任务,普通计算机程序几十年前就能做到,根本不需要图书馆员。第三步——保存文件——更简单。这两步都不需要天才,都不需要往信箱口塞纸条。
只有第二步,翻译,才真正值得把纸条递进信箱口。那是唯一一处能让图书馆员的广博学识派上用场的地方。
为什么每次让跑腿的随机应变会出问题
在第七篇文章——你在哪里遇见 AI——我们看到跑腿的可以靠临场发挥完成整个差事:想清楚下一步做什么,需要的时候向图书馆员求助,顺手使用合适的工具。对于那些一次性的、难以预测的任务,这种灵活性正是你需要的。
但对于一个每周都一模一样的任务呢?每次都临场发挥就是在浪费资源。跑腿的每次都要重新想步骤,图书馆员被打扰去做根本不需要它的事情,还可能出现小错误——也许某次文件存错了文件夹,或者文件名取得不一样。这就好比每天早上请一位大厨来帮你涂面包上的黄油:他当然能做到完美,但这不是对任何人时间的好用法。
有更好的办法。
把步骤写成固定菜谱
如果差事每次都一样,就把它写下来,每次照着写好的做。
第一步:运行 PDF 文字提取程序。(硬编码,不需要思考。)
第二步:把提取出来的文字写进纸条,内容是"请把以下内容从英文翻译成中文",塞进信箱口,等纸条回来。(这是唯一需要图书馆员的一步。)
第三步:把回来的中文文字保存为文件 translation-[日期].txt。(硬编码,不需要思考。)
这个固定的步骤顺序——写下来、锁定好、每次都一样地执行——就是技术人员说的 工作流(workflow)。跑腿的严格按菜谱执行,只在真正需要天才的那一步才去打扰图书馆员。
其他步骤不过是管道接线。
两种搭建方式
工作流大概有两种搭建方式,在不同情况下各有优劣。
第一种是写代码。程序员坐下来,用编程语言把菜谱一步一步精确地写出来。有一个在 AI 领域很流行的工具包叫做 LangChain——它提供了一套现成的积木(调用 AI 模型的积木、读取文件的积木、把步骤串联起来的积木),让开发者可以快速拼出一个工作流。如果你听到有人提起 LangChain 却不知道是什么,现在你知道了:它是一个用代码搭建 AI 工作流的工具包。
第二种是低代码或拖拽式。有些工具允许不会编程的人,在屏幕上拖动方框、画出连线,就能搭出一个工作流。"当这个文件夹里有新 PDF 出现时"连到"提取文字",连到"发给 AI 翻译",连到"把结果保存到这里"。不需要写任何代码。这类工具有的叫 Zapier、Make 或 n8n,也有越来越多专门面向 AI 场景的平台。
两种方式最终得到的是同一样东西:一份可靠的固定菜谱,每次按下运行就能稳定执行。
最大的优势——以及一个重要的弱点
工作流的美妙之处,恰恰在于它的可预测性。周一运行,得到稳定的结果;周五再运行,流程一步不差。没有临场发挥,没有漂移,不会忘记保存文件。对于重复性任务,这种可靠性价值极高。
但有一个缺陷,值得直说:工作流是刚性的(rigid)。它只能处理你在搭建时预想到的情况。
如果某周 PDF 是扫描图片而不是真实文字呢?文字提取那一步立刻出错,整个流程戛然而止。
如果翻译结果顶部需要加一段说明这份文件是谁写的呢?菜谱里没有这一步,所以就不会发生。
如果有时候来的是一封邮件而不是 PDF 呢?工作流不知道该怎么办,直接卡死。
工作流就像一个非常可靠但非常固执的助手。告诉他你期待的每一种情况,他能一丝不苟地执行多年。给他看一件意料之外的事,他就愣在那里。
这不算缺陷,而是一种权衡。你用灵活性换来了一致性。对于输入始终整齐划一的任务,这是非常划算的交易。但当输入不断变化时,你需要更有适应性的东西。
这在大图景里处于什么位置
回顾整个系列。我们有一位图书馆员,能精彩地续写你的纸条,却不能走出房间。我们雇了跑腿的来做所有体力活。我们给跑腿的配备了工具——在第六篇文章里,我们看到跑腿的和工具店通过 MCP(模型上下文协议,Model Context Protocol)如何礼貌地握手。在第七篇文章里,我们看到当任务不固定时,跑腿的可以自由发挥。
现在我们看到了一种介于两者之间的做法:跑腿的按照剧本行事。不即兴发挥,不思考,只是执行一个固定计划,只在需要智慧的那一步才去请教图书馆员。
这就是工作流。它处于一个梯子的中间位置:一端是程序员把每一步全部硬编码进代码里,完全没有 AI;另一端是跑腿的在任何事情上都自由发挥。工作流是中间地带——大部分都是硬编码,只在精心选定的那一格里,让图书馆员的智慧进来。
这个梯子的雏形已经清晰可见:全部硬编码,然后是工作流,然后是更灵活的某种东西。
下一篇讲什么
这自然引出一个问题:如果输入不断变化,该怎么办?如果有些 PDF 是法文的,有些是西班牙文的,祖父母有时候想要摘要而不是全文翻译,那怎么处理?
一个刚性的工作流应付不了这种情况。但有一种技巧,可以给跑腿的准备一套现成的说明书和脚本,让他随时取用——比固定菜谱更灵活,却比纯粹的即兴发挥更有条理。
我们把它叫做技能(skill)。那正是第九篇文章要讲的内容。
本文是AI 大白话系列的第八篇——十篇短文,带你为所有 AI 术语建立一张清晰的地图,每篇只讲一个概念。