前面说了 opencode 能帮你搜教程、下视频,也能帮你补上课没听懂的知识点。
有同学问:那更复杂的事儿能管吗?比如我有一堆杂七杂八的资料文件,要从里面提取数据,然后按一个固定模板填好,格式一点都不能走样——这种活儿它能干吗?
能。今天就拿一个真实的例子,从头到尾演示一遍——从安装技能、发现技能不够用、当场改进技能、重新安装、到最终拿改进后的技能把活儿干了的全过程。
先把技能装上
opencode 有个东西叫"技能"(Skill),相当于给智能体预设了一套标准化的操作流程。你遇到一类反复出现的任务,就给它装个技能,下次一句话就能触发整套流程。
我维护了一个开源的技能仓库,在 GitHub 上:https://github.com/cycleuser/Skills/
里面目前有二十多个技能,覆盖架构设计、开发、测试、写作、专利、公文、模板保真填表这些场景。
安装方式有两种。
第一种,直接把仓库地址丢给 opencode,让它自己装。你在对话里跟它说"帮我把 https://github.com/cycleuser/Skills/ 这个技能仓库安装到本机",它就会自己去克隆仓库、跑安装脚本、把技能文件放到该放的位置。你啥都不用管,等它装完就行。
第二种,自己跑命令。一条命令的事儿:
curl -sSL https://raw.githubusercontent.com/cycleuser/Skills/main/quick-install-opencode.sh | bash
跑完就全装好了。如果你想改了技能直接生效,也可以克隆到本地再安装:
git clone https://github.com/cycleuser/Skills.git
cd Skills
python3 install-opencode.py install --source .
装完验证一下:
ls ~/.config/opencode/skills/
能看到一堆技能目录就对了。技能文件放在 ~/.config/opencode/skills/ 目录下,opencode 启动时自动发现。
填表技能是什么
这次要用的是一个叫 tianbiao(填表)的技能,专门干"照着模板填数据、保持格式不走样"的活儿。

它的核心原则就一条:复制原模板,把数据填进对应单元格,保持原有字体、边框、合并单元格与版式,绝不从零重排。
为什么不能从零画表?因为用 python-docx 从零新建表格的话,字体、字号、边框、行高、合并单元格全都会走样,跟原模板对不上。学校的表格、单位的报表,格式都是有固定要求的,差一点都不行。所以必须打开原模板,只替换单元格里的文字,让填进去的内容继承单元格原有的样式。
这个技能有几个命令:
/填表 <模板> <数据>— 按模板填充数据,保持格式/填表 convert <文件>— 把 .doc/.xls 老格式转成可编辑的 .docx/.xlsx/填表 inspect <模板>— 填之前先摸清模板的表格结构/填表 check <文档>— 填完校验格式保真度和数据一致性
原来它的工作流是五步:转换老格式 → 摸底模板结构 → 准备数据 → 填充 → 校验。适用于试卷质量分析表、成绩分析表、过程性评价档案、考查课报告这类学校表格。
事情的起因
我手头有一份 84 页的 PDF,是 2026 年中国大学生计算机设计大赛吉林省级赛的成绩公示名单,里面有一千多条获奖记录。还有一个空白的获奖统计表模板,docx 和 xlsx 各一份,只有表头没有数据。
我要做的就是把 PDF 里的获奖记录提取出来,按模板的格式填进去。
这个活儿看着简单,实际上又臭又长:PDF 表格解析、换行处理、数据清洗、模板格式保真、批量填充——每一步都有坑。
我翻了一下填表技能的说明,发现一个问题:它只覆盖了"从结构化源文件(点名册、成绩表)提数据"的场景,而我这次的数据源是一堆非结构化的 PDF,里头的表格还各种换行错位。
也就是说,技能不够用。
基于已有技能来修改
不够用怎么办?改。不用从零写,在已有技能基础上加东西就行。

重点改 tianbiao。缺什么补什么——它缺的是"从非结构化资料提取文本"的能力。原来的技能只会从结构化的 Excel 点名册里读数据,碰到 PDF 和图片就抓瞎。
改进出来新技能
新增了一个完整的文本提取规则文件,涵盖:
- 文件类型路由:按扩展名自动分流——有文字层的 PDF 用 pdfplumber 提取,没文字层的扫描件转图片后 OCR,Office 文档用 python-docx/openpyxl 原生解析
- OCR 引擎选择:中文扫描件首选 PaddleOCR,英文用 Tesseract,高精度需求上云服务
- 错行检测与纠正:PDF 多栏排版被读成交错文本的问题,用坐标信息按 Y 轴分行、X 轴分栏来修复
- OCR 纠错:形近字(已→己)、数字混淆(0→O)、换行错位、乱码字符的清洗规则
- 提取质量校验:关键数字回查原文位置、字段完整性、数值合理性

