go run cmd/server/main.go服务器将在 http://localhost:8082 启动
打开浏览器访问: http://localhost:8082
- 配置 API 密钥
- 管理渠道
- 测试 API 转换
- 访问
http://localhost:8082 - 点击"渠道管理"
- 添加新渠道,配置:
- 渠道名称: 如 "OpenAI-GPT4"
- 提供商: openai/anthropic/gemini
- API 密钥: 您的真实 API 密钥
- 自定义密钥: 客户端使用的密钥
- 模型映射: 配置模型转换规则
INSERT INTO channels (name, provider, api_key, custom_key, base_url, models_mapping)
VALUES (
'Claude-API',
'anthropic',
'sk-ant-your-real-key',
'ccany-claude-123',
'https://api.anthropic.com',
'{"gpt-4": "claude-3-sonnet-20240229", "gpt-3.5-turbo": "claude-3-haiku-20240307"}'
);- 源格式: 客户端发送的 API 格式
- 目标提供商: 实际处理请求的 AI 服务商
- 自动转换: 系统自动处理格式转换
系统提供三种标准 API 端点,客户端可以使用任意格式:
POST /v1/chat/completions
Authorization: Bearer ccany-your-custom-key
POST /v1/messages
x-api-key: ccany-your-custom-key
POST /v1beta/models/{model}:generateContent?key=ccany-your-custom-key
POST /v1beta/models/{model}:streamGenerateContent?alt=sse&key=ccany-your-custom-key
配置渠道:
{
"name": "Claude-Backend",
"provider": "anthropic",
"api_key": "sk-ant-your-real-claude-key",
"custom_key": "ccany-claude-proxy",
"models_mapping": {
"gpt-4": "claude-3-sonnet-20240229",
"gpt-3.5-turbo": "claude-3-haiku-20240307"
}
}客户端代码:
import openai
# 配置客户端指向 ccany 服务器
client = openai.OpenAI(
api_key="ccany-claude-proxy", # 使用自定义密钥
base_url="http://localhost:8082/v1" # 指向 ccany 服务器
)
# 正常使用 OpenAI SDK,实际调用 Claude API
response = client.chat.completions.create(
model="gpt-4", # 会自动转换为 claude-3-sonnet-20240229
messages=[
{"role": "user", "content": "Hello, how are you?"}
],
temperature=0.7,
max_tokens=150
)
print(response.choices[0].message.content)配置渠道:
{
"name": "Gemini-Backend",
"provider": "gemini",
"api_key": "your-gemini-api-key",
"custom_key": "ccany-gemini-proxy",
"base_url": "https://generativelanguage.googleapis.com/v1beta"
}客户端代码:
import anthropic
# 配置客户端指向 ccany 服务器
client = anthropic.Anthropic(
api_key="ccany-gemini-proxy", # 使用自定义密钥
base_url="http://localhost:8082" # 指向 ccany 服务器
)
# 使用 Anthropic SDK,实际调用 Gemini API
response = client.messages.create(
model="claude-3-sonnet-20240229", # 会转换为合适的 Gemini 模型
max_tokens=100,
messages=[
{"role": "user", "content": "Explain quantum computing"}
]
)
print(response.content[0].text)OpenAI 流式调用 → Claude 后端:
import openai
client = openai.OpenAI(
api_key="ccany-claude-proxy",
base_url="http://localhost:8082/v1"
)
# 流式调用
stream = client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": "Write a poem about AI"}],
stream=True,
max_tokens=200
)
for chunk in stream:
if chunk.choices[0].delta.content is not None:
print(chunk.choices[0].delta.content, end="")OpenAI 工具调用 → Anthropic 后端:
tools = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get weather information",
"parameters": {
"type": "object",
"properties": {
"location": {"type": "string", "description": "City name"}
},
"required": ["location"]
}
}
}
]
response = client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": "What's the weather in Tokyo?"}],
tools=tools,
tool_choice="auto"
)
# 系统自动转换 OpenAI 工具格式为 Claude 工具格式{
"load_balancing": {
"strategy": "round_robin",
"health_check": true,
"timeout": "30s"
}
}{
"failover": {
"enabled": true,
"retry_attempts": 3,
"fallback_provider": "openai"
}
}- 访问
/monitoring查看系统状态 - 查看
/logs了解请求详情 - 监控 API 使用统计
{
"models_mapping": {
"gpt-4": "claude-3-opus-20240229",
"gpt-4-turbo": "claude-3-sonnet-20240229",
"gpt-3.5-turbo": "claude-3-haiku-20240307",
"gemini-pro": "gemini-1.5-pro",
"gemini-flash": "gemini-1.5-flash"
}
}# 启动时开启详细日志
LOG_LEVEL=debug go run cmd/server/main.go# 测试渠道健康状态
curl http://localhost:8082/health
# 测试特定渠道
curl -X POST http://localhost:8082/api/channels/test \
-H "Content-Type: application/json" \
-d '{"channel_id": "your-channel-id"}'- API 密钥错误: 检查渠道配置中的
api_key是否正确 - 格式转换失败: 查看日志了解具体转换错误
- 超时问题: 调整渠道的
timeout配置 - 模型不存在: 检查
models_mapping配置
- 连接池: 系统自动管理 HTTP 连接池
- 请求缓存: 可配置响应缓存
- 并发限制: 防止 API 限流
- 智能重试: 自动处理临时错误
ccany 系统让您可以:
- ✅ 使用任意 AI SDK 调用任意 AI 服务
- ✅ 无需修改现有代码
- ✅ 统一管理多个 AI 提供商
- ✅ 自动处理格式转换和协议差异
- ✅ 获得完整的监控和日志功能
现在您可以享受真正的多 AI 提供商统一接入体验!🎉