我正在尝试构建一个聊天机器人,我需要机器人根据存储在矢量数据库(如松果)中的数据响应用户查询。在这里我想存储不同主题的pdf,例如特定品牌的不同车型。如果用户询问有关模型的特定问题,如何从松果获得正确的结果?
使用SimpleDirectoryLoader加载多个pdf并存储在pinecone中,并使用查询引擎获取相似的矢量数据作为响应。
from llama_index.core import VectorStoreIndex,SimpleDirectoryReader, StorageContext
from llama_index.vector_stores.pinecone import PineconeVectorStore
documents=SimpleDirectoryReader("direcory_name").load_data()
vector_store = PineconeVectorStore(pinecone_index=pinecone_index)
storage_context = StorageContext.from_defaults(vector_store=vector_store)
index = VectorStoreIndex.from_documents(documents=documents, storage_context=storage_context)
from llama_index.core.retrievers import VectorIndexRetriever
from llama_index.core.query_engine import RetrieverQueryEngine
from llama_index.core.indices.postprocessor import SimilarityPostprocessor
retriever=VectorIndexRetriever(index=index,similarity_top_k=4)
postprocessor=SimilarityPostprocessor(similarity_cutoff=0.80)
query_engine=RetrieverQueryEngine(retriever=retriever,
node_postprocessors=[postprocessor])
这不是一个完整的证明解决方案,这些完全基于我在 llamaindex 上的知识。
您可以尝试以块的形式添加数据,我的意思是有意义的分块,您可以探索分块策略。
您可以尝试将元数据与要更新插入松果矢量数据库的数据一起添加。这可用于在提取块时添加元数据过滤器,并将其提供给查询检索器。
实验块大小的变化,尝试不同的相似性技术、模型参数、节点之间的关系、检索器类型等
这些只是开发聊天机器人按照您的期望工作的基础。您可以从 llama_index 的文档和示例笔记本中探索更多信息。他们在 github 上有相当多的笔记本。