python llama索引向量存储查询与特定过滤

iaqfqrcu  于 2023-08-02  发布在  Python
关注(0)|答案(2)|浏览(191)

我有这个简单的代码来查询保存在色度矢量存储中的文件。现在,如果每个文件都属于某个用户,并且每个用户只能查询自己文件中的数据,而不能查询其他文件中的数据,那么如何才能实现这一点呢?我在想,也许可以将userId保存为每个文档的元数据,并使用userId作为过滤器进行查询,任何帮助都将不胜感激。谢谢你,谢谢

chroma_client = chromadb.PersistentClient(path="chroma")
chroma_collection = chroma_client.get_collection("quickstart")

vector_store = ChromaVectorStore(chroma_collection=chroma_collection)
index = VectorStoreIndex.from_vector_store(vector_store=vector_store)

retriever = index.as_retriever(retriever_mode='embedding')
query_engine = RetrieverQueryEngine(retriever)
query_engine = index.as_query_engine()
response = query_engine.query("what's the persons name")
print(response)

字符串
我试着从他们的网站上问助手,但它只给出随机的答案。正在看他们的文件想找点线索。

zbdgwd5y

zbdgwd5y1#

您可以将userId保存为每个文档的元数据,并使用userId作为筛选器进行查询:

from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.vectorstores import Chroma

embeddings = OpenAIEmbeddings()
db = Chroma.from_documents(docs, embeddings, persist_directory='db')
db.persist()

# Get all documents I've just stored in the Chroma database with metadata
docs_with_metadata = db.get()

字符串
然后使用pandas按userId过滤文档:

import pandas as pd

df = pd.DataFrame(docs_with_metadata)
df[df['metadata']['userId'] == 'someUserId']

wsxa1bj1

wsxa1bj12#

经过一番折腾,我发现使用元数据来区分文档并不能给予一致的结果,所以我为每个用户创建了一个vectorstore,并将他们的数据存储在那里,到目前为止工作正常。

相关问题