Skip to content

deanxv/qodo2api

Repository files navigation

中文

qodo2api

觉得有点意思的话 别忘了点个 ⭐

Telegram 交流群

(原coze-discord-proxy交流群, 此项目仍可进此群交流 / 反馈bug) (群内提供公益API、AI机器人)

功能

  • 支持对话接口(流式/非流式)(/chat/completions),详情查看支持模型
  • 支持自定义请求头校验值(Authorization)
  • 支持cookie池(随机),详情查看获取cookie
  • 支持token保活
  • 支持中文对话破限
  • 支持请求失败自动切换cookie重试(需配置cookie池)
  • 可配置代理请求(环境变量PROXY_URL)

接口文档:

示例:

如何使用

如何集成NextChat

如何集成one-api

部署

基于 Docker-Compose(All In One) 进行部署

docker-compose pull && docker-compose up -d

docker-compose.yml

version: '3.4'

services:
  qodo2api:
    image: deanxv/qodo2api:latest
    container_name: qodo2api
    restart: always
    ports:
      - "10022:10022"
    volumes:
      - ./data:/app/qodo2api/data
    environment:
      - QD_COOKIE=******  # cookie (多个请以,分隔)
      - API_SECRET=123456  # [可选]接口密钥-修改此行为请求头校验的值(多个请以,分隔)
      - TZ=Asia/Shanghai

基于 Docker 进行部署

docker run --name qodo2api -d --restart always \
-p 10022:10022 \
-v $(pwd)/data:/app/qodo2api/data \
-e QD_COOKIE=***** \
-e API_SECRET="123456" \
-e TZ=Asia/Shanghai \
deanxv/qodo2api

其中API_SECRETQD_COOKIE修改为自己的。

如果上面的镜像无法拉取,可以尝试使用 GitHub 的 Docker 镜像,将上面的deanxv/qodo2api替换为 ghcr.io/deanxv/qodo2api即可。

部署到第三方平台

部署到 Zeabur

Deployed on Zeabur

Zeabur 的服务器在国外,自动解决了网络的问题,同时免费的额度也足够个人使用

  1. 首先 fork 一份代码。

  2. 进入 Zeabur,使用github登录,进入控制台。

  3. 在 Service -> Add Service,选择 Git(第一次使用需要先授权),选择你 fork 的仓库。

  4. Deploy 会自动开始,先取消。

  5. 添加环境变量

    QD_COOKIE:****** cookie (多个请以,分隔)

    API_SECRET:123456 [可选]接口密钥-修改此行为请求头校验的值(多个请以,分隔)(与openai-API-KEY用法一致)

保存。

  1. 选择 Redeploy。
部署到 Render

Render 提供免费额度,绑卡后可以进一步提升额度

Render 可以直接部署 docker 镜像,不需要 fork 仓库:Render

配置

环境变量

  1. PORT=10022 [可选]端口,默认为10022
  2. QD_COOKIE=****** cookie (多个请以,分隔)
  3. API_SECRET=123456 [可选]接口密钥-修改此行为请求头(Authorization)校验的值(同API-KEY)(多个请以,分隔)
  4. CHINESE_CHAT_ENABLED=true [可选]官方限制中文对话,如需中文多轮对话可开启此项尝试破限。(默认:true)[true:打开、false:关闭]
  5. DEBUG=true [可选]DEBUG模式,可打印更多信息[true:打开、false:关闭]
  6. PROXY_URL=http://127.0.0.1:10801 [可选]代理
  7. REQUEST_RATE_LIMIT=60 [可选]每分钟下的单ip请求速率限制,默认:60次/min
  8. ROUTE_PREFIX=hf [可选]路由前缀,默认为空,添加该变量后的接口示例:/hf/v1/chat/completions
  9. RATE_LIMIT_COOKIE_LOCK_DURATION=600 [可选]到达速率限制的cookie禁用时间,默认为60s

cookie获取方式

  1. 打开qodo并登录。
  2. 登录成功后打开qodo
  3. 打开F12开发者工具。
  4. 右侧开发者工具-控制台,执行如下代码。
function getFirebaseCredentials() {
  const dbRequest = indexedDB.open('firebaseLocalStorageDb');
  dbRequest.onsuccess = function(event) {
    const db = event.target.result;
    const transaction = db.transaction(['firebaseLocalStorage'], 'readonly');
    const store = transaction.objectStore('firebaseLocalStorage');
    const getAllKeysRequest = store.getAllKeys();
    getAllKeysRequest.onsuccess = function(event) {
      const keys = event.target.result;
      if (keys.length > 0) {
        const firstKey = keys[0];
        const getRequest = store.get(firstKey);
        getRequest.onsuccess = function(event) {
          const data = event.target.result;
          if (data && data.value) {
            const apiKey = data.value.apiKey;
            const refreshToken = data.value.stsTokenManager.refreshToken;
            if (apiKey && refreshToken) {
              const combinedCredential = apiKey + '=' + refreshToken;
              const textArea = document.createElement('textarea');
              textArea.value = combinedCredential;
              textArea.style.position = 'fixed';
              textArea.style.left = '-999999px';
              document.body.appendChild(textArea);
              textArea.select();
              document.execCommand('copy');
              document.body.removeChild(textArea);              
              console.log(combinedCredential);
              console.log('Copied!!!');
            } else {
              console.error('Unable to find API Key or Refresh Token');
            }
          } else {
            console.error('Incorrect data format');
          }
        };        
        getRequest.onerror = function(event) {
          console.error('Error retrieving data:', event.target.error);
        };
      } else {
        console.error('No keys found.');
      }
    };    
    getAllKeysRequest.onerror = function(event) {
      console.error('Error retrieving key list:', event.target.error);
    };
  };  
  dbRequest.onerror = function(event) {
    console.error('Error occurred when opening the database:', event.target.error);
  };  
  return "Retrieving the required credentials...";
}
getFirebaseCredentials();

  1. 打印的值即所需cookie值,即环境变量QD_COOKIE,无需手动复制,会自动复制到粘贴板。

进阶配置

支持模型

新用户注册即可获赠14天试用。

模型名称
claude-3-7-sonnet
claude-3-5-sonnet
deepseek-r1
deepseek-r1-32b
gpt-4o
o1
o3-mini
o3-mini-high
gemini-2.5-pro
gemini-2.0-flash

报错排查

Detected that you are using Chinese for conversation, please use English for conversation.

官方限制了中文对话,如需中文多轮对话可开启环境变量CHINESE_CHAT_ENABLED尝试破限。

输出URL编码的内容

出现此场景的情况一般是开启了环境变量CHINESE_CHAT_ENABLED,某些模型指令遵循较差,无解。

其他