搭建一个完全免费的通义千问、支持openai接口

技术专业 · 04-30

如今很多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到远程主机上不加改造的话是不可以的。

  1. 克隆仓库
    git clone https://github.com/chand1012/openai-cf-workers-ai
    cd openai-cf-workers-ai

  2. 修改配置文件: 打开 wrangler.toml 文件,修改 CLOUDFLARE_ACCOUNT_ID 变量为你的 Cloudflare 账户 ID。
    CLOUDFLARE_ACCOUNT_ID = "c8c30db3dddc4ad31065d336368c7905" # replace with your own.
    这个账户id在cloudflare的管理页面可以查询到:

  3. 安装依赖并部署
    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 等待应用部署完毕。

  4. 设置访问令牌

    • 方式1:使用 wrangler 设置 ACCESS_TOKENCLOUDFLARE_API_TOKEN。可通过 Cloudflare 控制台创建新的 API 令牌。
    • 方式2(推荐):打开cloudflare的

      打开worders和pages功能页面,选择刚刚创建的项目,点击设置分别增加ACCESS_TOKENCLOUDFLARE_API_TOKEN,其中ACCESS_TOKEN是我们调用这个openai api的授权码,CLOUDFLARE_API_TOKEN是cloudflare ai的token。可以点击https://dash.cloudflare.com/profile/api-tokens来进行创建。
      在页面中选择创建新的token,并选择workers ai,点击使用模版创建:

      在新打开的页面中创建,就可以看到token,记录号,这个token只会显示一次。
      将其填写到变量中。
      点击重新部署就完成了。

使用说明

请参考 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 不计算使用的令牌数,始终返回零。
  • 停止令牌功能目前不可用。
Theme Jasmine by Kent Liao