源码版:完整工程 + 开发文档(MD)+ 逐段注释的源代码,含编译说明,便于二次开发与后期维护。
这个工具解决什么问题
做 AI 应用和运营的人天天遇到这个场景:手里有一张表,几十条商品、几十个客户问题、几十个待翻译的句子,要拿同一套提示词逐个跑一遍。做法通常是打开 Excel,点第一行、复制字段、切到 AI 对话框、粘贴、改掉里面的关键词、发送、复制结果、切回 Excel、下一行——重复几十次。这个过程有三个躲不掉的坑:一是改关键词时漏改或改错,把 A 商品的数据发成了 B 的;二是行一多就容易错行,结果跟数据对不上号;三是整个流程没法复用,下次换一批数据还得从头来一遍。真正可靠的批量做法只有一条——先把所有提示词按数据生成好、落成文件,再逐条提交。但手工做这件事,几十行就是大半个小时。
- 原来的做法:在 Excel 和 AI 对话框之间反复切换,逐行复制字段、手工替换关键词、粘贴发送、复制结果再切回表格。几十行数据要重复几十次,中途错一行就得回头核对是哪一行出了问题
- 用这个工具:把表格和模板文件交给工具,一次生成全部提示词清单(可选 txt / csv / jsonl 三种格式),字段自动填充、行号自动对齐,再逐条粘贴到 AI 工具里
- 省下来的:几十行数据的提示词准备从半小时缩短到 1 秒内完成,且不会错行、不会漏改关键词
技术实现
整个工具只用 Python 标准库,运行期不需要 pip 安装任何东西,打包后是单个 exe,运行时不联网、不写注册表、不需要 API Key。设计上刻意保持单文件 500 行、五个分节:占位符渲染、读表格、导出、示例数据、命令行入口。数据流是一条单向直线——读模板与数据表,逐行渲染,按格式导出,没有状态机也没有全局状态。三个技术决策值得说明:渲染用 format_map + SafeDict 而不是普通 format,让缺字段时保留占位符并汇总报告而不是崩溃;xlsx 用 zipfile + ElementTree 直接解析而不引入 openpyxl,省下十几 MB 打包体积;导出固定 UTF-8 BOM,让 Excel 双击不乱码。
- 缺字段不静默:SafeDict + format_map:渲染用 str.format_map() 配一个 dict 子类 SafeDict,实现 __missing__ 钩子:遇到表里没有的字段时,记下名字并原样返回 {字段名}。这样有三个好处——不会像普通 dict 那样抛 KeyError 中断整批处理,也不会像 defaultdict 那样悄悄填空串让用户拿到「看着成功、其实缺数据」的结果;跑完统一报告「哪些字段缺、影响多少行」,并把退出码设为 1 让脚本能感知失败。这是本工具最重要的设计取舍。
- 不依赖 openpyxl 直读 xlsx:xlsx 本质是个 zip,里面是 XML。用标准库 zipfile 打开后,先读 xl/workbook.xml 找到第一个 sheet 的 r:id,再去 xl/_rels/workbook.xml.rels 换到真实工作表路径(不同软件写出的路径不一定是 sheet1.xml,必须走这层间接),然后读 xl/sharedStrings.xml 建共享字符串表——xlsx 的文本不直接存在单元格里,而是存一个下标指向这张表。最后解析行与单元格,按 t 属性分三种情况:t="s" 是共享字符串下标、t="inlineStr" 是内联文本、其余是字面值。省掉 openpyxl 后打包体积从十几 MB 降到 8 MB。
- XML 命名空间按 URI 匹配而非前缀:解析所有 xlsx 内部 XML 都用 {命名空间URI}元素名 的形式匹配(常量 NS_MAIN / NS_REL / NS_PKG_REL),不假定前缀。因为不同厂商导出的 xlsx 前缀可能是 x:、main: 或干脆没有默认命名空间,按前缀写死会在别人的文件上直接失效。
- CSV 编码与分隔符双嗅探:编码按 utf-8-sig → utf-8 → gb18030 → gbk → latin-1 顺序逐个尝试,遇到 UnicodeDecodeError 就换下一个,latin-1 永不失败作兜底;utf-8-sig 放第一位是因为带 BOM 的 UTF-8 若用普通 utf-8 解会在首列混入 \ufeff。分隔符取前 20 个非空行做样本,对逗号、分号、制表符、竖线四种候选统计每行出现次数,得分 = (众数出现次数 / 总行数) × 众数,同时奖励「出现得多」和「每行次数稳定」,这样欧洲导出的分号 CSV 和日志类制表符文件都能正确切开。
- 单元格坐标的 26 进制转换:xlsx 单元格引用是 A1、BC12 这种形式,需要把列字母转成 0 开始的列号:idx = idx * 26 + (ord(ch) - ord('A') + 1),即标准 26 进制。转换后用字典按列号存值,再按最大列号补齐成等长数组,这样处理「中间有空单元格」的行不会错位。
- 三种输出格式的编码取舍:txt 输出把行内换行用 " ".join(p.split()) 压成空格,因为 txt 是「一条一行」的格式,提示词自带换行会导致粘贴时断行错位。csv 输出用 utf-8-sig(带 BOM),无 BOM 的 UTF-8 中文 CSV 被 Excel 双击打开会乱码,带 BOM 才能正确识别;提示词放第一列方便在 Excel 里整列选中复制。jsonl 用 ensure_ascii=False 保留中文原文,文件可直接阅读也可给下游程序消费。
技术栈:Python 3.8+、零第三方依赖(纯标准库)、PyInstaller 单文件打包、zipfile + ElementTree 直读 xlsx
已知局限:一次性把数据表读入内存,实测几万行仍很轻松,但上百万行的超大表建议先切分。xlsx 只读第一个工作表,多工作表的文件需要先把目标表挪到第一位或另存为 CSV。xlsx 只取单元格文本值,不处理公式计算、合并单元格、日期格式——公式单元格读到的是缓存值,日期可能显示成序列号,这类情况建议先另存为 CSV。
操作教程
- 解压压缩包
把 zip 解压到任意文件夹,不需要安装 Python,不需要管理员权限,不用敲任何安装命令。
预期结果:看到 prompt_batch.exe 和 使用说明.txt 两个文件 - 先跑一遍内置示例
在该文件夹地址栏输入 cmd 回车打开命令行,执行 prompt_batch.exe --demo。工具会把内置的示例模板和三行示例数据跑一遍。
预期结果:当前目录出现 demo_output 文件夹,里面有「模板示例.txt」和「提示词清单.txt」,屏幕上还打印出第一条预览,能直观看到工具产出长什么样 - 准备自己的数据表
用 Excel 或 WPS 整理一张表,第一行是列名(表头),下面每行一条数据。另存为 .csv 或 .xlsx 都行。列名用中文、英文都可以,后面要和模板里的占位符对上。
预期结果:得到一个 商品.csv 之类的文件,第一行是 商品名称,卖点,人群 这样的表头 - 写提示词模板
新建一个 txt 文件,把提示词写好,需要填数据的地方用花括号框住对应的列名,例如 {商品名称}。想打出一个真的花括号就写两个 {{。
预期结果:得到一个 模板.txt,里面有 {商品名称}、{卖点}、{人群} 这样的占位符 - 先体检字段对不对得上(推荐)
执行 prompt_batch.exe --list-fields -t 模板.txt -i 商品.csv。这一步只检查不生成,会列出表里有哪些列、模板需要哪些字段,并标出对不上的。
预期结果:看到「[通过] 模板需要的字段在数据表里都能找到。」;如果对不上,会明确提示是哪个字段找不到,先改好再往下走,避免生成一堆带残留占位符的结果 - 正式生成提示词清单
执行 prompt_batch.exe -t 模板.txt -i 商品.csv(想输出 csv 加 -f csv,想预览前三条加 --show)。
预期结果:得到 result.txt,一共 3 行(对应 3 条数据),每条都是已经填好数据的完整提示词,行内换行已压成空格 - 拿去用
打开生成的 txt,逐条复制到任意 AI 工具里提交;或者改用 -f csv 生成带原始字段的表格,把 AI 的回复回填到同一张表里对号入座。
预期结果:每条提示词都对应表格里确定的一行,不会错行、不会漏改关键词
参数说明
| 参数 | 说明 | 必填 | 默认值 |
|---|---|---|---|
-t, --template | 提示词模板文件(.txt),用 {字段名} 做占位符 | 是 | — |
-i, --input | 数据表文件(.csv / .json / .xlsx),每行一条数据 | 是 | — |
-o, --output | 输出文件路径(不带扩展名) | 否 | result |
-f, --format | 输出格式:txt(一行一条)/ csv(带原始字段)/ jsonl | 否 | txt |
--list-fields | 只检查字段是否对得上,不生成结果 | 否 | 关 |
--show | 生成后把前 3 条预览打印到屏幕 | 否 | 关 |
--demo | 用内置示例数据跑一遍,不需要准备文件 | 否 | 关 |
常见问题
源码版与二次开发
源码版交付完整可编译工程:src/ 下是 500 行带详细中文注释的源码,DOCS/开发文档.md 说明了整体数据流、每个技术要点的设计取舍、7 个常见扩展方向与维护约定,README.md 是面向使用者的说明,build.bat 与 run.bat 分别用于一键编译和免编译调试,requirements.txt 声明了运行期零依赖。工程可直接用 Python 3.8+ 独立编译,不需要任何私有依赖或额外配置。二次开发前建议先读开发文档第 3 节「技术实现要点」,那一节解释了为什么用 SafeDict 而不是普通 dict、为什么不用 openpyxl 等关键决策,能避免改错方向。
工程结构:
src/prompt_batch.py—— 唯一源码文件(500 行),含详细中文注释,分五节:占位符渲染 / 读表格 / 导出 / 示例数据 / 命令行入口DOCS/开发文档.md—— 开发文档:工程结构、整体数据流、6 个技术实现要点(含设计取舍)、编译方式、7 个扩展点、维护约定README.md—— 简版用法说明,含参数表、模板写法、三种输入输出格式说明与常见问题build.bat—— Windows 一键编译脚本:检查 Python、自动装 PyInstaller、编译出单文件 exe 并自测run.bat—— 开发期直接运行脚本,免编译快速调试requirements.txt—— 依赖声明:运行期为无(纯标准库),编译期仅需 PyInstallertestdata/—— 自测用的示例数据(商品.csv / 商品.json / 商品.xlsx / 模板.txt / bad_template.txt)
源码包内附文档:
- DOCS/开发文档.md —— 完整开发文档,覆盖数据流、技术要点、扩展点与维护约定,二次开发的入口文档
- README.md —— 面向使用者的简明说明,含全部参数与格式对照表
- 源码内中文注释 —— 500 行源码逐段中文注释,关键算法(SafeDict 渲染、xlsx 解析、分隔符打分)都说明了「为什么这么做」
编译方式:
Windows 下双击 build.bat 即可,脚本会自动检查 Python、按需安装 PyInstaller 并编译。等价的手工命令:pip install pyinstaller 然后 pyinstaller --onefile --console --name prompt_batch --distpath dist_runtime src/prompt_batch.py。产物是 dist_runtime/prompt_batch.exe,单文件、免安装。开发期调试可双击 run.bat 直接运行源码。
常见扩展点:
- 支持新的输入格式(.xls / .ods / SQLite):在 read_table() 的分发处加一个 elif,新增 read_xxx_rows() 返回 (header, rows) 两元组即可,后续逻辑完全不用改
- 支持新的输出格式(Markdown 表格 / 直接生成一份可导入的提示词包):新增 write_xxx(),在 main() 的导出分支加 elif,并同步注册到 --format 的 choices
- 换一套占位符语法(如 ${字段} 或 {{字段}}):只需修改 PLACEHOLDER_RE 一个正则常量,渲染与字段检查两处同时生效
- 增加内置变量(如 {_date} 当天日期、{_uuid}、{_filename}):在 render() 的 payload.setdefault 处加一行,并把名字加进 BUILTIN_FIELDS 常量
- 批量调用 AI 接口实现全自动:新增 call_api(),在导出前逐条发出并收集回复;建议做成可选开关并让用户自备 Key,不要写死进程序
- 加图形界面:用标准库 tkinter 包一层,拖入文件 → 选模板 → 点生成。核心的 read_table / render / write_* 三个函数可原样复用
- 超大文件流式处理:把 rows 从 list 改成生成器,导出侧改为逐条写出,可支撑百万行级数据
- 字段名模糊匹配:当模板字段与表头只差空格或大小写时给出「你是不是想写 xxx」的建议,减少 --list-fields 后的手工排查
源码版与运行版是同一份代码的两个交付形态,版本号一致。如果你在维护中遇到编译或依赖问题,可以联系我们协助。
需要其它功能?可以定制
这个工具只做一件事:同一套提示词要套几十条数据跑一遍,手工复制粘贴容易错行。如果你的场景还需要别的处理,可以联系我们做二次开发,按你的实际数据格式和流程定制。
常见的定制需求:
- 对接你自己的 AI 接口(OpenAI / 通义 / 文心 / 本地 Ollama),批量提交并把结果回填进同一张表
- 把提示词清单直接推送到你用的 SaaS 工具或内部平台,避免手工粘贴
- 定制输入源:从数据库、企业微信、飞书多维表格直接读取数据,省掉导出这一步
- 定制输出:生成带编号的 Markdown 文档、按行拆分的独立 txt、或直接排版成可打印的表格
- 加图形界面与批量任务队列,给不熟悉命令行的同事使用
- 增加变量校验与预览增强:生成前先可视化前 N 条,确认无误再全量导出
- 联系方式:邮箱/微信见站内「联系我们」页面,或在本文下方留言
- 定制说明:请附上你的数据样例(脱敏即可)和期望结果,方便快速评估工作量
- 交付形式:可交付源码或打包好的可执行程序,支持后续维护
使用说明与免责声明
- 本工具在本地运行,不联网、不上传任何数据到服务器。
- 涉及文件改写的功能,请在使用前备份原始文件。
- 软件完全免费,可自由使用与转发,请勿用于倒卖。
- 因误操作造成的数据问题请自行承担。
源码版:完整工程 + 开发文档(MD)+ 逐段注释的源代码,含编译说明,便于二次开发与后期维护。

