微生物泛基因组知识库查询代理

一个基于LLM的代理服务,允许研究人员通过自然语言查询和探索PanKB微生物泛基因组知识库,支持数据查询、可视化、文献检索等功能。

  • by SHINTEKI
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 SHINTEKI/pankb_mcp

使用说明

PanKB代理

一种LLM代理,让研究人员探索 Pankb 自然界微生物泛基因组知识库 语言。代理编排自定义MCP(模型上下文协议) 服务器的工具——泛基因组查询、图表、导航和 RAG支持对1011篇开放获取论文进行文献检索 流线型聊天界面,具有端到端的Phoenix可观察性和回归 eval线束。

项目背景

PanKB是一个全面的泛基因组知识库,包含丰富的数据集 跨越基因、基因组、物种和科,以及精心策划的参考书目 泛基因组学文献。但是,用户目前只能访问预构建的 通过web前端进行分析,限制自定义探索。

为了解决这个问题,我们构建了:

  • 一 MCP服务器 暴露PanKB的实时数据和其上的RAG端点 书目作为工具,以及
  • 一 代理客户端 它驱动LLM工具调用循环 工具,作为PanKB网站上的聊天UI,也可以从任何 MCP兼容客户端(克劳德桌面、ChatGPT等)。

它们共同实现了:

  • 灵活的数据访问:携带自己的MCP客户端,或使用托管聊天
  • 自然语言交互:查询、可视化和询问文献 用通俗易懂的语言提问
  • 实时结果:直接连接到实时PanKB数据库--否 过时的出口

堆栈

Python·FastMCP·OpenAI Responses API·Streamlit·OpenID Connect(谷歌) ·PostgreSQL·MongoDB·Plotly·VoyageAI嵌入·Cohere-reranking· Arize Phoenix(追踪+评估)·OpenInference/OpenTelemetry·Docker 撰写·GitHub操作·uv

MCP系统架构

PanKB总体架构

工具

查询工具

工具 说明
list_families 列出(所有或指定)具有物种/基因组计数的微生物家族
list_species 列出(所有或指定)具有穿山甲统计(核心/外壳/云)的物种
list_genomes 列出(所有或指定的)基因组,包括GC含量、长度和分离信息
list_genes 按名称、功能或泛基因组类搜索基因
get_starts 获取数据库范围的统计信息

导航工具

工具 说明
get_family_url 链接到pankb.org上的家庭页面
get_species_url 链接到具有部分选项的物种页面
get_genome_url 链接到单个基因组页面
get_gene_url_with_species_specified 链接到特定物种中的基因
get_gene_url_with_species_unspecified 在所有物种中搜索基因
get_search_url 在pankb.org上进行常规搜索

图表工具

工具 说明
plot_gene_frequency_histogram U型基因频率分布
plot_pangenome_class_distribution 核心/附属/稀有基因饼图
plot_cog_category_distribution cog功能类别柱状图
plot_species_comparison 比较不同物种的泛基因组组成
plot_genome_count_by_family 每个家族的基因组计数柱状图
plot_gc_content_distribution 一个物种的gc含量直方图
plot_geographic_distribution 按国家分列的基因组计数
plot_isolation _源_分布 隔离源饼图
plot_phylogroup分布 phylogroup柱状图
plot_phylon_heatmap 跨基因组的phylon重量热图
plot_heaps_law 全基因组生长曲线(希普斯定律)
plot_accumulate_gene_frequency 累积基因频率曲线
plot_gene_frequency_curve 基因频率分布曲线
plot_cog_by-gene_class 按基因类划分的cog类别
plot_gene_presence_absence_matrix 基因存在/不存在二元矩阵
plot_dn_ds_ratio 选择压力(dn/ds)分布

RAG工具

首先打开侧边栏中的“搜索文献”开关。

工具 说明
search_pangenome_literature 通过RAG(VoyageAI嵌入+Cohere-reranking)在1011篇开放获取论文的精选书目中搜索泛基因组研究论文

连接

  1. 托管客户端: https://pankb.org/copilot/
  2. 通过Claude Desktop连接服务器:
    // claude_desktop_config.json
    {
      "mcpServers": {
        "pankb": {
          "command": "npx",
          "args": ["-y", "mcp-remote", "https://pankb.org/server/mcp"]
        }
      }
    }
    

提示版本控制

系统提示以版本化模块的形式实时显示 ai_client/app/prompts/ (例如。 v1.py, v2.py). 活动版本由选择 PROMPT_VERSION env var,带有 回退到 DEFAULT_VERSION 在注册表中。

已解决的版本印在每个 agent.chat 跨度和每 凤凰实验运行。

可观测性

该药剂释放 OpenInference 跟踪捆绑在中的自托管Arize Phoenix实例 docker-compose.yaml代理循环、LLM调用和 每个MCP工具调用在每个用户回合中呈现为单个跟踪树, 在Phoenix的Sessions视图中按对话分组。打开UI http://localhost:6006.

评估

使用以下公式对代理进行版本化黄金集回归测试 Phoenix的原生数据集+实验工作流程。15个案例 evals/golden_set.yaml 封面查询、图表、, 导航、RAG、多步骤和域外拒绝行为。跑 进行实际生产 MCPClient (不是模拟),标记为 活动提示版本,因此提示更改在UI中是不同的。

cd evals
PHOENIX_COLLECTOR_ENDPOINT=http://localhost:6006 \
MCP_SERVER_URL=http://localhost:8000/mcp \
uv run python run_evals.py

路线图

  • [x] 初始化代码库,使用uv进行env控制,遵循微服务结构将服务器和客户端应用程序分为两个目录,但使用一个仓库跟踪它们
  • [x] 基于研究论文、设计工具类别编写工具
  • [x] 重用以前的RAG并添加到工具中
  • [x] 设计和编写提示
  • [x] 使用FastMCP和uvicorn编写服务器应用程序(以启用热重载进行开发),挂载所有服务器端组件
  • [x] 编写客户端应用程序,启动客户端实例,导入openai llm,编写用户、客户端、服务器和llm之间的交互循环
  • [x] 编写streamlit应用程序,创建会话状态以在会话中存储对话,设计欢迎消息以指导使用
  • [x] 编写dockerfiles来容器化服务器和客户端,编写docker compose来编排
  • [x] 为服务器和客户端应用程序添加日志
  • [x] 添加CI/CD工作流并使用自托管运行器
  • [x] 为用户客户端(通过谷歌进行OpenID连接)和服务器客户端(承载令牌)设计授权方法
  • [x] 在流媒体首页设计一个面板,显示过去的对话和可用的工具
  • [x] 构建一个SQL数据库来存储用户信息、令牌使用和对话历史
  • [x] 使用nginx作为反向代理,将客户端置于PanKB的路由之下
  • [x] 为PNG/SVG和CSV添加导出功能
  • [x] 利用Arize Phoenix建立跟踪监测系统
  • [x] 使用Phoenix的内置数据集和实验设计评估工作流程
  • [x] 版本系统通过标记在每个跟踪上的git跟踪注册表进行提示
  • []eval工作流上的gate-prod部署(CI集成)
  • []在确定性评估器旁边添加一个LLM作为判断评估器
  • []将OTel上下文传播到MCP服务器,以便端到端跟踪RAG检索