OpenAI 不可用?使用开源模型一键替换 OpenAI API

文摘   2024-06-26 08:20   日本  

昨天,有很多开发者收到了 OpenAI 的警告信,表示 OpenAI 将从7月9日起采取额外的措施停止用户在其不支持的区域使用 OpenAI 的服务。目前中国香港与中国大陆不在 OpenAI 提供服务的范围内。那基于大模型创建的 agent/服务应该怎么办?

一个办法是设置路由,伪装流量来源,让 OpenAI 能够检测通过。还有一种方法是及时切换大模型,以防止 OpenAI 突然关停,影响了业务。

设置路由的方案很多,但总归不是万无一失的方案。如果能够用开源模型无缝切换 OpenAI 的 API,既省钱,又省事。

图源[1]

OpenAI 在大语言模型领域并不是一骑绝尘的。单纯就 MMLU 的测试来说,经过一年的发展时间,开源模型与 OpenAI 等闭源模型的差距已经变得越来越小了。即将开源的 Llama 3 405B在在 MMLU 的 benchmark 得到了 86.1%,同样的测试, GPT-4o 的得分是 87.2%。由此可见,开源的模型在能力上已经和 OpenAI 等一流模型相媲美。

至于如何在本地运行一个开源模型,并且为其创建一个与 OpenAI API 兼容的 API server 已经不是什么难事。使用 LlamaEdge 可以轻松在本地运行一个开源大语言模型!你甚至可以在自己的 mac 电脑上运行 Llama-3-8B。LlamaEdge 基于 Rust 和 Wasm 技术,这样做的好处是没有复杂的 Python 依赖,轻量级,容易嵌入你自己的应用中,同时是可移植的。

RAG 是目前最常见的大语言模型应用,可以帮助我们解决大语言模型的知识与幻觉问题。OpenAI 也推出了基于 RAG 的 assistant 产品,让用户可以快速创建基于 RAG 的应用。对于 RAG 应用, LLamaEdge 也可以提供符合 OpenAI API 规范的 embedding endpoint。LlamaEdge 可以一键同时运行普通的 chat model 比如 Llama-3-8B 和专门转换与搜索向量的向量模型,比如 Nomic-embed-text-v.15,从而创建 chat/completions 和 embedding 两个 endpoint。

使用 Docker 镜像快速开始

在 terminal 运行下面的 docker image,这个镜像包含了 Llama-3-8B 模型和 Nomic-embed-text-v.15, WasmEdge runtime,API server 程序 llama-api-server.wasm,最后使用 WasmEdge 和 llama-api-server.wasm 运行模型。由于模型比较大,下载镜像需要一定时间。如果您使用 Docker Desktop,请至少给容器分配 8GB 的内存。

docker run --rm -p 8080:8080 --name api-server secondstate/llama-3-8b-nomic-1.5:latest

当镜像运行起来后,就意味着 API server 已经成功运行。你就可以使用 http:localhost:8080/v1 去替换 OpenAI 的 API server 了。

接下来你可以使用chat/completions 来生成回答。

curl -X POST http://localhost:8080/v1/chat/completions \
  -H 'accept:application/json' \
  -H 'Content-Type: application/json' \
  -d '{"messages":[{"role":"system", "content": "You are a helpful assistant."}, {"role":"user", "content": "What is the capital of France?"}], "model": "model_name"}'

你还可以使用 embeddings 来生成向量。

curl -X POST http://localhost:8080/v1/embeddings \
    -H 'accept:application/json' \
    -H 'Content-Type: application/json' \
    -d '{"model": "nomic-embed-text-v1.5.f16", "input":["LlamaEdge is the easiest & fastest way to run customized and fine-tuned LLMs locally or on the edge."]}'

让我们以 Lobe Chat 为例,只需要按照下图的示意在 OpenAI 的设置里更改 API base url 并且随意输入 OpenAI Key 就可以成功替换 OpenAI API。

具体可以参考:https://llamaedge.com/docs/user-guide/openai-api/lobechat

上面docker 镜像用于快速运行 Llama-3-8B。

如果你想运行其他开源模型,请查看我们的系列教程文章: https://www.secondstate.io/categories/llm/。

如果您有 Nvidia GPU 以及 Nvidia CUDA 的 Docker 扩展,您可以使用 cuda11 或者 cuda12 tagged 镜像。但是,在 Mac 上,Docker Desktop 只能使用 CPUs。如果您想用 Apple GPUs,您需要用下面的方法手动安装 LlamaEdge.

