使用说明
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篇开放获取论文的精选书目中搜索泛基因组研究论文 |
连接
- 托管客户端: https://pankb.org/copilot/
- 通过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检索