目的
避免因将 API key 写进前端而导致 API key 泄露问题。
准备
1.一个已实名认证的阿里云账号
2.一个域名(可选)
- 此处仅以阿里云作为示例,理论上 EdgeOne 等提供类似服务的亦可
- CloudFlare Workers 因为某些原因,仿佛不太可行(请求硅基流动接口时会返回503)
创建边缘函数
1.访问 函数和 Pages
2.点击 立即开通,并确保使用的是免费模式

3.点击 创建

4.点击 函数模板

5.选择 Hello World 模板,然后点击页面底部的 下一步

6.函数名称随便填,填完后点击 提交

7.完成创建,点击 去列表查看

配置函数
1.点击 代码

2.把预置的代码删了,替换为下面这一段
务必将第108行左右的 <你的API Key> 替换为真实的硅基流动 API key
硅基流动 API key 可前往 https://cloud.siliconflow.cn/me/account/ak 自行创建
export default {
async fetch(request, env, ctx) {
// 创建URL对象解析请求路径
const url = new URL(request.url);
const path = url.pathname;
// 只处理 /v1/chat/completions 路径的请求
if (path !== "/v1/chat/completions") {
return new Response("Not Found", {
status: 404,
headers: {
"Content-Type": "text/plain",
"Access-Control-Allow-Origin": "*"
}
});
}
// 处理 CORS 预检请求(OPTIONS)
if (request.method === "OPTIONS") {
return new Response(null, {
status: 204,
headers: {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "POST, OPTIONS",
"Access-Control-Allow-Headers": "Content-Type, Authorization",
"Access-Control-Max-Age": "86400"
}
});
}
// 仅允许 POST 方法
if (request.method !== "POST") {
return new Response("Method Not Allowed", {
status: 405,
headers: {
"Content-Type": "text/plain",
"Access-Control-Allow-Origin": "*"
}
});
}
try {
// 读取并解析客户端请求体
const bodyText = await request.text();
let body;
try {
body = JSON.parse(bodyText);
} catch (e) {
return new Response(JSON.stringify({
error: {
message: "Invalid JSON format in request body",
type: "invalid_request_error"
}
}), {
status: 400,
headers: {
"Content-Type": "application/json",
"Access-Control-Allow-Origin": "*"
}
});
}
// 检查模型是否在允许范围内
const allowedModels = [
"Qwen/Qwen2.5-Coder-7B-Instruct",
"deepseek-ai/DeepSeek-R1-0528-Qwen3-8B"
];
const requestedModel = body.model;
if (!requestedModel) {
return new Response(JSON.stringify({
error: {
message: "Missing required parameter: model",
type: "invalid_request_error"
}
}), {
status: 400,
headers: {
"Content-Type": "application/json",
"Access-Control-Allow-Origin": "*"
}
});
}
if (!allowedModels.includes(requestedModel)) {
return new Response(JSON.stringify({
error: {
message: `Model not allowed. Allowed models are: ${allowedModels.join(", ")}`,
type: "invalid_request_error"
}
}), {
status: 403,
headers: {
"Content-Type": "application/json",
"Access-Control-Allow-Origin": "*"
}
});
}
// 转发请求到 siliconflow
const upstreamResponse = await fetch(
"https://api.siliconflow.cn/v1/chat/completions",
{
method: "POST",
headers: {
"Content-Type": "application/json",
"Authorization": "Bearer <你的API Key>"
},
body: bodyText // 使用原始的bodyText,不重新序列化
}
);
// 读取上游返回内容
const responseText = await upstreamResponse.text();
// 原样返回给客户端
return new Response(responseText, {
status: upstreamResponse.status,
headers: {
"Content-Type": upstreamResponse.headers.get("Content-Type") || "application/json",
"Access-Control-Allow-Origin": "*"
}
});
} catch (error) {
// 处理其他错误
return new Response(JSON.stringify({
error: {
message: "Internal server error",
type: "internal_server_error"
}
}), {
status: 500,
headers: {
"Content-Type": "application/json",
"Access-Control-Allow-Origin": "*"
}
});
}
}
};
3.完成后点击 快速发布,并点击 确定

4.框中的 URL 即为后端转发 URL

- HTTP 方法 POST
- 请求 URL https://<阿里云提供的域名>/v1/chat/completions
- 请求体示例 {"model":"Qwen/Qwen2.5-Coder-7B-Instruct","messages":[{"role":"user","content":"你好"}]}
其中,model 为白名单模式,只有规定范围内的模型才能被请求。可在代码的第66行左右修改。
可选 · 绑定域名
1..点击左侧的 站点管理,然后点击 新增站点

3.输入欲添加的根域名,然后点击下一步

4.根据实际情况选择区域与接入方式(对于本文而言,建议选择 CNAME 接入方式)

5.选择 免费版 套餐,根据提示完成 所属权校验 后完成添加

6.返回 函数和 Pages 点击先前创建的函数

7.点击 域名,然后点击 添加域名

8.输入一个根域名为已添加至ESA的二级域名

9.点击 确定 ,然后点击 查看 DNS 记录

10.查看所给出的 CNAME,在域名 DNS 服务商那添加记录即可

Coco 对接

- HTTP 方法 POST
- 请求 URL https://<阿里云提供的域名>/v1/chat/completions
- 请求体示例 {"model":"Qwen/Qwen2.5-Coder-7B-Instruct","messages":[{"role":"user","content":"你好"}]}