WorkBuddy——试卷格式的整理

2026 年 1 月 OpenClaw 开始引发广泛关注,到了 3 月,这股热潮彻底出圈,演变为现象级的“养龙虾”热。随后腾讯、字节、百度等巨头也密集发布相关产品。而直到 11 月,我才装上了腾讯的 WorkBuddy。

之前觉得自己的电脑水平还不错,装的是 DeepSeek Harness,后来发现高估自己了,DSH 有点像毛坯房,你得自己安装想要的技能,配置好才能开始干活,学习有门槛。而 WorkBuddy 10 月底推出了教育公益版,还有针对教师的企鹅教师助手,学科网连接器等现成工具,用起来更方便。

装了之后能让它干什么呢?仔细复盘一下最费时间的工作,首先就是批改作业、试卷,技术上应该是可行的,可以让学生将作业的照片上传,智学网上的考试试卷也有图片稿,让 WorkBuddy 帮你批,但我觉得这样做虽然省事,但缺少教师在纸面上的圈点,太过冰冷,遂决定从试卷格式整理这个简单任务入手练练手。

我现在整理的试卷大部分都是从学科网上下载的,但由它的试卷生成平台导出的试卷有很多需要改进的地方,之前只能手动一个一个修改,通常将一份试卷整理成符合我要求的格式要花 1 个小时左右,现在可以借助 AI 完成了。

在 WorkBuddy 中新建任务,然后在对话框中将自己定下的格式规范梳理一下告诉它:

1.删除其他样式,只保留 Word 默认的几个。

2.样式中的“正文”设置为“中文字体:宋体五号;英文字体:Times New Roman;两端对齐;单倍行距;段前段后0像素”。

3.样式中的“标题1”设置为“中文字体:黑体三号;英文字体:Times New Roman,段前段后 5 像素,居中对齐”,“标题2”设置为“中文字体:黑体五号;段前段后 5 像素”。试卷标题设置为标题 1、小标题设置为标题 2。

4.“页边距”设置为“上、下 2.54 cm,左、右 3.18 cm”,“纸张大小”设置为“A4”。只指定行网格,44 行,15.6 磅间距。基线对齐。

5.删除页眉页脚(因为学科网试卷会偷偷地在页眉页脚中插入水印和隐藏文字),之后添加页脚:居中,文字为“第?页 共?页”。

6.删除文档属性中的备注、公司等信息。(因为学科网会在这些地方插入“学科网试题生产平台”、“学科网 www.zxxk.com”、“学科网、学科网版权所有”等信息,只是删除这些信息有点不好,不太尊重别人的劳动)

7.若有综合题,则新建新样式“题干”,设置为“中文字体:楷体;首行缩进 2 字符”,自动将描述情境信息的文字转换为楷体。

8.题目中的简单字母符号若用 MathType,则把它们转换为普通文本。带根号、分数的式子优先转换为域代码公式,其他复杂情况则变为 OOML 公式。若简单字母用 OOML,则把它们转换为普通文本。带根号、分数的式子优先转换为域代码公式,其他复杂情况保留 OOML。(学科网导出的试卷中往往会将字母用 MathType 格式表示,使用不便,也会影响行间距,所以将它们用普通字符表示,数学公式我偏向于使用域代码,它比较美观,虽然域代码公式可能在今后会被微软边缘化,它主推的是 OOML 格式的公式,但我嫌这个公式用的字体 Cambria Math 太难看,想好看得另外安装字体替换,所以一直不喜欢用它,但积分、极限等大型计算符用域代码也不美观,这时才用它)

9.物理量速度 v 用Book Antique 字体;①、②等用宋体;=、+、>、<、∝、≫、≪ 两侧留空格,≥、≤ 用宋体;π、Δ 用正体,sin、cos、tan、ln、log 等用正体,Ep、Ek 的下标用正体,元素符号用正体;物理单位用正体,与前面的数字间有一个空格,上述规范在域代码公式和 OOML 中同样适用。域代码中的上下标用普通格式实现,别用 \s,若同时有上下标的情况,则先上标后下标。

10.表示物体的字母用正体,例如滑片 P、物体 A、极板 M 等,而几何点用斜体,例如从 A 点移动至 B 点。(我的习惯是物理量用斜体、非物理量用正体,但现在有些版本的新教材一律都用斜体,有点矫枉过正,比方说金属杆在磁场 B 中运动到 B 点,两个都用斜体的话在图上往往会混在一起)

11.减号用 −(负号),两边有空格,但若在上下标中则没有空格;类似“a–F图”中的连字符用 –(短划线)。

12.数字题号自动编号。

13.选择题中的选项首字母 A.中.替换成全角.并删除多余空格。

14.(    )括号中统一 4 个空格,________统一 8 个字符宽度

然后在对话框中添加一份学科网下载的试卷,让它根据上述规则处理。一开始不可能想得很周全,比方说第一稿就出现了行间距不对,域代码公式在行内会偏上,这种情况连我都不知道如何处理,但AI会自己找出原因并添加新的规则,并将新规则纳入重新生成文件,边审核边添加新的规则,第一次做弄了 20 多稿才符合我的要求。

