关于 biolit
biolit 是面向生物医学研究者的文献筛选与结构化提取工具,可处理 PubMed、DOI 和 GEO 标识符,并通过多种 LLM 提取内容。它可将整套流程作为 MCP 工具提供。
主要功能
- 01混合 PMID、DOI 和 GEO 标识符
- 02按自定义标准筛选文献
- 03提取指定字段并导出 CSV
- 04检索论文全文及摘要
- 05生成 Markdown 摘要
- 06支持多种 LLM 提供方
适用场景
- 01整理 PubMed 提醒邮件中的研究
- 02筛选与研究问题相关的论文
- 03从 GEO 记录提取实验信息
- 04汇总每周批量文献列表
MCP 相关
biolit 提供 MCP 服务,将文献检索、筛选和提取流程作为工具开放给兼容客户端。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
uvx biolitANTHROPIC_API_KEY密钥Anthropic API key (required when using the default Anthropic provider)OPENAI_API_KEY密钥OpenAI API key (required when using LLM_PROVIDER=openai)LLM_PROVIDERLLM provider: anthropic (default), openai, or ollamaLLM_MODELModel name override (e.g. claude-sonnet-4-6, gpt-4o)SEMANTIC_SCHOLAR_API_KEY密钥Semantic Scholar API key for higher rate limits on citation lookup (optional)UNPAYWALL_EMAILEmail address for Unpaywall API access to improve PDF retrieval (optional)本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
biolit
mcp-name: io.github.rachadele/biolit
借助 LLM 进行生物医学文献筛选和结构化提取。支持接收 PubMed 提醒邮件,以及任意组合的 PMID、DOI 和 GEO accession 混合列表。从 PMC、Europe PMC、bioRxiv/medRxiv、Unpaywall 和 Semantic Scholar 获取全文。支持多个 LLM 提供商,并将所有功能作为 MCP 服务提供。
设置
要求: Python 3.8+
从 PyPI 安装:
pip install biolit
或者从源代码安装以进行开发:
pip install -e .
将 .env.example 复制为 .env,并添加你的 API 密钥:
cp .env.example .env
# edit .env and set ANTHROPIC_API_KEY (or OPENAI_API_KEY)
在 macOS 上,你可以将密钥存储在系统钥匙串中,而不是 .env。biolit 仅按服务名称查询钥匙串(无需账户):
security add-generic-password -s ANTHROPIC_API_KEY -w
# or for OpenAI:
security add-generic-password -s OPENAI_API_KEY -w
省略 -w <value>,即可在不回显内容的情况下输入密钥。程序会先检查钥匙串;只有在找不到时才会使用环境变量(因此,.env 中过期的值不会覆盖可用的钥匙串条目)。
使用方法
该工具接受 PubMed 提醒邮件(.eml)、纯文本标识符文件,以及通过 --ids 传入的内联标识符。标识符可以是 PMID、DOI 或 GEO accession;单次运行支持混合列表。
| 输入 | 传入方式 | 示例 |
|---|---|---|
| PubMed 提醒邮件 | 位置参数 .eml 文件 | alert.eml |
| BibTeX 文件 | 位置参数 .bib 文件 | refs.bib |
| 标识符文件(混合) | 位置参数纯文本文件,每行一个 | identifiers.txt |
| 内联标识符 | --ids 标志,以逗号分隔 | --ids 41795042,GSE53987,10.1101/2025.03.17.25324098 |
使用 --default,即可采用精神分裂症基因组学默认设置运行(无需提示):
biolit docs/alert.eml --default
biolit docs/pmids.txt --default
biolit docs/geo_accessions.txt --default
biolit --ids 41795042,41792186,GSE53987 --default
biolit --ids 10.1101/2025.03.17.25324098 --default
或者通过标志指定筛选标准和字段:
biolit identifiers.txt \
--criterion "Is this about treatment-resistant schizophrenia?" \
--fields "methodology, sample_size, treatment, outcomes"
添加 --markdown(或 --md),即可在 CSV 旁边一并生成文字版 .md 摘要。每条记录都有一个 Markdown 章节,其中包含 ### field 子章节;处理失败或被跳过的记录则以占位条目显示:
biolit refs.bib --config my_config.json --markdown
biolit refs.bib --config my_config.json --markdown --markdown-max-tokens 2048
添加 --batch,即可通过提供商的 Message Batches / Batch API 批量执行筛选、提取和 Markdown 渲染,而不是逐条调用。每次请求的成本可降低约 50%,但每个批次都需要等待完成(每个阶段通常需要几分钟,最长可达 6 小时),因此适用于每周批量处理提醒,而非偶尔查询。仅支持 Anthropic 和 OpenAI;使用 Ollama 或带有自定义 base_url 的 OpenAI 兼容端点时,会回退到顺序调用。配置文件中也可以设置 "batch": true。
biolit docs/alert.eml --default --batch
biolit docs/alert.eml --default --batch --markdown # batches markdown too
或者使用 JSON 配置文件保存可重复使用的参数(CLI 标志优先)。配置中可以包含 ids 或 input_file(指向 .eml、.bib 或标识符列表的路径),以及用于启用 Markdown 输出的 "markdown": true:
biolit alert.eml --config my_config.json
biolit refs.bib --config my_config.json # DOIs extracted from .bib automatically
biolit --config my_config.json # ids or input_file supplied by config
配置文件中的 fields 键可以是逗号分隔的字符串,也可以是将字段名称映射到提取说明的 JSON 对象。使用字符串时,提取前会额外调用一次 LLM,将字段名称转换为说明。使用字典时则会跳过这次调用,直接将说明传递给模型:
{
"fields": {
"tf_name": "HGNC symbol of the transcription factor perturbed in this experiment",
"organism": "scientific name of the organism used",
"platform": "GPL accession of the microarray platform"
}
}
省略 --criterion 可跳过筛选(提取所有记录)。省略 --fields 则使用默认字段(methodology, sample_type, causal_claims, summary):
# fetch + extract with defaults (no screening)
biolit alert.eml
# fetch + screen only, then extract with defaults
biolit alert.eml --criterion "Is this about treatment-resistant schizophrenia?"
单条记录筛选
使用 biolit screen 可快速检查一篇论文或 GEO 记录是否相关,无需运行完整的提取流程:
biolit screen --pmid 41627908 --default
biolit screen --accession GSE53987 --default
biolit screen --doi 10.64898/2026.02.16.706214 --default
biolit screen --pmid 41627908 --criterion "Is this about treatment-resistant schizophrenia?"
输出为 stdout 中的一行:
RELEVANT [abstract] — Paper uses GWAS to investigate schizophrenia risk loci.
混合标识符列表
PMID、DOI 和 GEO accession 可在文件或通过 --ids 任意混合。系统会根据格式自动识别每个标识符:
41795042→ PMID(纯数字)10.1101/2025.03.17.25324098→ DOI(以10.开头)GSE53987→ GEO accession(以GSE、GDS、GSM或GPL开头)
biolit --ids 41795042,GSE53987,10.1101/2025.03.17.25324098 --default
GEO 记录还包含 linked_pmids 列。所有记录类型都包含 pmid、doi 和 geo_accession 列(不适用时为 null)。
全文检索
系统会自动检索每个 PMID 和 DOI(包括预印本)的全文。对于 GEO 记录,流水线会按顺序尝试通过每个关联的 PMID 检索全文;如果没有关联论文可获取全文,则回退到 GEO 记录元数据。流水线会按以下顺序尝试各个来源:
- PMC JATS XML(开放获取)
- Europe PMC JATS XML(开放获取覆盖范围更广)
- 预印本 XML(bioRxiv / medRxiv)
- Unpaywall PDF(需要
--unpaywall-email) - Semantic Scholar 开放获取 PDF
- OpenAlex green-OA PDF(Unpaywall / S2 未收录的作者稿件;无需密钥)
- Europe PMC 开放获取全文 PDF(开放获取子集)
- CORE 汇总的 green-OA PDF(选择启用;需要
CORE_API_KEY) - 出版商落地页抓取(
citation_pdf_url元标签;无需密钥) - 自定义解析器(机构 OpenURL / 图书馆代理;通过
BIOLIT_CUSTOM_RESOLVERS选择启用) - 出版商落地页 HTML 全文(
citation_fulltext_html_url元标签;无需密钥) - 摘要回退
第 6–9 步仅检索开放获取内容(green-OA 作者稿件、机构知识库副本,以及出版商自行标注的开放获取 PDF 链接)——绝不绕过付费墙。OpenAlex、Europe PMC 和落地页抓取无需密钥;除非设置了 CORE_API_KEY,否则 CORE 不会执行任何操作。落地页抓取(第 9 步)会根据 DOI 跳转到文章页面,并读取出版商自行嵌入的 citation_pdf_url 链接(Highwire / Google-Scholar 标准)——借此找到聚合 API 错误标记或未收录的开放获取 PDF。此步骤会跳过 bioRxiv / medRxiv(它们的服务器会拦截 Agent;上面的预印本步骤已覆盖它们)。第 10 步是接入你自己获准使用的访问方式的接口——参见自定义全文获取器。第 11 步是第 9 步对应的 HTML 版本:如果完全没有可下载的 PDF,它会从出版商的 HTML 全文页面中提取文章正文(即 PLOS / eLife / BMC / Frontiers 和许多学会期刊设置的 citation_fulltext_html_url Highwire 信号),从而获取 PDF 检索链路始终无法触及的开放获取论文中的方法部分。如果连这一步也未能找到全文,摘要回退会在每条记录的产物中记录 paper_status 分类(bot_blocked / js_shell / abstract),以便调用方了解未能获取全文的原因。
如需启用 Unpaywall(第 4 步),请传入你的电子邮件:
biolit alert.eml --default --unpaywall-email [email protected]
限制发送给大模型的章节:
biolit alert.eml --default --sections methods,results
大模型提供方
此工具支持 Anthropic(默认)、OpenAI 和本地 Ollama 模型:
# OpenAI
biolit pmids.txt --default --provider openai --model gpt-4o
# Ollama (local)
biolit pmids.txt --default --provider ollama --model llama3
你也可以将 LLM_PROVIDER 和 LLM_MODEL 设置为环境变量。
输出
每次运行都会创建一个带时间戳的目录(例如 run_20260313_142000/),其中包含:
results.csv— 每条相关记录占一行results.md— Markdown 文本摘要(使用--markdown或在配置中设置"markdown": true时生成)artifacts/<id>/— 每条记录对应的文件夹,包含发送给 LLM 的文本、元数据以及检索到的全文文件
在任一流水线阶段失败的记录(获取错误、未找到、无内容、筛选或提取错误)不会纳入 CSV,但会以带有失败说明的占位条目出现在 Markdown 中。
使用默认字段时,CSV 列如下:
| 列 | 描述 |
|---|---|
title | 论文标题 |
authors | 作者列表(逗号分隔;从 PubMed XML、bioRxiv/medRxiv API 或 GEO 贡献者信息中解析) |
url | PubMed、GEO 或 DOI 链接 |
pmid | PubMed ID(未编入索引的预印本为 null) |
doi | DOI(GEO 记录为 null) |
geo_accession | GEO 登录号(非 GEO 记录为 null) |
text_source | 文本来源(abstract、pmc_fulltext、europepmc_fulltext、preprint_fulltext、unpaywall_pdf、s2_pdf、openalex_pdf、europepmc_oa_pdf、core_pdf、landing_page_pdf、custom_resolver_pdf、landing_page_html、geo_linked_fulltext、geo_linked_abstract、geo_record) |
citation_count | Semantic Scholar 的引用次数(未找到时为 null) |
methodology | 一般方法(例如 GWAS、scRNA-seq、蛋白质组学) |
sample_type | 组织/样本类型及来源 |
causal_claims | 根据数据推断出的关于精神分裂症病因的陈述 |
summary | 用于初筛的 2-3 句通俗摘要 |
GEO 记录还会包含 linked_pmids 列,列出所有关联的 PubMed ID。
可将 CSV 直接导入 Google Sheets(文件 → 导入)。
MCP 服务
biolit 提供 MCP 服务,可将流水线作为工具开放给任何兼容 MCP 的客户端(Claude Desktop、Claude CLI、OpenAI Agents SDK 等)。
启动服务:
biolit-mcp
# or pick a provider/model explicitly (overrides LLM_PROVIDER / LLM_MODEL env vars):
biolit-mcp --provider openai --model gpt-4o-mini
或者使用 MCP inspector 进行交互式测试:
mcp dev biolit/mcp_server.py
配置 Claude Desktop
将以下内容添加到 ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"biolit": {
"command": "biolit-mcp",
"args": ["--provider", "openai"]
}
}
}
重启 Claude Desktop。工具将显示在工具选择器中。移除 args 即可使用默认的 Anthropic 提供方(或改为设置 LLM_PROVIDER / LLM_MODEL 环境变量)。
配置 Claude CLI
在项目根目录中添加 .mcp.json:
{
"mcpServers": {
"biolit": {
"command": "biolit-mcp",
"args": ["--provider", "openai"]
}
}
}
可用工具
批处理流程(相当于 biolit CLI):
| 工具 | 描述 |
|---|---|
run_pipeline | 获取、按需筛选并按需提取混合列表中的 PMID、DOI 和/或 GEO 登录号;写入结果 CSV(并可在 markdown=True 时生成 .md 摘要)。接受 ids(逗号分隔)、bib_path(.bib 文件)或 ids_file(纯文本标识符文件)。传入 sections(逗号分隔,例如 "methods,results"),可限制传给 LLM 的全文章节。使用 max_tokens 限制输入文本长度(默认值为 12500),使用 extraction_max_tokens 限制字段提取输出长度(默认值为 4096),使用 markdown_max_tokens 限制 Markdown 渲染长度(默认值为 1024)。任意 token 参数传入 0 即使用默认值。传入 batch=True,即可通过提供方的批处理 API 执行筛选、提取和 Markdown 渲染(费用约低 50%,等待任务完成后才返回)。所有参数均为可选——仅传入 config_path,即可通过 JSON 文件驱动整个运行流程。 |
底层工具(用于自定义工作流):
| 工具 | 描述 |
|---|---|
fetch_pubmed_metadata | 按 PMID 获取 PubMed 元数据 |
fetch_geo_record | 获取并解析 GEO 记录(按登录号) |
fetch_fulltext | 获取 PMID 对应的全文(6 步链) |
fetch_geo_fulltext | 通过关联的 PMID 获取 GEO 登录号对应的全文 |
fetch_supplementary | 通过 Europe PMC 获取论文补充文件(补充方法、表格)并提取其中的文本 |
screen_paper | 根据预先获取的文本,使用 LLM 进行相关性筛选 |
extract_fields | 根据预先获取的文本进行结构化字段提取 |
resolve_doi | 通过 NCBI ID Converter 将 DOI 解析为 PMID + PMCID |
lookup_s2_pdf | 检查 Semantic Scholar 是否提供该 DOI 对应的开放获取 PDF |
read_pmids_from_eml | 从 PubMed 提醒 .eml 文件中解析 PMID |
get_version | 返回已安装的 biolit 软件包版本 |
用作 Python 库
可直接导入流程函数:
from biolit.pipeline import run, screen_paper, fetch_record
from biolit.llm import get_llm_client
client = get_llm_client("anthropic")
# Batch pipeline — PMIDs, DOIs, and GEO accessions can be mixed freely
# criterion and fields_description are optional; omit either to skip that step
# markdown=True writes results.md alongside the CSV
# Returns (csv_path, record_count)
csv_path, count = run(client, ids=["41627908", "GSE53987", "10.1101/2025.03.17.25324098"],
criterion="...", fields_description="methodology, summary", output_path="results.csv",
markdown=True)
# Fetch + write metadata only (no LLM calls)
csv_path, count = run(client, ids=["41627908", "GSE53987"])
# Fetch a single record (auto-detects PMID / DOI / GEO)
paper = fetch_record("10.1101/2025.03.17.25324098")
# Screen pre-fetched text
result = screen_paper(client, paper, "Is this about schizophrenia genomics?", paper["abstract"])
# {"relevant": True, "reason": "..."}
自定义全文获取器
内置链(PMC → Europe PMC → 预印本 → Unpaywall → Semantic Scholar → OpenAlex → Europe PMC OA PDF → CORE → 落地页 PDF 抓取 → 自定义解析器 → 落地页 HTML → 摘要)无法覆盖部分无法开放访问或近期发表的研究。你可以接入其他全文来源 ——Zotero 文献库、本地 PDF 目录、机构全文数据库——而无需分叉 biolit。
落地页抓取和自定义解析器(内置,通过环境变量选择启用)
两个内置链式步骤与 Zotero 的“查找全文”文件解析器相对应,配置方式与 Unpaywall / CORE 相同——通过环境变量,无需修改代码。
落地页抓取(步骤 9)。 始终启用,无需密钥。将 DOI 解析到出版商的文章页面,并读取页面自身公布的 PDF 链接——优先查找 <meta name="citation_pdf_url">(大多数出版商嵌入的 Highwire / Google-Scholar 标准),然后查找 <link rel="alternate" type="application/pdf">、Open Graph / Twitter 卡片中的 PDF 指针,以及明显的 *.pdf 锚点。<meta http-equiv="refresh"> 重定向只跟随一次;每个候选链接都会验证其内容是否以 %PDF 魔数开头。这会沿用出版商自行公布的开放获取(OA)链接,而不是绕过付费墙;还能找到聚合 API 错误标记或从未索引的 OA PDF。跳过 bioRxiv / medRxiv(其服务器会屏蔽 Agent;预印本步骤会处理它们)。来源标签:landing_page_pdf。
# Optional: override the browser User-Agent used for the landing-page
# request (some publishers serve a stub or 403 to non-browser agents).
export BIOLIT_LANDING_USER_AGENT="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36"
落地页 HTML 全文(步骤 11)。 始终启用,无需密钥。步骤 9 的 HTML 对应步骤。当任何位置都未找到可下载的 PDF 时,此步骤会沿 DOI 跳转到文章页面,读取出版商 <meta name="citation_fulltext_html_url"> 中“存在完整 HTML 版本”的信号(PLOS / eLife / BMC / Frontiers 及许多学会期刊都会设置该信号),并提取文章正文文本——剔除导航、脚本、样式和页面边框内容,并优先使用 <article> / <main> 容器。这样可以找回完全没有 PDF 的 OA 论文中的方法部分。对于机器人验证页面(Cloudflare 的“Just a moment”)和由 JavaScript 渲染的空壳页面,会直接拒绝,而不会将其作为“文本”返回。跳过 bioRxiv / medRxiv(预印本步骤会处理它们)。来源标签:landing_page_html。此步骤共用上文的 BIOLIT_LANDING_USER_AGENT 覆盖设置。
当整个链式流程都未找到全文时,摘要回退逻辑会判定未能获取全文的原因(bot_blocked / js_shell / abstract),并将其作为 paper_status 记录在每条记录的产物中,以便下游调用者区分“被机器人验证拦截”“出版商仅提供 JS 空壳页面”和“确实只有摘要”。
# Optional: visible-character floor below which a fetched landing page is
# treated as a JS-rendered shell (no server-rendered article body) rather
# than full text. Default 2000.
export BIOLIT_JS_SHELL_CHAR_THRESHOLD=2000
自定义解析器(步骤 10)。 选择启用。这是接入你自己有权使用的访问方式的接口,通常是你所在机构的 OpenURL 端点或图书馆 EZproxy URL 模式。将 BIOLIT_CUSTOM_RESOLVERS 设置为解析器条目组成的 JSON 数组。每个条目都需要包含带有 {doi} / {url} 占位符的 url_template;系统会使用你配置的请求头获取该 URL,并在确认其为真实 PDF 后返回。如果解析出的 URL 是 OpenURL / 代理落地页而非直接指向 PDF,请设置 "scrape": true,通过上文的落地页抓取器处理其 HTML。未配置时,此步骤不执行任何操作。来源标签:
custom_resolver_pdf。
export BIOLIT_CUSTOM_RESOLVERS='[
{
"url_template": "https://proxy.lib.example.edu/login?url=https://doi.org/{doi}",
"headers": {"Cookie": "ezproxy=YOUR_SESSION"},
"scrape": true
},
{
"url_template": "https://resolver.example.edu/openurl?id=doi:{doi_encoded}&svc=fulltext"
}
]'
解析器条目结构(仅 url_template 为必填项):
| 键 | 含义 |
|---|---|
url_template | 带有 {doi}、{doi_encoded}(经过 URL 编码)、{url}、{url_encoded} 占位符的 URL。如果模板所需的值不可用,则跳过该条目。 |
user_agent | 可选的单条目 User-Agent 覆盖设置。 |
headers | 可选的额外请求头字典(例如代理会话的 Cookie)。 |
scrape | 可选布尔值——设为 true 且解析出的 URL 返回 HTML 时,通过落地页抓取器从中抓取 PDF 链接。 |
biolit 从不硬编码、请求或存储凭据。自定义解析器会使用你配置的 URL 模式,通过你自己有权使用的访问方式(代理登录、会话 Cookie 等)进行访问。你有责任确保使用方式符合所在机构和出版商的服务条款。
参考文献获取器(通过环境变量选择启用)
biolit 自带三个获取器;设置相关环境变量后,它们会在导入时自动注册。默认优先级(数值越低越早尝试)为 bibtex=2.0、local_pdf=3.0、zotero=5.0。
BibTeX。 按 DOI、PMID 或 citekey 在 .bib 导出文件中查找论文,从每条记录的 file = {...} 字段读取路径,并直接解析 PDF。最适合使用 Better-BibTeX(或同类工具)自动导出的用户——查找离线进行,在内存中完成且结果精确,无需网络往返,也不依赖 Zotero 搜索索引。此获取器可绕过 Zotero Web API 的 q-search 不会索引结构化 DOI 字段这一限制;对于 DOI 未出现在已索引附件全文中的条目,通过该 API 查找 DOI 并不可靠。支持 BBT 以分号分隔的 file 列表,以及 JabRef 经典的 description:path:type 格式。bib 文件的修改时间发生变化时,会自动重新解析。
export BIOLIT_BIBTEX=~/Zotero/My\ Library.bib
# Optional:
export BIOLIT_BIBTEX_PRIORITY=2.0 # lower = tried earlier (default 2.0)
Zotero。 按 DOI、再按 PMID 搜索用户的 Zotero 文献库,将附件搜索结果追溯到其父条目,找到附加的 PDF,下载后使用 biolit 的 PDF 解析器进行解析。当 Zotero 的 /file API 端点返回 404(链接文件附件,或未同步账户中的导入附件)时,会回退到从本地 Zotero 存储读取 PDF,路径为 $ZOTERO_DATA_DIR/storage/<key>/<filename>(默认数据目录为 ~/Zotero)。注意:Zotero Web API 的 q-search 不会索引结构化 DOI 字段,因此两种获取器都可用时,上述 BibTeX 获取器更可靠。
export ZOTERO_API_KEY=...
export ZOTERO_USER_ID=... # or ZOTERO_GROUP_ID for a group library
# Optional:
export ZOTERO_PRIORITY=5.0 # lower = tried earlier (default 5.0)
export ZOTERO_DATA_DIR=~/Zotero # only needed if Zotero is not at ~/Zotero
在 macOS 上,未在环境变量中设置的 ZOTERO_API_KEY、ZOTERO_USER_ID 和 ZOTERO_GROUP_ID 会从 macOS 钥匙串获取(security find-generic-password -s <NAME> -w),解析顺序与大模型 API 密钥相同。这意味着 Claude Code 等不会通过 shell 加载配置文件的主机,无需在 .mcp.json 中设置 env 块,也能获取 Zotero 凭据。
本地 PDF 目录。 通过预先构建的 JSON 索引按 DOI 查找论文。文件名可以任意指定——DOI 会从每个 PDF 的 /Info 元数据字典中提取;如果未能提取,则从首页文本中提取。
构建或更新索引。重复运行的开销很小——默认情况下只会重新提取新增或已更改的 PDF:
python -m biolit.fetchers.local_pdf --dir ~/Papers
python -m biolit.fetchers.local_pdf --dir ~/Papers --rebuild # force full re-extraction
然后将 biolit 指向同一目录:
export BIOLIT_LOCAL_PDF_DIR=~/Papers
export BIOLIT_LOCAL_PDF_PRIORITY=3.0 # default 3.0
获取器本身不会构建索引,只会查询索引。无法提取 DOI 的 PDF 会列在索引的 unindexed_sample 中,便于查看。
配置后,CSV/markdown 输出中的 text_source 字段会针对这些来源的命中项显示为 bibtex_pdf、zotero_pdf 或 local_pdf。原始字节会持久化到 artifacts/<id>/bibtex_pdf / zotero_pdf / local_pdf,与内置的 PMC/Europe PMC 资源完全相同。
编写自己的获取器
获取器可以是任何可调用对象,接收一个 FetchContext,并返回 FetchResult(找到内容时)或 None(未找到时)。
from biolit.fetchers import FetchContext, FetchResult, register_fetcher
def my_internal_db_fetcher(ctx: FetchContext) -> FetchResult | None:
pmid = ctx.paper.get("pmid")
if not pmid:
return None
text = my_db.lookup_fulltext(pmid) # whatever you have
if not text:
return None
return FetchResult(text=text, source="internal_db", artifacts={})
register_fetcher(my_internal_db_fetcher, priority=1.0, name="internal_db")
请在首次调用 run / screen_by_* 之前注册(例如在模块导入时)。已注册的获取器会按优先级在内置获取链之前尝试;第一个返回非空 FetchResult.text 的获取器即为胜出者。获取器内部发生的异常会记录到 stderr,然后继续尝试下一个获取器。
验证
rachadele/biolit-eval 提供了一项对 GEO 筛选和元数据提取工作流的独立评估。该评估使用自助重采样流程,将结果与人工整理的真实数据进行对比,以估算准确率、召回率和 F1;真实数据包含 509 个 GEO 登录号,并标注了转录因子扰动实验。
已知限制
- 没有摘要或无法访问全文的论文会被静默跳过。
- GEO 记录会尝试通过关联的 PMID 获取全文。
text_source将根据可访问的内容设为geo_linked_fulltext、geo_linked_abstract或geo_record。 - Cloudflare 经常会拦截 bioRxiv/medRxiv JATS XML,无论请求使用什么标头。此时,管道会回退到 bioRxiv API 提供的标题和摘要(
text_source: preprint_abstract)。 - Semantic Scholar API 每天允许大约 100 次未经身份验证的请求。若要提高限额,请在
.env中设置SEMANTIC_SCHOLAR_API_KEY。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。