【可执行状态】现在就能做(填制引擎跑在公网,按附录 C 把 doc-filler 连接器接进入口即可)
【本讲对应资产】doc-filler 引擎(5 个工具);本讲用 filler_help filler_batch filler_run filler_check
【本讲原理来源】L3 第 19 课《第一个 Agent 应用实战》(成长五步)、L3 第 21 课《Agent 核心认知框架》(规划)
每年九月,总有一位老师的办公桌上摊着同一件活:十六份教案。学院的要求说得清楚——每一次课单独成一份 docx,按学院模板、一章一页。
她打开模板,把“第 3 章 智能体的设计”那几处逐个敲进去,另存一份;再打开一次模板,把“第 4 章”敲进去,再另存一份……到第十份以后,人就开始机械了:字号改飞、班级写错、日期忘了改,都是这时候出的。
真问题是:这十六份东西,九成内容其实是一样的,只有一成不一样——可你偏偏要为那一成,把九成重新做十六遍。 打个比方,这就像给十六个学生写同一封通知,只是收信人不同,你却把整封信从头抄了十六遍。
这一讲要练的动作,就是把“做十六遍”,变成“把不一样的那一份说清一次,剩下的交给机器”。
陈老师(化名)这学期上《商业人工智能应用》,一个班,数字经济 2024 级 1 班。学院要求得细:每一次课的教案都要单独成一份 docx,按学院模板、一章一页。 课表排下来是十六次课。
陈老师的两种过法。
第一种:打开模板,把“第 3 章 智能体的设计”这一份的九处内容逐个敲进去,另存一份;再打开一次模板,把“第 4 章”敲进去,另存一份……前十份还算清醒,第十一份开始,她把学时的“3”写成了“4”,把“2026 年 9 月 17 日”复制到了四份文件里;等到十六份收齐,她自己都说不清哪几份改过。交上去,教研室退回三份:一份班级写成了上学期,两份填制日期没改。
第二种:把十六次课各自不同的内容列成一张表,把整门课共用的那几项说一遍,一次出齐。 她做的是同一件事——只是把“抄哪一格”这件事,从手上搬到了配置里。出件之后她只干了一件事:抽三份打开,把六项关键字段读一遍。
同一件事,两种过法。差别不在打字快慢,也不在谁更熟练:
手工那一种,是“用一份文件复制十五份文件”;批量这一种,是“用一张表长出一叠文件”。 后者就是这一讲要练的动作。
| 做法 | 十六份的耗时 | 最容易出错的地方 | 出错规模 | 事后能核对吗 |
|---|---|---|---|---|
| 手工逐份另存 | 半天到一天 | 班级、学时、日期忘了改;字号改飞 | 错一份算一份,也可能错十几份 | 只能一份一份打开看,看三份就放弃 |
| 让别人代做 | 快一些,但事多 | 别人的班名、别人的学时留在表里 | 成批不对口 | 说不清哪里不对 |
| 一次出齐 | 几分钟 | 公共信息写错、记录条数不对 | 错了就是十六份一起错 | 校验报告 + 抽三份读回,两次就能核完 |
最后一行是这个办法唯一的代价,也是本讲要反复强调的一句话:一次出十六份,错误也会十六份。
翻开任何一所学校的教案模板,你要填的位置分成两组,界线很清:
jiaoyan 场景正是按这个分法设计的,模板里 14 个占位符,数据粒度是课次粒度(记录列表叫 lessons)。十项课次级 + 四项课程级 = 模板上的 14 个位置;哪个占位符取哪一层,调 filler_help 看映射表最准。
| 层次 | 有哪些 | 一学期写几次 | 放在哪 | 漏了会怎样 |
|---|---|---|---|---|
| 课程级(整门课共用) | 课程名称、授课教师、授课班级、授课学期 | 一次 | context_json | 十六份的这四处全空 |
| 课次级(每次课不同) | 章节、课时、教学目标、重点、难点、方法、过程、板书、作业、日期 | 一次课一次 | lessons 列表,一课一条 | 少了哪条,就少哪一份;串了哪条,就错哪一份 |
比如说“授课班级”这一项:它在十六份教案上完全相同,写进公共信息里一次就够;而“章节”这一项十六份完全不同,必须一条一条给。就像打印信封——学校名字印在版头上(共用),收件人姓名地址一封信一个(各不同);你不会因为要印十六个信封,就把学校的名字也印十六遍。
“把同一份格式里的格子填满十六遍”,是一件比电脑早得多的事:
| 阶段 | 时间 | 核心做法 | 解决了上一阶段什么痛点 | 留下了什么新问题 |
|---|---|---|---|---|
| 誊抄 | 一直有 | 照着底稿,一格一格抄到新表上 | 格式统一了 | 抄十六遍,抄到手软,抄错还不自知 |
| 复写纸 | 二十世纪 | 垫一张蓝纸,一次写两份 | 一次能出多份 | 最多几份;改一处,全部重写 |
| 蜡纸油印 | 二十世纪中后期 | 刻好底版,油印几十份 | 份数上去了 | 只能整批一样,一格一格不同做不到 |
| 邮件合并 | 二十世纪九十年代起 | 一份名单加一个模板,批量生成 | 一份文件里“不一样的那一格”终于能自动变 | 要会设字段;模板一换就得重来 |
| 模板占位符引擎 | 今天 | 数据、模板、映射三样分开,谁变换谁 | 换数据不动模板,换模板不动映射 | 得分清“哪一项是共用的、哪一项是每次课自己的” |
这条线的走向很清楚:每一代都在减少“同一件事做很多遍”的次数,而每一次减少,人剩下的工作都更靠近“把数据说清楚”。 复写纸时代的老师,省的是手;邮件合并时代的老师,省的是抄;今天的老师,省的是决定哪一格属于哪一层——这正是本讲唯一要记住的原理。
这个道理并不新。一百多年前泰勒写《科学管理原理》时,讲的就是把作业拆成标准动作、按标准执行与检验[1];外科医生出身的葛文德在《清单革命》里又把它推了一步:越是重复、越容易在重复中出错的事,越要靠一张清单和一套固定流程,而不是靠人记性[2]。批量出教案完全是同一件事——十六遍里出错,几乎从不是“不会做”,而是“重复到第十一遍时,人不盯了”。
十六次课一次出齐,靠的不是模型聪明,而是你先把数据备清楚了。 L3 第 19 课把智能体的成长拆成五步,第二步是“会取数”;在教师场景里,这一步的意思就是:你能把一次课的内容分成“本条记录”和“整批共用”两部分,这个活就成了。 剩下的十次、二十次,只是往 lessons 列表里多加几段。
顺带说清一个分寸:doc-filler 干的是按映射把内容填进模板,它不会替你写教学目标、更不会替你定重难点。这些内容是你(或备课引擎)先备好,填制这条链的活是“把它正确地放到该放的位置上,一次放十六遍”。换句话说:它负责搬运,你负责内容。 就像打印店的伙计——你给他排版好的稿子,他印得又快又齐;他不会替你写文章。第 10 讲那条链(备课引擎出教案)产出的内容,正好可以接上这里,一次填进十六份模板。
这是个真问题,而且是批量活最该怕的一件事。
答案分两层。第一层:错误会放大。 课程级四项写错,十六份一起错——比如说把班级写成“数字经济 2024 级 2 班”,你会得到十六份写着别人班的教案。所以这一讲把“课程级四项每份都有”列成校验点里的一条硬指标:看这四项,就是在看“公共信息传没传对”。
第二层:错误也会被整齐地暴露出来。 手工做十六份,错的那一份混在里面,你不上手翻根本不知道;批量出的十六份,错的是同一个位置、同一个写法——你只要抽三份看,就能判断整批对不对。 这也是为什么本讲反复说:批量活的可核对性,比手工活高得多。 前提只有一个——你得真的去抽那三份。
会,而且这正是本讲排第一的常见错误。
它有两个来源,分清楚很重要:
lessons 列表里十六条其实是同一条复制:内容抄得快,忘了改成对应那次课例如,常见的情形是:老师把第 3 章那份写得很完整,为了省事,复制十五遍再改标题;结果标题改了,过程与作业忘了改。这种错比漏填更难被发现——漏填至少空着扎眼,串行却是十六份都“有模有样”。 发现办法也简单:抽第一份和最后一份对比,两句话就看得出来。
本书写作时跑过一条真实的 jiaoyan 记录:课程《商业人工智能应用》,第 3 章 智能体的设计,3 课时,班级数字经济 2024 级 1 班。
产出:商业人工智能应用-第3章 智能体的设计-教案.docx,38,514 字节,占位符残留 0。
打开这份 docx 逐项读回来,结果是:
| 读回的项 | 值 |
|---|---|
| 课程名称 | 商业人工智能应用 |
| 章节名称 | 第3章 智能体的设计 |
| 授课教师 | 任渝 |
| 课时 | 3 |
| 授课班级 | 数字经济2024级1班 |
| 授课学期 | 2026-2027学年第一学期 |
| 教学目标 / 重点 / 难点 / 方法 / 过程 / 板书 / 作业 | 全部填入 |
| 填制日期 | 2026年9月17日 |
这就是“读回验证”:不看报告说什么,打开成品,把每一项读回来对一遍。 十六份教案一起交出去之前,至少要抽三份这样读回一次。报告说“通过”,不能替代你自己看这三份——就像考试阅卷的抽查:系统说“都判完了”,你还是得抽几份翻一翻,看看判分标准有没有走样。
用filler_help看一下jiaoyan场景的数据骨架;再用filler_batch把《商业人工智能应用》这学期十六次课的教案按学院模板一次出齐:list_json里每条是一次课(章节、课时、教学目标、重点、难点、教学方法、教学过程、板书设计、作业、日期);context_json传整门课共用的四项:课程名称=商业人工智能应用,授课教师=任渝,授课班级=数字经济2024级1班,授课学期=2026-2027学年第一学期;出完把十六份的文件名列给我,并调filler_check把校验报告读给我。
先只跑一次课也行:把第一条记录单独交给 filler_run,出来的那一份读回核对,字段对了再把整份 lessons 列表交给 filler_batch——先试一份、再出十六份,这是批量活的标准节奏。这就像开印前先打一张样:花两分钟,省下十六份白印的纸和油墨。
| 产物 | 内容 |
|---|---|
| 教案 docx × 16 | 一门课十六次课,一次一份;文件名形如 商业人工智能应用-第3章 智能体的设计-教案.docx |
| 下载链接 × 16 | 每份一个;中文文件名在链接里是百分号编码形态,属正常 |
| 校验报告 × 1 | 每份的已替换 / 未替换 / 缺失字段 / 表格填充行数 |
| 读回抽检记录 | 抽三份(含第一份和最后一份),把六项关键字段读回来写在核对表上 |
(本书写作时的实测样例是其中一次课跑出来的 1 份:商业人工智能应用-第3章 智能体的设计-教案.docx,38,514 字节,占位符残留 0。)
文件名本身就是识别符——课程名、章节、文件类型都在里面,所以不用打开就能核对,哪一份是哪一份。比如秘书收齐十六份归档,按文件名排一遍,章节顺序对不对一眼就能看出来。
lessons 里十六条就出十六份。少一份,先查数据形状(单条字典会被包成一条)。context_json 的问题。{{ 记号。实测样例的残留是 0。这六条里,第 1、2 条是“批量独有”的:手工做十六份,没有人会去数份数,也没人会检查“是不是每一份都有班级”;批量的风险是成批的,所以批量的检查也必须成批做。
错误一:只传了十六次课,没传课程级四项。
表现:教案主体填得好好的,“课程名称、授课教师、授课班级、授课学期”四处空着。
原因:这四项属顶层,必须走 context_json;记录列表里没有它。
排错:补上 context_json 重跑。这是 jiaoyan 场景最高频的一个坑,写进了本书的实测记录里。
错误二:出了十六份,每一份都长得一样。
表现:十六个文件名不同,打开内容却是同一次课。
原因:把课次级内容误提到了公共层,或者 lessons 列表里十六条其实是同一条复制。
排错:抽第一份和最后一份对比,两句话就看得出来;对比一样就回去把 lessons 列表逐条改开。
错误三:想要十六份,出来一份或几份。
表现:份数明显少。
原因:数据形状传错——给的是单条字典而场景要求列表时,工具会自动包成一条。
排错:份数 = 记录条数,出完先数份数,再核内容。
错误四:十六份里某一份格式和别人不一样。
表现:某一份字体或表格变了。
原因:跑之前有人在模板上手工改过版式,或中途换了模板。
排错:只认一份原始模板;要改版式就改模板本身,改完重跑,不要在成品上改。
错误五:跑了一半,剩下的没出,报错里看不出原因。
表现:不报错,也没有后续文件。
原因:连接器没登记信任被静默跳过,日志里打 skipping untrusted server。
排错:看日志;连接器写在配置根目录的 mcp.json、用裸名 doc-filler,改完完全退出应用再打开(见附录 C)。
错误六:改了一句内容,直接在成品 docx 上改。
表现:这一份改好了,下一次重跑又被覆盖回去;十六份里只有这一份和别人不一样。
原因:成品是产物,不是源;源头是 lessons 列表与模板。
排错:改源头,重跑,别改产物——就像改菜谱而不是改端上桌的那盘菜。
filler_batch 批量填制”),不要只写“用了 AI”。lessons 列表照抄改,课程级四项换一下,十六份立刻齐。共用的说一遍,各异的列一张表;份数对得上,才算做完。
| 工具全名 | 一句话作用 |
|---|---|
mcp__doc-filler__filler_help | 看 jiaoyan 的数据骨架:课次级字段 + 课程级公共信息 + 占位符映射 |
mcp__doc-filler__filler_run | 先试一份教案,读回核对字段 |
mcp__doc-filler__filler_batch | 按 lessons 列表一次出齐一学期教案 |
mcp__doc-filler__filler_check | 读校验报告:已替换 / 未替换 / 缺失字段 / 表格行数 / 告警 |
mcp__doc-filler__filler_scenarios | 复核场景与占位符数(jiaoyan 为 14) |
context_json,课次级十项走 lessons 列表商业人工智能应用-第3章 智能体的设计-教案.docx,38,514 字节,占位符残留 0[1] Taylor F W. The Principles of Scientific Management[M]. New York: Harper & Brothers, 1911.(原著初版 1911 年;把作业拆成标准动作、按标准执行与检验)
[2] Gawande A. The Checklist Manifesto: How to Get Things Right[M]. New York: Metropolitan Books, 2009.(越是重复、越容易在重复中出差错的作业,越要依靠清单与固定流程)
[3] OpenAI. Function calling[EB/OL]. https://platform.openai.com/docs/guides/function-calling.(工具的描述与参数如何决定模型能否正确调用;本书要求写全工具名的原因之一)
数据与平台:本讲实测数据来自 zhenyuonline.cn 的 doc-filler 引擎(2026-09-17 实跑):jiaoyan 场景 14 个占位符,数据粒度为课次(lessons 列表)+ 课程级公共信息(context_json);实测产出 商业人工智能应用-第3章 智能体的设计-教案.docx(38,514 字节),占位符残留 0;读回确认课程名称、章节名称、授课教师、课时、授课班级、授课学期、教学目标、重点、难点、方法、过程、板书、作业、填制日期逐项填入。工具名以「事实底座」所列为准,一个不编。