使用LangChain从Azure Blob加载CSV后,聊天机器人未调用自定义数据及嵌入错误
问题解决:LangChain加载Azure Blob CSV后机器人不使用自定义数据及空Embedding错误
一、数据未被机器人使用的原因及修复
补全向量库构建逻辑
你当前仅完成了数据加载,但未将加载的文档存入向量存储,导致后续对话链无法检索到自定义数据。需补充以下代码:from langchain.vectorstores import FAISS from langchain.embeddings.openai import OpenAIEmbeddings from langchain.chains import RetrievalQA from langchain.llms import OpenAI # 加载数据后生成embedding并构建向量库 embeddings = OpenAIEmbeddings(model="text-embedding-ada-002") vector_store = FAISS.from_documents(data, embeddings) # 构建关联自定义数据的问答链 qa_chain = RetrievalQA.from_chain_type( llm=OpenAI(), chain_type="stuff", retriever=vector_store.as_retriever() )确保会话状态中持久化问答链
你在__init__中加载的数据未绑定到会话逻辑,需将问答链存入会话状态,避免每次会话初始化后丢失关联:async def initialize_session(self, turn_context): session = await self.session_accessor.get(turn_context, {}) if "qa_chain" not in session: loader = AzureBlobStorageFileLoader( conn_str="你的连接字符串", container="dataset", blob_name="data.csv" ) data = loader.load() # 过滤空内容文档 data = [doc for doc in data if doc.page_content.strip()] embeddings = OpenAIEmbeddings(model="text-embedding-ada-002") vector_store = FAISS.from_documents(data, embeddings) qa_chain = RetrievalQA.from_chain_type( llm=OpenAI(), chain_type="stuff", retriever=vector_store.as_retriever() ) session["qa_chain"] = qa_chain await self.session_accessor.set(turn_context, session)
二、OpenAI空Embedding错误修复
过滤无效文档
部分文档可能存在空内容,导致无法生成embedding,需提前过滤:data = [doc for doc in loader.load() if doc.page_content.strip()]明确指定embedding模型
确保使用支持的embedding模型,避免因模型不兼容导致错误:embeddings = OpenAIEmbeddings(model="text-embedding-ada-002")调整API重试策略
临时网络波动可能引发空embedding错误,可调整重试参数提升稳定性:embeddings = OpenAIEmbeddings( model="text-embedding-ada-002", max_retries=5, retry_min_seconds=2, retry_max_seconds=10 )
内容的提问来源于stack exchange,提问作者Ahmed Ewis
相关产品推荐
相关产品推荐

