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

如何在Streamlit中用streamlit_chat实现类ChatGPT流式响应?

在Streamlit中用streamlit_chat实现ChatGPT式流式响应

streamlit_chat的message组件本身没有内置streaming=True参数,但可以结合Streamlit的流式输出能力和会话状态(session_state)实现类似ChatGPT的逐字/逐块响应效果,以下是具体实现方案:

实现思路

  1. 维护会话状态,区分历史消息和正在生成的流式消息
  2. 使用st.empty()创建占位符,实时更新流式输出的内容
  3. 流式获取LLM的响应内容,逐块拼接并更新占位符,完成后将完整内容存入历史消息列表

完整代码示例

from streamlit_chat import message
import streamlit as st
import time

# 初始化会话状态
if 'past' not in st.session_state:
    st.session_state['past'] = []
if 'generated' not in st.session_state:
    st.session_state['generated'] = []
if 'current_stream' not in st.session_state:
    st.session_state['current_stream'] = ""

# 模拟LLM流式响应(实际场景替换为真实接口调用)
def stream_response(prompt):
    response_text = "这是模拟的流式响应内容,会逐块输出展示。"
    for chunk in response_text:
        time.sleep(0.1)
        yield chunk

# 用户输入区域
user_input = st.text_input("输入你的问题:", key="input")

if user_input:
    # 保存用户消息到历史
    st.session_state['past'].append(user_input)
    # 清空当前流式内容
    st.session_state['current_stream'] = ""
    
    # 创建流式消息的占位符
    stream_placeholder = st.empty()
    
    # 流式获取响应并更新占位符
    for chunk in stream_response(user_input):
        st.session_state['current_stream'] += chunk
        # 用message组件渲染当前流式内容(模拟AI消息样式)
        stream_placeholder.markdown(message(st.session_state['current_stream'], key="stream_temp", is_user=False, avatar_style="bottts", seed=42))
    
    # 流式完成后,将完整内容存入历史消息
    st.session_state['generated'].append(st.session_state['current_stream'])
    # 清空临时流式内容
    st.session_state['current_stream'] = ""

# 渲染历史对话
for i in range(len(st.session_state['generated']) - 1, -1, -1):
    message(st.session_state['past'][i], is_user=True, key=str(i) + '_user')
    message(st.session_state["generated"][i], key=str(i))

关键说明

  • 会话状态管理:通过current_stream临时存储正在生成的流式内容,避免历史消息重复渲染
  • 占位符更新:st.empty()允许我们实时替换该位置的内容,实现流式滚动效果
  • 组件复用:历史消息仍使用你原有的循环逻辑,流式消息在生成过程中单独渲染,完成后加入历史列表

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 15:12:24