基于大模型回答的智能文件编辑工具 —— 专为内网环境设计,通过"复制提示词 → 网页 LLM → 粘贴回复"的方式,让大模型安全地编辑本地文件。
┌──────────────┐ ①生成提示词 ┌──────────────┐
│ 本地脚本 │ ──────────────→ │ 提示词文本 │
│ ai_file_ │ │ (含文件内容) │
│ editor.py │ └──────┬───────┘
└──────────────┘ │ ②复制粘贴
▼
┌──────────────┐ ④解析并执行 ┌──────────────┐
│ 本地文件 │ ←────────────── │ 网页 LLM │
│ (自动备份) │ │ (人工复制回复)│
└──────────────┘ └──────┬───────┘
│ ③保存为 response.txt
▼
本地回复文件
核心思想:大模型不直接碰你的文件,而是输出结构化的 <file_edit> 编辑指令,本地脚本解析后才执行,且默认先预览、确认后才写入。
| 项目 | 要求 |
|---|---|
| Python | 3.9+(开发验证环境为 3.13) |
| 第三方依赖 | 离线模式零依赖;在线模式需 pip install openai |
| 操作系统 | Windows(已适配 GBK/CRLF),Linux/macOS 同样可用 |
假设要让网页大模型给 main.py 添加错误处理:
Step 1 — 生成提示词
python ai_file_editor.py prompt edit main.py -i "添加错误处理"屏幕上会输出完整提示词(含文件内容 + 编辑协议说明),全选复制。 Windows 可直接送入剪贴板:
python ai_file_editor.py prompt edit main.py -i "添加错误处理" | clipStep 2 — 网页 LLM 生成回复
把提示词粘贴到任意网页大模型(DeepSeek / 豆包 / 文心一言等),等它输出 <file_edit> 格式的回复,全选复制回复内容,用记事本保存为 response.txt(与脚本放在同一目录)。
Step 3 — 预览并执行
# 先预览(默认模式,不改文件)
python ai_file_editor.py apply response.txt
# 确认无误后执行,并备份原文件
python ai_file_editor.py apply response.txt --apply --backup为单个已有文件生成编辑提示词。
python ai_file_editor.py prompt edit <文件路径> -i "<指令>" [-o 输出文件]| 参数 | 说明 |
|---|---|
file |
要编辑的文件路径(必填) |
-i, --instruction |
给大模型的编辑指令(必填) |
-o, --output |
提示词保存到文件(默认输出到屏幕) |
示例:
python ai_file_editor.py prompt edit src/main.py -i "给所有函数添加类型注解"
python ai_file_editor.py prompt edit src/main.py -i "重构" -o prompt.txt把目录下多个文件合并成一条提示词,一次发给网页 LLM。
python ai_file_editor.py prompt batch <目录> -i "<指令>" [--pattern 模式] [-o 输出文件]| 参数 | 说明 |
|---|---|
directory |
目标目录(必填,递归搜索) |
-i, --instruction |
编辑指令(必填) |
--pattern |
文件匹配模式,默认 *.py |
-o, --output |
提示词保存到文件 |
示例:
python ai_file_editor.py prompt batch ./src -i "给所有函数加类型注解" --pattern "*.py"不附带已有文件,让 LLM 从零创建新文件。
python ai_file_editor.py prompt raw -i "创建一个 FastAPI 入口文件 app.py,包含健康检查接口"从回复文件中解析 <file_edit> 指令,默认只预览不写入。
python ai_file_editor.py apply <回复文件> [--base-dir 目录] [--apply] [--backup]| 参数 | 说明 |
|---|---|
response_file |
网页 LLM 回复保存的文件(必填) |
--base-dir |
文件操作的基准目录,默认当前目录 |
--apply |
实际执行编辑(不加则只预览) |
--backup |
编辑前自动备份原文件(生成 xxx.bak_时间戳) |
输出示例:
💬 大模型说明:
我帮你添加了类型注解。
📋 解析到 1 条编辑指令:
EDIT main.py
[预览] EDIT main.py
┌─ DIFF ────────────────────
│ - def add(a, b):
│ + def add(a: int, b: int) -> int:
└────────────────────────────
📌 以上为预览,加 --apply 确认执行
📌 重要:请在生成提示词时的同一目录下执行
apply。提示词中的文件路径是相对路径,apply默认也以当前目录为基准解析。如果不在同一目录,用--base-dir指定。
场景:内网项目 ./src 下有 3 个 Python 文件,要给所有函数加类型注解。
# ① 进入项目目录(重要!后续 apply 也要在这里执行)
cd C:\myproject
# ② 生成批量提示词并复制到剪贴板
python C:\tools\ai_file_editor.py prompt batch ./src -i "给所有函数加类型注解" | clip
# ③ 打开网页 LLM,Ctrl+V 粘贴,发送
# ④ 把 LLM 完整回复复制,保存为 C:\myproject\response.txt
# ⑤ 先预览改动
python C:\tools\ai_file_editor.py apply response.txt
# ⑥ 确认无误,执行并备份
python C:\tools\ai_file_editor.py apply response.txt --apply --backup输出:
✅ EDIT src\a.py(编码: utf-8)
备份: a.py.bak_20260817_233000
✅ EDIT src\b.py(编码: gbk)(行尾归一化匹配)
备份: b.py.bak_20260817_233000
✅ EDIT src\c.py(编码: utf-8)
备份: c.py.bak_20260817_233000
提示词已引导 LLM 按以下格式回复,了解协议有助于你检查回复是否正确:
1. 创建/覆盖文件
<file_edit path="utils.py" action="create">
<new_content>
def helper():
pass
</new_content>
</file_edit>2. 编辑已有文件(查找替换)
<file_edit path="main.py" action="edit">
<old_content>
def add(a, b):
return a + b
</old_content>
<new_content>
def add(a: int, b: int) -> int:
return a + b
</new_content>
</file_edit>3. 删除文件
<file_edit path="old.py" action="delete">
</file_edit>协议要点:
- 一条回复可包含多条
<file_edit>,对应多个文件 old_content必须与文件内容完全匹配(含缩进换行),且应包含 3~5 行上下文确保唯一path必须与提示词中给出的路径完全一致
工具内置多重防护,宁可拒绝执行,也不冒险改错文件:
| 机制 | 说明 |
|---|---|
| 默认预览 | 不加 --apply 只看 diff,不写文件 |
| 自动备份 | --backup 在写入前生成 文件名.bak_时间戳 |
| 空匹配拒绝 | old_content 为空时拒绝执行(防止内容被插到文件开头) |
| 多匹配拒绝 | old_content 匹配到多处时拒绝执行(防止改错位置),提示补充上下文 |
| 首行缩进保留 | 解析器精确保留内容缩进,Python 代码不会因缩进丢失而语法错误 |
| 行尾自适应 | 网页复制导致 \n/\r\n 不一致时自动归一化匹配,写回保持原行尾 |
| 编码保持 | GBK 文件编辑后仍是 GBK,不会被强制转成 UTF-8 |
| 特性 | 说明 |
|---|---|
| 零依赖 | 离线模式只用 Python 标准库,无需 pip install |
| GBK 兼容 | 自动识别 UTF-8 / UTF-8-BOM / GBK 编码(Windows 记事本默认编码也能读) |
| CRLF 兼容 | Windows 文件行尾自动适配 |
| 中文控制台 | Windows GBK 控制台不会因特殊字符崩溃 |
| 剪贴板集成 | 命令后加 ` |
Q1: apply 时提示"未找到匹配文本"?
按以下顺序排查:
- 网页复制时是否丢了行尾空格(某些网页渲染会吞掉)
- 文件缩进是空格还是 Tab,与 LLM 输出是否一致
- 生成提示词后文件是否被手动修改过
- 是否在生成提示词的同一目录下执行的 apply
Q2: 提示"old_content 匹配到 N 处"?
说明这段代码在文件里出现了多次,脚本拒绝执行。让 LLM 重新生成回复,在 old_content 中包含更多上下文(比如函数定义行 + 前后几行),确保唯一匹配。
Q3: 回复文件保存后解析不到编辑指令?
检查 LLM 回复是否完整复制(有些网页复制会漏掉后半部分),以及是否包含 <file_edit 标签。可以用文本编辑器打开 response.txt 搜索 <file_edit 确认。
Q4: LLM 回复被截断了怎么办?
网页 LLM 输出长度有限。把任务拆小:单文件用大改动时,改用"分多次编辑"策略,一次只让 LLM 改一部分。
Q5: 提示词太长贴不进网页?
缩小 prompt batch 的范围(按子目录分批),或减少 --pattern 匹配的文件数。超过 10 万字符时脚本会主动警告。
Q6: 改错了怎么恢复?
如果加了 --backup,同目录下有 文件名.bak_时间戳 备份文件,复制回来即可。强烈建议重要文件始终加 --backup。
Q7: 支持编辑非 Python 文件吗?
支持。任何文本文件都可以(JS/Java/配置/Markdown 等),用 --pattern 指定,如 --pattern "*.java"。
如果环境可以访问大模型 API(如公司内网部署的模型服务),可以跳过手动复制:
# 配置环境变量
set OPENAI_API_KEY=your-key
set OPENAI_BASE_URL=http://your-llm-server/v1
set OPENAI_MODEL=your-model
# 一键编辑(自动调用 API + 解析 + 执行)
python ai_file_editor.py edit main.py -i "添加错误处理" --apply --backup
python ai_file_editor.py batch ./src -i "加类型注解" --apply
python ai_file_editor.py raw -i "创建 FastAPI 入口文件" --apply在线模式命令与离线模式参数一致,安全机制完全相同(默认预览、备份、防护)。
| 场景 | 命令 |
|---|---|
| 单文件提示词 | python ai_file_editor.py prompt edit main.py -i "指令" |
| 多文件提示词 | python ai_file_editor.py prompt batch ./src -i "指令" |
| 新文件提示词 | python ai_file_editor.py prompt raw -i "指令" |
| 复制到剪贴板 | 任意 prompt 命令后加 ` |
| 保存提示词 | 任意 prompt 命令加 -o prompt.txt |
| 预览编辑 | python ai_file_editor.py apply response.txt |
| 执行编辑 | python ai_file_editor.py apply response.txt --apply |
| 执行+备份 | python ai_file_editor.py apply response.txt --apply --backup |
| 指定基准目录 | 加 --base-dir ./src |