← 返回目录

第 10 讲 课程大纲与教学进度表:教务处发的模板,一次出两份

【可执行状态】现在就能做(填制引擎跑在公网,按附录 C 把 doc-filler 连接器接进入口即可)

【本讲对应资产】doc-filler 引擎(6 个工具);本讲用 filler_templates filler_template_info filler_run filler_batch filler_check(模板从哪来,见第 9 讲)

【本讲原理来源】L3 第 20 课《Function Calling 深度解析》(工具说明书三要素)· 吴恩达《Agentic AI》· 工具使用


引子:一门课的大纲,为什么要写第三遍

先说一个不会写进任何考核表的数字:一门专业课的教学大纲,从开课到停开,通常要写三到十遍。有的因为学分课时调整,有的因为教务处换了版式,有的只是换了个学期。

每次重写,写的都不是新内容。课程名称、课程代码、学分、学时、适用专业,这几项在教务系统里躺了好几年;课程目标、课程内容、考核比例,早在专业培养方案里定过一遍。老师每一次做的,只是把已经确认的信息,从系统里、从去年的旧表里,一格一格搬到教务处新发的那份 Word 上。

一件事既不产生新知识、又要反复做,它就不该由人一直做下去。

这一讲要按掉的,正是这一次搬家。而且不是搬一份——一学期好几门课,要一起搬。

一、场景:两位老师的同一个下午

王老师(化名)这学期挂了两门课:《数智分析与应用》和《跨境电商大数据统计与分析》,都是 3 学分、48 学时、专业必修课。教务处把《课程教学大纲(2026 版)》发到了工作群,要求写得很硬:版式不许动,字段一个不许少,下周二下班前交,两门课各一份 docx。

下午两点,她打开模板另存为一份,光标点进第一个空格,打字,Tab 到下一个空格,再打字。一门课改了十几处,四十分钟过去。第二门课如法炮制,又是四十分钟。改到一半,隔壁同事来问事,回来后把《数智分析与应用》的课程代码填进了另一门课的表格——交上去被教研室打回,理由是两门课串了行。重做一遍,又一个下午。

李老师(化名)做的是同一件事,只是顺序不一样。她先在模板库里选了一份《课程教学大纲(范例版)》,让引擎告诉她这份模板要准备哪些数据;接着把两门课的信息按字段列成一张清单,把两门课共用的学年学期与填制日期集中写在一处;最后说了一句话。三分钟后,两份 docx 回来了,文件名一份是《数智分析与应用》的,一份是《跨境电商大数据统计与分析》的。

同一件事,一个下午,三分钟。差别不在打字快慢,也不在谁更会用电脑,而在有没有把“抄哪一格”这件事,从手上搬到配置里。

二、原理:一条链上的三个环节

2.1 第一步不是“填”,是“选模板”

引擎现在已经统一成模板库口径:内置范例模板与老师自己上传的模板,走的是同一条路——选模板 → 看要准备什么数据 → 出件。不是“内置一套路、自定义另一套路”。

例如,本讲用到的那份《课程教学大纲(范例版)》,就是模板库里的内置范例;如果教务处发的是本校自己的一版(有的学校在大纲里加了专业认证栏目),按第 9 讲上传一次,以后每学期直接在库里选它就行。再比如同一个学院的老师,一位传好了模板,剩下的同事在库里选同一份就行——模板是学院的公共资产,不是某个人的私产。

六个工具的分工是这样的:

工具干什么什么时候用
filler_templates列出模板库(内置范例 + 我上传的),带用途与数据量永远的第一步
filler_template_info选中一份模板,看它要准备哪些数据(单值字段 / 列表区 / 样例)动手之前
filler_template_upload把学校发的那份 Word 传上来,自动识别 + 注入占位符库里没有合用的模板时
filler_run出一份(先试通)数据拿不准时
filler_batch出一批(按记录列表)数据确认之后
filler_check给出校验结论 verdict交付之前,不许跳

这一讲主要用第一、第二、第四、第五个;第三个在上传模板时用(第 9 讲已讲透);第六个留到第 13 讲系统讲,但从这一讲开始,每一讲的交付动作都以它收尾。

2.2 历史纵深:这半个多世纪,老师报资料走了五步

想明白“为什么现在能做成一键”,得先看清楚以前是怎么做的。这条路走了半个多世纪,一共五步。

第一步:钢板蜡纸。 二十世纪五六十年代到七十年代,教务干事要在钢板上刻蜡纸——把大纲内容一笔一笔刻上去,再上油印机印。例如一门课的学时从四十八改成四十二,就得重新刻一整版,改一个字都做不到。那一代的瓶颈在“版”,不在“人”。

