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.py
和 fastchat/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.Completion
和 autogen.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)