




























Streamlit 是一款专为数据科学家和机器学习工程师设计的 Python 库,可快速将数据脚本转换为交互式 Web 应用,无需前端开发经验,所以最近研究了一下,结合LangChain 1.0 实现了简单的智能问答前后端应用,大模型使用DeepSeek。
streamlit:用于构建Web交互界面langchain 及相关组件:处理LLM交互逻辑python-dotenv:加载环境变量,比如加载存储在配置文件中的API KEY。# 加载环境变量
load_dotenv()
# 配置页面
st.set_page_config(
page_title="DeepSeek 问答应用",
page_icon="🤖",
layout="wide",
initial_sidebar_state="expanded"
)
load_dotenv() 加载 .env 文件中的环境变量st.set_page_config() 配置页面基本属性,包括标题、图标和布局# 设置页面标题和说明
st.title("🤖 DeepSeek 智能问答应用")
st.markdown("使用 LangChain 1.0 和 Streamlit 构建的对话系统")
st.title() 和 st.markdown() 设置页面标题和说明文字with st.sidebar:
st.header("配置选项")
# API 密钥配置
deepseek_api_key = st.text_input(
"DeepSeek API Key",
value=os.getenv("DEEPSEEK_API_KEY", ""),
type="password",
help="请输入您的 DeepSeek API Key"
)
# 清除对话历史按钮
if st.button("清除对话历史", type="secondary"):
st.session_state["messages"] = []
st.rerun()
st.sidebar 创建侧边栏配置区域st.session_state 实现# 初始化对话历史
if "messages" not in st.session_state:
st.session_state["messages"] = []
# 显示对话历史
for message in st.session_state["messages"]:
if isinstance(message, HumanMessage):
with st.chat_message("user"):
st.markdown(message.content)
elif isinstance(message, AIMessage):
with st.chat_message("assistant"):
st.markdown(message.content)
st.session_state 存储对话历史,实现页面刷新后数据保留user_input = st.chat_input("请输入您的问题...")
if user_input:
# 验证API密钥
if not deepseek_api_key:
st.error("请在侧边栏配置您的 DeepSeek API Key")
st.stop()
# 添加用户消息到会话历史
st.session_state["messages"].append(HumanMessage(content=user_input))
# 显示用户消息
with st.chat_message("user"):
st.markdown(user_input)
st.chat_input() 获取用户输入# 显示助手思考中状态
with st.chat_message("assistant"):
with st.spinner("正在思考..."):
chat_model=init_chat_model(model="deepseek:deepseek-chat")
# 创建提示模板
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个智能助手,使用中文回答用户问题,保持友好和专业。"),
*st.session_state["messages"]
])
# 创建链
chain = prompt | chat_model | StrOutputParser()
try:
# 生成回答
response = chain.invoke({})
# 显示回答
st.markdown(response)
# 添加助手消息到会话历史
st.session_state["messages"].append(AIMessage(content=response))
except Exception as e:
st.error(f"请求失败: {str(e)}")
st.error("请检查您的API密钥或网络连接")
st.spinner() 显示加载状态,提升用户体验init_chat_model() 初始化DeepSeek模型prompt | chat_model | StrOutputParser()st.session_state 保存对话历史,实现状态管理| 构建处理流程HumanMessage 和 AIMessage 区分不同角色的消息streamlit run LC_RAG_07a_Streamlit.py
run后面替换成自己的文件名就可以启动运行。
完整版本的代码可以在如下位置找到:
https://github.com/microsoftbi/Langchain_DEMO/blob/main/RAG/LC_RAG_07a_Streamlit.py
相对Vue,steamlit的学习成本更低一些。适合独立的开发和学习。但是在生产中主流还是更推荐Vue等前端框架,尤其在细节的前端定制化开发中。
后续可以扩充下比如streamlit如何响应langchain的middleware等功能,比如HITL。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。