h1679242037/cliproxyapi-system-prompt-injection

GitHub: h1679242037/cliproxyapi-system-prompt-injection

这是一个CLIProxyAPI的可复用补丁,用于在不同AI客户端API请求中按协议结构注入系统提示词,以解决优先级不一致问题。

Stars: 0 | Forks: 0

# CLIProxyAPI System Prompt 注入补丁 这是一个可复用的 [`router-for-me/CLIProxyAPI`](https://github.com/router-for-me/CLIProxyAPI) 补丁包,用来把本地 `system_prompt.txt` 注入到不同客户端请求里的**最高优先级位置**喵~ 已覆盖三类主流对话入口: - OpenAI Chat Completions:`POST /v1/chat/completions` - OpenAI Responses / Codex:`POST /v1/responses` - Anthropic Messages / Claude Code:`POST /v1/messages` 和 `/v1/messages?beta=true` 核心目标:**按协议结构注入,而不是粗暴追加一条 user/developer message**喵~ ## 为什么需要这个补丁 CLIProxyAPI 会接收不同客户端的请求,再转发或转换到上游模型喵~ 不同客户端的“最高优先级指令位置”并不一样: - Chat Completions 使用 `messages`,最强可见位置是 `messages[0]` 的 `role=system`。 - Responses / Codex 使用顶层 `instructions`,如果只塞进 `input[0]`,后续转换时可能降级成较低优先级内容。 - Claude Code 使用 Anthropic 顶层 `system`,真实请求通常是 `system: [{type:"text", text:"..."}]` 列表。 所以这个补丁分别处理三种格式,把 prompt 放到各自真正的最前面喵~ ## 最终注入效果 ### 1. `/v1/chat/completions` 注入到 `messages[0]`: { "role": "system", "content": "" } 原来的 `messages` 会整体后移喵~ ### 2. `/v1/responses` 注入到顶层 `instructions` 最前面: <原 instructions> 如果原请求没有 `instructions`,则自动创建喵~ 这对 Codex 客户端很关键,因为 Codex 原本会发送很长的顶层 `instructions`,必须在它前面注入才是最高优先级喵~ ### 3. `/v1/messages` / Claude Code 如果 Anthropic `system` 是 list: "system": [ {"type": "text", "text": ""}, {"type": "text", "text": "原 system[0]"}, {"type": "text", "text": "原 system[1]"} ] 如果 `system` 是字符串: <原 system> 如果没有 `system`,则创建 `system = ` 喵~ ## 配置方法 在 CLIProxyAPI 的 `config.yaml` 里加入: system-prompt: enabled: true mode: prepend file: "/path/to/system_prompt.txt" max-chars: 20000 字段说明: - `enabled`:是否启用注入。 - `mode`:Chat Completions 使用,支持 `prepend` / `replace-first-system` / `append-to-first-system`。 - `file`:本地 prompt 文件路径。 - `max-chars`:最大字符数,默认 `20000`,避免误注入超大文件。 `system_prompt.txt` 每次请求实时读取,所以改 prompt 文件通常不需要重新编译喵~ ## 文件结构 本仓库包含: - `README.md`:中文主文档。 - `README.en.md`:英文备用文档。 - `system-prompt-injection.patch`:可直接应用到 CLIProxyAPI 的补丁。 - `scripts/apply-patch.sh`:一键应用补丁脚本。 - `examples/system_prompt.example.txt`:示例 prompt 文件。 - `docs/implementation-notes.zh-CN.txt`:更详细的中文实现说明。 ## 应用补丁 先克隆本仓库: git clone https://github.com/h1679242037/cliproxyapi-system-prompt-injection.git 进入你的 CLIProxyAPI 源码目录: cd /path/to/CLIProxyAPI 应用补丁: bash /path/to/cliproxyapi-system-prompt-injection/scripts/apply-patch.sh /path/to/cliproxyapi-system-prompt-injection/system-prompt-injection.patch 或者手动执行: git apply /path/to/cliproxyapi-system-prompt-injection/system-prompt-injection.patch ## 测试 export PATH=/usr/local/go/bin:$PATH cd /path/to/CLIProxyAPI go test ./internal/config/ -run 'TestInject(SystemPrompt|ResponsesSystemPrompt|ClaudeSystemPrompt)' -v go build -o cli-proxy-api.patched ./cmd/server ## 部署示例 systemctl --user stop cliproxyapi.service cp ~/cliproxyapi/cli-proxy-api ~/cliproxyapi/cli-proxy-api.bak.$(date +%Y%m%d%H%M%S) cp ./cli-proxy-api.patched ~/cliproxyapi/cli-proxy-api chmod +x ~/cliproxyapi/cli-proxy-api systemctl --user start cliproxyapi.service systemctl --user is-active cliproxyapi.service 期望输出: active ## 验证方法 建议临时打开请求日志: request-log: true logging-to-file: true 日志目录: ~/.cli-proxy-api/logs/ ### 验证 Chat Completions 查看: v1-chat-completions-*.log 确认 `API REQUEST 1` 中: messages[0].role == "system" messages[0].content 以 system_prompt.txt 开头 ### 验证 Responses / Codex 查看: v1-responses-*.log 确认: API REQUEST 1.instructions 以 system_prompt.txt 开头 并且不再出现旧的 `input[0] developer` 注入喵~ ### 验证 Claude Code 查看: v1-messages-*.log 根据路由转换情况,确认最前面的 system/developer 等价内容以 `system_prompt.txt` 开头喵~ 可能表现为: - Anthropic 格式:`system[0].text` 开头是 prompt。 - Responses 格式:`input[0].role == developer`,内容开头是 prompt。 - Chat 格式:`messages[0].role == system`,内容开头是 prompt。 ## 当前没有覆盖的入口 这个补丁主要覆盖主流对话客户端。以下入口暂未覆盖或通常不建议覆盖: - `POST /v1/completions`:老式文本补全,可另行把 prompt 前置到 `prompt` 字段。 - Gemini:`POST /v1beta/models/*generateContent`、`POST /v1internal:method`,需要单独处理 `system_instruction` 或 `contents`。 - `POST /v1/messages/count_tokens`:计 token,不建议注入,否则统计会变化。 - 图片、视频、模型列表、管理 API:通常不属于 system prompt 注入范围。 ## 注意事项 1. 不要把真实私有 prompt、token、key、账号凭据提交到仓库喵~ 2. 本仓库只提供示例 `examples/system_prompt.example.txt`,不会包含真实 prompt 喵~ 3. 调试结束后建议关闭 `request-log`,因为请求日志会记录完整 prompt 和用户输入喵~ 4. 修改 `config.yaml` 时不要用会重排/重写整个 YAML 的工具,推荐最小文本修改喵~ ## 免责声明 本项目仅提供 CLIProxyAPI 的 system prompt 注入补丁与实现参考,用于学习、研究、二次开发和自有服务配置喵~ 仓库不会包含任何作者本地使用的真实私有 system prompt、账号凭据、访问令牌、API key、OAuth token 或其它敏感配置喵~ 使用者需要自行准备 `system_prompt.txt`,并自行确认其内容、用途、合规性和运行后果喵~ 本补丁会改变请求进入上游模型前的提示词结构;部署到生产环境前,请先在测试环境验证不同客户端、不同模型和不同路由下的行为喵~ ## License MIT English documentation: [README.en.md](README.en.md)
标签:Anthropic API, API 代理, API 开发, Claude Code, CLIProxyAPI, Codex, Cutter, DLL 劫持, OpenAI API, 人工智能, 协议处理, 响应生成, 大语言模型, 数据管道, 日志审计, 用户模式Hook绕过, 系统指令, 系统提示注入, 网络安全, 网络安全研究, 聊天完成, 补丁开发, 请求注入, 软件工程, 隐私保护