后端与接口
需要让 OpenAI SDK/CLI 调用…
当客户端只支持 OpenAI API 格式、但你想走 Freebuff 免费模型时,用 freebuff2api 代理完成 token、API key、HTTP 代理和客户端接入配置。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
需要让 OpenAI SDK/CLI 调特定
解决思路
- 获取 Freebuff auth token(网页):访问 https://freebuff.llm.pm,登录 Freebuff 账号,复制页面显示的 token。
- 获取 Freebuff auth token(CLI):运行 `npm i -g freebuff`,再运行 `freebuff` 并按提示登录。
- 从凭据文件读取 token:Linux/macOS 查看 `~/.config/manicode/credentials.json`,Windows 查看 `C:\\Users\\<username>\\.config\\manicode\\credentials.json`,复制其中 `default.authToken` 的值作为 `AUTH_TOKENS`。
- 用 Docker 单 token 部署:`docker run -d --name freebuff2api -p 8080:8080 -e AUTH_TOKENS="$FREEBUFF_TOKEN" ghcr.io/quorinex/freebuff2api:latest`。
- 用 Docker 多 token 部署提高吞吐:把多个 token 用逗号分隔传给 `AUTH_TOKENS`,例如 `-e AUTH_TOKENS="$FREEBUFF_TOKEN_1,$FREEBUFF_TOKEN_2,$FREEBUFF_TOKEN_3"`。
- 用 Docker 加 HTTP 代理和 API key 保护部署:追加 `-e API_KEYS="$MY_PROXY_API_KEY"` 和 `-e HTTP_PROXY="$HTTP_PROXY_URL"`。
- 用 Docker Compose 部署:创建 `docker-compose.yml`,使用镜像 `ghcr.io/quorinex/freebuff2api:latest`,设置 `container_name: freebuff2api`、`restart: unless-stopped`、端口 `"8080:8080"`。
- 在 Docker Compose 的 `environment` 中配置 `AUTH_TOKENS: "${FREEBUFF_TOKENS}"`、`API_KEYS: "${PROXY_API_KEYS}"`、`ROTATION_INTERVAL: "6h"`、`REQUEST_TIMEOUT: "15m"`。
- 可选在 Docker Compose 中挂载配置文件:`volumes: - ./config.json:/app/config.json`,并设置 `command: ["-config", "/app/config.json"]`。
- 创建 `.env` 文件:`FREEBUFF_TOKENS=token1,token2,token3`、`PROXY_API_KEYS=my-secret-key`。
- 从源码构建:要求 Go 1.23+,运行 `git clone https://github.com/Quorinex/Freebuff2API.git`,再运行 `cd Freebuff2API` 和 `go build -o freebuff2api .`。
- 运行源码构建程序:用 `./freebuff2api -config config.json` 指定配置文件;或用 `AUTH_TOKENS="$FREEBUFF_TOKEN" ./freebuff2api` 通过环境变量运行。
- 为源码构建 Docker 镜像:运行 `docker build -t freebuff2api .`,再运行 `docker run -d -p 8080:8080 -e AUTH_TOKENS="$FREEBUFF_TOKEN" freebuff2api`。
- 创建 `config.json` 并设置 `LISTEN_ADDR` 为 `:8080` 控制代理监听地址。
- 在 `config.json` 设置 `UPSTREAM_BASE_URL` 为 `https://codebuff.com` 指定 Freebuff 后端 URL。
- 在 `config.json` 设置 `AUTH_TOKENS` 为 JSON 数组,例如 `["token1", "token2"]`。
- 在 `config.json` 设置 `ROTATION_INTERVAL` 为 `6h`,控制 token 轮换频率。
- 在 `config.json` 设置 `REQUEST_TIMEOUT` 为 `15m`,控制上游请求超时。
- 在 `config.json` 设置 `API_KEYS` 为客户端 API key 数组,例如 `["my-proxy-api-key"]`;设为空数组 `[]` 表示开放访问。
- 在 `config.json` 设置 `HTTP_PROXY` 为 `""` 或 HTTP 代理 URL,让出站请求走代理。
- 记住环境变量在同时设置时会覆盖 JSON 文件中的值。
- 启动代理后,把任意 OpenAI 兼容客户端指向 `http://localhost:8080`。
- 用 curl 调 `/v1/chat/completions`:设置 `Content-Type: application/json`、`Authorization: Bearer $PROXY_API_KEY`,请求体包含 `"model": "claude-3-5-sonnet"` 和 `"messages": [{"role": "user", "content": "Hello!"}]`。
- 如果 `API_KEYS` 为空,可省略 `Authorization` 头或用任意值调用 curl。
- 用 Python openai SDK:`OpenAI(base_url="http://localhost:8080/v1", api_key=os.environ.get("PROXY_API_KEY", "unused"))`,再调用 `client.chat.completions.create(model="claude-3-5-sonnet", messages=[...])`。
- 用 Python 流式响应:在 `client.chat.completions.create(...)` 中设置 `stream=True`,遍历 `chunk.choices[0].delta.content` 并打印非空内容。
- 用 Node.js openai SDK:`new OpenAI({ baseURL: "http://localhost:8080/v1", apiKey: process.env.PROXY_API_KEY ?? "unused" })`,再调用 `client.chat.completions.create(...)`。
- 用 LangChain Python:`ChatOpenAI(model="claude-3-5-sonnet", openai_api_base="http://localhost:8080/v1", openai_api_key=os.environ.get("PROXY_API_KEY", "unused"))`,再调用 `llm.invoke(...)`。
- 多 token 吞吐模式:从多个 Freebuff 账号收集 token,在 `config.json` 的 `AUTH_TOKENS` 数组中放入 `token-account-1`、`token-account-2`、`token-account-3`,并设置 `ROTATION_INTERVAL` 为 `3h`;或用环境变量 `export AUTH_TOKENS="token1,token2,token3"`。
- 用 API key 保护代理:在 `config.json` 设置 `API_KEYS` 为 `["secret-key-for-team", "another-key-for-ci"]`,客户端必须带 `Authorization: Bearer secret-key-for-team`。
- 企业/区域网络下走 HTTP 代理:在 `config.json` 设置 `HTTP_PROXY` 为 `http://proxy.company.com:3128`,或在 Docker 加 `-e HTTP_PROXY="$CORPORATE_PROXY"`。
- 健康检查:运行 `curl -s http://localhost:8080/v1/models | jq .`;或发最小 chat 请求并用 `jq '.choices[0].message.content'` 验证响应。
- 处理 401 Unauthorized:若配置了 `API_KEYS`,确保客户端发送的 `Authorization: Bearer <key>` 匹配;若 `API_KEYS` 为空 `[]`,无需认证头。
- 处理上游 403/token 被拒:重新从 https://freebuff.llm.pm 获取 token,或重新运行 `freebuff` CLI;检查 `AUTH_TOKENS` 正确、非空且无多余空白。
- 处理请求超时:对很长补全调大 `REQUEST_TIMEOUT`,例如 `{ "REQUEST_TIMEOUT": "30m" }`。
- 处理 `localhost:8080` connection refused:确认容器/进程在运行 `docker ps` 或 `ps aux | grep freebuff2api`;检查 `LISTEN_ADDR`;Docker 检查端口映射 `-p 8080:8080`。
- 处理 Docker 容器立即退出:查看 `docker logs freebuff2api`;常见原因是未设置 `AUTH_TOKENS`,用 `docker run --rm -e AUTH_TOKENS="$FREEBUFF_TOKEN" ghcr.io/quorinex/freebuff2api:latest` 验证。
- 处理多 token 不轮换:确认 token 在环境变量中逗号分隔或在配置文件中为 JSON 数组;确认 `ROTATION_INTERVAL` 是有效 Go duration 字符串,如 `"1h"`、`"30m"`、`"6h"`。
- 使用唯一 CLI 参数:运行 `./freebuff2api -config /path/to/config.json` 指定备用配置文件路径;其他配置通过 JSON 文件或环境变量。
- 部署后代理会暴露标准 OpenAI 端点(如 `/v1/chat/completions`),动态随机化客户端指纹以模仿官方 Freebuff SDK,按间隔轮换多个 auth token,并可通过可选 HTTP proxy 路由出站流量。
- 源码构建时了解项目结构:`main.go` 是入口、配置加载和服务器启动,`config.json` 是默认配置文件,`Dockerfile` 用于多架构 Docker 构建,`go.mod`/`go.sum` 管理 Go 依赖。
适用边界 · 注意事项
- 没有 Freebuff 账号或有效 auth token,或无法访问 Freebuff/上游服务时,不能使用。
- 不允许运行 Docker/Go 或不能自行部署代理进程时,无法按此技能部署。
- 对安全/合规要求高,不能接受把 Freebuff token 交给第三方镜像、或在 `API_KEYS` 为空时开放代理端口时,不适用。