【RAG 项目实战 04】添加多轮对话能力
NLP Github 项目:
-
NLP 项目实践:fasterai/nlp-project-practice
介绍:该仓库围绕着 NLP 任务模型的设计、训练、优化、部署和应用,分享大模型算法工程师的日常工作和实战经验
-
AI 藏经阁:https://gitee.com/fasterai/ai-e-book
介绍:该仓库主要分享了数百本 AI 领域电子书
-
AI 算法面经:fasterai/nlp-interview-handbook#面经
介绍:该仓库一网打尽互联网大厂NLP算法面经,算法求职必备神器
-
NLP 剑指Offer:https://gitee.com/fasterai/nlp-interview-handbook
介绍:该仓库汇总了 NLP 算法工程师高频面题
[!NOTE] 添加多轮对话能力
- 存储对话历史
- 添加
session_id
- 提示模板中添加
chat_history
- 用
RunnableWithMessageHistory
包装 Chain 添加对话历史能力- 配置中使用
session_id
进行大模型交互,可以根据session_id
区分不同用户的对话历史
一、添加多轮对话能力
01 存储对话历史
# 存储对话历史
store = {}
def get_session_history(session_id: str) -> BaseChatMessageHistory:
if session_id not in store:
store[session_id] = ChatMessageHistory()
return store[session_id]
02 添加 session_id
# 添加 session_id
cl.user_session.set('session_id', 'abc2')
03 在提示模板中添加 chat_history
# 添加 session_id
cl.user_session.set('session_id', 'abc2')
# 提示模板中添加 chat_history
prompt = ChatPromptTemplate.from_messages(
[
(
"system",
"You're a very knowledgeable historian who provides accurate and eloquent answers to historical questions.",
),
MessagesPlaceholder("chat_history"),
("human", "{question}"),
]
)
04 使用 RunnableWithMessageHistory
包装 Chain
# 获取当前的 session_id
session_id = cl.user_session.get("session_id")
# 用 RunnableWithMessageHistory 包装 Chain 添加对话历史能力
runnable_with_history = RunnableWithMessageHistory(
runnable,
get_session_history,
input_messages_key="question",
history_messages_key="chat_history",
)
05 使用 session_id
进行大模型交互
msg = cl.Message(content="")
# 配置中使用 session_id 进行大模型交互
async for chunk in runnable_with_history.astream(
{"question": message.content},
config=RunnableConfig(configurable={"session_id": session_id},
callbacks=[cl.LangchainCallbackHandler()])
):
await msg.stream_token(chunk)
await msg.send()
Tips:用 RunnableWithMessageHistory 包装 Chain 添加对话历史能力,不能将其插入到 Chain 中
二、效果展示
标签:RAG,多轮,04,cl,session,添加,id,history From: https://www.cnblogs.com/fasterai/p/18564937