第一次比较辛苦,若规则基本定型,就可以让 WorkBuddy 帮我打包成技能,以后就可以复用了。技能主要分三个主要部分:

技能目录的三层加载结构

调用上述技能时,读取路径是这样的:

以后在调用这个技能处理文档时会碰到一些处理错误的情况,及时将这些情况及处理方法下记录来,并添加到技能中,就会越用越顺。

一点补充

2007 年 docx 文件随 Office 2007 上市,取代了之前二进制的 doc 文件。docx 文件的基本规范,核心在于它是一种基于 Office Open XML(OOXML)国际标准的压缩包格式,文件本质上是一个 ZIP 压缩包,内部包含了按照特定 XML 架构(WordprocessingML)标记的文档内容及支持性文件。

你可以新建一个 Word 文件,输入以下文字然后保存:


这是一段文字,斜体,黑体。域代码公式:\(\sqrt 2 \),Word 公式:\(\sqrt 2 \)。下面是图形:


将保存的文件后缀由 .docx 改为 .zip,就可以用解压软件打开,里面有好几个文件:

根目录文件

word文件夹(核心内容)

docProps文件夹(文档属性)

如果文档包含页眉页脚、脚注、批注或复杂的编号列表,word 文件夹下还会出现 header1.xml、footnotes.xml、comments.xml、numbering.xml 等额外的文件来存储这些特定内容。

用记事本就能打开主文档内容 document.xml,主要内容如下:

