跳到主要内容

使用AutoGen进行本地LLMs

· 3 min read
Jiale Liu

简而言之: 我们演示了如何使用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

# create a text completion request
response = oai.Completion.create(
config_list=[
{
"model": "chatglm2-6b",
"base_url": "http://localhost:8000/v1",
"api_type": "openai",
"api_key": "NULL", # just a placeholder
}
],
prompt="Hi",
)
print(response)

# create a chat completion request
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": "Hi"}]
)
print(response)

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

与多个本地LLMs交互

如果您想在本地机器上与多个LLMs进行交互,请将上面的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

# create a chat completion request
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)

进一步阅读