惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
V
Visual Studio Blog
IT之家
IT之家
博客园 - 聂微东
The Cloudflare Blog
月光博客
月光博客
阮一峰的网络日志
阮一峰的网络日志
S
SegmentFault 最新的问题
Apple Machine Learning Research
Apple Machine Learning Research
酷 壳 – CoolShell
酷 壳 – CoolShell
爱范儿
爱范儿
H
Help Net Security
博客园 - 叶小钗
V
V2EX
WordPress大学
WordPress大学
J
Java Code Geeks
Hugging Face - Blog
Hugging Face - Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园_首页
C
Check Point Blog
B
Blog
D
DataBreaches.Net
美团技术团队
罗磊的独立博客

Wslll

手搓一个ios记账应用:快捷指令、PWA应用、AI分析 一个AnthropicToOpenai的本地运行的API转换脚本(用于ClaudeCode等) 一种针对长篇幅学术文章的特征提取循环翻译模式 开源分享:经过运行验证的自动SNP Calling脚本 使用glnexus进行joint call的一些经验 wslll blog:基于Python的自托管博客应用 wslll blog的介绍以及2025年不稳定运行的原因 使用SimpleM计算有效检验数量 期刊发布:基于重测序的原始群体和改良群体的遗传多样性研究 期刊发布:遗传改良对世界水产养殖业发展的推动作用 你好,世界!
使用cloudflare worker转发openai api并设置关键词屏蔽
wslll · 2023-07-07 · via Wslll

cloudflare的worker功能可以用与转发一些API的调用需求,通过这个功能可以实现使用自己的域名转发调用某些API的需求。 这里分享两个worker.js代码,一个可以实现将APIKey进行自定义变换后转发,另一个可以自定义一些关键词或者敏感词汇,然后再调用Openai API的过程中拦截含有屏蔽词的调用请求。

自定义Key转发

这里的代码中,在openai-api处填写官方api,前面填写自定义字符串即可设定不一样的api实现转发调用。如果不设置任何自定义api,也可以直接使用官方apikey进行调用。

const OPENAI_URL = 'https://api.openai.com';

const keyMap = {
  '自定义api名1': 'openai-api1',
  '自定义api名2': 'openai-api2',
  // ...更多映射关系...
};

addEventListener('fetch', event => {
  event.respondWith(handleRequest(event.request))
})

async function handleRequest(request) {
  const url = new URL(request.url);
  url.host = OPENAI_URL.replace(/^https?:\/\//, '');

  const modifiedRequest = new Request(url.toString(), {
    headers: new Headers(request.headers),
    method: request.method,
    body: request.body,
    redirect: 'follow'
  });

  const authHeader = modifiedRequest.headers.get('Authorization');
  if (authHeader) {
    for (const customKey in keyMap) {
      if (authHeader.includes(customKey)) {
        modifiedRequest.headers.set('Authorization', authHeader.replace(customKey, keyMap[customKey]));
        break;
      }
    }
  }

  const response = await fetch(modifiedRequest);
  const modifiedResponse = new Response(response.body, response);

  // 添加允许跨域访问的响应头
  modifiedResponse.headers.set('Access-Control-Allow-Origin', '*');

  return modifiedResponse;
}

关键词屏蔽版本

该版本的可以设定无限个关键词,自定义设置,然后当请求调用是出现了这些关键词,会直接返回拒绝调用的消息,不消耗Toekn。

const OPENAI_URL = 'https://api.openai.com';

// 将敏感词汇放在一个数组中
const sensitiveWords = ['关键词1', '关键词2', '更多关键词'];

addEventListener('fetch', event => {
  event.respondWith(handleRequest(event.request));
});

async function handleRequest(request) {
  const url = new URL(request.url);
  url.host = OPENAI_URL.replace(/^https?:\/\//, '');

  const requestBody = await request.clone().text();

  // 检查请求体中是否包含屏蔽词
  if (sensitiveWords.some(word => requestBody.includes(word))) {
    return new Response('请求包含敏感信息,终止会话。', { status: 400 });
  }

  const modifiedRequest = new Request(url.toString(), {
    headers: request.headers,
    method: request.method,
    body: request.body,
    redirect: 'follow'
  });

  const response = await fetch(modifiedRequest);
  const modifiedResponse = new Response(response.body, response);

  // 添加允许跨域访问的响应头
  modifiedResponse.headers.set('Access-Control-Allow-Origin', '*');

  return modifiedResponse;
}

Github地址:cloudflare-transfer-api