From db09a52fd38203915cba5680c43c84ddfce62d34 Mon Sep 17 00:00:00 2001 From: msb_31955 Date: Tue, 17 Feb 2026 19:29:38 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A8=A1=E6=8B=9F=E6=9C=BA=E5=99=A8=E4=BA=BA?= =?UTF-8?q?=201=E3=80=81=E5=AE=8C=E6=88=90=E8=81=8A=E5=A4=A9=E4=B8=8A?= =?UTF-8?q?=E4=B8=8B=E6=96=87=E4=BF=9D=E5=AD=98=E3=80=82=202=E3=80=81?= =?UTF-8?q?=E5=AE=8C=E6=88=90=E4=B8=8A=E4=B8=8B=E6=96=87=E5=9F=BA=E4=BA=8E?= =?UTF-8?q?sqlite=E4=BF=9D=E5=AD=98=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + ...> 01-实现消息上下文记录保存.py} | 0 ...关系型数据库保存聊天上下文.py | 65 +++++++++++++++++++ 3 files changed, 66 insertions(+) rename 04-多模态机器人案例/{01-Demo01-实现消息上下文记录保存.py => 01-实现消息上下文记录保存.py} (100%) create mode 100644 04-多模态机器人案例/02-关系型数据库保存聊天上下文.py diff --git a/.gitignore b/.gitignore index 8a65374..cc8e1ac 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ __pycache__ +*.db \ No newline at end of file diff --git a/04-多模态机器人案例/01-Demo01-实现消息上下文记录保存.py b/04-多模态机器人案例/01-实现消息上下文记录保存.py similarity index 100% rename from 04-多模态机器人案例/01-Demo01-实现消息上下文记录保存.py rename to 04-多模态机器人案例/01-实现消息上下文记录保存.py diff --git a/04-多模态机器人案例/02-关系型数据库保存聊天上下文.py b/04-多模态机器人案例/02-关系型数据库保存聊天上下文.py new file mode 100644 index 0000000..a9ea4b5 --- /dev/null +++ b/04-多模态机器人案例/02-关系型数据库保存聊天上下文.py @@ -0,0 +1,65 @@ +from langchain_community.chat_message_histories import SQLChatMessageHistory +from langchain_core.chat_history import InMemoryChatMessageHistory +from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder +from langchain_core.runnables import RunnableWithMessageHistory +from langchain_openai import ChatOpenAI + + +from env_util import DASHSCOPE_API_KEY, DASHSCOPE_BASE_URL + +# 0、llm~~ +llm = ChatOpenAI( + model = "qwen-plus", + base_url=DASHSCOPE_BASE_URL, + api_key=DASHSCOPE_API_KEY, + temperature=0.8, +); + +# =============================================================================================== + +# 1、定义专门做聊天的提示词模板 +prompt = ChatPromptTemplate.from_messages([ + ('system', '你是一个乐于助人的助手。尽你所能回答所有问题。提供的聊天历史包含与你对话用户的相关信息。'), # 系统提示词 + MessagesPlaceholder(variable_name='chat_history', optional=True), #消息占位符 + ('human', '{input}') #用户提示词,input用户传的问题 +]) + +chain = prompt | llm; + +# =============================================================================================== +# 2、存储聊天记录: 存的谁?存的第10行的内容(存到哪里?内存、关系型数据库或者redis数据库) + +store = {} + +def get_session_history(session_id: str): + """从关系型数据库的历史消息列表中 返回当前会话 的所有历史消息""" + # SQLChatMessageHistory是langchain提供的 + return SQLChatMessageHistory( + session_id=session_id, + # 这里url换为自己的数据库即可 + connection_string='sqlite:///chat_history.db', + ) + + + +# =============================================================================================== +# 3、创建带历史记录功能的处理链,帮我自动存储历史记录 + +chain_with_message_history = RunnableWithMessageHistory( + chain, # 基础执行链 + get_session_history, # 指定工厂函数,返回指定session_id的聊天记录 + input_messages_key='input', # 指定用户输入的消息的key + history_messages_key='chat_history', # 历史消息记录的key +) + +# =============================================================================================== +#4、 测试 +# result1 = chain_with_message_history.invoke({'input': '你好,我是郑金维!'}, config={"configurable": {"session_id": "user123"}}) +# print(result1) + + +result2 = chain_with_message_history.invoke({'input': '我的名字叫什么?'}, config={"configurable": {"session_id": "user123"}}) +print(result2) + +# result3 = chain_with_message_history.invoke({'input': '历史上,和我同名的人有哪些?'}, config={"configurable": {"session_id": "user123"}}) +# print(result3) \ No newline at end of file