语义路由知识图谱服务

mcp-scapes 是一个基于语义路由和拓扑结构的MCP联邦系统,通过软分配上下文实现跨领域知识管理。

  • by colej
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 colej/mcp-scapes

使用说明

mcp脚本

具有软/重叠上下文分配的语义路由、地形MCP联邦。 概念来源于神经科学中地图和地形的表示,如《Brainscapes》(Schwarzlose,2021)一书所述

概念

地形布线的灵感来自大脑如何在空间中连续组织表示:具有相似特征的概念彼此靠近,区域之间的边界是梯度而不是硬线。mcp-scapes将这一原则应用于mcp服务器——每个子服务器都是一个域区域,服务器之间的接近度被编码在实时距离矩阵中,每条知识都被分配到所有区域的软成员权重,而不是只属于一个区域。

mcp-scapes没有将查询硬路由到一个服务器,而是嵌入查询并计算所有服务器质心上的softmax。低温产生近乎硬的路由(最近的域获得大部分权重);高温会同时在许多服务器上扩散激活。这反映了皮层映射如何在边界处融合,神经元对多种刺激的反应是分级调谐曲线,而不是二元隶属关系。

建筑

  ┌────────────────────────────────────────────┐
  │              meta-server :8000             │
  │  ┌──────────┐  ┌────────┐  ┌───────────┐  │
  │  │ Registry │  │  Map   │  │  Router   │  │
  │  │ (SQLite) │  │(cosine │  │(embed +   │  │
  │  │          │◄─│ dist.) │◄─│ softmax)  │  │
  │  └──────────┘  └────────┘  └───────────┘  │
  │        MCP tools + /internal/* HTTP        │
  └──────┬──────────────┬──────────────┬───────┘
         │              │              │
  :8001  ▼       :8002  ▼      :8003  ▼
  child-energy   child-research  child-code
  KnowledgeGraph KnowledgeGraph  KnowledgeGraph
  (SQLite + vec) (SQLite + vec)  (SQLite + vec)

快速入门——Docker Compose

docker compose up --build

这将开始:

  • meta 在8000端口
  • child-energy 在端口8001上
  • child-research 在8002端口
  • child-code 在8003端口

所有子服务器在启动时向meta自动注册。

快速入门-手册

pip install -e ".[dev]"

# Terminal 1 — meta
topomcp-meta

# Terminal 2 — one child
CHILD_ID=energy \
CHILD_NAME="Energy Markets" \
CHILD_DESCRIPTION="Knowledge about energy markets and commodities" \
META_URL=http://localhost:8000 \
topomcp-child

添加 --preload 在接受连接之前,可以使用任一命令来预热句子转换器模型。

MCP工具--元服务器

工具 说明
list_domains 最近3个邻居的所有注册服务器
route_query(query, top_k, temperature) 具有分数和连接信息的最近服务器
soft_route_query(query, temperature) 所有域上的完整softmax权重分布
domain_map 按边缘列表的成对服务器间距离
interpolate_domains(domain_a, domain_b, t) 在两个域之间布置插值中点
search_across(query, top_k_servers, top_k_results) 扇出搜索、合并和重新排序结果
add_to_domain(domain_id, content, tags) 将代理add_memory添加到特定的子节点
add_with_soft_routing(content, tags, temperature, threshold) 写入高于权重阈值的所有服务器

MCP工具--子服务器

工具 说明
add_memory(content, tags, domain_weights) 在本地知识图中添加节点
search_memory(query, k) 语义搜索,返回带有分数的top-k
get_memory(id) 按id获取单个节点
add_relation(source_id, target_id, relation, weight) 在节点之间添加有向边
describe 服务器标识、质心、节点计数、顶部标签
list_memories(limit, offset) 所有节点的分页列表

软路由是如何工作的

当查询或内容到达元服务器时,mcp会执行以下操作:

  1. 嵌入 文本使用 all-MiniLM-L6-v2 (384维向量)。

  2. 分数 通过查询嵌入和每个服务器的质心(其所有存储节点嵌入的平均值)之间的余弦相似性来计算每个注册的服务器。

  3. 随温度应用softmax τ:

    weight_i = exp(sim_i / τ) / Σ exp(sim_j / τ)
    
    • τ = 0.1 → 近似硬路由:最接近的域获得全部权重。
    • τ = 2.0 → 扩散激活:多个域获得相当大的权重。
  4. 对于 add_with_soft_routing,任何重量超过 threshold (默认值 0.15)接收写入。节点存储在 domain_weights 设置为完整的softmax分布,对所有区域的分数成员进行编码。

服务器质心自动更新:每个 add_memory 调用会触发后台POST meta/internal/refresh_centroid/{id},它获取孩子的更新质心并重建成对距离矩阵。

贡献

  1. 分叉仓库并创建一个功能分支。
  2. 安装开发依赖项: pip install -e ".[dev]".
  3. 运行测试: pytest tests/.
  4. 打开一个PR main.