运行开源模型的详细步骤

如果你并不想在 Docker 内运行大模型,比如想把大模型嵌入在你自己的应用里面或者使用 Apple GPUs,你可以使用下面的步骤一步一步在你自己的设备上一步一步构建 API server。WasmEdge 会利用你硬件上的加速器来进行加速,提升推理性能。

首先,下载 WasmEdge runtime。

curl -sSf https://raw.githubusercontent.com/WasmEdge/WasmEdge/master/utils/install_v2.sh | bash -s

然后下载 Llama-3-8B 和 Nomic-embed-text-v.15 模型。

# Llama-3-8B model
curl -LO https://huggingface.co/second-state/Llama-3-8B-Instruct-GGUF/resolve/main/Meta-Llama-3-8B-Instruct-Q5_K_M.gguf

# Nomic-embed-text-v.15
curl -LO https://huggingface.co/second-state/Nomic-embed-text-v1.5-Embedding-GGUF/resolve/main/nomic-embed-text-v1.5-f16.gguf

接下来下载 API server 程序,这是一个可移植的 Wasm 程序。

curl -LO https://github.com/second-state/LlamaEdge/releases/latest/download/llama-api-server.wasm

最后使用下面的命令行运行 Llama-3-8B 和 Nomic-embed-text-v.15 模型。

wasmedge --dir .:. \
   --nn-preload default:GGML:AUTO:Meta-Llama-3-8B-Instruct-Q5_K_M.gguf \
   --nn-preload embedding:GGML:AUTO:nomic-embed-text-v1.5.f16.gguf \
   llama-api-server.wasm -p llama-3-chat,embedding --web-ui ./chatbot-ui \
     --model-name Meta-Llama-3-8B-Instruct-Q5_K_M,nomic-embed-text-v1.5.f16 \
     --ctx-size 4096,384 \
     --log-prompts --log-stat

当你看到终端输出这样的内容后,API server 就已经构建完成了。使用 http:localhost:8080/v1 作为 API base URL 去替换 OpenAI 的 API server

同样,你可以使用chat/completions 来生成回答。

curl -X POST http://localhost:8080/v1/chat/completions \
  -H 'accept:application/json' \
  -H 'Content-Type: application/json' \
  -d '{"messages":[{"role":"system", "content": "You are a helpful assistant."}, {"role":"user", "content": "Introduc yourself"}], "model": "Meta-Llama-3-8B-Instruct-Q5_K_M"}'

使用 embeddings 来生成向量。

curl -X POST http://localhost:8080/v1/embeddings \
    -H 'accept:application/json' \
    -H 'Content-Type: application/json' \
    -d '{"model": "nomic-embed-text-v1.5.f16", "input":["LlamaEdge is the easiest & fastest way to run customized and fine-tuned LLMs locally or on the edge."]}'

有了 chat/completion 和 embedding endpoint 之后,也可以和其他框架结合起来,比如 Dify、AnythingLLM 和 Langchain。只需要在模型处添加对应的 base URL 和模型名字就可以轻松集成。

如果你想使用 LlamaEdge 运行一个完整的 RAG 服务,请参考这篇文章:https://llamaedge.com/docs/user-guide/server-side-rag/quick-start

与上述步骤不同的是,直接运行 RAG 应用需要下载一个为 RAG 程序打造的 Wasm 文件,以及运行一个 Qdrant 的 instance,用来存储向量。

LLamaEdge 是一个开发者平台,我们欢迎开发者基于 LlamaEdge 构建自己兼容 OpenAI API 的 API server。

不用担心 OpenAI 停止服务,开源模型早已奋起直追。

关于 WasmEdge


WasmEdge 是轻量级、安全、高性能、可扩展、兼容OCI的软件容器与运行环境。目前是 CNCF 沙箱项目。WasmEdge 被应用在 SaaS、云原生,service mesh、边缘计算、边缘云、微服务、流数据处理、LLM 推理等领域。


GitHub:https://github.com/WasmEdge/WasmEdge

官网:https://wasmedge.org/

‍‍Discord 群:https://discord.gg/U4B5sFTkFc

文档:https://wasmedge.org/docs

引用链接

[1] 图源: https://www.linkedin.com/posts/maxime-labonne_the-gap-between-closed-source-and-open-weight-activity-7199712193062281218--lkw/


Second State
Rust 函数即服务
 最新文章