LangChain vectorStore:如何使用search_kwargs过滤器?

LangChain vectorStore: how to use search_kwargs filter?

提问人:OlgaPp 提问时间:11/17/2023 最后编辑:OlgaPp 更新时间:11/19/2023 访问量:58

问:

我正在关注LangChain上的各种教程,现在正试图弄清楚如何使用vectorstore中的文档子集而不是整个数据库。

vectorstore = Chroma.from_documents(documents=splits, embedding=OpenAIEmbeddings())
retriever = vectorstore.as_retriever()

想象一个聊天场景。

  • 用户:我在找X。
  • 聊天机器人:(提出一个确定性问题,例如)这份文件从什么时候开始?
  • 用户:2023-11-16 后端 以某种方式过滤矢量存储,例如retriever = vectorstore.as_retriever(filters="document_name matches '2023-11-16*'")
  • 聊天机器人:以下是一些相关文件:...

在文档中,他们列出了一个示例:

docsearch.as_retriever(
    search_kwargs={'filter': {'paper_title':'GPT-4 Technical Report'}}
)

目前尚不清楚的是:

  • 什么是paper_title?文档中是元数据还是文本?
  • 如果这是元数据,那么如何指定它?
langchain chromadb 向量数据库

评论


答:

1赞 Yilmaz 11/18/2023 #1

什么是paper_title?文档中是元数据还是文本?

paper_title是文档中的列名。您正在通过文档筛选进行搜索'paper_title':'GPT-4 Technical Report'

chromadb使用 SQLite 来存储所有嵌入。你可以在这里阅读

如果这是元数据,那么如何指定它?

是的,这是元数据,并且来自文档,这是您如何指定的

from langchain.embeddings import OpenAIEmbeddings
from langchain.schema import Document
from langchain.vectorstores import Chroma

docs = [
    Document(
        page_content="A bunch of scientists bring back dinosaurs and mayhem breaks loose",
        metadata={"year": 1993, "rating": 7.7, "genre": "science fiction"},
    ),
    Document(
        page_content="Leo DiCaprio gets lost in a dream within a dream within a dream within a ...",
        metadata={"year": 2010, "director": "Christopher Nolan", "rating": 8.2},
    ),
    Document(
        page_content="A psychologist / detective gets lost in a series of dreams within dreams within dreams and Inception reused the idea",
        metadata={"year": 2006, "director": "Satoshi Kon", "rating": 8.6},
    ),
    Document(
        page_content="A bunch of normal-sized women are supremely wholesome and some men pine after them",
        metadata={"year": 2019, "director": "Greta Gerwig", "rating": 8.3},
    ),
    Document(
        page_content="Toys come alive and have a blast doing so",
        metadata={"year": 1995, "genre": "animated"},
    ),
    Document(
        page_content="Three men walk into the Zone, three men walk out of the Zone",
        metadata={
            "year": 1979,
            "director": "Andrei Tarkovsky",
            "genre": "thriller",
            "rating": 9.9,
        },
    ),
]
vectorstore = Chroma.from_documents(docs, OpenAIEmbeddings())

评论

0赞 OlgaPp 11/19/2023
我以为 Chroma DB 是一个纯粹的向量存储 -- 如何向其中添加列?谢谢!
1赞 Yilmaz 11/19/2023
Chroma 使用 SQLite 来存储所有文档。docs.trychroma.com/troubleshooting