如何将LangChain构建的CSV向量库整合到Streamlit问答Bot中?
整合FAISS检索到LangChain问答Bot的实现步骤
1. 加载本地保存的FAISS向量库
在chat_bot.py中先导入依赖库,再加载你之前生成并保存的FAISS向量库,注意要和embeddings.py使用相同的嵌入模型:
from langchain.vectorstores import FAISS from langchain.embeddings import HuggingFaceEmbeddings # 初始化嵌入模型(需与embeddings.py中配置一致) embeddings = HuggingFaceEmbeddings(model_name="你的模型名称") # 加载本地FAISS向量库,替换为你的向量库存储路径 docsearch = FAISS.load_local("faiss_index", embeddings)
2. 构建检索增强的问答链
用RetrievalQA将OpenAI模型与FAISS检索器绑定,让Bot优先从CSV检索到的内容生成回答:
from langchain.chains import RetrievalQA from langchain.llms import OpenAI import os # 设置OpenAI API密钥(可通过Streamlit Secrets管理,更安全) os.environ["OPENAI_API_KEY"] = "你的API密钥" # 初始化OpenAI模型,temperature设0保证回答贴合检索内容 llm = OpenAI(temperature=0) # 构建检索QA链 qa_chain = RetrievalQA.from_chain_type( llm=llm, chain_type="stuff", # 适合短文本场景,直接把检索内容塞入prompt retriever=docsearch.as_retriever(search_kwargs={"k": 3}), # 检索Top3相关景点文档 return_source_documents=True # 可选,返回来源文档用于验证 )
3. 整合到Streamlit交互逻辑中
把问答链的调用和Streamlit的聊天界面结合,实现用户提问→检索→生成回答的完整流程:
import streamlit as st st.title("景点问答Bot") # 初始化会话状态存储聊天历史 if "messages" not in st.session_state: st.session_state.messages = [] # 展示历史聊天记录 for msg in st.session_state.messages: with st.chat_message(msg["role"]): st.markdown(msg["content"]) # 处理用户输入 if user_query := st.chat_input("想问哪个景点的问题?"): st.session_state.messages.append({"role": "user", "content": user_query}) with st.chat_message("user"): st.markdown(user_query) # 调用问答链获取结果 result = qa_chain({"query": user_query}) bot_answer = result["result"] # 展示Bot回答 with st.chat_message("assistant"): st.markdown(bot_answer) st.session_state.messages.append({"role": "assistant", "content": bot_answer}) # 可选:展开显示参考的原始景点文档 with st.expander("查看参考来源"): for doc in result["source_documents"]: st.markdown(f"**景点:{doc.metadata['row']}**") st.markdown(doc.page_content)
关键注意事项
- 确保
embeddings.py和chat_bot.py使用完全一致的嵌入模型,否则会出现向量库加载失败的问题 - 可调整
search_kwargs={"k":3}中的k值,控制检索返回的文档数量,k值过大会导致上下文超出模型token限制 - 若景点描述较长,可将
chain_type改为"map_reduce",先分别总结每个检索文档再合并结果
内容的提问来源于stack exchange,提问作者Mary
相关产品推荐
相关产品推荐

