Chainlit应用恢复会话后ChromaDB存储的反馈未在UI显示
Chainlit反馈会话恢复后不显示的解决方案
问题根源
你当前的代码仅实现了反馈的存储逻辑,但缺少会话恢复时从ChromaDB加载历史反馈并同步到Chainlit UI的关键步骤——Chainlit的UI只会显示当前会话上下文中注册的反馈,不会自动从外部数据库拉取。
修复步骤
1. 添加历史反馈查询函数
在data_layer.py中新增根据会话ID查询反馈的方法:
async def get_feedback_by_thread_id(self, thread_id: str) -> list[dict]: # 按会话ID筛选所有反馈数据 query_results = self.collection.get(where={"thread_id": thread_id, "type": "feedback"}) feedback_list = [] # 把查询结果转换成Chainlit能识别的格式 for metadata in query_results["metadatas"] or []: feedback_list.append({ "id": metadata["id"], "forId": metadata["step_id"], "value": metadata["value"], "comment": metadata["comment"], "createdAt": metadata["createdAt"] }) return feedback_list
2. 会话初始化时同步反馈
在Chainlit主文件中,通过会话启动钩子加载并注册历史反馈:
import chainlit as cl from data_layer import YourDataLayerClass # 替换为你的数据层类名 # 初始化数据层实例 data_layer = YourDataLayerClass() @cl.on_session_start async def load_history_feedback(): # 获取当前会话ID current_thread_id = cl.context.session.id # 拉取该会话的所有历史反馈 history_feedbacks = await data_layer.get_feedback_by_thread_id(current_thread_id) # 将每个反馈注册到当前会话上下文,触发UI显示 for feedback in history_feedbacks: await cl.context.session.upsert_feedback( id=feedback["id"], for_id=feedback["forId"], value=feedback["value"], comment=feedback["comment"], created_at=feedback["createdAt"] )
3. 验证存储逻辑的正确性
确认原upsert_feedback函数中:
thread_id参数确实传入的是Chainlit会话ID(即cl.context.session.id)step_id(feedback.forId)与Chainlit对话步骤的ID完全匹配,否则反馈无法关联到对应消息
内容的提问来源于stack exchange,提问作者Akshata Urane
相关产品推荐
相关产品推荐

