Files
xcq/app_stream.py
2026-03-21 12:03:13 +08:00

57 lines
2.2 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import streamlit as st
import os
from dotenv import load_dotenv
from DeepseekAi import get_response_stream # 导入流式函数
# 第一步:加载.env配置必须放在最前面
load_dotenv()
API_KEY = os.getenv('api_key')
BASE_URL = os.getenv('base_url')
# 检查配置完整性
if not API_KEY or not BASE_URL:
st.error("❌ 配置缺失:请检查.env文件中的 api_key 和 base_url 是否填写正确!")
st.stop()
# 页面标题
st.title("智聊机器人")
# 初始化会话状态
if "messages" not in st.session_state:
st.session_state["messages"] = [{"role": "assistant", "content": "你好,我是智聊机器人,有什么可以帮助你的么?"}]
# 显示历史对话
for message in st.session_state.messages:
with st.chat_message(message["role"]):
st.write(message["content"])
# 处理用户输入
user_input = st.chat_input("请输入你的问题:")
if user_input:
# 1. 添加用户消息到会话状态并显示
st.session_state.messages.append({"role": "user", "content": user_input})
with st.chat_message("user"):
st.write(user_input)
# 2. 流式输出AI回复
full_response = "" # 存储完整回复
with st.chat_message("assistant"):
# 初始化思考状态赋值给status变量用于后续修改
with st.status(label="🤔 正在思考中...", expanded=True) as status:
response_placeholder = st.empty() # 只创建一次占位符
# 逐段获取流式内容
for chunk in get_response_stream(st.session_state.messages, api_key=API_KEY, base_url=BASE_URL):
full_response += chunk
# 实时更新占位符,加光标模拟打字效果
response_placeholder.markdown(full_response + "|")
# 核心修改:思考完成后更新状态文本
status.update(label="✅ 思考结束", state="complete", expanded=False)
# 3. 最终展示完整回复保留你原有逻辑未修改DOM渲染
st.markdown(full_response)
# 4. 把完整回复存入会话状态
st.session_state.messages.append({"role": "assistant", "content": full_response})