export default {
async fetch(request, env) {
const url = new URL(request.url);
const openaiApiKey = env.OPENAI_API_KEY; // 从环境变量获取 OpenAI API 密钥
// 检查是否是特定路由
if (url.pathname === "/backend-api/conversation") {
const requestBody = await request.json(); // 读取 JSON 请求体
const userMessages = requestBody.messages
.filter(
(msg) =>
msg.author.role === "user" && msg.content.content_type === "text"
)
.map((msg) => msg.content.parts.join(" "));
// 使用 OpenAI 的道德审核接口检查文本
if (userMessages.length > 0) {
const moderationResult = await checkContentForModeration(
userMessages,
openaiApiKey
);
if (moderationResult.shouldBlock) {
return new Response(
JSON.stringify({ detail: "公益不易,请珍惜账号喵!" }),
{
status: 451,
headers: { "Content-Type": "application/json" },
}
);
}
}
// 如果没有触发拦截,使用请求体创建新的请求对象并请求目标网站
url.host = "new.oaifree.com";
const newRequest = new Request(url, {
body: JSON.stringify(requestBody),
method: request.method,
headers: request.headers,
});
return fetch(newRequest);
}
// 如果不是特定路由,转发原始请求
url.host = "new.oaifree.com";
return fetch(new Request(url, request));
},
};
// 使用 OpenAI 的道德审核接口检查内容
async function checkContentForModeration(messages, apiKey) {
const response = await fetch("https://api.openai.com/v1/moderations", {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${apiKey}`,
},
body: JSON.stringify({ input: messages }),
});
// 检查 HTTP 响应是否成功
if (response.ok) {
// response.ok 是一个便捷属性,当状态码在 200-299 范围内时为 true
const data = await response.json();
return {
shouldBlock: data.results.some((result) => result.flagged),
};
} else {
console.error("Moderation API returned an error:", response.status);
return { shouldBlock: false }; // 如果 API 调用失败,假定内容是安全的
}
}
配置 worker ,配置变量 OPENAI_API_KEY 。
只要有个有余额的 OPENAI_API_KEY ,就可以上始皇同款道德审核,示例如图。
测试网站:https://oaifree.lvguanjun135.workers.dev/
key 挂了,别试了
加一个 泄露访问者真实 ip
的风险提示。