5.3 KiB
5.3 KiB
LLM Proxy - OpenAI API 代理和训练数据收集工具
一个透明的 HTTP 代理服务器,用于拦截和保存 LLM API 请求,自动导出为 JSONL 格式的训练数据。
功能特性
- ✅ 透明代理:拦截所有
/v1/开头的 LLM API 请求 - ✅ 零配置:无需在代理中配置 API Key,直接使用客户端的 Key
- ✅ 多提供商支持:支持 OpenAI、Anthropic、GLM、OpenRouter 等所有 OpenAI 兼容的 API
- ✅ 智能解析:自动识别和解析 LLM 请求,忽略其他请求
- ✅ 思考过程保存:自动保存模型的推理内容(reasoning)
- ✅ 多轮对话支持:完整保存对话上下文
- ✅ JSONL 导出:一键导出为标准训练数据格式
- ✅ SQLite 存储:轻量级数据库,无需额外配置
安装
1. 克隆项目
git clone https://github.com/mitmproxy/mitmproxy.git
cd mitmproxy
2. 安装依赖
pip install -r requirements.txt
使用方法
启动代理服务器
python start_proxy.py
默认监听 127.0.0.1:8080
配置系统代理
Windows
- 打开"设置" → "网络和 Internet" → "代理"
- 开启"使用代理服务器"
- 地址:
127.0.0.1 - 端口:
8080
macOS
networksetup -setwebproxy Wi-Fi 127.0.0.1 8080
networksetup -setsecurewebproxy Wi-Fi 127.0.0.1 8080
Linux
在浏览器或系统设置中配置 HTTP/HTTPS 代理为 127.0.0.1:8080
使用客户端
Trae
- 启动代理服务器
- 配置系统代理(见上)
- 在 Trae 中正常使用,配置任何 API 提供商和 Key
- 所有请求自动被拦截和保存
CherryStudio
方法 1:配置自定义提供商
- 打开 CherryStudio 设置 → 模型服务
- 添加自定义提供商
- API 地址:
http://127.0.0.1:8080/v1 - API Key:任意值(代理会忽略)
- 添加你使用的模型
方法 2:使用系统代理
- 启动代理服务器
- 配置系统代理(见上)
- 在 CherryStudio 中正常使用
导出训练数据
# 导出所有对话(包含思考过程)
python export.py
# 导出指定文件
python export.py --output my_data.jsonl
# 不包含思考过程
python export.py --no-reasoning
# 包含元数据
python export.py --with-metadata
# 查看数据库统计
python export.py --stats
配置文件
编辑 config.json 来自定义配置:
{
"proxy": {
"listen_port": 8080,
"listen_host": "127.0.0.1"
},
"database": {
"path": "llm_data.db"
},
"filter": {
"enabled": true,
"path_patterns": ["/v1/"],
"save_all_requests": false
},
"export": {
"output_dir": "exports",
"include_reasoning": true,
"include_metadata": false
}
}
JSONL 格式
导出的 JSONL 文件格式:
{"messages": [{"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": "Hello!"}, {"role": "assistant", "content": "Hi there!", "reasoning": "The user greeted me, so I should respond politely."}]}
{"messages": [{"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": "What is 2+2?"}, {"role": "assistant", "content": "2+2 equals 4.", "reasoning": "This is a simple arithmetic problem. 2+2 = 4."}]}
数据库结构
conversations 表
id: 主键conversation_id: 对话 IDcreated_at: 创建时间updated_at: 更新时间
requests 表
id: 主键request_id: 请求 IDconversation_id: 对话 ID(外键)model: 模型名称messages: 消息列表(JSON)request_body: 完整请求体(JSON)created_at: 创建时间
responses 表
id: 主键request_id: 请求 ID(外键)response_body: 完整响应体(JSON)reasoning_content: 思考过程tokens_used: 使用的 token 数量created_at: 创建时间
工作原理
- 拦截请求:代理拦截所有
/v1/开头的 HTTP 请求 - 智能解析:尝试解析请求体,识别是否为 LLM API 请求
- 保存请求:将请求信息保存到 SQLite 数据库
- 透明转发:保持原始 Authorization header,转发到目标服务器
- 保存响应:接收响应后,保存响应内容和思考过程
- 导出数据:随时导出为 JSONL 格式用于训练
注意事项
HTTPS 证书
如果客户端使用 HTTPS 连接到 API(如 https://api.openai.com),需要:
- 安装 mitmproxy 证书到系统信任库
- 或者在客户端配置中使用 HTTP(如
http://api.openai.com)
证书安装
首次运行代理时,mitmproxy 会生成证书:
- Windows:
%USERPROFILE%\.mitmproxy\mitmproxy-ca-cert.pem - macOS/Linux:
~/.mitmproxy/mitmproxy-ca-cert.pem
将证书安装到系统信任库即可。
隐私和安全
- 代理不会保存 API Key
- 所有数据存储在本地 SQLite 数据库
- 请妥善保管导出的训练数据
故障排除
请求没有被拦截
- 检查系统代理是否正确配置
- 检查代理服务器是否正在运行
- 检查请求路径是否包含
/v1/
HTTPS 请求失败
- 安装 mitmproxy 证书到系统信任库
- 或者在客户端配置中使用 HTTP 而不是 HTTPS
数据库错误
- 检查数据库文件权限
- 删除
llm_data.db重新初始化
许可证
MIT License
贡献
欢迎提交 Issue 和 Pull Request!