This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
codebuddy2cc是一个简洁高效的Go API代理程序,用于将Anthropic Messages API格式请求转发到CodeBuddy上游服务。核心功能包括格式转换(Anthropic ↔ OpenAI兼容)、认证管理、流式支持和工具调用。
# 构建项目
go build -o codebuddy2cc
# 运行服务
./codebuddy2cc
# 验证和整理依赖
go mod tidy
# 格式化代码(必须执行)
go fmt ./...
# 静态分析检查(必须执行)
go vet ./...
# 运行测试(使用Go标准测试)
go test ./...
# 运行特定包测试
go test ./handlers
go test ./utils
go test ./middleware
# 带详细输出的测试
go test -v ./...复制环境变量模板并配置:
cp .env.example .env必需的环境变量:
CODEBUDDY2CC_AUTH: 客户端认证tokenCODEBUDDY2CC_KEY: 单一上游API密钥PORT: 服务端口(可选,默认8080)
可选的调试环境变量:
DEBUG: 调试模式开关(true/1/on启用,默认false)DEBUG_FILE: 调试日志文件路径(可选,默认仅控制台输出)CODEBUDDY2CC_UPSTREAM_URL: 上游API地址(可选,测试用)
- middleware/auth.go: 单一职责的认证中间件,支持Bearer token和X-API-Key两种认证方式
- handlers/messages.go: 专门处理/v1/messages端点,采用统一处理架构:
processUnifiedResponse(): 核心处理器,统一解析上游SSE响应writeStreamResponse(): SSE流式输出适配器writeNonStreamResponse(): JSON响应输出适配器
- utils/converter.go: 格式转换工具,实现Anthropic与OpenAI格式互转,支持工具调用转换
- utils/debug.go: 调试工具,支持文件和控制台日志输出
- utils/json.go: 高性能JSON处理,使用bytedance/sonic优化序列化性能
- utils/model.go: 模型映射管理,支持通过model.json配置文件进行模型映射
- main.go: 程序入口,环境验证、信号处理和路由配置
- 客户端发送Anthropic格式请求到
/v1/messages - 认证中间件验证Bearer token或X-API-Key
- 转换器将Anthropic请求转换为OpenAI兼容格式
- 转发到上游API
https://www.codebuddy.ai/v2/chat/completions processUnifiedResponse()统一解析上游SSE流响应- 根据客户端需求调用相应输出适配器:
- 流式:
writeStreamResponse()输出SSE格式 - 非流式:
writeNonStreamResponse()输出JSON格式
- 流式:
项目采用统一处理架构消除代码重复:
- 数据层:
ResponseData结构统一表示处理结果 - 处理层:
processUnifiedResponse()单一处理器解析所有上游响应 - 输出层: 输出适配器根据客户端需求选择格式
- 优势: 90%代码重复消除,符合DRY、SRP、OCP原则
- 统一响应架构: 单一处理管道
processUnifiedResponse()处理所有上游响应,输出适配器分离格式化逻辑 - 流式响应: 完整的Server-Sent Events支持,使用自定义SSEStreamParser实现真正的流式解析
- 工具调用: 支持function calling,映射Anthropic tools到OpenAI functions,支持工具调用结果处理
- 会话级状态管理: 每个请求独立的
ToolCallsSession,避免并发冲突 - 智能消息合并: 自动合并连续的assistant消息,处理复杂的对话流
- 高性能JSON: 使用bytedance/sonic替代标准库,显著提升序列化性能
- 错误处理: 完善的错误传播和日志记录机制,支持上游错误透传
- 性能优化: 基于Gin框架,独立context管理,高并发支持,优化的内存使用
- 调试支持: 可配置的调试模式,支持文件输出和详细的请求/响应日志
- 模型映射: 灵活的模型映射机制,支持运行时配置
POST /v1/messages- Anthropic Messages API兼容端点GET /health- 健康检查端点
项目严格遵循以下开发原则:
- KISS: 保持简单,专注核心功能,无不必要的复杂性
- SRP: 每个模块单一职责,认证、转换、转发完全分离
- 高性能: 最小延迟转发,优化的内存使用
- 可靠性: 完善的错误处理,上游错误透传
项目实现了自定义的SSEStreamParser,解决了标准库在处理SSE流时的性能问题:
- 真正流式: 不等待完整行,立即处理可用数据块
- 智能边界检测: 支持标准双换行符(\n\n)和兼容模式单换行符(\n)
- UTF-8安全: 防止在多字节字符中间切割,确保中文等字符正确处理
复杂的工具调用处理机制,支持:
- OpenAI -> Anthropic: 聚合分片的tool_calls数据,转换为完整的tool_use格式
- Anthropic -> OpenAI: 将tool_use块转换为tool_calls格式
- 会话级状态管理: 每个请求独立的工具调用状态,避免并发冲突
- 智能参数修复: 自动修复常见的JSON格式问题
智能处理连续的assistant消息:
- 识别第一个消息有content、第二个消息有tool_calls的场景
- 自动合并为单个消息,避免上游API校验失败
- 保持消息语义的完整性
设置环境变量启用详细日志:
DEBUG=true
DEBUG_FILE=./debug.log调试模式下会记录:
- 完整的请求/响应转换过程
- SSE流解析的每个步骤
- 工具调用的聚合过程
- 模型映射的执行情况
- 添加新的格式转换: 修改
utils/converter.go中的转换函数 - 扩展认证方式: 在
middleware/auth.go中添加新的认证逻辑 - 调整流式解析: 优化
handlers/messages.go中的SSEStreamParser - 配置模型映射: 编辑
model.json文件 - 新增输出格式: 在
handlers/messages.go中添加新的write*Response()适配器 - 修改核心处理逻辑: 统一在
processUnifiedResponse()函数中处理
类型声明现代化:
- ✅ 使用
any替代interface{}: 遵循 Go 1.18+ 社区最佳实践 - ✅ 泛型优先: 在合适场景使用 Go 1.18+ 泛型语法
- ✅ 类型推导: 充分利用现代Go的类型推导能力
代码质量标准:
- KISS原则: 优先选择更简洁、可读性更强的现代语法
- 一致性要求: 全项目统一使用现代Go语法规范
- 向前兼容: 充分利用Go语言版本特性,保持技术栈先进性
具体规范:
// ✅ 推荐:使用现代语法
func processData(data map[string]any) any {
return data["result"]
}
// ❌ 避免:过时语法
func processData(data map[string]interface{}) interface{} {
return data["result"]
}工具链要求:
- go fmt: 强制代码格式化
- go vet: 静态分析检查
- 现代化检查: 定期审查并升级代码语法到最新标准