案例:多轮对话聊天机器人

import os

from dotenv import load_dotenv  
from langchain.chat_models import init_chat_model

MAX_SESSION_NUM=10#可以保存的最大会话数  
#保存的最大会话数,如果会话数超过这个数字,将会删除最旧的会话  
def keep_session(messages, max_num):  
 #将系统提示这个会话剥离出来,他将要一直存在  
 system_messages=[]  
 #只有用户和助手的会话  
 all_session_messages=[]  
 for message in messages:  
 #如果是系统的消息,保存在system_messages中  
 if message["role"]=="system":  
 system_messages.append(message)  
 else:  
 #如果是用户或助手的消息,保存在all_session_messages中  
 all_session_messages.append(message)  
 # 保存会话一轮包括用户和助手的回复  
 session_messages = all_session_messages[-(max_num*2):]  
 #将系统消息和会话消息合并,返回  
 return system_messages + session_messages

#1.加载模型  
#1.1 将env文件读到系统环境变量中  
load_dotenv(override=True)  
#1.2 从系统环境变量中读取key和url  
DEEPSEEK_API_KEY=os.getenv("DEEPSEEK_API_KEY")  
DEEPSEEK_API_BASE=os.getenv("DEEPSEEK_API_BASE")

#1.3 初始化模型  
model=init_chat_model(  
 model="deepseek:deepseek-v4-flash",  
 api_key=DEEPSEEK_API_KEY,  
 api_base=DEEPSEEK_API_BASE  
)

#2. 维护一个消息列表,用于存储多轮对话历史  
#2.1先存放一个系统消息,告诉助手它的角色  
messages=[  
 {"role":"system","content":"你是一个AI大模型助手,你叫小p,你会耐心回答用户的问题,仔细讲解"}  
]

#2.2 开始进行多轮会话  
i=1#用来记录对话的轮数  
#一个标记符,当用户输入这个标识符,代表会话结束  
SESSION_END="quit"  
print("请输入您的问题,输入",SESSION_END,"代表会话结束")  
#一个无线循环,只要循环不结束,将会一直进行对话  
while True:
#一个提示信息,来说明这是第几轮对话  
print("\n","="*10,f"第{i}轮对话开始","="*10,"\n")  

#接受用户的输入消息  
user_input=input("请输入:")  

#判断用户是否想要结束会话  
if user_input == SESSION_END:  
    print("会话结束")  
    break  

#将用户的输入消息加入会话列表中  
messages.append({"role":"user","content":user_input})  

# 如果每轮消息都保存,会导致内存溢出,所以我们只保留几轮对话的记忆  
session_memory = keep_session(messages, max_num=MAX_SESSION_NUM)  

AI_reponse=""#AI回复的消息  
print("小p说:",end="",flush=True)  
#模型的回复  
for chunk in model.stream(session_memory):#model.stream使用流式输出  
    if chunk.content:  
        #end=""不自动换行,flush=True:立即输出  
        print(chunk.content,end="",flush=True)  
        AI_reponse+=chunk.content  

print("\n","="*10,f"第{i}轮对话结束","="*10,"\n")  

#对话轮数加一  
i=i+1  

#将助手回复的消息也加入会话列表  
messages.append({"role":"assistant","content":AI_reponse})

运行的结果:
在这里插入图片描述

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