前言

之前已经完成了ChatGLM2-6B的本地部署,但是只能直接使用,而不能接入自己的程序。

官方也提供了API的启动文件,本文将会记录API的使用方法。

在阅读之前确保已完成本地部署开源语言模型ChatGLM2-6b

准备

官方提供两种格式的API启动脚本,一种是HTTP形式的接口,一种是OpenAI格式的流式API,分别是api.pyopenai_api.py

安装额外依赖

1
2
# 使用openai_api.py需要安装这两个包
pip install fastapi uvicorn

修改启动文件

如果系统为Windows则需要将api.pyopenai_api.py中的THUDM/chatglm2-6b修改为THUDM\chatglm2-6b

启动

HTTP

使用以下指令启动HTTP的API脚本(自行替换项目目录)

1
2
3
4
5
6
# 进入到项目目录
cd D:\ChatGLM2-6B
# 激活环境
conda activate D:\ChatGLM2-6B\ENV
# 运行
python api.py

出现以下内容即表示启动成功

image-20240126161714790

根据不同的终端测试API

请求

1
curl -X POST http://127.0.0.1:8000 -H "Content-Type: application/json" -d "{\"prompt\": \"你好\", \"history\": []}"

响应(经过格式美化)

1
2
3
4
5
6
7
8
9
10
11
{
"response":"你好👋!我是人工智能助手 ChatGLM2-6B,很高兴见到你,欢迎问我任何问题。",
"history":[
[
"你好",
"你好👋!我是人 工智能助手 ChatGLM2-6B,很高兴见到你,欢迎问我任何问题。"
]
],
"status":200,
"time":"2024-01-26 16:20:04"
}

请求

1
2
3
$body = '{"prompt": "你好", "history": []}'
$headers = @{"Content-Type" = "application/json"}
Invoke-RestMethod -Method POST -Uri http://127.0.0.1:8000 -Body $body -Headers $headers

响应(这里回答英文的原因可能是字符集的问题,接口接收消息时乱码了,导致默认返回英文。)

1
2
3
response                           history                                 status time
-------- ------- ------ ----
Hello! How can I assist you today? {?? Hello! How can I assist you today?} 200 2024-01-26 16:29:43

未经测试,通过官方文档得知

请求

1
2
3
curl -X POST "http://127.0.0.1:8000" \
-H 'Content-Type: application/json' \
-d '{"prompt": "你好", "history": []}'

响应

1
2
3
4
5
6
{
"response":"你好👋!我是人工智能助手 ChatGLM2-6B,很高兴见到你,欢迎问我任何问题。",
"history":[["你好","你好👋!我是人工智能助手 ChatGLM2-6B,很高兴见到你,欢迎问我任何问题。"]],
"status":200,
"time":"2023-03-23 21:38:40"
}

OpenAI流式

使用以下指令启动OpenAI格式的流式API脚本(自行替换项目目录)

1
2
3
4
5
6
# 进入到项目目录
cd D:\ChatGLM2-6B
# 激活环境
conda activate D:\ChatGLM2-6B\ENV
# 运行
python openai_api.py

出现以下内容即表示启动成功

image-20240126164204333

使用python脚本测试API,脚本内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
import openai
if __name__ == "__main__":
openai.api_base = "http://localhost:8000/v1"
openai.api_key = "none"
for chunk in openai.ChatCompletion.create(
model="chatglm2-6b",
messages=[
{"role": "user", "content": "你好"}
],
stream=True
):
if hasattr(chunk.choices[0].delta, "content"):
print(chunk.choices[0].delta.content, end="", flush=True)

可以在项目目录下创建一个openai_api_test.py文件来装载以上内容,然后使用ChatGLM的环境来运行此脚本

1
2
3
4
5
6
# 进入到项目目录
cd D:\ChatGLM2-6B
# 激活环境
conda activate D:\ChatGLM2-6B\ENV
# 运行
python openai_api_test.py

如果提示No module named 'openai',说明没有安装第三方包,执行pip install openai==0.28.0并重启终端(博主是重启终端后才生效)后再执行脚本。

执行成功后终端会打印如下内容:

1
你好👋!我是人工智能助手 ChatGLM2-6B,很高兴见到你,欢迎问我任何问题。

参考文档

官方README文档