b4u2cc 是一个基于 Deno 的代理服务器,用于将 Claude Code 的请求转换为兼容 OpenAI 格式的请求,使 Claude Code 能够与不支持原生工具调用的上游模型进行交互。
本项目主要包含 deno-proxy 服务,它负责在 Claude Code 和 OpenAI(或其他无工具模式的 Chat API)之间建立桥梁,通过以下方式实现无缝对接:
- 将 Claude Code 的 SSE 流转换为上游兼容格式
- 插入必要的日志与格式转换
- 确保客户端无需感知上游差异
- Claude → OpenAI: 将 Anthropic Claude Messages API 请求转换为 OpenAI chat/completions 格式
- OpenAI → Claude: 将上游响应转换回 Claude Code 兼容的 SSE 流格式
- 工具调用支持: 通过提示词注入实现工具调用,即使上游不支持原生 function calling
- 动态生成触发信号,识别工具调用边界
- 将工具定义转换为系统提示词
- 解析上游文本中的工具调用描述
- 支持多工具调用和流式解析
- 支持 Claude 的思考模式(thinking mode)
- 将思考内容转换为
<thinking>标签格式 - 在响应中正确处理思考块和文本块的顺序
- 集成 Claude 官方
/v1/messages/count_tokensAPI - 本地 tiktoken 实现作为备用方案
- 支持通过
TOKEN_MULTIPLIER调整计费倍数 - 提供
/v1/messages/count_tokens端点
- 结构化日志记录请求全过程
- 支持多级别日志(debug、info、warn、error)
- 可完全禁用日志以提高性能
- 请求 ID 跟踪,便于调试
- Deno 1.40+
- 可访问的上游 OpenAI 兼容 API
- 克隆仓库
git clone <repository-url>
cd b4u2cc- 配置环境变量
# 必需配置
export UPSTREAM_BASE_URL="http://your-upstream-api/v1/chat/completions"
export UPSTREAM_API_KEY="your-upstream-api-key"
# 可选配置
export PORT=3456
export HOST=0.0.0.0
export CLIENT_API_KEY="your-client-api-key" # 客户端认证密钥
export TIMEOUT_MS=120000
export MAX_REQUESTS_PER_MINUTE=10
export TOKEN_MULTIPLIER=1.0- 启动服务
cd deno-proxy
deno run --allow-net --allow-env src/main.ts- 验证服务
curl http://localhost:3456/healthz| 变量名 | 必需 | 默认值 | 说明 |
|---|---|---|---|
UPSTREAM_BASE_URL |
是 | - | 上游 OpenAI 兼容 API 地址 |
UPSTREAM_API_KEY |
否 | - | 上游 API 密钥 |
UPSTREAM_MODEL |
否 | - | 强制覆盖请求中的模型名称 |
CLIENT_API_KEY |
否 | - | 客户端认证密钥 |
PORT |
否 | 3456 | 服务监听端口 |
HOST |
否 | 0.0.0.0 | 服务监听地址 |
TIMEOUT_MS |
否 | 120000 | 请求超时时间(毫秒) |
AGGREGATION_INTERVAL_MS |
否 | 35 | SSE 聚合间隔(毫秒) |
MAX_REQUESTS_PER_MINUTE |
否 | 10 | 每分钟最大请求数 |
TOKEN_MULTIPLIER |
否 | 1.0 | Token 计数倍数 |
CLAUDE_API_KEY |
否 | - | Claude API 密钥(用于精确 token 计数) |
LOG_LEVEL |
否 | info | 日志级别(debug/info/warn/error) |
LOGGING_DISABLED |
否 | false | 是否完全禁用日志 |
TOKEN_MULTIPLIER 支持多种格式:
- 数字:
1.2 - 带后缀:
1.2x、x1.2 - 百分比:
120% - 带引号:
"1.2"
处理 Claude Messages API 请求,支持流式响应。
请求示例:
curl -X POST http://localhost:3456/v1/messages \
-H "Content-Type: application/json" \
-H "x-api-key: your-client-api-key" \
-d '{
"model": "claude-3.5-sonnet-20241022",
"max_tokens": 1024,
"messages": [
{"role": "user", "content": "你好,请介绍一下你自己"}
],
"stream": true
}'计算请求的 token 数量。
请求示例:
curl -X POST http://localhost:3456/v1/messages/count_tokens \
-H "Content-Type: application/json" \
-d '{
"model": "claude-3.5-sonnet-20241022",
"messages": [
{"role": "user", "content": "Hello, world"}
]
}'健康检查端点。
./scripts/test-proxy.sh./scripts/test-thinking-mode.sh./scripts/run-claude-via-proxy.sh-
请求转换器 (
anthropic_to_openai.ts)- 将 Claude 请求格式转换为 OpenAI 格式
- 处理角色映射、内容块转换
- 支持思考模式标签转换
-
提示词注入器 (
prompt_inject.ts)- 生成工具调用提示词
- 创建触发信号
- 构建工具定义 XML
-
上游调用器 (
upstream.ts)- 处理与上游 API 的通信
- 支持流式响应
- 超时和错误处理
-
响应解析器 (
parser.ts)- 解析上游文本中的工具调用
- 支持流式解析
- 处理思考内容
-
响应转换器 (
openai_to_claude.ts)- 将解析结果转换为 Claude SSE 格式
- 处理内容块和工具调用块
- 生成正确的 token 计数
Claude Code 请求
↓
请求验证
↓
格式转换
↓
提示词注入
↓
上游调用
↓
流式解析
↓
响应转换
↓
Claude SSE 响应
cd deno-proxy
deno test --allow-env srccd deno-proxy
deno task dev# 启用详细日志
LOG_LEVEL=debug deno run --allow-net --allow-env src/main.ts
# 完全禁用日志
LOGGING_DISABLED=true deno run --allow-net --allow-env src/main.ts最简单的部署方式是使用 Deno Deploy 官方平台:
优势:
- 无需管理服务器
- 自动扩缩容
- 全球 CDN 分发
- 免费额度充足
快速部署步骤:
- 点击上方 "Deploy on Deno" 按钮
- 授权 GitHub 访问
- 配置环境变量(上游 API 地址和密钥)
- 点击部署,几秒钟后即可访问
详细说明请参考:Deno 部署指南
该指南还包含以下部署场景:
- 本地开发环境
- 生产环境 (systemd)
- Docker 容器化
- 云平台部署 (Vercel, Railway, DigitalOcean)
- 性能优化与监控
# 构建镜像
docker build -t b4u2cc-proxy .
# 运行容器
docker run -d \
--name b4u2cc-proxy \
-p 3456:3456 \
-e UPSTREAM_BASE_URL=http://your-upstream-api/v1/chat/completions \
-e UPSTREAM_API_KEY=your-api-key \
b4u2cc-proxy# 创建服务文件
sudo tee /etc/systemd/system/b4u2cc.service > /dev/null <<EOF
[Unit]
Description=b4u2cc Proxy Server
After=network.target
[Service]
Type=simple
User=deno
WorkingDirectory=/opt/b4u2cc/deno-proxy
Environment=UPSTREAM_BASE_URL=http://your-upstream-api/v1/chat/completions
Environment=UPSTREAM_API_KEY=your-api-key
Environment=PORT=3456
ExecStart=/usr/bin/deno run --allow-net --allow-env src/main.ts
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF
# 启动服务
sudo systemctl enable b4u2cc
sudo systemctl start b4u2cc-
上游连接失败
- 检查
UPSTREAM_BASE_URL配置 - 验证网络连接和防火墙设置
- 确认上游 API 密钥有效
- 检查
-
工具调用解析失败
- 检查上游模型是否遵循提示词指令
- 调整
AGGREGATION_INTERVAL_MS参数 - 启用 debug 日志查看解析过程
-
Token 计数不准确
- 配置
CLAUDE_API_KEY使用官方 API - 调整
TOKEN_MULTIPLIER值 - 对比本地和官方 API 结果
- 配置
-
性能问题
- 禁用日志:
LOGGING_DISABLED=true - 调整聚合间隔:
AGGREGATION_INTERVAL_MS - 增加超时时间:
TIMEOUT_MS
- 禁用日志:
启用详细日志进行调试:
LOG_LEVEL=debug deno run --allow-net --allow-env src/main.ts关键日志位置:
- 请求转换过程
- 上游 API 调用
- 工具调用解析
- SSE 事件生成
- Fork 项目
- 创建功能分支
- 提交更改
- 创建 Pull Request
本项目采用 MIT 许可证。详见 LICENSE 文件。