一直在找调用第三方 LLM-API 的方法,看到有人用 cloudflare 实现,就尝试了一下,果然成功了。 突然发现,cloudflare 的功能真是个好东西,功能远超于本文所述。
1 相关网站
- 中文官网 - https://www.cloudflare-cn.com/
- 注册 cloudflare 用户 - 注册
2 创建 worker
下面的命名是自动生成的,您可以根据自己的需要随意命名。
访问:https://worker-cold-bar-b423.tanbushi.workers.dev。成功!
下面测试自定义域名,确保能成功访问LLM的API。点击需要设定自定义域名的 worker,见下图:
点击上图 Add Custom Domain 按钮后,进入“初始化中”的提示…
可能要几分钟后,变成绿色 active 就可以了
访问:https://worker-cold-bar-b423.airs.ltd ,成功!
3 编写 worker 代码,实现LLM的API调用
在 Github 上找到一个开源项目,https://github.com/ultrasev/llmproxy,感谢!
打开 /api/llm_api_proxy.js,复制该文件所有代码,覆盖 worker.js 文件后,点击右上角的 deploy 按钮发布。
提示,点击“保持并发布”
4 本地调用 LLMAPI 的代码
参考上述代码仓库里的 /tests/test_cf_worker.py 文件,在本地编辑 test_gemini.py ,测试 谷歌的 gemini 模型。gemini 每天10万token,测试完全够用了。
本地目录结构如下图:
dotenv.py 文件内容如下:
import os
# 定义一个函数,用于读取环境变量
def load_dotenv():
os.environ.setdefault("GEMINI_API_KEY", "your-gemini-api-key")
test-gemini.py 文件内容如下:
import asyncio
import os
from openai import AsyncOpenAI
from dotenv import load_dotenv
load_dotenv() # 加载环境变量
# 生成请求的函数
async def make_request(api_key: str,
model: str,
supplier: str):
BASE_URL = "https://worker-cold-bar-b423.airs.ltd/"
client = AsyncOpenAI(base_url=BASE_URL, api_key=api_key)
response = await client.chat.completions.create(
model=model,
messages=[
{"role": "system", "content": "你是tanbushi的分身。"},
{"role": "user", "content": "你是谁?"}
],
extra_headers={"supplier": supplier},
)
return response.choices[0].message.content
# 发起测试的函数
async def test():
response = await make_request(
api_key=os.environ["GEMINI_API_KEY"],
model="gemini-1.5-pro-latest",
supplier="gemini"
)
print(response)
# 注意下面的调用方式,用 asyncio.run(test())
asyncio.run(test())
5 测试调用
在本地的命令行窗口或终端窗口,进入 test-gemini 目录,运行:
python test-gemini.py
得到回复如下:
成功!
扩展:
您可以将上面用到的 gemini-api-key,在本地的python文件里,换成其他的 LLM-API-KEY,如:chatgpt、千问等。