mcpField
B
biolit

biolit

本地服务
github.com/rachadele健康医疗25 周前更新

关于 biolit

biolit 是面向生物医学研究者的文献筛选与结构化提取工具,可处理 PubMed、DOI 和 GEO 标识符,并通过多种 LLM 提取内容。它可将整套流程作为 MCP 工具提供。

主要功能

  1. 01混合 PMID、DOI 和 GEO 标识符
  2. 02按自定义标准筛选文献
  3. 03提取指定字段并导出 CSV
  4. 04检索论文全文及摘要
  5. 05生成 Markdown 摘要
  6. 06支持多种 LLM 提供方

适用场景

  1. 01整理 PubMed 提醒邮件中的研究
  2. 02筛选与研究问题相关的论文
  3. 03从 GEO 记录提取实验信息
  4. 04汇总每周批量文献列表

MCP 相关

biolit 提供 MCP 服务,将文献检索、筛选和提取流程作为工具开放给兼容客户端。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"rachadele-biolit": {
"command": "uvx",
"args": [
"biolit"
],
"env": {
"ANTHROPIC_API_KEY": "<ANTHROPIC_API_KEY>",
"OPENAI_API_KEY": "<OPENAI_API_KEY>",
"LLM_PROVIDER": "<LLM_PROVIDER>",
"LLM_MODEL": "<LLM_MODEL>",
"SEMANTIC_SCHOLAR_API_KEY": "<SEMANTIC_SCHOLAR_API_KEY>",
"UNPAYWALL_EMAIL": "<UNPAYWALL_EMAIL>"
}
}
}
}
启动命令uvx biolit
需要配置的环境变量
ANTHROPIC_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 ollama
LLM_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+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypibiolit0.1.25

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

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 记录元数据。流水线会按以下顺序尝试各个来源:

  1. PMC JATS XML(开放获取)
  2. Europe PMC JATS XML(开放获取覆盖范围更广)
  3. 预印本 XML(bioRxiv / medRxiv)
  4. Unpaywall PDF(需要 --unpaywall-email)
  5. Semantic Scholar 开放获取 PDF
  6. OpenAlex green-OA PDF(Unpaywall / S2 未收录的作者稿件;无需密钥)
  7. Europe PMC 开放获取全文 PDF(开放获取子集)
  8. CORE 汇总的 green-OA PDF(选择启用;需要 CORE_API_KEY)
  9. 出版商落地页抓取(citation_pdf_url 元标签;无需密钥)
  10. 自定义解析器(机构 OpenURL / 图书馆代理;通过 BIOLIT_CUSTOM_RESOLVERS 选择启用)
  11. 出版商落地页 HTML 全文(citation_fulltext_html_url 元标签;无需密钥)
  12. 摘要回退

第 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 贡献者信息中解析)
urlPubMed、GEO 或 DOI 链接
pmidPubMed ID(未编入索引的预印本为 null)
doiDOI(GEO 记录为 null)
geo_accessionGEO 登录号(非 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_countSemantic 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。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。