logo
0
0
WeChat Login
feat: 支持CNB的向量模型

CNB Edge Gateway

基于 EdgeOne Pages Node Functions 的 CNB 大模型 API 代理,完全兼容 OpenAI 标准接口,解决跨域问题。

English | 简体中文

镜像仓库: CNBGitHub

简介

本项目中继 CNB AI Chat Completions API,将其转换为 OpenAI 标准接口格式,方便在各种 OpenAI 兼容客户端中使用。

原始 CNB API

curl --request POST \
  --url https://api.cnb.cool/{repo}/-/ai/chat/completions \
  --header 'Accept: application/json' \
  --header 'Authorization: 123' \
  --header 'Content-Type: application/json' \
  --data '{
  "messages": [
    {
      "content": "string",
      "role": "string"
    }
  ],
  "model": "string",
  "stream": true
}'

认证方式: 需要 CNB 访问令牌,包含 repo-code:r 权限,通过 Authorization: Bearer <token> 头传递。

代理后的接口

curl --request POST \
  --url https://your-edge-pages-domain/v1/chat/completions \
  --header 'Authorization: Bearer YOUR_CNB_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "messages": [
    {
      "content": "string",
      "role": "string"
    }
  ],
  "model": "string",
  "stream": true
}'
对比项原始 CNB API代理后 (OpenAI 标准)
接口路径POST /{repo}/-/ai/chat/completionsPOST /v1/chat/completions
认证方式Authorization: Bearer <token>Authorization: Bearer <token> (透传)
仓库配置URL 路径中指定通过环境变量 CNB_REPO 配置

功能特性

  • ✅ 完全兼容 OpenAI API 标准接口
  • ✅ 支持流式响应 (SSE)
  • ✅ 支持所有域名跨域 (CORS)
  • ✅ 请求/响应日志记录
  • ✅ 标准化错误响应格式
  • ✅ 自动移除 sk- 前缀(容错机制)
  • ✅ 支持自定义 AI 接口路径

接口说明

接口方法说明
/v1/chat/completionsPOST聊天补全接口
/v1/embeddingsPOST向量嵌入接口
/v1/modelsGET模型列表接口

部署

1. Fork 本仓库

2. 在 EdgeOne Pages 创建项目

连接你的 Git 仓库,EdgeOne Pages 会自动识别 Node Functions。

3. 配置环境变量

在 EdgeOne Pages 控制台:项目设置 → 环境变量 中添加:

变量名说明示例必填
CNB_REPOCNB 仓库路径 (owner/project/repo)Mintimate/code-nest/cnb-edge-gateway
CNB_AI_PATH自定义 AI 接口路径,留空使用默认值/-/ai/chat/completions
CNB_EMBEDDINGS_PATH向量接口路径,开启向量功能必填无默认值
CUSTOM_MODELS自定义模型列表,逗号分隔model-a,model-b,model-c

说明:

  • CNB_AI_PATH 默认值根据接口不同而异:
    • /v1/chat/completions/-/ai/chat/completions
    • /v1/models/-/ai/models
  • CNB_EMBEDDINGS_PATH 用于向量嵌入接口,如需使用该功能必须配置(例如:/-/ai/embeddings
  • CUSTOM_MODELS 用于 /v1/models 接口返回的模型列表。如果设置了该变量,owned_bycustom;未设置时使用默认模型 hunyuan-2.0-instructowned_bycnb-default

4. 部署

推送代码或手动触发部署。

使用方式

配置 OpenAI 兼容客户端

配置项
Base URLhttps://your-edge-pages-domain/v1
API Key你的 CNB Token(支持带或不带 sk- 前缀)

Python (OpenAI SDK)

from openai import OpenAI

client = OpenAI(
    base_url="https://your-edge-pages-domain/v1",
    api_key="YOUR_CNB_TOKEN"
)

# 流式调用
stream = client.chat.completions.create(
    model="any",
    messages=[{"role": "user", "content": "Hello!"}],
    stream=True
)

for chunk in stream:
    if chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="")

JavaScript (fetch)

const response = await fetch('https://your-edge-pages-domain/v1/chat/completions', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_CNB_TOKEN',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    stream: true,
    messages: [{ role: 'user', content: 'Hello!' }],
  }),
});

// 处理 SSE 流
const reader = response.body.getReader();
const decoder = new TextDecoder();

while (true) {
  const { done, value } = await reader.read();
  if (done) break;
  console.log(decoder.decode(value));
}

错误响应

所有错误响应遵循 OpenAI 标准格式:

{
  "error": {
    "message": "错误描述",
    "type": "error_type",
    "param": null,
    "code": null
  }
}
状态码类型说明
401authentication_error缺少 Authorization 头
500server_error服务器配置错误或内部错误

项目结构

cnb-edge-gateway/
├── node-functions/
│   └── v1/
│       ├── chat/
│       │   └── completions/
│       │       └── index.js    # POST /v1/chat/completions
│       ├── embeddings/
│       │   └── index.js        # POST /v1/embeddings
│       └── models/
│           └── index.js        # GET /v1/models
└── README.md

License

MIT