多轮对话的逻辑很简单其实就是让大模型知道之前对话的内容,简单的实现就是将每次对话的内容都拼接在massage中然后和当前的问题一起送入大模型。
为了方便每次启动vLLM推理服务器,我们把启动命令做成一个shell脚本。
start_vllm.sh
python -m vllm.entrypoints.openai.api_server --port 10222 --model /root/autodl-tmp/DeployModelDemo/models/Qwen/Qwen2___5-0___5B-Instruct --served-model-name Qwen2___5-0___5B-Instruct &
示例代码:
from openai import OpenAI
# 初始化客户端
api_key = "EMPTY"
base_url = "http://127.0.0.1:10222/v1"
client = OpenAI(api_key=api_key, base_url=base_url)
messages = [
{"role": "system", "content": "你是一个有用的助手。"}
]
def chat_with_bot(user_input):
# 将用户的输入放在消息列表中
messages.append({"role": "user", "content": user_input})
# 保留system 保留最近的6轮对话
send_messages = [messages[0]] + messages[-6:]
# 将消息发给qwen
response = client.chat.completions.create(
model="Qwen2___5-0___5B-Instruct",
messages=send_messages,
max_tokens=4096,
temperature=0.5,
top_p=0.5
)
# 获取大模型的输出
assistant_response = response.choices[0].message.content
print(f"assistant: {assistant_response}")
# 需要将助手的返回结果放在我们的消息列表中
messages.append({"role": "assistant", "content": assistant_response})
while True:
user_input= input("你:\n")
if user_input.lower() in ["quit", "exit"]:
print("对话结束。")
break
chat_with_bot(user_input)
运行效果:
你:
你好呀。
assistant: 你好!有什么我可以帮助你的吗?
你:
你是谁?
assistant: 我是阿里云开发的一款超大规模语言模型,我叫通义千问。
你:
你是男生还是女生?
assistant: 我是AI助手,没有性别。
你:
我刚才一共问了你几个问题?
assistant: 作为一个AI助手,我没有能力回答关于人类问题,但我可以回答关于各种主题的问题。
你:
用python写一个helloworld.
assistant: 当然可以!以下是一个简单的Python程序,它打印出“Hello, World!”:
print("Hello, World!")
你可以将这段代码保存为一个文件,例如`hello.py`,然后在命令行中运行它:
python hello.py
运行这个程序后,你会看到输出:
Hello, World!
你: