Skip to main content

使用 AutoGen 进行本地 LLM 应用

· 3 min read
Jiale Liu

TL;DR: 我们演示了如何使用 AutoGen 进行本地 LLM 应用。以 FastChat 为例,我们将使用 ChatGLMv2-6b 进行端点初始化和推理。

准备工作

克隆 FastChat

FastChat 提供了与 OpenAI 兼容的 API,因此您可以将 FastChat 用作本地的 OpenAI API 替代品。但是,为了使其正常工作,需要对其代码进行轻微修改。

git clone https://github.com/lm-sys/FastChat.git
cd FastChat

下载检查点

ChatGLM-6B 是基于通用语言模型 (GLM) 框架的开放式双语语言模型,具有 62 亿个参数。ChatGLM2-6B 是其第二代版本。

在从 HuggingFace Hub 下载之前,您需要安装 Git LFS (安装说明)

git clone https://huggingface.co/THUDM/chatglm2-6b

启动服务器

首先,启动控制器

python -m fastchat.serve.controller

然后,启动模型工作进程

python -m fastchat.serve.model_worker --model-path chatglm2-6b

最后,启动 RESTful API 服务器

python -m fastchat.serve.openai_api_server --host localhost --port 8000

通常情况下,这将正常工作。但是,如果遇到像 这样的 错误,可以通过在 fastchat/protocol/api_protocol.pyfastchat/protocol/openai_api_protocol.py 中注释掉所有包含 finish_reason 的行来解决问题。修改后的代码如下所示:

class CompletionResponseChoice(BaseModel):
index: int
text: str
logprobs: Optional[int] = None
# finish_reason: Optional[Literal["stop", "length"]]

class CompletionResponseStreamChoice(BaseModel):
index: int
text: str
logprobs: Optional[float] = None
# finish_reason: Optional[Literal["stop", "length"]] = None

使用 oai.Completion 与模型交互(需要 openai<1)

现在,可以通过 openai-python 库以及 autogen.oai.Completionautogen.oai.ChatCompletion 直接访问模型。

from autogen import oai

# 创建一个文本补全请求
response = oai.Completion.create(
config_list=[
{
"model": "chatglm2-6b",
"base_url": "http://localhost:8000/v1",
"api_type": "openai",
"api_key": "NULL", # 只是一个占位符
}
],
prompt="你好",
)
print(response)

# 创建一个对话补全请求
response = oai.ChatCompletion.create(
config_list=[
{
"model": "chatglm2-6b",
"base_url": "http://localhost:8000/v1",
"api_type": "openai",
"api_key": "NULL",
}
],
messages=[{"role": "user", "content": "你好"}]
)
print(response)

如果您想切换到不同的模型,请下载它们的检查点,并在启动模型工作器时指定模型路径。

与多个本地 LLM 进行交互

如果您想与本地机器上的多个 LLM 进行交互,请将上面的 model_worker 步骤替换为多模型变体:

python -m fastchat.serve.multi_model_worker \
--model-path lmsys/vicuna-7b-v1.3 \
--model-names vicuna-7b-v1.3 \
--model-path chatglm2-6b \
--model-names chatglm2-6b

推理代码如下:

from autogen import oai

# 创建一个聊天完成请求
response = oai.ChatCompletion.create(
config_list=[
{
"model": "chatglm2-6b",
"base_url": "http://localhost:8000/v1",
"api_type": "openai",
"api_key": "NULL",
},
{
"model": "vicuna-7b-v1.3",
"base_url": "http://localhost:8000/v1",
"api_type": "openai",
"api_key": "NULL",
}
],
messages=[{"role": "user", "content": "Hi"}]
)
print(response)

进一步阅读