You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Streamlit应用中为两个LlamaIndex聊天机器人分离会话状态

解决Streamlit多聊天机器人独立会话状态问题

问题核心是两个聊天机器人共用了同一个st.session_state.messages变量,导致切换时聊天记录互相干扰。要让每个机器人独立维护会话,只需要给每个机器人分配专属的会话存储键即可。

具体修改步骤:

  1. 给聊天机器人设置唯一标识
    添加一个选择控件让用户切换机器人,比如下拉框,每个机器人对应一个唯一ID(可关联它们的索引或文件名)。

  2. 改用动态会话键存储消息
    把原来全局的messages改成带机器人标识的动态键,比如st.session_state[f"messages_{selected_bot}"],这样每个机器人的聊天记录会存在独立的会话变量里。

  3. 调整所有会话相关逻辑
    初始化、读取、添加消息时,都使用当前选中机器人对应的会话键。

修改后的完整代码示例:

# 假设你有两个索引对应两个机器人,用下拉框让用户选择
bots = {
    "Bot 1 (File A)": index_a,
    "Bot 2 (File B)": index_b
}
selected_bot_name = st.selectbox("选择聊天机器人", options=list(bots.keys()))
selected_index = bots[selected_bot_name]
chat_engine = selected_index.as_chat_engine(verbose=True)

# 生成当前机器人专属的会话键
session_key = f"messages_{selected_bot_name}"

# 初始化当前机器人的会话记录(仅当不存在时)
if session_key not in st.session_state.keys():
    # 根据机器人调整欢迎语,关联对应文件名
    file_name = selected_bot_name.split("(")[1].strip(")")
    st.session_state[session_key] = [
        {"role": "assistant", "content": "Hi, Welcome to KnowledgeGPT"},
        {"role": "assistant", "content": f"Ask me questions from {file_name}"}
    ]

# 用户输入处理
if prompt := st.chat_input("Your question"):
    st.session_state[session_key].append({"role": "user", "content": prompt})

# 展示当前机器人的聊天记录
for message in st.session_state[session_key]:
    with st.chat_message(message["role"]):
        st.write(message["content"])

# 生成助手回复(仅当最后一条消息是用户发送的)
if st.session_state[session_key][-1]["role"] != "assistant":
    with st.chat_message("assistant"):
        with st.spinner("Thinking..."):
            response = chat_engine.chat(prompt)
            st.write(response.response)
            message = {"role": "assistant", "content": response.response}
            st.session_state[session_key].append(message)

关键改动说明:

  • 用selected_bot_name作为标识生成唯一的session_key,确保每个机器人的会话数据完全隔离
  • 初始化和操作消息列表时,都针对当前机器人的session_key进行,不再共用全局变量
  • 切换机器人时,会自动加载对应机器人的专属聊天记录,互不干扰

内容的提问来源于stack exchange,提问作者Saksham S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 09:01:07