公司动态

Streamlit + LangChain LCEL + OpenAI 对话 Demo,实现网页端问答程序

📅 2026/7/22 12:59:40
Streamlit + LangChain LCEL + OpenAI 对话 Demo,实现网页端问答程序
# 导入LangChain核心组件 from langchain_openai import ChatOpenAI from langchain_core.prompts import ChatPromptTemplate from langchain_core.output_parsers import StrOutputParser # 网页框架 环境变量工具 import streamlit as st import os from dotenv import load_dotenv # 加载.env文件里面的密钥 load_dotenv() # 读取.env中的OpenAI密钥设置为系统环境变量 os.environ[OPENAI_API_KEY]os.getenv(OPENAI_API_KEY) ## LangSmith 追踪开关可视化调试链路 os.environ[LANGCHAIN_TRACING_V2]true os.environ[LANGCHAIN_API_KEY]os.getenv(LANGCHAIN_API_KEY) ## 提示词模板 promptChatPromptTemplate.from_messages( [ (system,You are a helpful assistant. Please response to the user queries), (user,Question:{question}) ] ) ## Streamlit 网页界面 st.title(Langchain Demo With OPENAI API) input_textst.text_input(Search the topic u want) # 初始化OpenAI对话模型 llmChatOpenAI(modelgpt-3.5-turbo) output_parserStrOutputParser() # LCEL管道构建链路 chainprompt|llm|output_parser # 如果用户输入内容执行调用并打印结果 if input_text: st.write(chain.invoke({question:input_text}))逐行导入解析①from langchain_openai import ChatOpenAIpython运行from langchain_openai import ChatOpenAI作用导入面向 OpenAI 对话模型的封装类区别老版本 旧版langchain_community.llms.OpenAI普通文本补全模型 gpt-3.5-turbo-instructChatOpenAI专门适配Chat 对话模型gpt-3.5-turbo、gpt-4、gpt-4o拓展兼容兼容 OpenAI 接口格式的第三方模型DeepSeek、通义千问、本地 Ollama、Llama.cpp 都可以复用这个类只需要修改 base_url示例实例化python运行llm ChatOpenAI( modelgpt-3.5-turbo, api_keysk-xxx, base_urlhttps://api.openai.com/v1 )②from langchain_core.prompts import ChatPromptTemplatepython运行from langchain_core.prompts import ChatPromptTemplatelangchain_coreLangChain 核心包不包含任何第三方依赖存放框架基础原语。ChatPromptTemplate对话式提示词模板和简单 PromptTemplate 区别 支持区分角色system/human/ai贴合大模型对话上下文格式。示例构造python运行prompt ChatPromptTemplate.from_messages([ (system, 你是专业技术顾问), (human, {query}) ]){query}是占位符后续调用时传入真实变量。③from langchain_core.output_parsers import StrOutputParserpython运行from langchain_core.output_parsers import StrOutputParser输出解析器ChatOpenAI返回的不是原始字符串而是一个AIMessage对象结构类似python运行AIMessage(content回答文本, additional_kwargs{...})StrOutputParser()功能自动提取.content直接输出纯文本字符串。定位链路最后一环标准化输出。同类常用解析器对比StrOutputParser→ 纯文本最常用JsonOutputParser→ 自动解析返回 JSONPydanticOutputParser→ 映射成 Python 实体类逐段详细解析1. 依赖导入python运行from langchain_openai import ChatOpenAI from langchain_core.prompts import ChatPromptTemplate from langchain_core.output_parsers import StrOutputParserChatOpenAI调用 OpenAI 对话模型gpt-3.5-turbo/gpt4oChatPromptTemplate构建带 system、user 角色的对话提示模板StrOutputParser把模型返回的AIMessage对象提取成纯字符串python运行import streamlit as st import os from dotenv import load_dotenvstreamlitPython 快速网页开发框架不用写 HTML/CSS几分钟做出 Web 应用os操作系统环境变量操作dotenv读取本地.env文件避免密钥硬编码2. 环境变量加载python运行load_dotenv()自动读取项目根目录下.env文件把里面键值加载进程序环境。.env文件内容参考envOPENAI_API_KEYsk-xxxx LANGCHAIN_API_KEYlsv2_pt_xxxxpython运行os.environ[OPENAI_API_KEY]os.getenv(OPENAI_API_KEY)从.env 取出密钥写入程序环境变量ChatOpenAI默认会自动读取环境变量里的OPENAI_API_KEY因此实例化时不用手动传api_keyxxx。python运行os.environ[LANGCHAIN_TRACING_V2]true os.environ[LANGCHAIN_API_KEY]os.getenv(LANGCHAIN_API_KEY)开启LangSmithLangChain 追踪平台运行后可以在官网看到prompt 内容、LLM 入参、耗时、token 消耗、链路完整日志。可选功能删掉这两行代码程序依然能正常运行。3. PromptTemplate 提示词模板python运行promptChatPromptTemplate.from_messages( [ (system,You are a helpful assistant. Please response to the user queries), (user,Question:{question}) ] )system系统角色指令定义 AI 身份user用户消息{question}是占位符运行时动态替换注意调用chain.invoke()必须传入 key 为question的字典匹配占位符4. Streamlit UI 页面部分python运行st.title(Langchain Demo With OPENAI API) input_textst.text_input(Search the topic u want)st.title()网页标题st.text_input()渲染单行输入框接收用户输入输入内容存入变量input_text5. 构建 LCEL 链路python运行llmChatOpenAI(modelgpt-3.5-turbo) output_parserStrOutputParser() chainprompt|llm|output_parser管道执行顺序输入字典 → prompt填充占位符 → ChatOpenAI发起API请求 → StrOutputParser提取文本等价数据流StrOutputParser(llm.invoke(prompt.format_messages(input_dict)))|是 LCEL 核心语法所有 Runnable 组件支持管道拼接。6. 业务逻辑触发python运行if input_text: st.write(chain.invoke({question:input_text}))当输入框不为空时执行链路调用chain.invoke({question:输入内容})触发大模型请求st.write()在网页上打印模型返回的回答启动运行命令powershellstreamlit run app.py关键注意事项 常见报错.env文件必须放在和 py 脚本同一目录密钥名称大小写不能写错网络问题国内直连 OpenAI 会超时需要配置代理 /base_url如果你想切换 DeepSeek / 通义千问只需要修改ChatOpenAI实例增加base_url拓展改造示范切换 DeepSeek仅修改 LLM 部分python运行需要安装的全部依赖包bash运行pip install langchain langchain-openai python-dotenv streamlit包作用拆分说明langchainLangChain 框架主体包含核心原语、LCEL、Runnable 等。langchain-openai提供ChatOpenAI专门对接 OpenAI 兼容接口模型OpenAI、DeepSeek、通义千问兼容模式都靠它。新旧版本拆分不再放在 langchain_community。python-dotenv读取.env文件加载密钥代码里load_dotenv()依赖。streamlit快速生成 Web 网页界面运行streamlit run app.py。可选补充后续大概率要用如果你后面要玩 Ollama、RAG、向量库可以一并装上bash运行# 本地Ollama集成 pip install langchain-community # 向量数据库示例chroma pip install chromadb # 文本分割、文档加载等常用工具 pip install pypdf推荐操作流程虚拟环境内执行powershell# 1.激活虚拟环境 .\venv\Scripts\Activate.ps1 # 2.安装核心依赖 pip install langchain langchain-openai python-dotenv streamlit # 3.启动程序 streamlit run app.py如果你想导出 requirements.txtbash运行pip freeze requirements.txt别人部署直接一条命令安装bash运行pip install -r requirements.txt⚠️小提醒使用国内镜像加速安装可选bash运行pip install langchain langchain-openai python-dotenv streamlit -i https://pypi.tuna.tsinghua.edu.cn/simplePython 版本建议 ≥3.9推荐 3.10 / 3.11避免版本兼容报错。llmChatOpenAI( modeldeepseek-chat, base_urlhttps://api.deepseek.com/v1 ) # .env中把 OPENAI_API_KEY 填入 DeepSeek sk密钥即可