Zotero检索器
这将帮助您开始使用 Zotero 检索器。有关 Zotero检索器所有功能和配置的详细文档,请访问 Github 页面。
集成详情
检索器 | 来源 | 包 |
---|---|---|
Zotero检索器 | Zotero API | langchain-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
实例化
Zotero检索器
参数包括
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 文档:https://www.zotero.org/support/dev/web_api/v3/basics#search_syntax
有关完整的 API 模式(包括可用的 itemTypes),请参阅:https://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 搜索的工作方式,直接将用户问题传递给 Zotero检索器通常不会返回令人满意的结果。为了在链或代理框架中使用,建议将 Zotero检索器转换为一个 工具。这样,LLM 可以将用户查询转换为更简洁的 API 搜索查询。此外,这还允许 LLM 填充其他搜索参数,例如标签或条目类型。
from typing import List, Optional, Union
from langchain_core.output_parsers import PydanticToolsParser
from langchain_core.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-4o-mini-2024-07-18")
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 参考
有关 Zotero检索器所有功能和配置的详细文档,请访问 Github 页面。
有关 Zotero API 的详细文档,请访问 Zotero API 参考。