一、ChatGPT很好,但它碰不到你的图纸
AI办公的话题火了整整一年。Copilot进了Office,WorkBuddy接管了桌面,Kimi Work能调度300个Agent并行干活------看起来人人都在拥抱AI智能体。
但我发现一个奇怪的现象:大部分人还在把AI当搜索引擎用。
"帮我总结这篇文章""帮我查一下这个概念""帮我写一封邮件"------一问一答,复制粘贴。AI在浏览器里,工作在软件里,中间隔着一个人肉搬运工。
这中间缺的是什么?
AI和你的工程工具之间,少了一座桥。
你今天打开AutoCAD画图、打开Excel算量、打开Word写报告,这些工具都支持COM接口------也就是说,一行Python脚本就能让程序操控它们。而LLM能做的是:把你说的"人话",翻译成程序能执行的代码。
桥,就搭在这里。
不用Agent,不用WorkBuddy,不用Copilot。今天我把我接通的三个方向------CAD、Excel、Word------整个工作流拆给你看。
✦ AI真正的战场不在聊天框里在你每天打开的工具软件里
壹 · CAD:说一句话,画一张图
为什么要让LLM画CAD?
AutoCAD的图形界面很好用------但你有没有经历过这种场景:临时要画一个标准横断面、批量加50个标注、或者按坐标表逐个放点。每一个都要鼠标点半天,错一个就得重来。
我写了一个工具叫 TextToCAD。它的逻辑很简单:
你说人话 → DeepSeek理解意图 → 生成Python代码 → COM驱动AutoCAD执行
打开一个PySide6小窗口,输入一句中文:「在这个图层画一条从(0,0)到(100,50)的线,再画一个半径30的圆」,点执行------线画好了,圆也画好了。
关键设计:Safe Helper Functions
直接让LLM生成COM代码是找死。COM接口又臭又长------ModelSpace.AddLine(start, end)、obj.Color、obj.Layer------LLM很容易生成不存在的API调用。
我的解法是:在exec命名空间注入一层安全辅助函数。
python
# 不说 "AutoCAD COM API"
# LLM 只需要用这些函数:
L(0, 0, 100, 50) # 画线:起点→终点
C(50, 25, 30) # 画圆:圆心+半径
R(10, 10, 80, 40) # 画矩形:左上角+宽高
T("标注文字", 20, 30, 5) # 写文字:内容+坐标+高度
DIM(0, 0, 100, 0, 5) # 标注:两点+偏移距离
OBJS() # 列出所有对象
UNDO() # 撤销
这一层的效果是惊人的------LLM只需要组合这些简单的函数名,不需要知道底层是win32com.client.Dispatch("AutoCAD.Application")还是pyautocad。
它不需要懂COM,它只需要懂你。
两种模式,两个按钮
工具设计了双模式:
| 模式 | 做什么 | LLM的权限 |
|---|---|---|
| 分析查询 | "统计图层上的对象数量""找出所有块定义" | 只读,不能改图 |
| 执行绘制 | "画一个标准基础平面图""把选中的对象移到图层3" | 可写,带UNDO保护 |
这两种模式分开,保证了"先看后动"的安全节奏。点错了大不了UNDO回滚------比手动点错的代价小多了。
不只是AutoCAD
同一个架构覆盖了五个工具:
| 工具 | 核心能力 | 辅助函数示例 |
|---|---|---|
| AutoCAD | 自然语言绘图 | L() C() R() T() DIM() |
| FreeCAD | 参数化建模 | BOX() CYL() FUSE() CUT() |
| Excel | 数据读写修复 | V() F() ERR() FIX() LOOP() |
| Word | 文档编辑排版 | WRITE() HEADING() TABLE() FIND() |
| PPT | 幻灯片生成 | NEW_SLIDE() TB() TABLE_SLIDE() |
五个工具,同一个模式:LLM翻译意图 → 安全函数执行 → 人验收结果。
✦ 最好的自动化不是最聪明的是最不容易出错的
贰 · Excel:让AI修数据,不是让它看数据
一个真实的场景
做工程审计的时候,Excel文件里藏着各种问题:公式引用了死值、单元格值是#DIV/0!、隐藏行里有数据。一个项目几百行数据,人工逐行核对------两天起步,还容易漏。
LLM能做什么?你让它"分析这个Excel",它只能看。但你让它操控Excel的COM接口,它就能修。
核心架构:COM不是魔鬼,是杠杆
python
import pythoncom
pythoncom.CoInitialize()
import win32com.client
excel = win32com.client.Dispatch('Excel.Application')
excel.Visible = False # 后台运行,不弹窗
excel.DisplayAlerts = False # 不弹确认框
excel.ScreenUpdating = False # 关闭刷新,提速
wb = excel.Workbooks.Open('原始审计表.xlsx')
ws = wb.Worksheets(1)
# LLM生成的修复代码 ↓
ws.Cells(5, 42).Value = 12345.67 # 修正数据
ws.Cells(5, 42).Interior.Color = 0xFFFFCC # 浅黄高亮
cell = ws.Cells(5, 42)
cell.AddComment('修复说明\n原值: 12000.00\n修正为: 12345.67\n原因: 公式引用偏移')
cell.Comment.Shape.TextFrame.AutoSize = True # 批注自动尺寸
同样的Safe Helper模式:
python
V(cell) # 取值:V("A5") → 单元格的值
F(cell) # 取公式:F("B3") → "=SUM(A1:A10)"
ERR(cell) # 检测错误:#DIV/0! → True
FIX(cell, f) # 修复公式:FIX("B3", "=SUM(A1:A9)")
LOOP(ws, col, start, end) # 批量遍历
LLM生成的是对V() F() FIX()的调用,不是裸COM。每次执行都在安全边界内。
整个自动化流水线
arduino
① 读数据(UsedRange.Value + UsedRange.Formula,2次COM调用)
↓
② 送到LLM分析("找出以下数据中的:公式引用偏移、除零错误、隐藏行数据")
↓
③ LLM返回修复方案(每行:位置→原值→修正值→原因)
↓
④ COM执行修复(改值+加批注+黄高亮)
↓
⑤ 新建"修复记录"Sheet置顶(深蓝标题+白字表头,所有修改一目了然)
↓
⑥ SaveAs保存(不用Save(),会静默失败)
一个256行的审计表,人工核对要两天,这套流水线跑完:8分钟。
两个血泪教训
教训一:Save() 会静默失败。
python
# ❌ 不会报错,文件也没变
wb.Save()
# ✅ 正确姿势
wb.SaveAs(path, FileFormat=51) # 51 = xlOpenXMLWorkbook
wb.Close(SaveChanges=False) # 已SaveAs,不重复保存
COM的Save()在某些情况下(网络路径、只读来源、权限受限)不抛异常直接跳过。你点完"保存"以为搞定了,第二天打开还是原样。这个坑我踩了两次才找到规律。
教训二:列号必须实物验证。
pandas读出来的列号和COM接口的列号可能差一位。我之前写了个批量修复脚本,列41是"坡改梯"列,但COM里实际在col42------结果读到相邻列的相同值,判断"无差异",漏了535条问题。
每次跑之前,先读表头行确认列号:
python
for c in range(38, 46):
print(f'col{c}: {ws.Cells(1, c).Value}')
✦ 一行粗糙的代码胜过一万篇收藏的教程COM不是上个世纪的遗物,是你撬动自动化的支点
叁 · Word:AI写文档是编程,不是粘贴
python-docx的三种高级操作
LLM输出一段文字让你粘贴到Word里------那是AI聊天的水平。真正让LLM操控Word文档生成,靠的是python-docx库。
有三个操作在工程文档里极其常用,但网上教程几乎不讲清楚:
一、表格不跨页断开
工程报告里的表格经常很长------6行、8行、12行。默认情况下Word会在页边界把表格劈成两半,标题在上一页底,数据在下一页顶,看起来像排版事故。
python
from docx.oxml import OxmlElement
from docx.oxml.ns import qn
for row in table.rows:
# 核心:设置行属性 cantSplit = true
trPr = row._tr.get_or_add_trPr()
cantSplit = OxmlElement('w:cantSplit')
cantSplit.set(qn('w:val'), 'true')
trPr.append(cantSplit)
# 双保险:单元格段落加 keepLines
for cell in row.cells:
pPr = cell.paragraphs[0]._p.get_or_add_pPr()
keepLines = OxmlElement('w:keepLines')
pPr.append(keepLines)
两行XML就解决了一个排版噩梦。cantSplit告诉Word"这行不许断",keepLines给段落加双保险。
二、自动生成目录(TOC)
工程报告的目录页是最后一个做的,但永远第一个被翻。手动写目录------页码一改全部重排。python-docx可以直接插入Word的TOC域代码:
python
p = doc.add_paragraph()
run = p.add_run()
# 域开始
fldChar_begin = OxmlElement('w:fldChar')
fldChar_begin.set(qn('w:fldCharType'), 'begin')
run._r.append(fldChar_begin)
# 域指令:1-3级标题,超链接,隐藏Tab
run2 = p.add_run()
instrText = OxmlElement('w:instrText')
instrText.set(qn('xml:space'), 'preserve')
instrText.text = ' TOC \\o "1-3" \\h \\z \\u '
run2._r.append(instrText)
# 域结束
run3 = p.add_run()
fldChar_end = OxmlElement('w:fldChar')
fldChar_end.set(qn('w:fldCharType'), 'end')
run3._r.append(fldChar_end)
生成的docx打开后,右键目录 → 更新域 → 目录和页码自动生成。前提是你章节标题用了Heading 1/2/3样式。
三、中文字体正确设置
python
run.font.name = '宋体'
# 关键:东亚字体回退------下面这行不写,中文会掉成默认字体
run._element.rPr.rFonts.set(qn('w:eastAsia'), '宋体')
font.name只管西文字符。中文字符走的是w:eastAsia属性------少写这一行,整篇文档的中文全变成等线。
✦ AI写文档最值钱的不是输出快是排版不出错
肆 · 核心模式:Safe Helper Functions
为什么这个模式管用?
回顾三个工具的架构,你会发现它们共享同一个核心模式:
markdown
人说话 → LLM翻译意图 → 安全函数层 → 工具COM接口 → 执行结果
↑
这里是关键
安全函数层做了什么:
- 屏蔽底层复杂度 --- LLM不需要知道COM怎么初始化、怎么释放、怎么处理HRESULT错误码。它只需要调
L()V()WRITE()。 - 限制破坏半径 --- 函数层是白名单模式。不能做的操作(删文件、改系统设置)根本不存在于命名空间里。
- 提供UNDO出口 --- 每个工具都内置UNDO/MOVE/DEL等修正手段。LLM可以犯错,但你可以一秒回滚。
- 批量操作优化 ---
UsedRange.Value一次读出全部数据(2次COM调),而不是逐单元格循环(1000+次调用)。LLM不需要懂性能优化,因为它调的是已经优化好的函数。
这套模式的适用范围
不只是CAD/Excel/Word。任何有自动化接口的软件都适用:
| 软件 | 接口 | 可以做什么 |
|---|---|---|
| AutoCAD | COM / .NET | 图纸自动生成、批量修改 |
| Excel | COM (win32com) | 数据清洗、审计修复、报表 |
| Word | python-docx / COM | 文档生成、格式统一、目录 |
| PPT | COM (win32com) | 幻灯片批量生成 |
| FreeCAD | Python API | 参数化3D建模 |
| Photoshop | COM / JSX | 批量图片处理 |
| SAP2000 | OAPI | 结构计算自动化 |
| ArcGIS | ArcPy | GIS数据处理 |
任何一个你每天手动操作超过10分钟的软件,都值得搭一座LLM的桥。
✦ 不用追Agent的风口LLM + 一行Python = 你的第一步自动化
五、收尾:从"收藏教程"到"写一行脚本"
现在市面上的AI办公产品越来越复杂------WorkBuddy、Copilot Cowork、Kimi Work,每个都在讲"Agent集群""自主执行""全流程自动化"。这些东西很好,但有一个问题:
它们让你觉得自动化是别人替你做的事。
而真相是,最好的自动化是你自己写的:
- 你自己最清楚哪一步最重复、最耗时间
- 你自己最清楚数据长什么样、坑在哪里
- 你自己最清楚输出的格式、交付的标准
不需要等公司采购Agent平台,不需要追最新的AI风口。你只需要做一件事:
把LLM接到你每天用的工具上。
一行Python脚本,五个safe helper函数,一次COM调用。听起来小,但这是从"AI帮我查资料"到"AI替我干活"的质变。
CAD里画一条线。Excel里修一个数。Word里排一页纸。
工程师的浪漫,从来不是买最贵的工具,而是用最小的代码,撬动最大的杠杆。
代码很轻 杠杆很长
✦ 美好需要创造 世界一隅 · AI时代的深度思考者 2026年6月21日 TextToCAD 项目 · claude-memory
📌 本文首发于「世界一隅」
如果你也想在算法洪流中守护清醒的微光, 加我微信 zhaotianbing,送你一份《深度阅读者的AI工具包》
《照见幸福》《思想需要被说出来》系列持续更新 ✦