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

如何在LangChain VectorStore中使用search_kwargs过滤?元数据相关疑问

关于LangChain VectorStore过滤文档子集的疑问

现有代码

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

设想的聊天流程

  • 用户:我想查找X相关内容。
  • 聊天机器人:这份文档的日期是哪天?
  • 用户:2023-11-16
  • 后端:通过过滤VectorStore获取子集,示例代码:retriever = vectorstore.as_retriever(filters="document_name matches '2023-11-16*'")
  • 聊天机器人:这是相关文档:...

官方示例代码

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

疑问解答

  1. paper_title是什么?它是元数据还是文档内的文本?
    paper_title是文档的元数据,并非文档内容里的文本。LangChain的VectorStore过滤功能是基于文档的元数据字段进行匹配的,官方示例就是通过匹配元数据中paper_title字段的指定值来筛选对应文档。

  2. 如果它是元数据,该如何指定?
    在创建LangChain的Document对象时,给每个文档添加metadata属性,将需要的元数据(比如日期、文档名、标题等)以键值对形式传入即可。示例如下:

from langchain_core.documents import Document

# 给拆分后的每个文本片段添加元数据
documents_with_metadata = []
for split in splits:
    doc = Document(
        page_content=split,
        metadata={"date": "2023-11-16", "document_name": "2023-11-16-report"}
    )
    documents_with_metadata.append(doc)

# 将带元数据的文档存入Chroma
vectorstore = Chroma.from_documents(documents=documents_with_metadata, embedding=OpenAIEmbeddings())

# 后续可通过filter筛选元数据匹配的文档
retriever = vectorstore.as_retriever(
    search_kwargs={'filter': {'date': '2023-11-16'}}
)

内容的提问来源于stack exchange,提问作者OlgaPp

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 03:27:37