这是一个强大且灵活的代理服务器,专为拦截、调试和管理与大型语言模型 (LLM) API 的交互而设计。它充当您的 LLM 应用程序与 Anthropic、OpenAI 和 Google Gemini 等提供商之间的中间件。
- 请求/响应拦截:捕获并记录完整的 HTTP 请求和响应,包括头部和正文。
- 流式支持:完全支持流式响应 (Server-Sent Events),在实时转发的同时捕获数据块。
- 模型映射:动态地将模型名称(例如
claude-3-opus)映射到特定的端点和配置。 - 多提供商支持:内置支持多种 API 格式:
- Anthropic
- OpenAI
- Gemini
- 通用 OpenAI 兼容端点
- Pass-Through 模式:自动处理未知模型,创建“透传”配置,确保您的应用即使在使用新模型时也能正常工作。
- 详细日志:将所有交互作为 JSON 文件存储在
logs/目录中,以便进行详细分析。 - Web 界面:包含一个基于 Web 的 UI(根路径),用于查看和管理日志。
-
克隆仓库:
git clone <repository-url> cd code_switch
-
安装依赖:
npm install
启动代理服务器:
npm start开发模式(支持自动重启):
npm run dev服务器默认将在端口 4000 上启动,并监听 127.0.0.1。
- 代理地址:
http://127.0.0.1:4000 - Web 界面:
http://127.0.0.1:4000 - API 端点:
http://127.0.0.1:4000/api
将您的 LLM 客户端(例如 OpenAI SDK、LangChain 或直接 HTTP 调用)指向代理地址,而不是官方 API 端点。
示例 (OpenAI SDK):
const OpenAI = require('openai');
const openai = new OpenAI({
apiKey: 'your-api-key', // 使用您的真实 API Key
baseURL: 'http://127.0.0.1:4000' // 指向代理
});示例 (Curl):
curl http://127.0.0.1:4000/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-..." \
-d
"{
"model": "gpt-4",
"messages": [{"role": "user", "content": "你好!"}]
}"应用使用 config.json 文件来管理行为。如果文件不存在,首次运行时会自动创建默认配置。
配置按 Format (格式) 组织。一个“格式”定义了请求如何被映射以及发送到哪里。
{
"currentFormat": "anthropic",
"proxyPort": 4000,
"formats": {
"anthropic": {
"mapping": {
"haiku": "haiku",
"sonnet": "sonnet"
},
"targets": {
"haiku": { "endpoint": "https://api.anthropic.com" },
"sonnet": { "endpoint": "https://api.anthropic.com" }
}
},
"openai": { ... }
}
}- currentFormat: 当前激活的提供商格式(例如
anthropic,openai)。 - mapping: 将请求的模型名称(例如
haiku)映射到目标 key。 - targets: 定义目标 key 的端点和可选的认证信息。
如果请求的模型不在 mapping 中,代理将:
- 自动创建一个“透传”映射。
- 将请求路由到当前格式的默认端点。
- 将此新映射保存到
config.json以供将来使用。
src/server.js: 主入口点和 Express 应用设置。src/proxy-handler.js: 请求拦截、修改和转发的核心逻辑。src/config-manager.js: 管理配置加载、保存和格式切换。src/storage.js: 处理基于文件的日志记录到logs/目录。public/: Web 界面的静态文件。
更详细的文档位于 docs/ 目录,包括:
- 模型映射功能指南 - 深入了解动态模型映射功能
- SSE 流式数据解析器指南 - 流式响应处理说明
- 系统服务配置 - 将代理配置为系统服务
- 使用示例 - 更多实际使用场景示例
- 项目进展总结 - 开发历程和已完成功能
MIT