ZoteroRetriever
這將幫助您開始使用 Zotero 檢索器。有關所有 ZoteroRetriever 功能和設定的詳細文件,請前往 Github 頁面。
整合詳細資訊
檢索器 | 來源 | 套件 |
---|---|---|
ZoteroRetriever | 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
例項化
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 參考。