Skip to content

xueyue33/codebuddy2api

Repository files navigation

CodeBuddy2API

将 CodeBuddy 官方 API 包装成一个功能强大、与 OpenAI API 格式兼容的服务。本项目可以直接调用 CodeBuddy 官方 API,并为所有标准客户端提供统一的接口。

🌟 功能特性

  • 🔌 OpenAI 兼容接口:支持标准的 /v1/chat/completions API,无缝对接现有生态。
  • 🔄 智能响应处理:即使 CodeBuddy 原生仅支持流式响应,本服务也能为客户端智能处理非流式请求,并在后端自动完成“流式转非流式”的响应包装。
  • 高性能:完全基于 FastAPI 和 asyncio 构建,支持高并发异步请求。
  • 🔐 双重认证机制
    • 服务访问认证:通过环境变量设置密码,保护整个代理服务。
    • CodeBuddy 官方认证:在后端安全地管理和使用 CodeBuddy 的 Bearer Token
  • 🔄 凭证自动轮换:支持在 .codebuddy_creds 目录中配置多个 CodeBuddy 认证凭证,服务会自动轮换使用,有效提高可用性和分担请求压力。
  • 🌐 Web 管理界面:内置一个美观、易用的 Web UI,方便用户管理凭证、测试 API 和查看服务状态。

🚀 快速开始

1. 前置要求

  • Python 3.8 或更高版本
  • Git

2. 下载和安装

首先,克隆本项目到本地:

git clone https://github.com/xueyue33/codebuddy2api.git
cd codebuddy2api

然后,运行启动脚本。此脚本会自动创建 Python 虚拟环境并安装所有必需的依赖。

Windows:

start.bat

Linux / macOS:

python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
python web.py

3. 配置环境变量

项目启动需要一些基本配置。请将根目录下的 .env.example 文件复制一份并重命名为 .env

cp .env.example .env

然后,用你的文本编辑器打开 .env 文件,至少需要设置以下必需的变量

# (必需) API服务的访问密码,客户端连接时需要提供此密码
CODEBUDDY_PASSWORD=your_secret_password_for_this_service

4. 添加 CodeBuddy 认证凭证

为了让服务能够代理请求,你至少需要添加一个有效的 CodeBuddy 认证凭证。本项目提供了极为便捷的自动化认证方式。

推荐方式:使用 Web 管理界面自动获取

  1. 启动服务后,使用浏览器访问 http://127.0.0.1:8001 (或你自定义的地址)。
  2. 输入你在 .env 文件中设置的 CODEBUDDY_PASSWORD 登录管理面板。
  3. 进入 “凭证管理” 标签页。
  4. 点击 自动获取认证 卡片中的 “开始认证” 按钮。
  5. 系统会自动生成一个 CodeBuddy 的官方登录链接。请点击 “打开链接” 按钮。
  6. 在新打开的 CodeBuddy 页面中完成登录授权。
  7. 完成! 登录成功后,请关闭登录页面。本服务会自动检测到登录状态,并为你获取、解析和保存新的认证凭证。你只需点击 “刷新列表” 即可看到新添加的凭证。

5. 启动服务

一切准备就绪后,再次运行启动脚本即可启动服务:

Windows:

start.bat

直接运行:

# 确保你已在虚拟环境中 (source venv/bin/activate)
python web.py

服务启动后,你就可以开始使用了!

⚙️ API 使用

认证

所有对本服务的 API 请求,都需要在 HTTP 请求头中包含你在 .env 文件里设置的 CODEBUDDY_PASSWORD 作为 Bearer Token。

Authorization: Bearer your_secret_password_for_this_service

客户端集成示例

你可以将任何支持 OpenAI API 的客户端指向本服务。

Python 客户端:

import openai

client = openai.OpenAI(
    api_key="your_secret_password_for_this_service",
    base_url="http://127.0.0.1:8001/codebuddy/v1"
)

# 非流式请求
response = client.chat.completions.create(
    model="auto-chat",
    messages=[
        {"role": "user", "content": "你好,2+2等于几?"}
    ]
)
print(response.choices[0].message.content)

# 流式请求
stream = client.chat.completions.create(
    model="auto-chat",
    messages=[
        {"role": "user", "content": "写一个Python的Hello World脚本"}
    ],
    stream=True
)
for chunk in stream:
    print(chunk.choices[0].delta.content or "", end="")

