langchain搭建一个问答系统

  LangChain 是一个基于大型语言模型(LLM)的开源编程框架。由 Harrison Chase 于 2022 年 10 月创立。它通过将 LLM、提示工程、外部工具、记忆、检索、代理(Agent)等功能抽象为可组合的模块,让开发者能够像搭积木一样快速构建生产级的 AI 应用。

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 高速推理

  分场景安装

image

 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()

  这样,一个超简单的交互界面就完成了,如下:

image

 

3. 问答系统

  先去阿里创建一个模型需要的API-KEY。

image

  

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

image

 

 首先,我们需要在项目中配置一个.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()
运行后,如下:

 

image

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

  

image

image

  

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

 

 

  不足或错误之处,欢迎指出与评论。

  

 

posted @ 2026-03-10 14:38  wancy  阅读(8)  评论(0)    收藏  举报