文章目录
- 简介
- 实战
- API 构建
- 访问
- curl
- request库
- 结果
- 参考资料
简介
实战
使用modelscope 下载千问7B模型,利用FastAPI部署成在线的API接口;
使用history历史对话多轮问答数据,实现多轮对话;
API 构建
import uvicorn
from fastapi import FastAPI
import os
from pydantic import BaseModel
import uvicorn, json, datetime
import torch
os.environ['CUDA_VISIBLE_DEVICES'] = "0"
from modelscope import AutoModelForCausalLM, AutoTokenizer, GenerationConfig
from typing import List, Tuple
app = FastAPI()
class Query(BaseModel):
text: str
history: list = []
model_name = "qwen/Qwen-7B-Chat"
@app.post("/chat/")
async def chat(query: Query):
global model, tokenizer # 声明全局变量以便在函数内部使用模型和分词器
messages = [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": query.text}
]
# 此处的prompt template 构建,用不用都行
text = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True
)
response, history = model.chat(
tokenizer,
text,
history=query.history,
max_length=2048, # 如果未提供最大长度,默认使用2048
top_p=0.7, # 如果未提供top_p参数,默认使用0.7
temperature=0.95 # 如果未提供温度参数,默认使用0.95
)
return {
"result": response,
"history": history
}
# 主函数入口
if __name__ == '__main__':
# 加载预训练的分词器和模型
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(model_name,
device_map="auto",
trust_remote_code=True).eval()
model.generation_config = GenerationConfig.from_pretrained(model_name,trust_remote_code=True)
model.eval() # 设置模型为评估模式
# 启动FastAPI应用
uvicorn.run(app, host='0.0.0.0', port=6006, workers=1)
访问
class Query(BaseModel):
text: str
history: list = []
在Query
类中定义了需要传递的参数名,text
和history
。
curl
!curl -X POST "http://127.0.0.1:6006/chat/" \
-H 'Content-Type: application/json' \
-d '{"text": "请问你知道我的名字和年龄吗?", "history": [["你好,我是小明,今年18岁了。", "你好,我是Qwen!"]]}'
request库
使用request
POST 传参:
import requests
import json
def get_completion(prompt, history=None):
headers = {'Content-Type': 'application/json'}
data = {
"text": prompt,
"history": history
}
response = requests.post(
url='http://127.0.0.1:6006/chat/',
headers=headers,
data=json.dumps(data))
d = response.json()
result, history = d['result'], d['history']
return result, history
history = []
while True:
key = input('>')
if key == 'q':
break
result, history = get_completion(key, history)
print(result)
结果
多轮对话效果如下:
qwen-7B,能够记住我在前面提供的姓名和年龄。还具备基本的逻辑推理能力,根据年龄推测出生的年份。
参考资料
- 利用FastAPI构建大模型接口服务
- 0基础!在云上部署Qwen大模型,实现API调用!AutoDL部署大模型实操教程!