curl 命令行示例:

# 非流式请求
curl -X POST "http://127.0.0.1:8001/codebuddy/v1/chat/completions" \
  -H "Authorization: Bearer your_secret_password_for_this_service" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "auto-chat",
    "messages": [
      {"role": "user", "content": "Hello, what is 2+2?"}
    ]
  }'

# 流式请求
curl -X POST "http://127.0.0.1:8001/codebuddy/v1/chat/completions" \
  -H "Authorization: Bearer your_secret_password_for_this_service" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "auto-chat",
    "messages": [
      {"role": "user", "content": "Write a Python hello world script"}
    ],
    "stream": true
  }'

📝 API 端点

  • POST /codebuddy/v1/chat/completions: 核心接口,用于发送聊天请求。
  • GET /codebuddy/v1/models: 获取在 .env 文件中配置的模型列表。
  • GET /codebuddy/v1/credentials: (需要认证)在 Web UI 中用于列出所有凭证。
  • POST /codebuddy/v1/credentials: (需要认证)在 Web UI 中用于添加新凭证。
  • GET /health: 服务的健康检查端点。

🔧 项目结构

codebuddy2api/
├── src/                           # 源代码目录
│   ├── auth.py                    # 服务访问认证模块
│   ├── codebuddy_api_client.py    # 封装了与CodeBuddy官方API的通信
│   ├── codebuddy_auth_router.py   # CodeBuddy OAuth2 认证路由
│   ├── codebuddy_token_manager.py # CodeBuddy凭证加载与轮换管理器
│   ├── codebuddy_router.py        # 核心API路由 (v1) - 已重构优化
│   ├── frontend_router.py         # Web管理界面的路由
│   ├── settings_router.py         # 设置管理路由
│   ├── usage_stats_manager.py     # 使用统计管理器
│   └── keyword_replacer.py        # 关键词替换模块
├── frontend/
│   └── admin.html                 # Web管理界面的前端页面
├── .codebuddy_creds/              # 存放CodeBuddy凭证的目录 (Git会忽略其中的文件)
├── web.py                         # FastAPI服务主入口
├── config.py                      # 环境变量配置管理
├── requirements.txt               # Python依赖列表
├── .env.example                   # 环境变量示例文件
├── start.bat                      # Windows一键启动脚本
├── docker-compose.yml             # Docker Compose 配置
├── Dockerfile                     # Docker 镜像构建文件
├── entrypoint.sh                  # Docker 容器入口脚本
└── README.md                      # 本文档

⚙️ 配置选项

所有配置均通过 .env 文件或环境变量进行管理。

环境变量 默认值 说明
CODEBUDDY_PASSWORD - (必需) 访问此API服务的密码。
CODEBUDDY_HOST 127.0.0.1 服务监听的主机地址。
CODEBUDDY_PORT 8001 服务监听的端口。
CODEBUDDY_API_ENDPOINT https://www.codebuddy.ai CodeBuddy 官方 API 端点,一般无需修改。
CODEBUDDY_CREDS_DIR .codebuddy_creds 存放 CodeBuddy 认证凭证的目录。
CODEBUDDY_LOG_LEVEL INFO 日志级别,可选 DEBUG, INFO, WARNING, ERROR
CODEBUDDY_MODELS (列表) 向客户端报告的可用模型列表,用逗号分隔。
CODEBUDDY_SSL_VERIFY false SSL验证开关,设置为 true 启用SSL验证。
CODEBUDDY_ROTATION_COUNT 10 凭证轮换计数,每N次请求后切换凭证。

🐛 故障排除

  • "No valid CodeBuddy credentials found":

    • 确保你已经在 .codebuddy_creds 目录下添加了至少一个有效的凭证 JSON 文件。
    • 推荐使用 Web UI 添加,以确保格式正确。
  • "API error: 401" / "API error: 403" (来自 CodeBuddy):

    • 这通常意味着你的 CodeBuddy Bearer Token 无效或已过期。请通过官网重新获取一个新的 Token,并在 Web UI 中更新。
  • "Invalid password":

    • 这意味着你访问本服务时,请求头中提供的 Bearer Token 与你在 .env 文件中设置的 CODEBUDDY_PASSWORD 不匹配。
  • 需要查看详细日志:

    • .env 文件中设置 CODEBUDDY_LOG_LEVEL=DEBUG,然后重启服务。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages