langchain搭建一个问答系统
LangChain 是一个基于大型语言模型(LLM)的开源编程框架。由 Harrison Chase 于 2022 年 10 月创立。它通过将 LLM、提示工程、外部工具、记忆、检索、代理(Agent)等功能抽象为可组合的模块,让开发者能够像搭积木一样快速构建生产级的 AI 应用。
-
LangSmith 平台:用于调试和监控 LangChain 应用
1. langchain安装
核心包安装
pip install langchain
完整生态安装
# 安装核心框架 + 常用集成包 pip install langchain langchain-core langchain-community langgraph # 如需使用 OpenAI 模型 pip install langchain-openai # 如需使用其他模型提供商 pip install langchain-anthropic # Anthropic Claude pip install langchain-ollama # 本地 Ollama 模型 pip install langchain-groq # Groq 高速推理
分场景安装

2. 用户交互界面
Streamlit 是一个开源的 Python 库,用于快速构建交互式数据应用和机器学习仪表盘。它让数据科学家和开发者无需前端开发经验,就能将 Python 脚本转换为可分享的 Web 应用。核心特点如下:
- 零前端代码:纯 Python 开发,无需 HTML/CSS/JavaScript
- 实时热重载:保存代码后页面自动刷新,即时查看效果
- 丰富组件:内置滑块、按钮、图表、文件上传等交互组件
- 数据原生支持:无缝集成 Pandas、Matplotlib、Plotly、Altair 等
- 快速部署:支持 Streamlit Cloud、Docker 等多种部署方式
安装:
pip install streamlit
app.py
import streamlit as st #设置页面显示标题 st.title("热门文章AI生成器") #生成一个文本框,带有提示信息 topic=st.text_input("请输入你想写的话题") #streamlit run app.py
可以使用streamlit run app.py启动,或者使用下面代码运行启动。
run_app.py
# run_app.py import subprocess import sys import os def main(): """启动Streamlit应用""" # 获取当前目录 current_dir = os.path.dirname(os.path.abspath(__file__)) app_file = os.path.join(current_dir, "app.py") if not os.path.exists(app_file): print(f"错误: 找不到 app.py 在 {current_dir}") return print("🚀 正在启动 Streamlit 应用...") print("🌐 浏览器将自动打开: http://localhost:8501") print("⏹️ 按 Ctrl+C 停止应用") print("-" * 50) try: # 运行streamlit subprocess.run([sys.executable, "-m", "streamlit", "run", app_file]) except KeyboardInterrupt: print("\n⏹️ 应用已停止") except Exception as e: print(f"❌ 启动失败: {e}") if __name__ == "__main__": main()
这样,一个超简单的交互界面就完成了,如下:

3. 问答系统
先去阿里创建一个模型需要的API-KEY。

由于,我们这里无法访问外网,不再使用国外的openai调用模型。页面中有个模型用量,有一定的免费额度,可以开启。

首先,我们需要在项目中配置一个.env文件,存放我们的api-key,就一行,如下:
DASHSCOPE_API_KEY=我们的api-key
然后编写主要程序,如下:
#app2.py import streamlit as st #设置页面显示标题 st.title("问答系统") #生成一个文本框,带有提示信息 question=st.text_input("请输入你想问的问题") import os from dotenv import load_dotenv from langchain_community.llms import Tongyi # 从.env文件加载环境变量 load_dotenv() # 阿里云DashScope API Key(不是OpenAI的) api_key = os.getenv("DASHSCOPE_API_KEY") # 初始化通义千问模型 llm = Tongyi( dashscope_api_key=api_key, model_name="qwen-plus" # 可选:qwen-turbo, qwen-plus, qwen-max 等 ) # question = "我国的最大淡水湖是哪个? if question: promot=question+"用最简短的文字回答" response = llm.invoke(promot) print(response) st.write(response)
我们可以通过运行命令streamlit run app2.py来启动应用。或者直接通过下面的代码启动:
# run_app.py import subprocess import sys import os def main(): """启动Streamlit应用""" # 获取当前目录 current_dir = os.path.dirname(os.path.abspath(__file__)) app_file = os.path.join(current_dir, "app2.py") if not os.path.exists(app_file): print(f"错误: 找不到 app2.py 在 {current_dir}") return print("🚀 正在启动 Streamlit 应用...") print("🌐 浏览器将自动打开: http://localhost:8501") print("⏹️ 按 Ctrl+C 停止应用") print("-" * 50) try: # 运行streamlit subprocess.run([sys.executable, "-m", "streamlit", "run", app_file]) except KeyboardInterrupt: print("\n⏹️ 应用已停止") except Exception as e: print(f"❌ 启动失败: {e}") if __name__ == "__main__": main()
运行后,如下:

简单测试一下,输入问题回车,效果如下:


小结:使用streamlit开发交互界面,无法连上外网,所以无法测试OpenAI调用大模型,最后使用了国内的然后通过from langchain_community.llms import Tongyi去调用qwen大模型,最后可以发现回答很简洁,是因为我提示词让模型回答的简洁一点。另外,我们也可以使用ollama,vllm去部署本地大模型,尽情期待!
不足或错误之处,欢迎指出与评论。

浙公网安备 33010602011771号