Skip to main content
本文将帮助您开始使用 Zotero 检索器。有关 ZoteroRetriever 所有功能和配置的详细文档,请参阅 GitHub 页面

集成详情

检索器来源
ZoteroRetrieverZotero APIlangchain-community

设置

如果您希望自动追踪单个查询,可以取消下方注释以设置您的 LangSmith API 密钥:
os.environ["LANGSMITH_API_KEY"] = getpass.getpass("Enter your LangSmith API key: ")
os.environ["LANGSMITH_TRACING"] = "true"

安装

该检索器位于 langchain-zotero-retriever 包中,还需要 pyzotero 依赖项:
pip install -qU langchain-zotero-retriever pyzotero

实例化

ZoteroRetriever 参数包括:
  • k:返回结果的数量(默认:50)
  • type:执行的搜索类型。"Top" 检索顶层 Zotero 库条目,"items" 返回任意 Zotero 库条目。(默认:top)
  • get_fulltext:如果库中有附件全文则检索全文。如果为 False 或没有附件,则返回空字符串作为 page_content。(默认:True)
  • library_id:要搜索的 Zotero 库的 ID。连接到库时必填。
  • library_type:要搜索的库类型。个人库用 "user",共享组库用 "group"。(默认:user)
  • api_key:如果未设置为环境变量,则提供 Zotero API 密钥。可选,访问非公开组库或个人库时需要。如果提供了 ZOTERO_API_KEY 环境变量,将自动获取。
from langchain_zotero_retriever.retrievers import ZoteroRetriever

retriever = ZoteroRetriever(
    k=10,
    library_id="2319375",  # a public group library that does not require an API key for access
    library_type="group",  # set this to "user" if you are using a personal library. Personal libraries require an API key
)

使用方法

query 外,检索器还提供以下附加搜索参数:
  • itemType:要搜索的条目类型(例如 "book""journalArticle"
  • tag:用于搜索附加到库条目的标签(关于组合多个标签的搜索语法,请参见文档)
  • qmode:使用的搜索模式。更改查询的搜索范围。"everything" 包含全文内容。"titleCreatorYear" 搜索标题、作者和年份。
  • since:仅返回在指定库版本之后修改的对象。默认返回所有内容。
搜索语法参见 Zotero API 文档:www.zotero.org/support/dev/web_api/v3/basics#search_syntax 完整 API schema(包括可用的 itemTypes)请参见:github.com/zotero/zotero-schema
query = "Zuboff"

retriever.invoke(query)
tags = [
    "Surveillance",
    "Digital Capitalism",
]  # note that providing tags as a list will result in a logical AND operation

retriever.invoke("", tag=tags)

在链中使用

由于 Zotero API 搜索的工作方式,直接将用户问题传递给 ZoteroRetriever 通常不会返回令人满意的结果。在链或智能体框架中使用时,建议将 ZoteroRetriever 转换为工具。这样,LLM 可以将用户查询转化为更简洁的 API 搜索查询。此外,这还允许 LLM 填写额外的搜索参数,如标签或条目类型。
from typing import List, Optional, Union

from langchain_core.output_parsers import PydanticToolsParser
from langchain.tools import StructuredTool, tool
from langchain_openai import ChatOpenAI


def retrieve(
    query: str,
    itemType: Optional[str],
    tag: Optional[Union[str, List[str]]],
    qmode: str = "everything",
    since: Optional[int] = None,
):
    retrieved_docs = retriever.invoke(
        query, itemType=itemType, tag=tag, qmode=qmode, since=since
    )
    serialized_docs = "\n\n".join(
        (
            f"Metadata: { {key: doc.metadata[key] for key in doc.metadata if key != 'abstractNote'} }\n"
            f"Abstract: {doc.metadata['abstractNote']}\n"
        )
        for doc in retrieved_docs
    )

    return serialized_docs, retrieved_docs


description = """Search and return relevant documents from a Zotero library. The following search parameters can be used:

    Args:
        query: str: The search query to be used. Try to keep this specific and short, e.g. a specific topic or author name
        itemType: Optional. Type of item to search for (e.g. "book" or "journalArticle"). Multiple types can be passed as a string separated by "||", e.g. "book || journalArticle". Defaults to all types.
        tag: Optional. For searching over tags attached to library items. If documents tagged with multiple tags are to be retrieved, pass them as a list. If documents with any of the tags are to be retrieved, pass them as a string separated by "||", e.g. "tag1 || tag2"
        qmode: Search mode to use. Changes what the query searches over. "everything" includes full-text content. "titleCreatorYear" to search over title, authors and year. Defaults to "everything".
        since: Return only objects modified after the specified library version. Defaults to return everything.
    """

retriever_tool = StructuredTool.from_function(
    func=retrieve,
    name="retrieve",
    description=description,
    return_direct=True,
)


llm = ChatOpenAI(model="gpt-4.1-mini-2025-04-14")

llm_with_tools = llm.bind_tools([retrieve])

q = "What journal articles do I have on Surveillance in the zotero library?"

chain = llm_with_tools | PydanticToolsParser(tools=[retrieve])

chain.invoke(q)

API 参考

有关 ZoteroRetriever 所有功能和配置的详细文档,请参阅 GitHub 页面 有关 Zotero API 的详细文档,请参阅 Zotero API 参考