- 怎么结合消息存储方法与LCEL
(因为RedischatMessageHistory组件本身是没有实现Runnable类的,也没有invoke等相关方法的,所以无法直接书写成链式语法,需要借助 RunnableWithMessageHistory 类)
from langchain_core.runnables.history import RunnableWithMessageHistory
#构建阿里云百炼大模型客户端
llm = ChatOpenAI(
model="qwen-plus"
base_url "https://dashscope_aliyunes_com/compatible-mode/v1",
openai_api_key=load_key("BAILIAN_API_KEY"),
)
runnable = RunnableWithMessageHistory(
llm,
get_session_history = lambda: history, # 匿名函数,返回history
) # 返回的 key
# 第一次聊天,清除聊天记录
history.clear()
runnable.invoke({"text":"你是谁"})
# 之后每次聊天时,会自动带上Redis中的聊天记录。
runnable.invoke({"text":"请重复一次"})
from langchain_core.runnables.history import RunnableWithMessageHistory
# 提示词模板
prompt_template = ChatPromptTemplate.from_messages([
("user", "{text}")
])
#构建阿里云百炼大模型客户端
llm = ChatOpenAI(
model="qwen-plus"
base_url "https://dashscope_aliyunes_com/compatible-mode/v1",
openai_api_key=load_key("BAILIAN_API_KEY"),
)
# 结果解析器 StrOutputParser会AIMessage 转换成为str,实际上就是获取AIMessage的content属性。
parser = StrOutputParser()
#构建链
chain = prompt_template |llm | parser
runnable = RunnableWithMessageHistory(
chain,
get_session_history = lambda: history, # 匿名函数,返回history
) # 返回的 key
# 第一次聊天,清除聊天记录
history.clear()
runnable.invoke({"text":"你是谁"})
# 之后每次聊天时,会自动带上Redis中的聊天记录。
runnable.invoke({"text":"请重复一次"})