同时更新了工作流:原来的"Step 3 备数据"拆成两条路径——3a 从非结构化资料提取(PDF/图片/扫描件),3b 从结构化源文件读取。新增了 /填表 extract <资料目录> 命令。
技能版本从 1.0.0 升到 1.1.0。
技能改进后安装完成
改完的技能文件在 GitHub 仓库里,要同步到本机 opencode 的配置目录才生效。

技能文件全部复制到位:tianbiao 新增了 text-extraction.md 文本提取规则,更新了工作流和命令。验证版本号 1.1.0 对了,文件都在,安装完成。
具体测试
技能装好了,开始干活。先加载填表技能,然后把两个文件路径甩给它——一个是 PDF 数据源,一个是 xlsx 模板。

同目录下还有个 docx 文件,也是模板。我先分别检查了三个文件:PDF 是 84 页的成绩公示名单(数据源),xlsx 和 docx 都是空白模板(只有表头,7 列 51 行)。
技能开始执行
技能开始执行。先用 pdfplumber 提取 PDF 的表格数据。

第一轮提取到 989 条,但 PDF 实际有 1003 条记录。差了 14 条。排查发现是两种特殊情况:5 条"弃赛"和 9 条"未获奖"——它们的奖项字段不是"一等奖/二等奖/三等奖/优胜奖",所以没被匹配到。另外还有学校名和赛道名跨行的问题(比如"吉林农业科技\n学院"被读成两行)。
修正了提取逻辑:把"弃赛"和"未获奖"也纳入奖项集合,加了 clean() 函数清理换行符。第二轮提取,1003 条全部到位。
要求进一步明确
提取到 1003 条,但模板只有 50 个数据行。这是个明显需要确认的点——不可能瞎填。

opencode 没有自作主张,而是停下来问了我一个问题:你是要全部 1003 条、还是只填某个学校/某个教师/特定学生的?我选了"全部记录",那模板就要扩展到 1003 行。
这个"不确定就问"的设计很重要。填表技能的铁律之一就是"不编造、不猜"——宁可停下来确认,也不闷头干完了发现方向错了。
完成了
确认后开始填充。docx 版本:克隆模板的数据行扩展到 1003 行,每行填入序号、学校、成员、指导教师、赛道、奖项、是否推荐国赛。数据行用宋体 9pt 居中,表头设了跨页重复(tblHeader),每行设了防跨页断裂(cantSplit)。

xlsx 版本也同步生成:用 openpyxl 打开原模板,只写值不动原有样式,数据行设了宋体 9pt 居中加边框。
两个文件都填充完毕,1003 条记录一条不少。
得到文件
校验结果:

docx 版本:1004 行(1 表头 + 1003 数据),7 列,标题段落保留原模板样式,表头跨页重复,数据行防断裂。抽查首尾数据与源 PDF 一致。
xlsx 版本:1004 行 7 列,表头样式保留,数据行宋体 9pt 居中带边框。
最终成品

两个文件保存在原目录下:2026设计大赛获奖统计-已填充.docx 和 2026设计大赛获奖统计-已填充.xlsx。
整个过程我做了什么?
开头说了两句话——一句是"参考那篇文章改进技能",一句是"用改进后的技能填这两个文件"。中间发现技能不够用、当场改了技能、重新安装、提取 PDF、修正数据、扩展模板、填充、校验——全是 opencode 自己跑的。
回顾一下这个过程
这个案例跟前面几篇不一样的地方在于:它不是"用一个现成工具干一件事",而是"工具不够用的时候先改工具,再用改好的工具干活"。
opencode 的技能系统设计的初衷就是这样的。技能不是黑箱,是透明的 Markdown 文件——你能看到它的每一条规则、每一个步骤。不够用了就加规则,过时了就改流程,不需要等别人发版本。
这次具体加了什么?一个 text-extraction.md,把"从 PDF/图片/扫描件提取文本→OCR 识别→错行纠正→数据校验"这套流程标准化了。下次再遇到类似的活儿——不管是成绩公示、获奖名单、还是什么别的 PDF 表格——一句话就能触发整套流程,不用从头教。
这其实就是用 AI 的正确姿势:不是每次都从零开始描述需求,而是把重复出现的任务沉淀成技能,让工具自己记住怎么做。
你用的次数越多,积累的技能越多,后面干活的效率就越高。一开始可能要花点时间改技能、调规则,但这个投入是复利的——同一个技能以后每次用都不用再教。
学会用工具,从学会改工具开始。
对新人大学生来说,在很多需要填表儿的时候,也可以用这类的东西来帮自己提高效率