logo
1
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