# Claude Code API-PROXY **Repository Path**: zfyos_604951793/claude-code-api-proxy ## Basic Information - **Project Name**: Claude Code API-PROXY - **Description**: 本项目是一个基于 [JackProAi-claudecode](https://github.com/JackProAi/JackProAi-claudecode.git) 项目开发的 API 代理转换器,使项目能够兼容任何 OpenAI 兼容格式的 API 提供者。代理服务器自动在 Anthropic 格式和 OpenAI 格式之间进行双向转换。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-03 - **Last Updated**: 2026-04-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Claude Local API 代理转换器 本项目是一个基于 [JackProAi-claudecode](https://github.com/JackProAi/JackProAi-claudecode.git) 项目开发的 API 代理转换器,使项目能够兼容任何 OpenAI 兼容格式的 API 提供者。代理服务器自动在 Anthropic 格式和 OpenAI 格式之间进行双向转换。 [English Version](README.en.md) ## 使用方法 本代理服务器作为 JackProAi-claudecode 项目的扩展使用。 ### 安装步骤 1. **克隆 JackProAi-claudecode 项目** ```bash git clone https://github.com/JackProAi/JackProAi-claudecode.git cd JackProAi-claudecode ``` 2. **将代理文件覆盖到项目根目录** - 将 `proxy-server.js` `claude-local` `claude-local.env`文件复制到 JackProAi-claudecode 项目根目录 3. **配置 API** 编辑 `claude-local.env` 文件,填入你的 API Key 和配置: ```bash CLAUDE_LOCAL_PROVIDER=siliconflow ANTHROPIC_AUTH_TOKEN=your_api_key_here ANTHROPIC_BASE_URL=https://api.siliconflow.cn/ ANTHROPIC_MODEL=moonshotai/Kimi-K2-Instruct-0905 ANTHROPIC_SMALL_FAST_MODEL=moonshotai/Kimi-K2-Instruct-0905 CLAUDE_LOCAL_USE_PROXY=1 CLAUDE_LOCAL_PROXY_HOST=127.0.0.1 CLAUDE_LOCAL_PROXY_PORT=8080 ``` 4. **启动项目** ```bash # Windows .\claude-local.ps1 --bare # macOS/Linux ./claude-local --bare ``` ### 工作原理 ``` Anthropic 格式请求 → 代理服务器 → OpenAI 格式转发 → 第三方 API OpenAI 格式响应 ← 代理服务器 ← 转换响应 ← 第三方 API ``` 当设置 `CLAUDE_LOCAL_USE_PROXY=1` 时,代理服务器会在本地启动(默认 `127.0.0.1:8080`),将所有请求转换后转发到配置的第三方 API 提供者。 ## 支持的 API 提供者 | 提供者 | Base URL | 模型示例 | | --------------- | -------------------------------------- | -------------------------------- | | SiliconFlow | `https://api.siliconflow.cn` | moonshotai/Kimi-K2-Instruct-0905 | | Zhipu AI | `https://open.bigmodel.cn/api/paas/v4` | glm-4.5-air | | Moonshot (Kimi) | `https://api.moonshot.cn/anthropic` | kimi-k2-0905-preview | 任何支持 OpenAI Chat Completions API 的提供者均可使用。 ## 端点 ### GET /v1/models 返回模型列表信息。 **响应格式:** ```json { "models": [ { "id": "model_id", "name": "model_id", "type": "chat" } ] } ``` ### POST /v1/messages 处理消息交互,接收 Anthropic 格式请求,转换为 OpenAI 格式后转发。 **请求格式(Anthropic):** ```json { "model": "model_id", "messages": [ { "role": "user", "content": "Hello" } ], "stream": false, "temperature": 0.7, "tools": [...] } ``` ## 请求转换(Anthropic → OpenAI) ### 消息格式转换 Anthropic 的 content 数组结构转换为 OpenAI 的扁平消息格式: | Anthropic Block Type | OpenAI 转换结果 | | -------------------- | ----------------------- | | `text` | `message.content` (字符串) | | `thinking` | `[thinking: ...]` 文本前缀 | | `tool_use` | `message.tool_calls` 数组 | | `tool_result` | 独立 `role: tool` 消息 | ### 参数映射 | Anthropic 参数 | OpenAI 参数 | | ---------------- | -------------------------- | | `temperature` | `temperature` | | `top_p` | `top_p` | | `top_k` | `top_k` | | `stop_sequences` | `stop` | | `max_tokens` | (转发时未启用) | | `tools` | `tools` (type: "function") | | `tool_choice` | `tool_choice` | | `thinking` | `thinking` (非 Qwen 提供者) | ### Tool 格式转换 Anthropic 格式: ```json { "name": "function_name", "description": "...", "input_schema": { "type": "object", "properties": {...} } } ``` 转换为 OpenAI 格式: ```json { "type": "function", "function": { "name": "function_name", "description": "...", "parameters": {...} } } ``` ## 响应转换(OpenAI → Anthropic) ### 非流式响应 OpenAI 响应格式: ```json { "id": "chatcmpl-xxx", "model": "model", "choices": [{ "message": { "content": "Hello!", "tool_calls": [...] }, "finish_reason": "stop" }], "usage": { "prompt_tokens": 10, "completion_tokens": 20 } } ``` 转换为 Anthropic 格式: ```json { "id": "chatcmpl-xxx", "type": "message", "role": "assistant", "content": [ { "type": "text", "text": "Hello!" }, { "type": "tool_use", "id": "call_xxx", "name": "func", "input": {...} } ], "model": "model", "stop_reason": "end_turn", "usage": { "input_tokens": 10, "output_tokens": 20 } } ``` ### 流式响应事件类型 代理服务器将 OpenAI SSE 流转换为 Anthropic SSE 事件流: | OpenAI 事件 | Anthropic 事件 | 说明 | | ----------------------- | --------------------- | -------------------- | | `chat.completion.chunk` | `content_block_delta` | 内容块增量 | | - | `message_start` | **代理生成**,非 OpenAI 事件 | | 完成时 | `content_block_stop` | 内容块结束 | | 完成时 | `message_delta` | 消息统计信息 | | 完成时 | `message_stop` | 消息结束 | #### content\_block\_delta 事件 根据 delta 类型发送不同事件: | Delta 字段 | Anthropic 事件 | | ------------------- | -------------------------------------------------------------------------- | | `content` (字符串) | `{ "type": "text_delta", "text": "..." }` | | `reasoning_content` | `{ "type": "thinking_delta", "thinking": "..." }` | | `tool_calls` | `{ "type": "tool_use_delta", "id": "...", "name": "...", "input": "..." }` | #### 流式响应完整序列 ``` event: message_start data: {"type":"message_start","message":{"id":"...","type":"message","role":"assistant","content":[],"model":"..."}} event: content_block_delta data: {"type":"text_delta","text":"Hello"} event: content_block_delta data: {"type":"text_delta","text":"!"} event: content_block_stop data: {} event: message_delta data: {"type":"message_delta","stop_reason":"end_turn","usage":{"input_tokens":10,"output_tokens":5}} event: message_stop data: {} ``` ## 配置说明 在 `claude-local.env` 文件中配置: ```bash CLAUDE_LOCAL_PROVIDER=siliconflow ANTHROPIC_AUTH_TOKEN=your_api_key_here ANTHROPIC_BASE_URL=https://api.siliconflow.cn/ ANTHROPIC_MODEL=moonshotai/Kimi-K2-Instruct-0905 ANTHROPIC_SMALL_FAST_MODEL=moonshotai/Kimi-K2-Instruct-0905 CLAUDE_LOCAL_USE_PROXY=1 CLAUDE_LOCAL_PROXY_HOST=127.0.0.1 CLAUDE_LOCAL_PROXY_PORT=8080 ``` ### 配置项说明 | 配置项 | 说明 | 默认值 | | ------------------------- | ------------- | ----------- | | `CLAUDE_LOCAL_USE_PROXY` | 启用代理转换 | `0` | | `CLAUDE_LOCAL_PROXY_HOST` | 代理服务器地址 | `127.0.0.1` | | `CLAUDE_LOCAL_PROXY_PORT` | 代理服务器端口 | `8080` | | `ANTHROPIC_BASE_URL` | 目标 API 基础 URL | - | | `ANTHROPIC_AUTH_TOKEN` | API 密钥 | - | | `ANTHROPIC_MODEL` | 默认模型 | - | ## ⚠️ API 选择注意事项 **接入的 API 提供者必须支持工具调用(Tool Calling)功能,否则接入后仅能进行普通聊天,无法使用 Claude Code 的核心能力。** ### 为什么需要工具调用支持? Claude Code 的核心功能基于工具调用(Tool Use)实现,包括: - 文件读写操作 - 执行终端命令 - 搜索和编辑代码 - 插件系统调用 如果 API 提供者不支持 `tools` 参数和 `tool_calls` 返回,Claude Code 将回退为普通聊天模式,无法发挥其代码助手的全部能力。 ### 如何验证 API 是否支持工具调用? 检查 API 文档中是否包含以下内容: - 支持 `tools` 或 `functions` 参数 - 响应中包含 `tool_calls` 字段 如果你的 API 提供者不支持工具调用,接入后将仅作为普通聊天机器人使用。 ## 架构图 ``` ┌─────────────────────────────────────────────────────────────────┐ │ Claude Code │ │ (Anthropic SDK) │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ 本地代理服务器 │ │ proxy-server.js │ │ │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │ │ 端点路由 │ │ 格式转换 │ │ 请求转发 │ │ │ │ /v1/messages │───▶│ Anthropic→ │───▶│ HTTPS │ │ │ │ /v1/models │ │ OpenAI │ │ Request │ │ │ └──────────────┘ └──────────────┘ └──────────────┘ │ │ │ │ │ ▼ │ │ ┌──────────────┐ │ │ │ 响应转换 │ │ │ │ OpenAI→ │ │ │ │ Anthropic │ │ │ └──────────────┘ │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ 第三方 API 提供者 │ │ (SiliconFlow / Zhipu / Moonshot 等) │ │ │ │ OpenAI Chat Completions API 格式 │ └─────────────────────────────────────────────────────────────────┘ ``` ## 核心转换函数 | 函数名 | 作用 | | ---------------------------------- | --------------------------------- | | `convertAnthropicToOpenAI()` | 将 Anthropic 请求格式转换为 OpenAI 格式 | | `convertOpenAIToAnthropic()` | 将 OpenAI 响应格式转换为 Anthropic 格式 | | `convertOpenAIStreamToAnthropic()` | 将 OpenAI 流式事件转换为 Anthropic SSE 事件 | --- ## 免责声明 本项目仅供**学习、参考和交流**使用。 - 本项目基于 [JackProAi-claudecode](https://github.com/JackProAi/JackProAi-claudecode.git) 开发,该项目为非官方的本地部署版本 - 本代理服务器仅实现了 API 格式转换功能,不涉及任何原始项目的核心逻辑修改 - 请勿将本项目用于任何商业目的 - 使用第三方 API 服务时,请遵守相关服务条款和 API 使用规范 - 本项目作者不对因使用本项目导致的任何问题承担责任 如有问题或建议,欢迎通过 Issues 交流。