← 返回首页
多轮对话机器人实现
发表时间:2025-05-04 11:58:10
多轮对话机器人实现

1.多轮对话

多轮对话的逻辑很简单其实就是让大模型知道之前对话的内容,简单的实现就是将每次对话的内容都拼接在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!
你: