生物黑客你的健康:构建基于科学的补充剂顾问,使用 Qdrant 与 PubMed 🧪

发布: (2026年2月2日 GMT+8 09:20)
6 分钟阅读
原文: Dev.to

Source: Dev.to

如果你曾经花费数小时在 Reddit 或健身论坛上滚动,想弄清楚 NMNCreatine 是否真的有效,你就会明白这种挣扎。bro‑science 与经过同行评审的临床数据之间存在巨大的鸿沟。在 Biohacking 的世界里,信息就是力量,但前提是它必须准确。

今天,我们将构建一个生产级 RAG architecture(检索增强生成)来弥合这一鸿沟。我们将使用 Vector Database 来存储来自 PubMed 的高保真嵌入,从而能够在数千篇医学摘要中执行 Semantic Search。在本指南结束时,你将拥有一个本地知识库,能够用真实的科学引用来回答你的补剂问题。🚀

The Architecture 🏗️

为了构建一个可靠的生物黑客工具,我们需要一个能够处理数据摄取、嵌入和检索的流水线。下面展示了数据从 PubMed 研究论文流向终端的过程:

graph TD
    A[PubMed Search Query] --> B[BeautifulSoup Scraper]
    B --> C[Text Chunking - LangChain]
    C --> D[Sentence Transformers - Embeddings]
    D --> E[(Qdrant Vector DB)]
    F[User Question] --> G[Query Embedding]
    G --> H{Similarity Search}
    E --> H
    H --> I[Context + Prompt]
    I --> J[LLM Response with Citations]

前置条件 🛠️

确保你的 tech_stack 中包含以下内容:

  • Python 3.9+
  • Qdrant – 高性能向量数据库
  • Sentence Transformers – 用于生成本地嵌入
  • LangChain – 我们 RAG 流程的粘合剂
  • BeautifulSoup – 用于解析 PubMed 的 HTML
pip install qdrant-client sentence-transformers beautifulsoup4 langchain langchain-community

第一步:抓取 PubMed 研究 📄

PubMed 是医学研究的黄金标准。虽然它提供了 API(Entrez),但有时我们需要抓取特定的元数据或处理动态查询。下面是一段强大的示例代码,帮助我们入门。

import requests
from bs4 import BeautifulSoup

def fetch_pubmed_abstracts(query: str, max_results: int = 10):
    base_url = f"https://pubmed.ncbi.nlm.nih.gov/?term={query}"
    response = requests.get(base_url)
    soup = BeautifulSoup(response.text, "html.parser")

    # 抓取文章链接(限制为 max_results 条)
    links = [
        f"https://pubmed.ncbi.nlm.nih.gov{a['href']}"
        for a in soup.select('.docsum-title', limit=max_results)
    ]

    abstracts = []
    for link in links:
        page = requests.get(link)
        page_soup = BeautifulSoup(page.text, "html.parser")
        abstract_div = page_soup.find('div', id='eng-abstract')
        if abstract_div:
            abstracts.append({
                "source": link,
                "content": abstract_div.get_text().strip()
            })
    return abstracts

# 示例:获取 NMN 相关数据
data = fetch_pubmed_abstracts("NMN supplement longevity", max_results=5)
print(f"Fetched {len(data)} abstracts!")

第2步:使用 Qdrant 对证据进行向量化 🧠

仅存储原始文本是不够的;我们需要存储文本的含义。这正是 Qdrant 发挥作用的地方。我们将使用 Sentence Transformers 将摘要转换为 384 维向量。

from qdrant_client import QdrantClient
from qdrant_client.models import Distance, VectorParams
from langchain_community.embeddings import HuggingFaceEmbeddings
from langchain_community.vectorstores import Qdrant
from langchain.schema import Document

# Initialise (or use :memory: for testing)
client = QdrantClient(path="./qdrant_db")

# Create a collection for our supplements
client.recreate_collection(
    collection_name="biohacking_science",
    vectors_config=VectorParams(size=384, distance=Distance.COSINE),
)

# Initialise embeddings
embeddings = HuggingFaceEmbeddings(model_name="all-MiniLM-L6-v2")

# Prepare documents for LangChain
docs = [
    Document(page_content=item["content"], metadata={"source": item["source"]})
    for item in data
]

# Upload to Qdrant
vectorstore = Qdrant(
    client=client,
    collection_name="biohacking_science",
    embeddings=embeddings,
)
vectorstore.add_documents(docs)
print("Vector database is ready! 🥑")

第3步:RAG 实现 🤖

现在我们可以查询数据库。与关键词搜索不同,我们进行语义搜索。如果你询问“肌肉恢复”,系统会找到关于“肌酸单水合物”的论文,即使标题中没有出现 recovery 这个词。

from langchain.chains import RetrievalQA
from langchain_community.llms import OpenAI  # or use a local model like Llama3

# Setup the retriever
retriever = vectorstore.as_retriever(search_kwargs={"k": 3})

# Example query
query = "What are the benefits of NMN for mitochondrial health?"
found_docs = retriever.get_relevant_documents(query)

for i, doc in enumerate(found_docs, start=1):
    print(f"Source {i}: {doc.metadata['source']}")
    print(f"Snippet: {doc.page_content[:200]}...\n")

超越基础 🚀

虽然这个脚本是一个很好的起点,但面向生产的生物黑客工具需要更高级的模式——比如 混合搜索(结合关键词搜索和向量搜索)和 重新排序,以确保最具临床相关性的论文首先出现。

💡 开发者专业提示: 欲获取更多面向生产的示例和 AI 驱动的医疗数据工程高级模式,请查看原文中链接的工程资源。

深入探讨

查看 WellAlly Blog 以获取关于在真实医疗应用中扩展这些架构的详细文章。

结论

通过摆脱静态书签,转向 基于 Qdrant 的 RAG 系统,你已经把一堆混乱的 PDF 和 URL 库变成了可查询的、智能的研究助理。生物黑客本质上是一个数据工程挑战——你能够检索到的越多干净、基于证据的数据,决策就会越好。

接下来怎么办?

  • 基于向量距离添加置信分数
  • 集成 cron 任务,每周自动更新你的 PubMed 数据库。
  • 部署为 FastAPI 接口,接入你的移动健康仪表盘。

祝你玩得开心!保持科学精神。 🧬💻

本教程对你有帮助吗?在下方留下你下一个要研究的补剂评论吧! 👇

Back to Blog

相关文章

阅读更多 »