<w:body>
    <w:p w14:paraId="03CC0E42" w14:textId="77777777" w:rsidR="001E15A2" w:rsidRDefault="001E15A2" w:rsidP="001E15A2">
        <w:pPr>
            <w:ind w:firstLine="420" />
        </w:pPr>
        <w:r>
            <w:rPr>
                <w:rFonts w:hint="eastAsia" />
            </w:rPr>
            <w:t>这是一段文字,</w:t>
        </w:r>
        <w:r w:rsidRPr="00901068">
            <w:rPr>
                <w:rFonts w:hint="eastAsia" />
                <w:i />
                <w:iCs />
            </w:rPr>
            <w:t>斜体</w:t>
        </w:r>
        <w:r>
            <w:rPr>
                <w:rFonts w:hint="eastAsia" />
            </w:rPr>
            <w:t>,</w:t>
        </w:r>
        <w:r w:rsidRPr="00901068">
            <w:rPr>
                <w:rFonts w:hint="eastAsia" />
                <w:b />
                <w:bCs />
            </w:rPr>
            <w:t>黑体</w:t>
        </w:r>
        <w:r>
            <w:rPr>
                <w:rFonts w:hint="eastAsia" />
            </w:rPr>
            <w:t>。域代码公式:</w:t>
        </w:r>
        <w:r>
            <w:fldChar w:fldCharType="begin" />
        </w:r>
        <w:r>
            <w:instrText xml:space="preserve"> </w:instrText>
        </w:r>
        <w:r>
            <w:rPr>
                <w:rFonts w:hint="eastAsia" />
            </w:rPr>
            <w:instrText>EQ \R(2)</w:instrText>
        </w:r>
        <w:r>
            <w:instrText xml:space="preserve"> </w:instrText>
        </w:r>
        <w:r>
            <w:fldChar w:fldCharType="separate" />
        </w:r>
        <w:r>
            <w:fldChar w:fldCharType="end" />
        </w:r>
        <w:r>
            <w:rPr>
                <w:rFonts w:hint="eastAsia" />
            </w:rPr>
            <w:t>,</w:t>
        </w:r>
        <w:r>
            <w:rPr>
                <w:rFonts w:hint="eastAsia" />
            </w:rPr>
            <w:t>Word</w:t>
        </w:r>
        <w:r>
            <w:rPr>
                <w:rFonts w:hint="eastAsia" />
            </w:rPr>
            <w:t>公式:</w:t>
        </w:r>
        <m:oMath>
            <m:rad>
                <m:radPr>
                    <m:degHide m:val="1" />
                    <m:ctrlPr>
                        <w:rPr>
                            <w:rFonts w:ascii="Cambria Math" w:hAnsi="Cambria Math" />
                            <w:i />
                        </w:rPr>
                    </m:ctrlPr>
                </m:radPr>
                <m:deg />
                <m:e>
                    <m:r>
                        <w:rPr>
                            <w:rFonts w:ascii="Cambria Math" w:hAnsi="Cambria Math" />
                        </w:rPr>
                        <m:t>2</m:t>
                    </m:r>
                </m:e>
            </m:rad>
        </m:oMath>
        <w:r>
            <w:rPr>
                <w:rFonts w:hint="eastAsia" />
            </w:rPr>
            <w:t>。下面是图形:</w:t>
        </w:r>
    </w:p>
    <w:p w14:paraId="06990630" w14:textId="1593B1C6" w:rsidR="00237C9D" w:rsidRDefault="001E15A2" w:rsidP="001E15A2">
        <w:pPr>
            <w:ind w:firstLine="420" />
        </w:pPr>
        <w:r>
            <w:rPr>
                <w:rFonts w:hint="eastAsia" />
                <w:noProof />
            </w:rPr>
            <mc:AlternateContent>
                <mc:Choice Requires="wps">
                    <w:drawing>
                        <wp:inline distT="0" distB="0" distL="0" distR="0" wp14:anchorId="621E97BB"
                            wp14:editId="4AAFCD21">
                            <wp:extent cx="625494" cy="625494" />
                            <wp:effectExtent l="0" t="0" r="22225" b="22225" />
                            <wp:docPr id="974257134" name="矩形 1" />
                            <wp:cNvGraphicFramePr />
                            <a:graphic xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main">
                                <a:graphicData uri="http://schemas.microsoft.com/office/word/2010/wordprocessingShape">
                                    <wps:wsp>
                                        <wps:cNvSpPr />
                                        <wps:spPr>
                                            <a:xfrm>
                                                <a:off x="0" y="0" />
                                                <a:ext cx="625494" cy="625494" />
                                            </a:xfrm>
                                            <a:prstGeom prst="rect">
                                                <a:avLst />
                                            </a:prstGeom>
                                            <a:solidFill>
                                                <a:schemeClr val="bg1">
                                                    <a:lumMod val="85000" />
                                                </a:schemeClr>
                                            </a:solidFill>
                                            <a:ln>
                                                <a:solidFill>
                                                    <a:schemeClr val="tx1" />
                                                </a:solidFill>
                                            </a:ln>
                                        </wps:spPr>
                                        <wps:style>
                                            <a:lnRef idx="2">
                                                <a:schemeClr val="accent1">
                                                    <a:shade val="15000" />
                                                </a:schemeClr>
                                            </a:lnRef>
                                            <a:fillRef idx="1">
                                                <a:schemeClr val="accent1" />
                                            </a:fillRef>
                                            <a:effectRef idx="0">
                                                <a:schemeClr val="accent1" />
                                            </a:effectRef>
                                            <a:fontRef idx="minor">
                                                <a:schemeClr val="lt1" />
                                            </a:fontRef>
                                        </wps:style>
                                        <wps:bodyPr rot="0" spcFirstLastPara="0" vertOverflow="overflow"
                                            horzOverflow="overflow" vert="horz" wrap="square" lIns="91440" tIns="45720"
                                            rIns="91440" bIns="45720" numCol="1" spcCol="0" rtlCol="0" fromWordArt="0"
                                            anchor="ctr" anchorCtr="0" forceAA="0" compatLnSpc="1">
                                            <a:prstTxWarp prst="textNoShape">
                                                <a:avLst />
                                            </a:prstTxWarp>
                                            <a:noAutofit />
                                        </wps:bodyPr>
                                    </wps:wsp>
                                </a:graphicData>
                            </a:graphic>
                        </wp:inline>
                    </w:drawing>
                </mc:Choice>
            </mc:AlternateContent>
        </w:r>
    </w:p>
    <w:sectPr w:rsidR="00237C9D">
        <w:pgSz w:w="11906" w:h="16838" />
        <w:pgMar w:top="1440" w:right="1800" w:bottom="1440" w:left="1800" w:header="851" w:footer="992" w:gutter="0" />
        <w:cols w:space="425" />
        <w:docGrid w:type="lines" w:linePitch="312" />
    </w:sectPr>
</w:body>

以上就是 WordprocessingML 标记语言格式的源代码,与 HTML 很像。Word 公式是用OMML(Office Math Markup Language,Office 数学标记语言)表示的,正方形形状是由 DrawingML 表示的,现代 Word (尤其是 Word 2010 及以后版本)中绘制的形状、图表、图片等,其主要的、功能更丰富的定义都使用 DrawingML。

理论上,不用 Word,你可以用记事本手搓一个 Word 文件,但 WordprocessingML 的规范很复杂,所以都是通过编程实现的。

可以用微软提供的官方库 Open XML SDK 用编程的方式处理 Office 文件,本网站的题库导出功能用的也是这个库。MiniMax Office Skill 选用的也是 .NET OpenXML SDK。

本文中的技能调用的是社区最常用的 python-docx,它轻量好用,但在嵌套表格、多级目录、页眉页脚精确控制、修订记录这些场景上力不从心。不过在这个 skill 中,python-docx 被当作打包器和入口使用,负责打开和保存文件、维护[Content_Types].xml与关系表。真正“干活”的是 lxml(一个第三方库,不在 Python 标准库里。它是用 C 写的扩展模块,封装了两个 C 库:libxml2——负责解析 XML 和 HTML,libxslt——负责 XSLT 转换),中间所有编辑都是在 body 这个 lxml 元素上用 XPath 直接操作原始 OOXML。

文件下载(已下载 9 次)

发布时间:2026/11/7 13:04:58  阅读次数:127