跳到主要內容
Open In ColabOpen on GitHub

ZoteroRetriever

這將幫助您開始使用 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 文件: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 搜尋的運作方式,直接將使用者問題傳遞至 ZoteroRetriever 通常不會傳回令人滿意的結果。為了在鏈或代理框架中使用,建議將 ZoteroRetriever 轉換為工具。這樣一來,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 seperated 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 參考

有關所有 ZoteroRetriever 功能和設定的詳細文件,請前往 Github 頁面

如需 Zotero API 的詳細文件,請前往 Zotero API 參考


此頁面是否對您有幫助?