Streamlit + LangChain 1.0 简单实现智能问答前后端

Streamlit + LangChain 1.0 简单实现智能问答前后端

概述

Streamlit 是一款专为数据科学家和机器学习工程师设计的 Python 库,可快速将数据脚本转换为交互式 Web 应用,无需前端开发经验,所以最近研究了一下,结合LangChain 1.0 实现了简单的智能问答前后端应用,大模型使用DeepSeek。

依赖库

  • streamlit:用于构建Web交互界面
  • langchain 及相关组件:处理LLM交互逻辑
  • python-dotenv:加载环境变量,比如加载存储在配置文件中的API KEY。

Highlight code

1. 初始化配置

# 加载环境变量
load_dotenv()

# 配置页面
st.set_page_config(
    page_title="DeepSeek 问答应用",
    page_icon="🤖",
    layout="wide",
    initial_sidebar_state="expanded"
)
  • 使用 load_dotenv() 加载 .env 文件中的环境变量
  • st.set_page_config() 配置页面基本属性,包括标题、图标和布局

2. 页面UI构建

# 设置页面标题和说明
st.title("🤖 DeepSeek 智能问答应用")
st.markdown("使用 LangChain 1.0 和 Streamlit 构建的对话系统")
  • 通过 st.title()st.markdown() 设置页面标题和说明文字

3. 侧边栏配置

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 创建侧边栏配置区域
  • 提供API密钥输入框(密码类型),默认从环境变量获取
  • 实现清除对话历史功能,通过操作 st.session_state 实现

4. 对话历史管理

# 初始化对话历史
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 存储对话历史,实现页面刷新后数据保留
  • 区分用户消息(HumanMessage)和助手消息(AIMessage)并分别显示

5. 用户输入处理

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() 获取用户输入
  • 进行API密钥验证,确保调用模型前密钥已配置
  • 将用户消息添加到历史记录并显示

6. AI响应生成

# 显示助手思考中状态
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模型
  • 使用LangChain 1.0的链(Chain)语法:prompt | chat_model | StrOutputParser()
  • 异常处理确保错误时能友好提示用户

关键技术点

  1. Streamlit 会话状态:利用 st.session_state 保存对话历史,实现状态管理
  2. LangChain 1.0 链语法:采用新的管道运算符 | 构建处理流程
  3. 消息类型区分:使用 HumanMessageAIMessage 区分不同角色的消息
  4. API 密钥管理:支持环境变量和手动输入两种方式配置API密钥
  5. 错误处理:完善的异常捕获和用户提示

运行

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。

内容概要:本文为《科技类企业品牌传播白皮书》,系统阐述了新闻媒体发稿、自媒体博主种草与短视频矩阵覆盖三大核心传播策略,并结合“传声港”平台的AI工具与资源整合能力,提出适配科技企业的品牌传播解决方案。文章深入分析科技企业传播的特殊性,包括受众圈层化、技术复杂性与传播通俗性的矛盾、产品生命周期影响及2024-2025年传播新趋势,强调从“技术输出”向“价值引领”的战略升级。针对三种传播方式,分别从适用场景、操作流程、效果评估、成本效益、风险防控等方面提供详尽指南,并通过平台AI能力实现资源智能匹配、内容精准投放与全链路效果追踪,最终构建“信任—种草—曝光”三位一体的传播闭环。; 适合人群:科技类企业品牌与市场负责人、公关传播从业者、数字营销管理者及初创科技公司创始人;具备一定品牌传播基础,关注效果可量化与AI工具赋能的专业人士。; 使用场景及目标:①制定科技产品全生命周期的品牌传播策略;②优化媒体发稿、KOL合作与短视频运营的资源配置与ROI;③借助AI平台实现传播内容的精准触达、效果监测与风险控制;④提升品牌在技术可信度、用户信任与市场影响力方面的综合竞争力。; 阅读建议:建议结合传声港平台的实际工具模块(如AI选媒、达人匹配、数据驾驶舱)进行对照阅读,重点关注各阶段的标准化流程与数据指标基准,将理论策略与平台实操深度融合,推动品牌传播从经验驱动转向数据与工具双驱动。
<think> 根据用户当前需求,需要调整选题方向:使用Python语言,结合StreamlitLangChain框架的信息安全毕业设计选题。需注意: 1. Streamlit用于构建Web应用界面,LangChain用于集成大语言模型(LLM)能力 2. 选题需突出信息安全领域的应用场景 3. 保持技术可行性,避免过度复杂的理论 调整思路: - 利用LangChain处理安全文本分析(日志/漏洞描述/策略文件) - Streamlit实现可视化交互界面 - 聚焦安全运维、威胁情报、安全策略等场景 新选题方案: </think> 以下是结合Python语言、StreamlitLangChain框架的信息安全方向毕业设计选题推荐(每个方案均包含技术组合和应用场景): --- ### 一、智能安全分析平台 1. **基于LangChain的安全日志智能分析系统** - 使用LangChain连接LLM与安全数据库,实现自然语言查询日志 - Streamlit构建可视化面板,支持动态展示攻击模式 - 核心技术: ```python # LangChain日志分析链示例 from langchain.chains import LLMChain log_analyzer = LLMChain( prompt=PromptTemplate("分析日志{log}中的异常行为"), llm=ChatOpenAI(temperature=0) ) ``` - 创新点:支持自然语言询问如“显示过去24小时SQL注入攻击”[^1] 2. **威胁情报知识图谱构建工具** - 利用LangChain抽取APT报告实体(攻击组织/TTPs/IoC) - Streamlit实现交互式图谱探索,支持节点关系溯源 - 数据流: $$ \text{PDF报告} \xrightarrow{\text{LangChain}} \text{Neo4j图数据库} \xrightarrow{\text{Streamlit}} \text{可视化查询} $$ --- ### 二、自动化渗透测试助手 3. **渗透测试报告生成系统** - LangChain自动解析Nmap/Burp扫描结果 - Streamlit生成交互式漏洞报告,含修复建议优先级 - 功能模块: | 输入 | 处理引擎 | 输出 | |------------|---------------|--------------------| | 扫描结果 | LangChain解析 | CVSS评分+PoC示例 | | 用户选择 | Streamlit交互 | 定制化修复方案 | 4. **钓鱼邮件检测训练平台** - LangChain生成自适应钓鱼邮件样本库 - Streamlit展示检测模型性能指标(精确率/召回率) - 核心算法: $$ F1 = 2 \times \frac{\text{precision} \times \text{recall}}{\text{precision} + \text{recall}} $$ --- ### 三、隐私保护应用 5. **隐私政策合规性分析器** - LangChain解析GDPR/HIPAA条款,比对用户隐私政策文本 - Streamlit可视化风险热点图(如数据保留条款缺陷) - 技术栈:`spaCy` + `LangChain` + `Streamlit` 6. **数据脱敏效果评估系统** - LangChain模拟重识别攻击,测试脱敏数据安全性 - Streamlit对比原始/脱敏数据分布差异 - 评估指标:$k\text{-匿名度}$,$l\text{-多样性}$[^2] --- ### 四、新型防御方案 7. **AI驱动的WAF规则生成器** - LangChain学习Web攻击样本,自动生成ModSecurity规则 - Streamlit模拟规则测试沙盒(支持OWASP Top 10用例) ```python # Streamlit组件示例 st.code(generated_rule, language="apache") st.button("测试SQLi防护效果") ``` 8. **安全意识培训模拟器** - LangChain生成社交工程攻击对话(钓鱼/话术欺骗) - Streamlit构建角色扮演界面,实时反馈防御行为评分 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值