Streamlit + LangChain 1.0 简单实现智能问答前后端
·
以下是一个基于 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")
部署注意事项
- 生产环境建议使用
st.secrets管理API密钥 - 大型知识库建议使用Chroma或FAISS向量数据库
- 可添加缓存机制减少API调用:
@st.cache_data
这个实现包含了一个完整的问答系统核心功能,可根据需要扩展文件上传、多文档处理等高级特性。
更多推荐
所有评论(0)