promptr
用自然语言指令驱动 GPT-4 直接修改代码文件的 CLI 工具
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
用自然语言指令驱动 GPT-4 直接修改代码文件的 CLI 工具
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
凌晨两点,你刚写完一个 2000 行的后端模块,突然发现所有函数的命名风格需要从 camelCase 改成 snake_case,或者要在 50 个文件中统一加上统一的错误处理逻辑。这种机械性的重构任务,往往需要几小时手动操作,还要时刻担心漏改、误改。
程序员 Ferris Lucas 也遇到了同样的困境。2023 年初,他决定不再忍受——他用 Node.js 写了一个命令行工具 Promptr,让你直接用自然语言描述想要的修改:把所有函数改成箭头函数、给这个类加上 JSDoc 注释、把这个 Python 脚本改成 TypeScript,然后看 GPT-4 直接在你的文件上动刀。
这就是 Promptr 的核心逻辑:你说做什么,AI 来执行。
第一步:指定文件和提示词。 用户通过命令行传入一个或多个文件路径,以及一段自然语言指令。Promptr 也支持从文件读取提示词(promptr -p my_prompt.txt),甚至从 URL 加载——这意味着团队可以把标准化的 prompt 托管在任何地方。
第二步:读取文件上下文,组装 prompt。 核心在 PromptContext.js 和 FileService.js。FileService 读取所有传入文件的原始内容,PromptContext 将文件名和内容格式化为结构化 context,注入 prompt。默认使用 refactor 模板,将用户 prompt 与文件内容组合后发送给 OpenAI。
第三步:调用 OpenAI API,强制函数调用。 OpenAiGptService.js 是关键,它向 OpenAI 发送请求,并强制开启 function calling——指定一个名为 crud_operations 的函数,参数包含 operations 数组(每项含 crudOperation、filePath、fileContents)。通过 function_call: { "name": "crud_operations" } 强制 GPT 直接输出结构化的文件操作 JSON,而不是随意的自然语言回复。
第四步:解析操作并执行文件变更。 ExtractOperationsService.js 负责解析 GPT 返回的 JSON(内置容错:修复三引号、处理不完整 JSON、正则提取)。RefactorResultProcessor.js 最终将操作列表中的 create/update/delete 指令写入磁盘。
Promptr 支持用 LiquidJS 模板引擎预处理 prompt。这带来了一个强大的用例:include 文件(项目级编码规范)。
开发者可以在项目中维护一个 _project.liquid 文件,内容包含项目编码规范。在任意 prompt 中通过 {% render '_project.liquid' %} 引入,Promptr 会先渲染模板,再发送给 GPT。这意味着团队可以为每个项目定制 GPT 的行为约束——这些规范不需要每次手动写,模板自动注入。
内置 4 个模板:refactor(默认)、empty(纯文本对话)、swe(软件工程任务)、test-first(测试先行)。
Promptr 使用 gpt-3-encoder 库在本地计算 prompt 的 token 数量。--dry-run 模式下会打印完整 prompt 和 token 计数,用户可以在实际调用 API 前评估费用。这是很有价值的 UX 细节——大文件的 token 消耗可能相当惊人。
项目代码约 781KB,结构清晰:
| 模块 | 职责 |
|---|---|
bin/index.js | CLI 入口,ESM 动态导入 |
src/Main.js | 命令行参数解析、交互式循环、文件/URL prompt 加载 |
src/CliState.js | 全局 CLI 状态管理(单例模式) |
src/services/PromptrService.js | 核心编排器:加载模板 → 组装 prompt → 调用 LLM → 执行操作 |
src/services/OpenAiGptService.js | OpenAI API 调用,function calling 配置 |
src/services/ExtractOperationsService.js | JSON 解析与容错修复 |
src/services/FileService.js | 文件读写操作 |
src/services/PromptContext.js | 文件内容格式化注入 |
src/services/TemplateLoader.js | LiquidJS 模板引擎封装 |
src/services/SystemMessage.js | System prompt 管理 |
技术栈:Node.js ESM 模块 + Commander.js CLI 框架 + LiquidJS 模板 + OpenAI JS SDK + Mocha 测试框架。
Promptr 的本质是让 AI 直接写文件——这意味着:
basePath 可配置但核心逻辑围绕 OpenAI function calling 设计)。交互模式也支持管道输入:promptr --model execute < operations.json 允许程序化调用。
Promptr 特别适合以下场景:
对于希望把 AI 集成到现有开发工作流(而非启动一个 Web UI)的团队,Promptr 是一个轻量且直接的解决方案。