以下是一个基于 Streamlit 和 LangChain 1.0 实现智能问答系统的完整方案,分为前端界面和后端逻辑两部分:

环境准备

安装必要依赖库:

pip install streamlit langchain openai python-dotenv

后端核心逻辑

创建 backend.py 文件处理问答逻辑:

from langchain.chains import RetrievalQA
from langchain.llms import OpenAI
from langchain.document_loaders import TextLoader
from langchain.indexes import VectorstoreIndexCreator
import os
from dotenv import load_dotenv

load_dotenv()

def initialize_qa_system():
    loader = TextLoader("data.txt")  # 准备知识库文本文件
    index = VectorstoreIndexCreator().from_loaders([loader])
    return RetrievalQA.from_chain_type(
        llm=OpenAI(model_name="gpt-3.5-turbo"),
        chain_type="stuff",
        retriever=index.vectorstore.as_retriever()
    )

qa_system = initialize_qa_system()

def get_answer(question):
    return qa_system.run(question)

前端界面实现

创建 app.py 作为主入口文件:

import streamlit as st
from backend import get_answer

st.title("🤖 智能问答系统")
st.markdown("使用 LangChain + OpenAI 构建的知识库问答")

user_input = st.text_input("请输入您的问题:")
if user_input:
    with st.spinner("思考中..."):
        response = get_answer(user_input)
    st.text_area("答案:", value=response, height=200)

配置文件

创建 .env 文件存放API密钥:

OPENAI_API_KEY=your_api_key_here

知识库准备

在项目目录下创建 data.txt 文件,存入问答系统需要参考的文本内容

运行系统

启动Streamlit应用:

streamlit run app.py

高级功能扩展

实现对话历史记录功能:

if "history" not in st.session_state:
    st.session_state.history = []

if user_input and user_input.strip():
    response = get_answer(user_input)
    st.session_state.history.append((user_input, response))

if st.session_state.history:
    st.subheader("对话历史")
    for q, a in reversed(st.session_state.history):
        st.text(f"Q: {q}")
        st.text(f"A: {a}\n")

部署注意事项

  1. 生产环境建议使用 st.secrets 管理API密钥
  2. 大型知识库建议使用Chroma或FAISS向量数据库
  3. 可添加缓存机制减少API调用:@st.cache_data

这个实现包含了一个完整的问答系统核心功能,可根据需要扩展文件上传、多文档处理等高级特性。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