第二步:打字机与复写纸。 八十年代,打字机进了教研室,改字容易了。但每一份还是要单独打一遍,复写纸一次最多复四五份。那时的教研室里常见一幕:一台打字机后面排着队——内容各不相同,格式一模一样。

第三步:Word 与“另存为去年那份”。 九十年代电脑普及,老师学会了一个动作:把去年的文件另存成今年的,再把里面的字改掉。打个比方,这就像改一幅已经画好的年画——版不用重画,只把年份换掉。这个动作直到今天还是主流,它的弱点不在效率,在“忘了改哪儿”:比如年份改了、适用专业忘了改;学分改了、学时忘了改。手填大纲的返工,绝大多数出在这里。

第四步:教务系统上线,人反而更忙。 两千年以后,课程信息陆续进了数据库,学分学时这些数字系统里都有。但系统的出口是报表,不是教务处那份 Word。于是出现一个奇怪的分工:数据在系统里,表格在硬盘里,老师成了两者之间的搬运工。再比如,系统里明明能查到“48 学时”,可你没法把它直接贴进 Word 的第三行第五格——中间那一步,一直由人来做。

第五步(也是这一讲):模板库 + 一键填制。 模板选一次,数据说一次,剩下的交给引擎。

回头看这条线,规律很清楚:每一步进步,都不是让人打字更快,而是砍掉一件“人必须先做”的事。第一步什么也砍不掉;第二步砍掉“重刻版”;第三步砍掉“重画版式”;第四步砍掉“翻系统查数”;第五步砍掉“搬运”。技术史里最有价值的一类改进,就是把工序从人手上摘下来,交给规则。〔这与泰勒在 1911 年讲的“把工序拆成标准动作”是同一个道理[1]〕

(顺带说一句:第 9 讲讲的那个“四代”(刻板 → 邮件合并 → 填制引擎 → 自动认位置),讲的是机器怎么找位置;这里这个“五步”,讲的是老师报资料这件事本身的历史。一个讲机器,一个讲活,不要混。)

2.3 两层信息:一门课的进记录,一学期共用的进公共层

第 8 讲讲过数据分两层,本讲把它落到大纲上,界限非常干净:

本讲的实测样例就是两条记录、一份公共信息。两条记录写成一张表看最清楚:

字段例一:数智分析与应用例二:跨境电商大数据统计与分析
courseCode(课程代码)DI2026EC2026
courseName(课程名称)数智分析与应用跨境电商大数据统计与分析
englishName(英文名称)Digital Intelligence AnalyticsBig Data for Cross-border E-commerce
teacherName(授课教师)任渝任渝
department(开课部门)智能金融学院智能金融学院
credits(学分)33
totalHours(总学时)4848
courseNature(课程性质)专业必修课专业必修课
applicableScope(适用专业班级)数字经济、金融科技专业2024级国际经济与贸易、电子商务专业2024级

顶层那一层写成一段行内 JSON 就是:{“semester”:“2026-2027学年第一学期”,“date”:“2026年9月17日”}——花括号里两项,两门课共用。(本书正文里的 JSON 用全角引号排版,与正文引号体例保持一致;实际在入口里输入时,按工具提示的数据形状填即可。)

一个常见误会:既然两门课都是 3 学分 48 学时,是不是可以把学分学时挪到公共层?不行。公共层的含义是“这一批共用”,不是“这次碰巧相同”。例如,下学期加了第三门课,如果它是 4 学分 64 学时,你把它写进记录里就行,公共层一动不用动;可要是当初把学分放进了公共层,第三门课就会被迫继承错误的值。

2.4 设问自答之一:学校下学期换模板了,之前做的都白做了吗

这是老师问得最多的一句。答案是不白做,而且只多花一分钟。

原因在第 9 讲已经讲透:模板和数据是分开的两样东西。教务处换了版式,动的是“模板”那一层;你手上那份课程清单(数据)一个字都不用改。打个比方,这就像换了新杯子装同一壶茶——壶里的茶没变,倒进去就行。

具体动作只有两步:把新模板上传一次(filler_template_upload),用 filler_template_info 看一眼它要的字段和旧的那份差在哪(差在哪就补哪个字段,例如新版加了“课程思政元素”一栏,那就补一项),再出件。换的是表,不是你的活法。

2.5 设问自答之二:大纲里有些内容不是“填”进去的,是“写”出来的,引擎也管吗

