如今很多AI大模型已经可以免费使用了,但是稳定一些的API接口服务总是要支付费用。cloudflare这个网络界的慷慨大户,提供了免费的使用额度。其中Beta类是免费的,包括阿里的通义千问在内达量模型居然都是免费的。
下面就来介绍下,如何将cloudflare的AI服务转换为openai的api接口规范,让前端程序在不做任何修改的情况下就可以直接使用?
为什么选择这种实现方式?
随着技术的发展,未来较小、成本较低的语言模型可能会成为 OpenAI 的 GPT-3.5 和 GPT-4 API 的有力竞争者。许多开发者可能不希望为了使用新兴的模型而重写整个代码库。同时,Cloudflare Workers 提供了一个很好的平台来托管 AI 和 API,因此我选择在此平台上实现了 OpenAI API,这样开发者可以在不修改现有代码的情况下使用新的 LLMs。
兼容性与实现的 API
已实现或计划实现的 API 包括:
- 完成创建(Completions)
- 聊天完成(Chat Completions)
- 音频转录(Audio Transcription)
- 嵌入(Embeddings)
- 音频翻译(Audio Translation)
- 图像生成(Image Generation)
- 文件处理,支持助手(Assistants)
- 存储助手、线索和消息在 D1 数据库
使用 Whisper 进行转录,使用 Llama 2 识别语言,使用 m2m-100 进行翻译。
部署步骤:
我是使用的macbook进行的部署,在ubuntu中使用方法相同,需要说明的是按照下面的部署方法需要有浏览器,因此ssh到远程主机上不加改造的话是不可以的。
克隆仓库:
git clone https://github.com/chand1012/openai-cf-workers-ai
cd openai-cf-workers-ai
修改配置文件: 打开
wrangler.toml
文件,修改CLOUDFLARE_ACCOUNT_ID
变量为你的 Cloudflare 账户 ID。
CLOUDFLARE_ACCOUNT_ID = "c8c30db3dddc4ad31065d336368c7905" # replace with your own.
这个账户id在cloudflare的管理页面可以查询到:
安装依赖并部署:
1):yarn由于我的电脑上没有安装yarn所以初次运行会报错。可以使用下面的命令来安装yarn:
brew install yarn
如果出现:
说明还需要安装node,安装的命令如下:
brew install node
安装后就可以正常的执行前面的代码了。
2)yarn init-prod # 首次运行
执行后会提示进行权限授权,在弹出的浏览器页面中点击允许就可以了,如果出现授权失败,需要到cloudflare中进行赋权:
- 访问Cloudflare的仪表板(Dashboard)。
- 导航到“R2 Storage”部分,你可以在仪表板的左侧菜单中找到它,或者直接搜索“R2”。
- 在R2页面上,应该有一个启用R2的选项。点击启用并按照提示操作。
- 重新执行yarn init-prod
3) 完成赋权以后就可以执行第三个指令:yarn deploy 等待应用部署完毕。
设置访问令牌:
- 方式1:使用
wrangler
设置ACCESS_TOKEN
和CLOUDFLARE_API_TOKEN
。可通过 Cloudflare 控制台创建新的 API 令牌。
- 方式1:使用
- 方式2(推荐):打开cloudflare的
打开worders和pages功能页面,选择刚刚创建的项目,点击设置分别增加ACCESS_TOKEN
和CLOUDFLARE_API_TOKEN
,其中ACCESS_TOKEN
是我们调用这个openai api的授权码,CLOUDFLARE_API_TOKEN
是cloudflare ai的token。可以点击https://dash.cloudflare.com/profile/api-tokens来进行创建。
在页面中选择创建新的token,并选择workers ai,点击使用模版创建:
在新打开的页面中创建,就可以看到token,记录号,这个token只会显示一次。
将其填写到变量中。
点击重新部署就完成了。
- 方式2(推荐):打开cloudflare的
使用说明
请参考 OpenAI 的 API 文档以获取更多信息。下面是一个使用示例:
curl https://openai-cf.yourusername.workers.dev/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <Any string value you set.>" \
-d '{
"model": "@cf/meta/llama-2-7b-chat-int8",
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "Hello!"
}
]
}'
# {"id":"ccfbc7fc-d871-4139-90dc-e6c33fc7f275","model":"@cf/meta/llama-2-7b-chat-int8","created":1696701894,"object":"chat.completion","choices":[{"index":0,"message":{"role":"assistant","content":"Hello there! *adjusts glasses* It's a pleasure to meet you. Is there something I can help you with or would you like to chat? I'm here to assist you in any way I can. 😊"},"finish_reason":"stop"}],"usage":{"prompt_tokens":0,"completion_tokens":0,"total_tokens":0}}
curl https://openai-cf.<你的项目域名>.workers.dev/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <你的access token>" \
-d '{
"model": "@cf/qwen/qwen1.5-7b-chat-awq",
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "你是谁?"
}
]
}'
{"id":"a9d9a266-e906-41cf-8a01-e3fa25882666","model":"@cf/qwen/qwen1.5-7b-chat-awq","created":1714403144,"object":"chat.completion","choices":[{"index":0,"message":{"role":"assistant","content":"我是阿里云开发的一款超大规模语言模型,我叫通义千问。我可以回答各种问题、创作文字,还能表达观点、撰写代码。如果您有任何问题或需要帮助,请随时告诉我,我会尽力提供支持。"},"finish_reason":"stop"}],"usage":{"prompt_tokens":0,"completion_tokens":0,"total_tokens":0}}**%**
注意事项
- 目前 API 不计算使用的令牌数,始终返回零。
- 停止令牌功能目前不可用。