多轮对话实现

接上一篇博文,简单实现了API调用,这篇记录一下多轮对话,以及使用流模式输出的过程。

从官方文档得知API 是一个“无状态” API,即服务端不记录用户请求的上下文,用户在每次请求时,需将之前所有对话历史拼接好后,传递给对话 API。

以两次会话为例:

第一次

[

        {'role': 'system', 'content': '你是一个知识渊博的助手,请帮助用户解答问题'},

        {'role': 'user', 'content': '1+1等于几'}

]

第二次,注意要把assistant的回复也加进去

[

        {'role': 'system', 'content': '你是一个知识渊博的助手,请帮助用户解答问题'},

        {'role': 'user', 'content': '1+1等于几'},

        {'role': 'assistant', 'content': '1+1等于2。这是基本的数学加法运算。'},

        {'role': 'user', 'content': '2+2等于几'}

如此重复循环就可以完成任意轮对话,并且模型可以“记住”前面的对话,附关键代码片段(使用流模式输出,提升用户体验)

messages = [
        {"role": "system", "content": "你是一个知识渊博的助手,请帮助用户解答问题"},
    ]
i = 0
print("请输入任意问题后开始对话,输入exit退出。")
while True:
    assistantOutput = ""
    i = i + 1
    userInput = input(f"{i}.问:")
    if userInput.lower() == "exit" :
        break;
    else:
        messages.append({"role": "user", "content": userInput})
        response = client.chat.completions.create(
            model="deepseek-chat",
            messages = messages,
            stream=True,  # 流式
        )
        print(f"{i}.答:", end="",flush=True)
        for chunk in response:
            assistantOutput += chunk.choices[0].delta.content
            print(chunk.choices[0].delta.content,end='',flush=True) #输出实时刷新
        print("")
        messages.append({"role": "assistant", "content": assistantOutput})

 

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