问得很对,这需要把界线划清楚。

大纲里有两类内容。一类是搬运类——课程代码、学分、学时、学期、教师,这些是已经确认的事实;另一类是判断类——课程目标怎么写、学时怎么分配到各章、考核比例定成三比二比五还是三比三比四、课程思政元素怎么融进去。后一类是教师的专业判断,引擎不替你做,也做不了。

正确的分工是:判断类的内容你先写好(或者由第 3 讲、第 6 讲那类生成工具产出初稿,你改定),搬运类的交给引擎。填制是最后一公里,不是第一步。如果你的大纲模板里“课程目标”也占了一格,而那一格的内容每门课都不同,那就把它当成记录级字段,一门课写一段(比如第一门课写“掌握数据清洗与可视化的基本方法”,第二门课写“掌握跨境交易数据的口径核对”),照给就行。

这一条界线,本讲之后每一讲都会再出现一次:引擎负责“放对位置”,你负责“内容对不对”。

2.6 一张对照表:人工做法与引擎做法

把王老师和李老师那个下午摊开成一张表,差距比“快慢”更值得看:

对比维度人工做法引擎做法
两门课耗时约 80 分钟,全在打字与翻查首次约 20 分钟(整理数据)+ 出件 3 分钟
下学期再来一次又是 80 分钟只换数据那一层,出件 3 分钟
典型易错点学分学时串行、年份忘改、适用专业漏填数据写错则整批错,所以校验点要前置
可核对性靠眼睛逐格看,翻到第二份就忘了第一份长什么样文件名即识别符,校验报告逐项列出未替换与缺失
出错之后不写报告,靠人家退回来才知道报告里列着缺了哪几项,照着补数据重跑
他人可复用只有本人会这一套改法学院里任何一位老师在同一个库里选它

表里最值得注意的不是第一行,是最后一行:人工做法留不下资产,引擎做法留下了一份“学院级的格式档案”。

2.7 一句话指令里的四个动作,各防一种错

把指令拆开看,你会发现它不是客套话,每一个动作都在防一类具体的错:

指令里的动作防的错不做的后果
先 filler_templates 选模板防“模板选错、版式不对”出的件教务处不收
再 filler_template_info 看骨架防“字段名对不上、位置留空”出现一堆未替换项
公共信息单独传 context_json防“成批缺学期与日期”两份全缺,批量错得整齐
最后 filler_check 读报告防“出完就当交付”退件,且说不出哪里错

四步都做了,才叫一次完整的填制。这也是本书“动手三件套”里为什么必须带校验点的原因。

图 10-1 课程大纲填制:从选模板到一次出两份件
图 10-1 课程大纲填制:从选模板到一次出两份件

三、动手三件套

一句话指令(可直接复制,把课程换成你的)

用 filler_templates 看一下模板库里有哪些教学资料模板,我要 课程教学大纲 那一类;
再用 filler_template_info 告诉我这份模板要准备哪些数据;
然后用 filler_batch 把《数智分析与应用》《跨境电商大数据统计与分析》两门课的教学大纲一次出两份:
记录按骨架传(课程代码 DI2026 / EC2026、课程名称、英文名称、授课教师任渝、开课部门智能金融学院、学分 3、总学时 48、课程性质专业必修课、适用专业班级按实际填写);
context_json 传 {“semester”:“2026-2027学年第一学期”,“date”:“2026年9月17日”};
出完把每份的文件名和下载链接给我,并调 filler_check 把校验报告读给我。

四条要求各有用处:点模板(决定版式与映射)、点骨架(保证字段名对得上)、点公共信息(最常漏的一层)、点校验(出件不算交付,校验通过才算)。

只有一门课、想先试通链路时,把第五步换成 filler_run,其他照旧——先出一份,读回核对,再出整批,这是所有批量活的标准节奏。

预期产物

产物内容
成品 docx × 2数智分析与应用-教学大纲-任渝.docx、跨境电商大数据统计与分析-教学大纲-任渝.docx
下载链接 × 2可直接下载的地址;中文文件名在链接里会出现百分号编码(%E6%95%B0... 这样),这是正常的
校验报告 × 1每份文档的已替换 / 未替换 / 缺失字段 / 表格填充行数,以及总校验结论
字段核对表(自建)把两门课的学分、学时、课程性质、适用专业并列一张表,出件后一对一核
课程清单(存下来)这次写的数据不要用完就扔,下学期只改其中几项,三分钟又一轮

本讲的实测结果:两条课程记录 + 一份公共信息,一次出件 2 份 docx,文件名是《数智分析与应用-教学大纲-任渝.docx》与《跨境电商大数据统计与分析-教学大纲-任渝.docx》,校验结论为「校验通过(未替换 0 / 缺失 0)」。

校验点(这一步不许跳)

  1. 份数 = 记录条数:记录里两条就出两份。少一份,先查数据是不是只传了一条。
  2. 文件名对:形态是“课程名 - 教学大纲 - 教师名”,两门课的文件名不能混。教务收件就是按文件名找的。
  3. 字段逐字一致:抽一门课,把课程名称、课程代码、学分、总学时与数据源逐字对一遍。不要只核第一门——配置写错,往往错在第二个字段上。
  4. 不串行:同一份表里出现的课程名与课程代码,必须属于同一门课。这是手填最容易犯的错,配置写错也会犯同样的错,所以必须核。
  5. 公共信息落地了:每份的学年学期都是“2026-2027学年第一学期”,填制日期都是“2026年9月17日”。
  6. 占位符残留 = 0:成品里搜不到记号;有残留就是有位置没填上。
  7. 校验结论过门:filler_check 给出的结论必须是「校验通过(未替换 0 / 缺失 0)」。不是这个结论,不交。

四、常见错误与排错

错误一:出件成功,但“学年学期、填表日期”空着。

表现:正文内容都填进去了,模板里这几处还是空的,校验报告的未替换清单里列着它们。

原因:这两项属顶层公共信息,只传了记录列表、没传 context_json。

排错:把公共信息补进去重跑。一门课也要传公共信息——公共不等于可以省。

错误二:只想试一门,结果出了两份;或者想出一批,只出了一份。

表现:份数与预期不合。

原因:数据形状问题——给裸列表时引擎会自动包一层;但给了单条字典(而不是列表)会被自动包成一条,份数就少。

排错:出完先数份数,份数 = 记录条数;不对就回头改数据的形状,不要改字段内容。

错误三:下载失败或下载下来是乱码名。

表现:链接点开报错。

原因:中文文件名和中文链接要做百分号编码,某些客户端对此不友好。

排错:换一个浏览器再点,或把链接里的编码形态复制完整。文件本身没问题。

错误四:收到的交付包里多了一份模板文件。

表现:混进一个不带课程名的文件。

原因:早期版本会把模板当成成品一起给出。

排错:只按引擎报告里的产物清单收件,模板不算交付物。

错误五:引擎明明接好了,却不出件也不报错。

表现:一切正常,就是没有文件。

原因:连接器没登记信任,被静默跳过,日志里会打一行跳过提示。

排错:看日志确认;连接器要写在配置根目录的 mcp.json、名字用裸名 doc-filler,改完完全退出应用再打开(见附录 C)。

五、边界与红线

六、拓展与学科迁移


带走一句话

大纲不该重写三遍——把变的那一层交出去,把判断的那一层留下来。

背后的引擎(本讲速查)

工具全名一句话作用
mcp__doc-filler__filler_templates列模板库(内置范例 + 我上传的),带用途与数据量
mcp__doc-filler__filler_template_info看选中模板要准备哪些数据:单值字段 + 列表区 + 样例
mcp__doc-filler__filler_template_upload学校发的那份 Word 直接上传,自动识别字段并注入记号
mcp__doc-filler__filler_run跑一门课(一份)的填制,先试通再批量
mcp__doc-filler__filler_batch按记录列表一次出一批 docx(本讲:两门课两份)
mcp__doc-filler__filler_check读校验报告,确认「未替换 0 / 缺失 0」再交付

本讲要点(速记)

参考文献

[1] Taylor F W. The principles of scientific management[M]. New York: Harper & Brothers, 1911.

[2] 中华人民共和国教育部. 教育部关于加快建设高水平本科教育 全面提高人才培养能力的意见: 教高〔2018〕2号[A]. 2018.

[3] OpenAI. Function calling[EB/OL]. https://platform.openai.com/docs/guides/function-calling.

数据与平台:本讲实测数据来自 zhenyuonline.cn 的 doc-filler 引擎填制能力(2026-09-17 实跑)。

teaching 场景(课程教学资料)模板 13 个占位符,课程粒度,两条课程记录(DI2026 数智分析与应用、EC2026 跨境电商大数据统计与分析)

加一份顶层公共信息(semester = 2026-2027学年第一学期、date = 2026年9月17日),

一次出件 2 份 docx,校验结论「校验通过(未替换 0 / 缺失 0)」。产物已作脱敏处理。