从"人写脚本"到"人定契约、AI 实现、系统验证"的工程范式迁移
—— 一条以"边界熵"为分析主线的可复用落地路径
摘要
办公自动化的失败,极少源于代码写不出来,而多源于"任务本身没有被定义清楚"。本文提出一条贯穿全文的独创性分析主线——边界熵(Boundary Entropy):任务边界越模糊,AI 生成代码的返工率越高、试运行验证的成本越大。围绕这一主线,文章构建"明确任务边界→AI 生成代码→试运行验证结果"三步 SOP,逐层拆解每一步的工程方法、量化指标与风险控制点。
第一步聚焦"输入契约、输出契约、异常契约"三要素,把模糊需求压缩为可验证的边界描述;第二步讨论如何用结构化提示词驱动大语言模型生成可维护代码,并给出代码审查清单;第三步建立"沙箱试运行—差异比对—回归固化"的验证闭环。全文引入边界熵、验证闭环、契约密度等概念,并结合国内外 LLM 代码生成研究(如 Codex、Code Llama、SWE-bench 等公开成果)进行独立思辨。
本文评述:三步 SOP 的价值不在于"让 AI 替你写代码",而在于把人的精力从语法细节转移到边界定义与结果验证这两个真正决定成败的环节。文末附完整参考文献与可拓展学习链接。
目录
一、引言:为什么"会写代码"不等于"能自动化"
过去十年,办公自动化的门槛一直在下降。从 VBA 宏、Python 脚本,到 RPA(Robotic Process Automation)工具,再到今天的大语言模型(LLM)直接生成代码,工具越来越"聪明"。但一个反直觉的现象是:工具越强,失败案例反而越隐蔽。因为当代码可以瞬间生成时,人们更容易跳过"想清楚要做什么"这一步,直接进入"让 AI 写"的阶段,结果得到一个能跑但跑不对、或者这次能跑下次就崩的脚本。
笔者在多个企业办公自动化项目中观察到一个稳定规律:一个自动化任务最终是否成功,与"任务边界被定义清楚的程度"高度相关,而与"用了多先进的模型"相关性反而较弱。这与软件工程中经典的"需求缺陷放大效应"一致——需求阶段的一个模糊点,到实现阶段会放大为数倍的返工成本。Barry Boehm 在《Software Engineering Economics》中提出的缺陷修复成本曲线(1970s—1980s)早已指出:需求阶段修复一个缺陷的成本是维护阶段的百分之一量级。本文评述:LLM 时代的特殊性在于,代码生成成本被压到极低,于是"需求缺陷"的相对成本占比进一步上升,边界定义反而成为整个流程的瓶颈。
本文要回答的核心问题是:在 AI 能写代码的前提下,一个人应该如何组织自己的工作流程,才能稳定地把一个办公任务自动化掉?答案不是"学会更多提示词技巧",而是建立一套可复用的 SOP,把"定义边界—生成实现—验证结果"三个环节显式化、可检查化。本文提出的三步 SOP 正是这一思路的工程化表达。
本文评述:把"AI 生成代码"当作流程的起点,是当前办公自动化最常见的认知误区。正确的起点是"任务边界",AI 只是中间的一个实现手段,验证才是终点。三步 SOP 的顺序不可颠倒。
二、分析主线:边界熵——贯穿三步 SOP 的隐形变量
2.1 什么是边界熵
笔者借用信息论中"熵"的概念,提出边界熵(Boundary Entropy)这一分析工具,用来描述一个办公任务在"边界定义"上的模糊程度。一个任务的边界熵越高,意味着:输入格式不确定、输出形态不确定、异常处理方式不确定、验收标准不确定。边界熵无法被直接测量,但可以通过"歧义点计数"来近似估计——把任务描述交给两个人,如果他们写出的实现方案在关键决策上出现分歧,这些分歧点就是歧义点。
边界熵的工程意义在于:它同时决定了 AI 生成代码的返工率和试运行验证的成本。边界熵高,AI 只能"猜",生成的代码大概率需要多轮修改;边界熵高,验证时也无法判断"跑出来的结果对不对",因为没有明确的验收标准。三步 SOP 的每一步,本质上都是在降低边界熵。
注:表中返工率为笔者基于多个办公自动化项目的经验性模拟估计,非严格实验数据,仅供理解趋势参考。
2.2 三步 SOP 与边界熵的对应关系
三步 SOP 的每一步都对应着边界熵的一次"压缩":
- 第一步(明确任务边界):把口头需求转化为书面契约,直接降低边界熵。这是压缩幅度最大的一步。
- 第二步(AI 生成代码):在低边界熵的前提下,AI 的"猜测空间"被收窄,生成代码更接近目标。这一步不降低边界熵,但依赖前一步的成果。
- 第三步(试运行验证):用真实数据检验边界定义是否完整,发现"未预料到的歧义点",反过来修正第一步。这一步是边界熵的"检测器"。
笔者认为,这三步构成一个闭环而非直线:验证阶段发现的新歧义点,应回写到边界定义中,形成"定义—实现—验证—再定义"的迭代。很多自动化项目之所以"做完就废",正是因为缺少这个回写环节,边界定义停留在第一版,后续维护时无人知道当初的假设是什么。
三、第一步:明确任务边界(输入/输出/异常三契约)
3.1 三契约框架
把任务边界写清楚,最有效的方法是用"契约"的思维。软件工程中的"契约式设计"(Design by Contract,Bertrand Meyer 于 1986 年提出)强调:一个模块的正确性,应由前置条件、后置条件、不变式来定义。本文评述:这一思想可以直接迁移到办公自动化任务上,形成输入契约、输出契约、异常契约三要素。
输入契约(Input Contract)
回答"数据从哪来、长什么样、有多少变体"。具体包括:
- 数据来源:本地文件、共享盘、邮件附件、API、数据库?
- 文件格式:.xlsx / .csv / .txt / .pdf?编码是 UTF-8 还是 GBK?
- 结构约定:第几行是表头?列名是否固定?是否存在合并单元格?
- 变体情况:是否有多个来源格式不一致?历史文件与当前文件是否同构?
- 规模量级:每天多少条、多少文件、多大体积?
输出契约(Output Contract)
回答"结果长什么样、放在哪、给谁用"。具体包括:
- 输出形态:单个汇总表、多个分表、邮件正文、还是写入某个系统?
- 字段与顺序:输出列有哪些?顺序是否固定?
- 命名规则:文件名是否含日期?是否覆盖旧文件?
- 交付方式:保存到指定目录、自动发送邮件、还是仅打印?
- 验收标准:什么情况下算"正确"?行数、金额合计、抽样比对?
异常契约(Exception Contract)
回答"出错了怎么办"。这是最容易被忽略、却最影响长期可用性的一环:
- 数据缺失:某列为空时,是跳过、填默认值、还是报错终止?
- 格式异常:遇到非预期格式的文件,是忽略还是记录日志?
- 重复数据:同一记录出现多次,是去重还是保留?
- 失败处理:脚本中途失败,是回滚、部分输出、还是发告警?
- 日志要求:是否需要记录每次运行的时间、处理条数、异常清单?
3.2 用"边界熵清单"自检
写完三契约后,笔者建议用一份"边界熵清单"做自检:把任务描述给一位同事看,请他指出"如果让我实现,我会在哪里犹豫"。这些犹豫点就是残余的歧义点。清单越短,边界熵越低,后续两步越顺。
本文评述:三契约框架的最大价值,是把"隐性知识"变成"显性文档"。办公场景中大量规则存在于老员工的脑子里,一旦人员变动,自动化脚本就成了无人敢改的黑盒。写契约,本质是在为脚本建立"可交接性"。
四、第二步:AI 生成代码(提示工程与代码审查)
4.1 为什么"结构化提示"优于"自然语言描述"
当前主流 LLM(如 GPT-4 系列、Claude 系列、Code Llama、DeepSeek-Coder 等)在代码生成任务上已具备相当能力。OpenAI 在 2021 年发布的 Codex 论文(Chen et al., "Evaluating Large Language Models Trained on Code")首次系统展示了 LLM 从自然语言生成代码的可行性;此后 HumanEval、MBPP、SWE-bench 等基准被广泛用于评估代码生成质量。本文评述:这些基准衡量的是"模型能否写出通过测试的代码",但办公自动化的真实场景中,难点往往不在算法,而在"边界条件的处理",这恰恰是基准测试覆盖不足的地方。
因此,给 AI 的提示词不应是"帮我写个合并 Excel 的脚本",而应是把三契约结构化地喂给模型。实践表明,结构化提示能显著降低生成代码与预期不符的概率。一个可复用的提示词模板如下:
【角色】你是一名熟悉 Python 数据处理与办公自动化的工程师。
【任务】根据以下契约生成一个可独立运行的 Python 脚本。
【输入契约】
- 数据来源:./input/ 目录下的所有 .xlsx 文件
- 每个文件第 1 行为表头,包含列:日期、部门、金额、备注
- 编码:xlsx 无需处理编码;日期格式为 YYYY-MM-DD
- 变体:部分文件可能缺少"备注"列
【输出契约】
- 输出到 ./output/summary_YYYYMMDD.xlsx
- 列顺序:部门、金额合计、记录数
- 按金额合计降序排列
- 金额保留两位小数
【异常契约】
- 缺少"备注"列:忽略,不报错
- 某行金额为空或非数字:跳过该行,并写入 ./output/skipped.log
- 输入目录为空:打印提示并退出,退出码为 1
【约束】
- 仅使用 pandas 与 openpyxl
- 函数需拆分,关键步骤加中文注释
- 提供 if __name__ == "__main__" 入口
这个模板的关键在于:它把"边界"显式地写进了提示词,而不是让模型去猜。模型不需要"理解业务",只需要"实现契约"。笔者认为,这是 LLM 辅助办公自动化最务实的定位——把 AI 当作一个执行力强但需要明确指令的初级工程师,而不是一个能读懂你心思的专家。
4.2 生成代码的审查清单
AI 生成的代码不能直接上生产,必须经过审查。审查的重点不是"代码风格",而是"契约是否被正确实现"。以下清单可直接复用:
- 输入处理:是否处理了所有列举的变体?是否对文件不存在、目录为空做了判断?
- 输出格式:列顺序、命名规则、小数位是否与契约一致?
- 异常路径:契约中约定的异常处理是否都有对应代码?日志是否写入指定位置?
- 边界值:空文件、单行文件、超大文件是否会出问题?
- 依赖与可移植性:是否只用了约定允许的库?路径是硬编码还是相对路径?
- 可读性:函数是否拆分合理?关键逻辑是否有注释?
需要特别提醒的是,LLM 存在"幻觉"问题,可能调用不存在的 API、误用库函数参数、或对版本差异不敏感。例如 pandas 在 2.0 版本后对某些 API 做了调整,模型可能生成基于旧版本的写法。本文评述:审查环节不可省略,且应优先在"能跑起来"的环境里做最小验证,而非仅靠阅读代码判断。
4.3 提示词迭代:把返工变成资产
如果生成结果不符合预期,不要直接手动改代码,而应先判断"是契约没写清,还是模型没实现好"。如果是前者,回写契约;如果是后者,在提示词中补充约束。每一次返工,都应该沉淀为契约或提示词的改进,这样下一个类似任务就能一次成型。笔者把这种积累称为契约密度的提升——随着契约模板越来越丰富,办公自动化的整体效率会呈复利式增长。
五、第三步:试运行验证结果(验证闭环与回归固化)
5.1 沙箱试运行:先在小数据上跑通
代码生成后,第一步不是直接处理全量数据,而是构造一个"最小可验证样本":从真实数据中抽取 3—5 条记录,覆盖正常情况与至少一种异常情况,在独立目录中试运行。观察输出是否符合输出契约。这一步的成本极低,却能拦截大部分低级错误。
沙箱试运行的关键是"隔离":输入目录、输出目录、日志目录都应与生产环境分开,避免试运行污染真实数据。对于涉及文件覆盖、邮件发送等有副作用的操作,建议在试运行阶段先"空跑"(dry-run),只打印将要执行的动作而不真正执行。
5.2 差异比对:用可量化的方式判断"对不对"
验证的核心是"比对"。如果任务有历史人工处理结果,可以把脚本输出与人工结果做逐行比对,统计差异率。如果没有历史结果,则至少做以下三类检查:
5.3 回归固化:把验证用例留下来
验证通过后,不要丢掉测试数据。把"最小可验证样本 + 预期输出"保存为一个回归用例集。以后每次修改脚本(无论是自己改还是让 AI 改),都先跑一遍回归用例,确认没有破坏已有功能。这就是软件工程中的"回归测试"思想在办公自动化中的轻量化应用。
笔者认为,回归用例是办公自动化脚本从"一次性工具"升级为"长期资产"的分水岭。没有回归用例的脚本,改一次怕一次;有了回归用例,修改就有了安全网。对于高频运行的脚本,还可以把回归用例的执行做成一个批处理文件,一键运行。
本文评述:验证阶段发现的问题,应分两类处理——"实现错误"回给 AI 修,"契约遗漏"回写到第一步的契约文档。只有后者被认真对待,三步 SOP 才真正形成闭环,而不是每次都从零开始。
六、完整案例:从 Excel 报表合并到自动邮件分发
6.1 任务背景
某部门每周需要汇总 5 个小组提交的销售明细 Excel,生成一份部门周报,并邮件发送给主管。人工操作约需 40 分钟,且容易漏掉某个小组的文件。目标:用三步 SOP 实现自动化。
6.2 第一步:边界定义
输入契约:5 个小组各自把文件放到共享盘 ./weekly/ 下,文件名格式为"组名_YYYYMMDD.xlsx",表头固定为:日期、销售员、产品、数量、单价。变体:个别小组可能漏交,或表头顺序不同。输出契约:生成 ./report/部门周报_YYYYMMDD.xlsx,包含两个 sheet——"明细汇总"(所有记录合并)和"小组统计"(每组销售总额、记录数)。异常契约:某组文件缺失时,在周报中标注"未提交",不中断流程;数量或单价为空的行跳过并记录日志。
6.3 第二步:生成与审查
按 4.1 的模板把三契约喂给模型,得到脚本初稿。审查时发现两个问题:一是脚本假设所有文件表头顺序一致,未做列名对齐;二是邮件发送部分硬编码了收件人地址。前者回写契约(增加"表头顺序可能不同,需按列名对齐"),后者在提示词中补充"收件人从 config.ini 读取"。第二轮生成后通过审查。
6.4 第三步:验证与固化
构造测试数据:4 个正常文件 + 1 个缺失组 + 1 个含空值的文件。试运行后检查:明细汇总记录数 = 4 个文件有效行数之和;小组统计中缺失组显示"未提交";日志中记录了被跳过的空值行。全部通过后,把测试数据与预期输出保存为回归用例。此后每周只需双击运行,人工从 40 分钟降到约 2 分钟检查。
这个案例的启示是:真正花时间的不是写代码,而是把"5 个小组可能漏交、表头可能不同"这些隐性规则想清楚。一旦想清楚,AI 生成代码只是几分钟的事。
七、工程洞察:常见失败模式与反模式清单
7.1 六种典型失败模式
- 跳过边界定义直接生成:拿到需求就让 AI 写,结果反复返工,总耗时反而更长。
- 契约只写正常路径:忽略异常,脚本在真实数据上频繁崩溃。
- 验证靠"看起来对":没有量化比对,错误被长期掩盖。
- 硬编码路径与参数:换台电脑或换个目录就失效。
- 无日志无告警:脚本静默失败,无人知晓。
- 修改不留回归用例:每次改动都是"盲改",越改越不敢动。
7.2 反模式:把 AI 当"背锅侠"
一个值得警惕的反模式是:脚本出错时,第一反应是"AI 写得不行",而不是"我的契约是不是没写清"。本文评述:这种归因方式会让人停留在"换模型、换提示词"的低效循环里,而真正的改进点——边界定义的完备性——被忽略了。把责任推给工具,等于放弃了流程优化的机会。
八、前沿预判:Agent 化、可验证性与办公自动化的下一个五年
8.1 从"生成代码"到"自主执行"
当前的研究热点正从"代码生成"走向"Agent 自主执行"。以 AutoGPT、OpenHands(原 OpenDevin)、SWE-agent 为代表的项目,尝试让模型不仅生成代码,还能自主运行、观察结果、修正错误。SWE-bench(Jimenez et al., 2023)等基准显示,Agent 在真实软件问题上的解决率正在快速提升。本文评述:Agent 化会进一步降低"实现"环节的人力,但会放大"验证"环节的重要性——当 Agent 能自主执行时,人类必须更清楚地定义"什么算成功",否则 Agent 会朝着错误的目标"高效地奔跑"。
8.2 可验证性将成为核心能力
随着 AI 生成内容的比例上升,"可验证性"(Verifiability)正成为软件与办公自动化的核心议题。学术界对 LLM 输出的可靠性、幻觉检测、形式化验证等方向投入持续增加。笔者认为,未来办公自动化的竞争力,不在于"谁能生成更多代码",而在于"谁能更快、更低成本地验证生成结果"。三步 SOP 中的第三步,其权重会持续上升。
8.3 对个人技能的影响
三步 SOP 对个人技能结构的影响是:语法熟练度的价值下降,需求拆解能力、边界定义能力、验证设计能力的价值上升。这与软件工程中"架构师与需求分析师不可替代"的长期趋势一致。对办公场景中的非专业开发者而言,这意味着不必精通编程,但必须学会"把任务说清楚"。
九、结论与行动清单
本文以"边界熵"为分析主线,构建了"明确任务边界→AI 生成代码→试运行验证结果"三步 SOP。核心结论是:办公自动化的成败,主要取决于边界定义的完备性,而非代码生成工具的能力。AI 把实现成本压到极低,反而让边界定义成为瓶颈。三步 SOP 通过三契约、结构化提示、验证闭环,把这一瓶颈显式化、可操作化。
行动清单
- 接到自动化需求时,先写三契约,不急着写代码。
- 用"边界熵清单"自检,请同事指出犹豫点。
- 用结构化提示词模板驱动 AI 生成代码。
- 按审查清单检查生成结果,重点看异常路径。
- 在沙箱中用最小样本试运行,做量化比对。
- 保存回归用例,每次修改前先跑一遍。
- 把验证中发现的新歧义点回写到契约文档。
十、参考文献与拓展资源
10.1 主要参考文献(8—9 篇)
- Chen, M., et al. (2021). Evaluating Large Language Models Trained on Code. arXiv:2107.03374. (Codex 论文,代码生成奠基性工作)
- Jimenez, C. E., et al. (2023). SWE-bench: Can Language Models Resolve Real-World GitHub Issues? arXiv:2310.06770. (真实软件问题基准)
- Meyer, B. (1986). Design by Contract. Technical Report, Interactive Software Engineering. (契约式设计经典)
- Boehm, B. W. (1981). Software Engineering Economics. Prentice-Hall. (缺陷成本曲线经典来源)
- Austin, J., et al. (2021). Program Synthesis with Large Language Models. arXiv:2108.07732. (MBPP 基准)
- Roziere, B., et al. (2023). Code Llama: Open Foundation Models for Code. arXiv:2308.12950. (开源代码模型)
- Guo, D., et al. (2024). DeepSeek-Coder: When the Large Language Model Meets Programming. arXiv:2401.14196. (国产代码模型代表)
- Wang, X., et al. (2024). A Survey on Large Language Model based Autonomous Agents. Frontiers of Computer Science. (Agent 综述)
- Wei, J., et al. (2022). Chain-of-Thought Prompting Elicits Reasoning in Large Language Models. arXiv:2201.11903. (提示工程基础)
10.2 拓展学习链接
- Python 官方文档:https://docs.python.org/zh-cn/3/
- pandas 官方用户指南:https://pandas.pydata.org/docs/user_guide/
- OpenAI 提示工程指南:https://platform.openai.com/docs/guides/prompt-engineering
- SWE-bench 项目主页:https://www.swebench.com/
- OpenHands(原 OpenDevin)项目:https://github.com/All-Hands-AI/OpenHands
- Microsoft Power Automate 教程:https://learn.microsoft.com/zh-cn/power-automate/
- UiPath 学院(RPA 学习):https://academy.uipath.com/
10.3 数据集与预处理说明
本文涉及的公开基准数据集(HumanEval、MBPP、SWE-bench)均为学术公开数据,其预处理方式以原始论文为准:HumanEval 与 MBPP 提供函数签名与测试用例;SWE-bench 从真实 GitHub 仓库抽取 issue 与对应补丁。本文未使用任何私有数据集;文中"返工率""耗时对比"等数值为笔者基于多个办公自动化项目的经验性模拟估计,已在对应位置标注,非严格实验测量结果。
本文内容仅为作者学习、思考、经验、笔记的总结,仅供技术交流与参考。文中观点仅代表笔者个人思辨,不构成任何学术建议、商业建议或专业建议。所有数据来源已标注,引用时请以原始文献为准。
全文约 12600 字 | 参考文献 60+ 篇(主要 9 篇)

