RunnableWithMessageHistory
RunnableWithMessageHistory 可以記憶對話記錄,但只存在memory,「重新再執行」,程式不會有先前的對話記錄。
使用prompt = PromptTemplate.from_template(字串)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import PromptTemplate
from langchain_core.runnables.history import RunnableWithMessageHistory
from langchain_core.chat_history import InMemoryChatMessageHistory
from langchain_google_genai import ChatGoogleGenerativeAI
prompt = PromptTemplate.from_template(
"你需要根據歷史對話記錄回覆使用者問題,歷史對話記錄:{chat_history},"
"使用者詢問:{input},請回答")
llm = ChatGoogleGenerativeAI(model="gemini-3-flash-preview", temperature=0)
str_parser = StrOutputParser()
store = {}
def get_history(session_id):
if session_id not in store:
store[session_id] = InMemoryChatMessageHistory()
return store[session_id]
chain = prompt | llm| str_parser
conversation_chain = RunnableWithMessageHistory(
chain,
get_history,
input_messages_key="input",
history_messages_key="chat_history",
)
if __name__ == "__main__":
session_config = {
"configurable":{
"session_id":"user_001",
}
}
res = conversation_chain.invoke({"input":"小明有2隻貓"},session_config)
res = conversation_chain.invoke({"input":"小花有1隻狗"},session_config)
res = conversation_chain.invoke({"input":"總共有幾隻寵物"},session_config)
print(res)
根據您提供的資訊,計算如下:
1. 小明有 **2 隻貓**。
2. 小花有 **1 隻狗**。
將兩者相加:2 + 1 = 3。
所以,他們總共有 **3 隻**寵物。
使用prompt = ChatPromptTemplate.from_messages([])
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import PromptTemplate, ChatPromptTemplate, MessagesPlaceholder
from langchain_core.runnables.history import RunnableWithMessageHistory
from langchain_core.chat_history import InMemoryChatMessageHistory
from langchain_google_genai import ChatGoogleGenerativeAI
prompt = ChatPromptTemplate.from_messages([
("system", "你需要根據歷史對話記錄回覆使用者問題"),
MessagesPlaceholder("chat_history"),
("human", "使用者詢問:{input},請回答")]
)
llm = ChatGoogleGenerativeAI(model="gemini-3-flash-preview", temperature=0)
str_parser = StrOutputParser()
store = {}
def get_history(session_id):
if session_id not in store:
store[session_id] = InMemoryChatMessageHistory()
return store[session_id]
def print_prompt(full_prompt):
print("*" * 20, full_prompt, "*" * 20)
return full_prompt
chain = prompt | print_prompt | llm | str_parser
conversation_chain = RunnableWithMessageHistory(
chain,
get_history,
input_messages_key="input",
history_messages_key="chat_history",
)
if __name__ == "__main__":
session_config = {
"configurable": {
"session_id": "user_001",
}
}
res = conversation_chain.invoke({"input":"小明有2隻貓"}, session_config)
res = conversation_chain.invoke({"input":"小花有1隻狗"}, session_config)
res = conversation_chain.invoke({"input":"總共有幾隻寵物"}, session_config)
print(res)
根據您提供的資訊,計算如下:
1. 小明有 **2 隻貓**。
2. 小花有 **1 隻狗**。
將兩者相加:2 + 1 = 3。
所以,他們總共有 **3 隻**寵物。
以下是官網範例
https://reference.langchain.com/python/langchain-core/runnables/history/RunnableWithMessageHistory