PaperQA2是用於在PDFS或文本文件上進行高準確檢索增強發電(RAG)的軟件包,重點是科學文獻。請參閱我們最近的2024年論文,以查看PaperQA2超人表現的示例,例如問題回答,摘要和矛盾檢測。
ask在此示例中,我們將一個研究論文PDF的文件夾神奇地獲取其元數據 - 包括帶回收檢查的引用數,然後解析和緩存PDFS中的全文搜索索引,最後用LLM代理回答用戶問題。
pip install paper-qa
cd my_papers
pqa ask ' How can carbon nanotubes be manufactured at a large scale? '問題:是否有人設計了用蛋白質或DNA計算的神經網絡?
多個來源支持神經網絡已設計為用DNA計算的聲稱。 Qian,Winfree和Bruck的工作證明了使用基於DNA的系統(Qian2011 Neural Pages 1-2,Qian2011Neural Pages 15-16,15-16,Qian2011Neural Pages ofertoal and Mosisiative memories)使用DNA鏈位移級聯反應來構建神經網絡組件,例如人工神經元和關聯記憶。 QIAN2011教育第54-56頁)。這項研究包括實施3位XOR柵極和四個神經元的Hopfield關聯記憶,展示了DNA對神經網絡計算的潛力。另外,有充分的文獻記錄了深度學習技術在基因組學上的應用,該技術涉及使用DNA序列進行計算。研究已應用卷積神經網絡(CNN)來預測基因組特徵,例如轉錄因子結合和DNA可及性(Eraslan2019deep第4-5頁,Eraslan2019deep第5-6頁)。這些模型利用DNA序列作為輸入數據,有效地使用神經網絡用DNA計算。儘管提供的摘錄並未明確提及基於蛋白質的神經網絡計算,但它們確實突出了與蛋白質序列有關的任務中的神經網絡的使用,例如預測DNA-蛋白結合(Zeng2016 Conconconconconconloseal Pages 1-2)。但是,主要重點仍然放在基於DNA的計算上。
PaperQA2設計為使用科學論文的最佳代理抹布模型。這是一些功能:
默認情況下,它使用Numpy Vector DB使用OpenAI嵌入式和模型來嵌入和搜索文檔。但是,您可以輕鬆地使用其他封閉源,開源型號或嵌入(請參見下面的詳細信息)。
PaperQA2取決於一些很棒的庫/API,這些庫/API使我們的存儲庫成為可能。以下是沒有特定順序的一些:
我們一直在努力進行基本升級,並大多遵循Semver。這意味著我們已經在每個破裂更改上增加了主要版本號。這使我們進入了當前的主要版本號V5。那麼,為什麼現在稱為PaperQA2的存儲庫呢?我們想評論這一事實,儘管我們已經超出了許多重要指標的人類績效。因此,我們任意將版本5及以後的PaperQA2和版本稱為PaperQA1,以表示性能的重大變化。我們認識到,我們在未來的房屋中受到挑戰,因此我們隨時保留任意將名稱更改為Papercrow的權利。
添加了5版:
pqaDocs對像中刪除了許多狀態請注意,從PaperQA的先前版本醃製的Docs對象與版本5不兼容,需要重建。同樣,我們的最低Python版本增加到Python 3.11。
要了解PaperQA2,讓我們從基礎算法的部分開始。 PaperQA2的默認工作流量如下:
| 階段 | PaperQA2動作 |
|---|---|
| 1。紙搜索 | - 從LLM生成的關鍵字查詢獲取候選論文 |
| - 塊,嵌入和添加候選論文 | |
| 2。收集證據 | - 將查詢嵌入向量 |
| - 在當前狀態下排名最高的K文檔塊 | |
| - 在當前查詢的上下文中創建每個塊的評分摘要 | |
| - 使用LLM重新評分並選擇最相關的摘要 | |
| 3。生成答案 | - 在上下文中提示最佳摘要 |
| - 及時產生答案 |
這些工具可以由語言代理以任何順序調用。例如,LLM代理可能會進行狹窄而廣泛的搜索,或者使用不同的措辭來從生成的答案步驟中進行收集證據步驟。
對於非開發設置,請從PYPI安裝PaperQA2(又名5版)。注意版本5要求Python 3.11+。
pip install paper-qa > =5有關開發設置,請參閱contruting.md文件。
PaperQA2使用LLM進行操作,因此您需要設置適當的API密鑰環境變量(即export OPENAI_API_KEY=sk-... )或設置開源LLM Server(即使用LLAMAFILE。任何LITELLM兼容模型都可以配置為與PaperQA2一起使用。
如果您需要索引大量論文(100+),則可能需要CrossRef和語義學者的API密鑰,這將使您避免使用這些元數據服務達到公共費用限制。可以將這些導出為CROSSREF_API_KEY和SEMANTIC_SCHOLAR_API_KEY變量。
測試PaperQA2的最快方法是通過CLI。首先用一些論文導航到目錄,然後使用pqa CLI:
$ pqa ask ' What manufacturing challenges are unique to bispecific antibodies? '您將看到PaperQA2索引您的本地PDF文件,為每個文件收集必要的元數據(使用CrossRef和Sminantic Scholar),搜索該索引,然後將文件分解為塊的證據上下文,對它們進行排名,並最終產生答案。下次查詢此目錄時,您的索引將已經構建(除了檢測到的任何差異,例如新添加的論文),因此它將跳過索引和分解步驟。
所有先前的答案將被索引和存儲,您可以通過search子命令查詢查看它們,或者在PQA_HOME目錄中自己訪問它們,該目錄默認為~/.pqa/ 。
$ pqa search -i ' answers ' ' antibodies ' PaperQA2是高度可配置的,當從命令行運行時, pqa --help顯示所有選項和簡短說明。例如,以較高的溫度運行:
$ pqa --temperature 0.5 ask ' What manufacturing challenges are unique to bispecific antibodies? '您可以使用pqa view查看所有設置。另一個有用的事情是更改為其他模板設置 - 例如, fast設置更快地回答,您可以使用pqa -s fast view
也許您要保存一些新設置?你可以用
pqa -s my_new_settings --temperature 0.5 --llm foo-bar-5 save然後您可以與
pqa -s my_new_settings ask ' What manufacturing challenges are unique to bispecific antibodies? '如果您使用需要新索引的命令運行pqa ,請說如果更改默認的chunk_size,則將自動為您創建一個新的索引。
pqa --parsing.chunk_size 5000 ask ' What manufacturing challenges are unique to bispecific antibodies? '您也可以使用pqa使用LLMS查看搜索命令進行全文搜索。例如,讓我們從目錄中保存索引並給它一個名稱:
pqa -i nanomaterials index現在,我可以搜索有關熱電學的論文:
pqa -i nanomaterials search thermoelectrics或者我可以使用正常的問
pqa -i nanomaterials ask ' Are there nm scale features in thermoelectric materials? 'CLI和模塊都基於先前的績效和我們的出版物都進行了預配置的設置,它們可以如下所示:
pqa --settings < setting name > ask ' Are there nm scale features in thermoelectric materials? '在paperqa/configs中,我們將已知有用設置捆綁在一起:
| 設置名稱 | 描述 |
|---|---|
| 高質量 | 高性能的,相對昂貴(由於evidence_k = 15),使用ToolSelector代理查詢。 |
| 快速地 | 設置以廉價,快速地獲得答案。 |
| 維基克羅 | 設置為Wikicrow出版物中使用的Wikipedia文章寫作。 |
| contracrow | 設置在論文中查找矛盾的情況,您的查詢應是需要標記為矛盾(或沒有)的主張。 |
| 偵錯 | 設置僅用於調試的有用,但在調試之外的任何實際應用程序中都不適用。 |
| tier1_limits | 匹配每個層的OpenAI速率限制的設置,您可以使用tier<1-5>_limits來指定層。 |
如果您達到率限制,則說使用OpenAI Tier 1計劃,可以將它們添加到PaperQA2中。對於每個Openai層,都存在預建的設置以限制使用。
pqa --settings ' tier1_limits ' ask ' Are there nm scale features in thermoelectric materials? '這將限制您的系統使用tier1_limits,並減慢查詢以適應。
您也可以使用任何速率限製字符串手動指定它們,該字符串與限制模塊中的規範匹配:
pqa --summary_llm_config ' {"rate_limit": {"gpt-4o-2024-08-06": "30000 per 1 minute"}} ' ask ' Are there nm scale features in thermoelectric materials? '或通過添加到Settings對像中,如果急得調用:
from paperqa import Settings , ask
answer = ask (
"What manufacturing challenges are unique to bispecific antibodies?" ,
settings = Settings (
llm_config = { "rate_limit" : { "gpt-4o-2024-08-06" : "30000 per 1 minute" }},
summary_llm_config = { "rate_limit" : { "gpt-4o-2024-08-06" : "30000 per 1 minute" }},
),
)PaperQA2的完整工作流程可以直接通過Python訪問:
from paperqa import Settings , ask
answer = ask (
"What manufacturing challenges are unique to bispecific antibodies?" ,
settings = Settings ( temperature = 0.5 , paper_directory = "my_papers" ),
)請參閱我們的安裝文檔,了解如何從PYPI安裝包裝。
ask答案對象具有以下屬性: formatted_answer , answer (單獨答案), question和context (找到答案的段落的摘要)。 ask將使用SearchPapers工具,該工具將查詢文件的本地索引,您可以通過Settings對象指定此位置:
from paperqa import Settings , ask
answer = ask (
"What manufacturing challenges are unique to bispecific antibodies?" ,
settings = Settings ( temperature = 0.5 , paper_directory = "my_papers" ),
) ask只是真實入口處的便利包裝,如果您想同時運行同步的工作負載,則可以訪問它:
from paperqa import Settings , agent_query , QueryRequest
answer = await agent_query (
QueryRequest (
query = "What manufacturing challenges are unique to bispecific antibodies?" ,
settings = Settings ( temperature = 0.5 , paper_directory = "my_papers" ),
)
)默認代理將使用基於LLM的代理,但是您還可以指定"fake"代理,以使用硬編碼的搜索路徑 - >收集證據 - >答案以減少令牌使用情況。
如果您喜歡細粒度控制,並且希望自己將對象添加到文檔對象(而不是使用搜索工具),則可以使用以前現有的Docs對象接口:
from paperqa import Docs , Settings
# valid extensions include .pdf, .txt, and .html
doc_paths = ( "myfile.pdf" , "myotherfile.pdf" )
docs = Docs ()
for doc in doc_paths :
docs . add ( doc )
settings = Settings ()
settings . llm = "claude-3-5-sonnet-20240620"
settings . answer . answer_max_sources = 3
answer = docs . query (
"What manufacturing challenges are unique to bispecific antibodies?" ,
settings = settings ,
)
print ( answer . formatted_answer )PaperQA2被編寫為異步使用。同步API只是異步周圍的包裝器。這是方法及其async等效物:
| 同步 | 異步 |
|---|---|
Docs.add | Docs.aadd |
Docs.add_file | Docs.aadd_file |
Docs.add_url | Docs.aadd_url |
Docs.get_evidence | Docs.aget_evidence |
Docs.query | Docs.aquery |
同步版本僅在循環中調用異步版本。大多數現代的Python環境本地支持async (包括Jupyter筆記本!)。因此,您可以在Jupyter筆記本中執行此操作:
import asyncio
from paperqa import Docs
async def main () -> None :
docs = Docs ()
# valid extensions include .pdf, .txt, and .html
for doc in ( "myfile.pdf" , "myotherfile.pdf" ):
await docs . aadd ( doc )
answer = await docs . aquery (
"What manufacturing challenges are unique to bispecific antibodies?"
)
print ( answer . formatted_answer )
asyncio . run ( main ())默認情況下,它對重新排序和摘要步驟, summary_llm設置以及答案步驟llm設置)使用OpenAI模型,其中包括gpt-4o-2024-08-06 。您可以輕鬆調整此:
from paperqa import Settings , ask
answer = ask (
"What manufacturing challenges are unique to bispecific antibodies?" ,
settings = Settings (
llm = "gpt-4o-mini" , summary_llm = "gpt-4o-mini" , paper_directory = "my_papers"
),
)您可以使用litellm支持的人類或任何其他模型:
from paperqa import Settings , ask
answer = ask (
"What manufacturing challenges are unique to bispecific antibodies?" ,
settings = Settings (
llm = "claude-3-5-sonnet-20240620" , summary_llm = "claude-3-5-sonnet-20240620"
),
)您可以使用Llama.cpp作為LLM。請注意,您應該使用相對較大的型號,因為PaperQA2需要按照很多說明。 7B型號您將無法獲得良好的性能。
獲得設置的最簡單方法是下載Llama文件並使用-cb -np 4 -a my-llm-model --embedding執行,該文件將啟用連續的批處理和嵌入。
from paperqa import Settings , ask
local_llm_config = dict (
model_list = [
dict (
model_name = "my_llm_model" ,
litellm_params = dict (
model = "my-llm-model" ,
api_base = "http://localhost:8080/v1" ,
api_key = "sk-no-key-required" ,
temperature = 0.1 ,
frequency_penalty = 1.5 ,
max_tokens = 512 ,
),
)
]
)
answer = ask (
"What manufacturing challenges are unique to bispecific antibodies?" ,
settings = Settings (
llm = "my-llm-model" ,
llm_config = local_llm_config ,
summary_llm = "my-llm-model" ,
summary_llm_config = local_llm_config ,
),
)還支持由ollama主持的模型。要運行下面的示例,請確保您通過Ollama下載了Llama3.2和Mxbai-embed-large。
from paperqa import Settings , ask
local_llm_config = {
"model_list" : [
{
"model_name" : "ollama/llama3.2" ,
"litellm_params" : {
"model" : "ollama/llama3.2" ,
"api_base" : "http://localhost:11434" ,
},
}
]
}
answer = ask (
"What manufacturing challenges are unique to bispecific antibodies?" ,
settings = Settings (
llm = "ollama/llama3.2" ,
llm_config = local_llm_config ,
summary_llm = "ollama/llama3.2" ,
summary_llm_config = local_llm_config ,
embedding = "ollama/mxbai-embed-large" ,
),
)PaperQA2默認使用OpenAI( text-embedding-3-small )嵌入,但對矢量存儲和嵌入選擇都具有靈活的選項。更改嵌入的最簡單方法是通過embedding參數到Settings對象構造函數:
from paperqa import Settings , ask
answer = ask (
"What manufacturing challenges are unique to bispecific antibodies?" ,
settings = Settings ( embedding = "text-embedding-3-large" ),
) embedding接受Litellm支持的任何嵌入模型名稱。 PaperQA2還支持"hybrid-<model_name>" ie "hybrid-text-embedding-3-small"的嵌入輸入,以使用混合稀疏關鍵字(基於令牌模量嵌入)和密集的矢量,並在任何LITELLM模型中嵌入任何LITELLM模型,在密集的型號名稱中使用。 "sparse"只能使用稀疏的關鍵字嵌入。
嵌入模型用於創建全文嵌入向量的PaperQA2的索引( texts_index參數)。當您向Docs對象添加新論文時,可以將嵌入模型指定為設置:
from paperqa import Docs , Settings
docs = Docs ()
for doc in ( "myfile.pdf" , "myotherfile.pdf" ):
docs . add ( doc , settings = Settings ( embedding = "text-embedding-large-3" ))請注意,PaperQA2使用Numpy作為密集的矢量存儲。它使用關鍵字搜索的設計最初將每個答案所需的塊數減少到相對較小的數字<1k。因此, NumpyVectorStore是一個不錯的起點,它是一個簡單的內存商店,沒有索引。但是,如果需要大型內存矢量商店,我們目前在這裡缺乏。
可以自定義混合嵌入:
from paperqa import (
Docs ,
HybridEmbeddingModel ,
SparseEmbeddingModel ,
LiteLLMEmbeddingModel ,
)
model = HybridEmbeddingModel (
models = [ LiteLLMEmbeddingModel (), SparseEmbeddingModel ( ndim = 1024 )]
)
docs = Docs ()
for doc in ( "myfile.pdf" , "myotherfile.pdf" ):
docs . add ( doc , embedding_model = model )稀疏嵌入(關鍵字)模型默認為具有256個維度,但可以通過ndim參數指定。
如果您安裝sentence-transformers ,則可以使用SentenceTransformerEmbeddingModel模型,該模型是一個本地嵌入式庫,支持擁抱面模型等。您可以通過添加local額外功能來安裝它。
pip install paper-qa[local]然後將模型名稱嵌入st- :
from paperqa import Settings , ask
answer = ask (
"What manufacturing challenges are unique to bispecific antibodies?" ,
settings = Settings ( embedding = "st-multi-qa-MiniLM-L6-cos-v1" ),
)或使用混合模型
from paperqa import Settings , ask
answer = ask (
"What manufacturing challenges are unique to bispecific antibodies?" ,
settings = Settings ( embedding = "hybrid-st-multi-qa-MiniLM-L6-cos-v1" ),
)您可以調整源數(文本的段落)以減少令牌使用情況或添加更多上下文。 k是指最相關和最多樣化(可能來自不同來源)段落的頂級K。每個段落都發送到LLM以匯總或確定它是無關緊要的。在此步驟之後,應用了max_sources的限制,以便最終答案可以適合LLM上下文窗口。因此, k > max_sources和max_sources是最終答案中使用的源數。
from paperqa import Settings
settings = Settings ()
settings . answer . answer_max_sources = 3
settings . answer . k = 5
docs . query (
"What manufacturing challenges are unique to bispecific antibodies?" ,
settings = settings ,
)您不需要使用論文 - 您可以使用代碼或原始HTML。請注意,該工具專注於回答問題,因此編寫代碼無法很好地完成問題。一個值得注意的是該工具不能從代碼中推斷引用,因此您需要自己提供它們。
import glob
import os
from paperqa import Docs
source_files = glob . glob ( "**/*.js" )
docs = Docs ()
for f in source_files :
# this assumes the file names are unique in code
docs . add ( f , citation = "File " + os . path . name ( f ), docname = os . path . name ( f ))
answer = docs . query ( "Where is the search bar in the header defined?" )
print ( answer )您可能需要在外部數據庫或文件中緩存解析的文本和嵌入。然後,您可以直接從這些對象構建文檔對象:
from paperqa import Docs , Doc , Text
docs = Docs ()
for ... in my_docs :
doc = Doc ( docname = ..., citation = ..., dockey = ..., citation = ...)
texts = [ Text ( text = ..., name = ..., doc = doc ) for ... in my_texts ]
docs . add_texts ( texts , doc )默認情況下,索引將放置在主目錄中。這可以通過PQA_HOME環境變量來控制。
索引是通過在Settings.paper_directory中讀取文件來製作索引。默認情況下,除非使用Settings.index_recursively distabled,否則我們會從紙張目錄的子目錄中遞歸閱讀。紙目錄不會以任何方式修改,它只是從中讀取的。
索引過程試圖使用llm驅動的文本處理來推斷紙元數據,例如標題和doi。您可以使用“清單”文件避免此不確定性,該文件是包含三列(順序無關緊要)的CSV:
file_location :索引目錄中論文PDF的相對路徑doi :紙上的doititle :紙的標題通過提供此信息,我們確保對像CrossRef這樣的元數據提供商進行查詢是準確的。
本地搜索索引是基於當前Settings對象的哈希構建的。因此,請確保您正確地將paper_directory指定到Settings對象。通常,建議:
import os
from paperqa import Settings
from paperqa . agents . main import agent_query
from paperqa . agents . models import QueryRequest
from paperqa . agents . search import get_directory_index
async def amain ( folder_of_papers : str | os . PathLike ) -> None :
settings = Settings ( paper_directory = folder_of_papers )
# 1. Build the index. Note an index name is autogenerated when unspecified
built_index = await get_directory_index ( settings = settings )
print ( settings . get_index_name ()) # Display the autogenerated index name
print ( await built_index . index_files ) # Display the index contents
# 2. Use the settings as many times as you want with ask
answer_response_1 = await agent_query (
query = QueryRequest (
query = "What is the best way to make a vaccine?" , settings = settings
)
)
answer_response_2 = await agent_query (
query = QueryRequest (
query = "What manufacturing challenges are unique to bispecific antibodies?" ,
settings = settings ,
)
)在paperqa/agents/task.py中,您會發現:
GradablePaperQAEnvironment :一個可以給定評估功能的答案的環境。LitQAv2TaskDataset :一個旨在將LITQA V2拉開的任務數據集,並創建一個GradablePaperQAEnvironment這是如何使用它們的示例:
import os
from aviary . env import TaskDataset
from ldp . agent import SimpleAgent
from ldp . alg . callbacks import MeanMetricsCallback
from ldp . alg . runners import Evaluator , EvaluatorConfig
from paperqa import QueryRequest , Settings
from paperqa . agents . task import TASK_DATASET_NAME
async def evaluate ( folder_of_litqa_v2_papers : str | os . PathLike ) -> None :
base_query = QueryRequest (
settings = Settings ( paper_directory = folder_of_litqa_v2_papers )
)
dataset = TaskDataset . from_name ( TASK_DATASET_NAME , base_query = base_query )
metrics_callback = MeanMetricsCallback ( eval_dataset = dataset )
evaluator = Evaluator (
config = EvaluatorConfig ( batch_size = 3 ),
agent = SimpleAgent (),
dataset = dataset ,
callbacks = [ metrics_callback ],
)
await evaluator . evaluate ()
print ( metrics_callback . eval_means )PaperQA2最強大的功能之一是它可以結合來自多個元數據源的數據的能力。例如,UndayWall可以提供開放訪問狀態/直接鏈接到PDF,CrossRef可以提供Bibtex,語義學者可以提供引用許可。這是如何做到這一點的簡短演示:
from paperqa . clients import DocMetadataClient , ALL_CLIENTS
client = DocMetadataClient ( clients = ALL_CLIENTS )
details = await client . query ( title = "Augmenting language models with chemistry tools" )
print ( details . formatted_citation )
# Andres M. Bran, Sam Cox, Oliver Schilter, Carlo Baldassari, Andrew D. White, and Philippe Schwaller.
# Augmenting large language models with chemistry tools. Nature Machine Intelligence,
# 6:525-535, May 2024. URL: https://doi.org/10.1038/s42256-024-00832-8,
# doi:10.1038/s42256-024-00832-8.
# This article has 243 citations and is from a domain leading peer-reviewed journal.
print ( details . citation_count )
# 243
print ( details . license )
# cc-by
print ( details . pdf_url )
# https://www.nature.com/articles/s42256-024-00832-8.pdf client.query旨在檢查標題的精確匹配。這有點堅固(就像外殼一樣,錯過一個單詞)。但是,標題有重複的內容 - 因此您還可以添加作者來消除歧義。或者,您可以直接提供doi client.query(doi="10.1038/s42256-024-00832-8")
如果您大規模這樣做,則可能不想使用ALL_CLIENTS (只需省略參數),並且可以指定要加快查詢的特定字段。例如:
details = await client . query (
title = "Augmenting large language models with chemistry tools" ,
authors = [ "Andres M. Bran" , "Sam Cox" ],
fields = [ "title" , "doi" ],
)返回的速度將比第一個查詢快得多,我們將確定作者匹配。
好吧,這是一個非常好的問題!最好只下載您認為的論文PDF,從而有助於回答您的問題並從那裡開始。
自從我們已經測試過以來已經有一段時間了 - 因此,讓我們知道它是否遇到問題!
如果您使用Zotero組織您的個人參考書目,則可以使用paperqa.contrib.ZoteroDB來查詢庫的紙張,該庫依賴於Pyzotero。
通過zotero額外安裝pyzotero此功能:
pip install paperqa[zotero]首先,請注意,PaperQA2解析了存儲在數據庫中的紙張的PDF,因此所有相關的論文都應在數據庫中存儲PDF。您可以通過突出顯示要檢索,右鍵單擊並選擇“可用PDFS”的參考文獻來自動執行此操作。您也可以將拖放PDF手動到每個引用。
要下載論文,您需要獲取帳戶的API密鑰。
ZOTERO_USER_ID 。https://www.zotero.org/groups/groupname ,然後在設置鏈接上懸停。 ID是 /組之後的整數。 ( H/T Pyzotero! )ZOTERO_API_KEY 。這樣,我們可以從庫中下載論文並將其添加到PaperQA2:
from paperqa import Docs
from paperqa . contrib import ZoteroDB
docs = Docs ()
zotero = ZoteroDB ( library_type = "user" ) # "group" if group library
for item in zotero . iterate ( limit = 20 ):
if item . num_pages > 30 :
continue # skip long papers
docs . add ( item . pdf , docname = item . key )它將在您的Zotero數據庫中下載前20篇論文,並將其添加到Docs對像中。
我們還可以對Zotero庫進行特定的查詢,並迭代結果:
for item in zotero . iterate (
q = "large language models" ,
qmode = "everything" ,
sort = "date" ,
direction = "desc" ,
limit = 100 ,
):
print ( "Adding" , item . title )
docs . add ( item . pdf , docname = item . key )您可以通過鍵入zotero.iterate?在Ipython。
如果您想在自己的收藏集外搜索論文,我找到了一個無關的項目,稱為紙造紙,看起來可能會有所幫助。但是要當心,這個項目看起來使用了一些可能侵犯出版商權利或處於合法性的刮擦工具。
from paperqa import Docs
keyword_search = "bispecific antibody manufacture"
papers = paperscraper . search_papers ( keyword_search )
docs = Docs ()
for path , data in papers . items ():
try :
docs . add ( path )
except ValueError as e :
# sometimes this happens if PDFs aren't downloaded or readable
print ( "Could not read" , path , e )
answer = docs . query (
"What manufacturing challenges are unique to bispecific antibodies?"
)
print ( answer )要在LLM完成的每個塊上執行一個函數,您需要提供一個可以在每個塊上執行的函數。例如,要獲取完整的打字機視圖,您可以做:
def typewriter ( chunk : str ) -> None :
print ( chunk , end = "" )
docs = Docs ()
# add some docs...
docs . query (
"What manufacturing challenges are unique to bispecific antibodies?" ,
callbacks = [ typewriter ],
)通常,當您醃製Docs時,無論您使用哪種矢量商店,都會將嵌入式嵌入。因此,只要您保存基礎Docs對象,就應該能夠避免重新安裝文檔。
您可以使用設置自定義任何提示。
from paperqa import Docs , Settings
my_qa_prompt = (
"Answer the question '{question}' n "
"Use the context below if helpful. "
"You can cite the context using the key like (Example2012). "
"If there is insufficient context, write a poem "
"about how you cannot answer. n n "
"Context: {context}"
)
docs = Docs ()
settings = Settings ()
settings . prompts . qa = my_qa_prompt
docs . query ( "Are covid-19 vaccines effective?" , settings = settings )遵循上面的語法,您還可以包括查詢後和查詢之前執行的提示。例如,您可以使用它來批評答案。
在內部,我們有一套略有不同的工具。我們正在努力將其中一些(例如引用遍歷)進入此倉庫。但是,我們擁有API和許可證,可以訪問無法公開分享的研究論文。同樣,在我們的研究論文的結果中,我們也不是從已知的相關PDF開始。我們的經紀人必須使用所有論文中的關鍵字搜索來識別它們,而不僅僅是子集。我們逐漸將這兩個版本的PaperQA對齊,但是直到有一種開源方式來自由訪問論文(即使只是開源論文),您將需要自己提供PDF。
Langchain和LlamainDex都是用於使用LLM應用程序的框架,並為代理工作流程和檢索增強發電提供了抽象。
隨著時間的流逝,隨著時間的流逝,PaperQA團隊選擇成為框架 - 敏捷的劑量,而是將LLM驅動程序外包給Litellm,除了Pydantic以外,沒有框架以使用其工具。 PaperQA專注於科學論文及其元數據。
可以使用LlamainDex或Langchain重新完成PaperQA。例如,可以通過基於LLM的重新排列和上下文摘要來重新將我們的GatherEvidence工具重新成真。 Llamaindex中的樹響應方法也有類似的工作。
Docs課可以被醃製和未挑選。如果要保存文檔的嵌入,然後再加載它們,這將很有用。
import pickle
# save
with open ( "my_docs.pkl" , "wb" ) as f :
pickle . dump ( docs , f )
# load
with open ( "my_docs.pkl" , "rb" ) as f :
docs = pickle . load ( f )包含在文檔/2024-10-16_litqa2-splits.json5中的問題ID(與Lab-Bench的LITQA2問題ID相對應),用於火車和評估拆分,以及用於構建火車和評估索引的紙DOIS 。測試拆分仍保持不變。
如果您使用此軟件,請閱讀並引用以下論文:
@article { skarlinski2024language ,
title = { Language agents achieve superhuman synthesis of scientific knowledge } ,
author = {
Michael D. Skarlinski and
Sam Cox and
Jon M. Laurent and
James D. Braza and
Michaela Hinks and
Michael J. Hammerling and
Manvitha Ponnapati and
Samuel G. Rodriques and
Andrew D. White } ,
year = { 2024 } ,
journal = { arXiv preprent arXiv:2409.13740 } ,
url = { https://doi.org/10.48550/arXiv.2409.13740 }
} @article { lala2023paperqa ,
title = { PaperQA: Retrieval-Augmented Generative Agent for Scientific Research } ,
author = {
Jakub Lála and
Odhran O'Donoghue and
Aleksandar Shtedritski and
Sam Cox and
Samuel G. Rodriques and
Andrew D. White } ,
journal = { arXiv preprint arXiv:2312.07559 } ,
year = { 2023 }
}