You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 20:01:04