loading…
Search for a command to run...
loading…
Routes natural language queries to appropriate MCP tools and planners with high-precision semantic matching and safety guardrails. Supports multi-intent detecti
Routes natural language queries to appropriate MCP tools and planners with high-precision semantic matching and safety guardrails. Supports multi-intent detection, task planning, and strict role-based filtering to prevent misexecution or unauthorized access.
这是一个围绕“准确率优先、宁可拒答也不误触发”构建的最小可运行 Router-MCP 路由识别服务。它不是通用聊天机器人,而是一个针对结构化路由层,负责把用户口语化输入安全、可解释地路由到 MCP / Skill / Tool / Planner。
agent-router-mcp:统一入口、路由编排、输出结构化决策。semantic-router:配置驱动的候选召回与多字段打分,默认优先调用本地 embedding 服务并自动回退规则召回。NeMo-Guardrails 风格守护层:对执行前决策做二次守护,控制 clarify / refuse 质量,拦截高风险误执行。plan。tenant / customer / role / enabled 过滤。local_embedding_service:独立目录部署的本地 embedding 服务,主路由服务通过 HTTP 调用。config/
capabilities.yaml # 能力注册表示例
router_settings.yaml # 阈值、别名、反问模板、打分配置
docs/eval/datasets/
qdport_real_query_30_eval.yaml # 30 条基础命中集
qdport_generalized_query_240_eval.yaml # 240 条泛化评测集
qdport_multiturn_query_240_eval.yaml # 240 条多轮对话评测集
src/router_mcp/
agent_router_mcp/ # 路由编排服务
semantic_router/ # 候选召回与语义打分
guardrails/ # 执行前守护与反问/拒答规范
pipeline/ # normalize / slot / rerank / decision
registry/ # registry schema 与加载校验
eval/ # 批量评测脚本
api.py # FastAPI demo API
cli.py # CLI demo
tests/
test_router_pipeline.py
test_api.py
python3 -m pip install -e '.[dev]'
pytest
python3 -m pip install -r local_embedding_service/requirements.txt
python3 -m local_embedding_service.app
python3 scripts/extract_qdport_eval_datasets.py
python3 scripts/generate_multiturn_eval_dataset.py
python3 -m router_mcp.eval.run_eval --summary-only
python3 -m router_mcp.eval.run_eval --dataset docs/eval/datasets/qdport_real_query_30_eval.yaml --dataset docs/eval/datasets/qdport_generalized_query_240_eval.yaml --summary-only
python3 -m router_mcp.eval.run_multiturn_eval --dataset docs/eval/datasets/qdport_multiturn_query_240_eval.yaml
python3 -m router_mcp.cli "帮我查下今天异常流程,再把昨天没跑完的补跑一下" --tenant qingdao_port --customer default --role supervisor --execute
python3 -m router_mcp.cli "先别执行,先规划一下这个需求怎么落地" --tenant qingdao_port --customer default --role supervisor --plan
python3 -m router_mcp.app
python3 -m router_mcp.mcp_server
日常开发建议直接使用固定验证脚本:
scripts/verify_quick.sh
scripts/verify_boundary.sh
scripts/verify_full.sh
说明:
scripts/extract_qdport_eval_datasets.py 现在默认优先读取仓库内的缓存 bundle:
qdport_generalized_query_240.json--source /path/to/qdport_query_generalization_v2.xlsx如果动了 API / MCP / OpenClaw 入口,可加:
scripts/verify_quick.sh --with-api
Dashboard 前端工程位于 frontend/,开发与构建命令:
cd frontend
npm install
npm run dev
npm run build
npm run dev:本地起前端开发服务器,自动代理后端 APInpm run build:生成 frontend/build/,供 FastAPI 在 / 提供生产页面python3 -m router_mcp.app 且还没构建前端,根路径会返回提示先执行 cd frontend && npm install && npm run build服务启动后可用接口:
GET /capabilitiesPOST /capabilities/validatePOST /routePOST /route/explainPOST /route/planPOST /route/batchPOST /route{
"text": "帮我查下今天异常流程,再把昨天没跑完的补跑一下",
"context": {
"tenant_id": "qingdao_port",
"customer_scope": "default",
"role": "supervisor",
"allow_execute": true
},
"dry_run": true
}
返回重点字段:
overall_decisiondecisions[].decisiondecisions[].trace_iddecisions[].reasondecisions[].evidencedecisions[].goal_typedecisions[].risk_leveldecisions[].selected_capabilitydecisions[].decision_reasondecisions[].matched_capabilitiesdecisions[].confidence_breakdowndecisions[].missing_slotsdecisions[].clarify_questiondecisions[].refuse_reasondecisions[].execution_targetdecisions[].audit_traceclarify。clarify。plan。refuse。customer / tenant / role 不匹配时直接过滤,不允许越权命中。评测输出至少包含:
correct_decisionscorrect_capabilitiestop1_accuracytopk_recallclarify_countrefuse_countexecute_countfalse_execute_countwrong_route_ratedirect_execution_rateclarification_precisionrefusal_precisionplanning_detection_precisionplanning_detection_recall其中 false_execute_count 是当前 MVP 最关键指标。
当前默认 run_eval 会顺序跑两套整理后的评测集:
另外新增了一套并行维护的多轮评测集:
clarify_fill_slots / proposal_confirm_cancel_revise / context_break_or_new_request这套数据不进入默认 run_eval,而是通过独立 runner 回放共享 session_key + thread_id 的 turns:
python3 -m router_mcp.eval.run_multiturn_eval \
--dataset docs/eval/datasets/qdport_multiturn_query_240_eval.yaml
如果需要覆盖默认口径,仍可显式传入 --dataset ...。
本轮调优重点放在 5 件事:
最近三天 / 本班 / 上一班 / 按货种汇总 / excel / 发给值班负责人 / 录到目标系统查 -> 整理 -> 发出 的结构化步骤识别,并给同 family 多步骤链增加 rerank 组合分query/generate family 可以按 family 安全放行,execute family 仍必须按 resolved member 槽位复核;hard_confusion 强制 clarifyplan / refuse:显式 planning intent 检测、planner capability、MCP/OpenClaw 薄包装和 planning 指标decision.py 的 guardrail 阻断收尾分支抽成具名 finalize_rule,并补齐 rule_name trace 回归测试在默认 240 条泛化评测集 qdport_generalized_query_240_eval.yaml 上,当前 summary-only 指标为:
decision_accuracy: 0.8125execute_count: 81clarify_count: 159direct_execution_rate: 0.3375false_execute_count: 0wrong_route_count: 0named_target_accuracy: 0.9667trace_coverage: 1.0reason_coverage: 1.0这轮结果对应的关键策略是:
missing_required_slots -> clarifyhard_confusion 高分直通 execute 的豁免关于 LLM 的当前口径也需要明确:
heuristic + 结构化规则heuristic 槽位候选置信度 < 0.72 时,才触发 runtime LLM fallback 做受约束补充抽取execute / clarify / refuse当前默认评测结果会以两套整理后的数据集分别输出:
qdport_real_query_30_eval.yamlqdport_generalized_query_240_eval.yamlsrc/router_mcp/mcp_server.pyroute_query、clarify_query、validate_route、list_capabilities、explain_route、plan_tasksrc/router_mcp/openclaw_skill/bridge.pyroute_for_openclaw(...)execute 的请求,现已优先返回待确认的 execution_proposalsession_key + thread_idclarify 现在也支持 session-aware 续接:同一 session_key + thread_id 下,补充槽位会优先续接上一轮 pending_clarify本轮新增两类能力:
凭证及回单 能力簇重构CapabilityCatalog / SessionContextManager / FollowupResolver / RouteOrchestratorRouterCore:承接单轮 fan-out 与识别-召回-打分-决策主链路当前已验证:
clarify 第二轮补槽位不会默认按新请求全量重路由thread_id把凭证及回单处理一下 会稳定回到 SEED_FAMILY_1201,并追问 单据凭证号 / 单据流水号补发 / 结果归档 / 发送日志 会回到各自子族 1204 / 1203 / 1207这轮 focused tests 已通过:
PYTHONPATH=src python3 -m pytest tests/test_session_state_flow.py tests/test_confirmation_flow.py tests/test_openclaw_bridge.py tests/test_dashboard_api.py tests/test_dashboard_demo_page.py tests/test_router_pipeline.py -q84 passedphase2 轻分层后的兼容性回归也已通过:
PYTHONPATH=src python3 -m pytest tests/test_confirmation_flow.py tests/test_session_state_flow.py tests/test_routing_orchestrator.py tests/test_openclaw_bridge.py tests/test_dashboard_api.py tests/test_router_pipeline.py -q86 passed继续提取 RouterCore 后已通过:
PYTHONPATH=src python3 -m pytest tests/test_confirmation_flow.py tests/test_session_state_flow.py tests/test_routing_orchestrator.py tests/test_routing_core.py tests/test_openclaw_bridge.py tests/test_dashboard_api.py tests/test_router_pipeline.py -q88 passed这轮 240 条泛化评测集 summary 为:
decision_accuracy: 0.7958false_execute_count: 4wrong_route_rate: 0.0direct_execution_rate: 0.3542也就是说,flow 12 专项已经明显改善,但全局边界集仍未回到 false_execute_count = 0。详细记录见 2026-04-11-session-aware-router-report.md。
仓库内已经补充了面向 CC + Codex 的固定协作骨架:
推荐分工:
CC:调研、方案、反例、challenge reviewCodex:主链路实现、测试、验证、文档回写这样可以把“方案设计”和“主链路落地”拆开,同时仍然用统一验证脚本守住红线。
评测 Dashboard 现已切换为独立前端工程,而不是仓库根目录静态页:
frontend//api/dashboard/*frontend/build/data/eval_results/推荐启动方式:
# 终端 1:启动后端
python3 -m router_mcp.app
# 终端 2:启动前端开发服务器
cd frontend
npm install
npm run dev
如果只想用单进程方式查看页面,先执行:
cd frontend
npm install
npm run build
python3 -m router_mcp.app
当前实时演示页特性:
tenant / customer_scope / role / allow_execute@ant-design/x 的 Bubble.List + Sender 展示对话流当前能力管理页特性:
rules + keywords 方案:基于 capability.required_slots + slot schema + examples 做受约束抽取,而不是继续穷举关键词。execute / clarify / reject 仍然走结构化决策层,避免黑盒直执行业务。embedding recall + model rerank + constrained extraction + structured decision。为了让仓库开箱可跑、测试稳定,这个 MVP 采用了两个“薄适配层”:
semantic_router.engine.LocalSemanticRouter:默认优先调用独立本地 embedding 服务做语义召回,并和确定性多字段匹配融合;当 embedding 服务不可用时自动回退到纯规则召回。guardrails.policy.GuardrailPolicy:默认用显式规则落地 NeMo-Guardrails 风格守护,可在后续接入真实 guardrails runtime。这样可以先把“安全、可解释、可评测”的基础设施层跑起来,再逐步替换底层模型。
独立服务位于 local_embedding_service/,默认监听 http://127.0.0.1:8001,默认模型为 BAAI/bge-small-zh-v1.5。
启动命令:
python3 -m pip install -r local_embedding_service/requirements.txt
python3 -m local_embedding_service.app
可选环境变量:
EMBEDDING_MODEL_NAME:自定义本地模型名称EMBEDDING_DEVICE:强制设备,例如 cpu、mps、cudaEMBEDDING_HOST:监听地址EMBEDDING_PORT:监听端口主服务的 embedding 调用配置在 config/router_settings.yaml 的 embedding 段中:
enabled:是否启用 embedding 召回service_url:独立 embedding 服务地址timeout_seconds:请求超时similarity_weight / lexical_weight:embedding 分和规则分的融合权重仓库会自动读取 config/qingdaogang_500cap.json 并映射到统一 registry schema:
capability_name -> namealiases -> aliasescapability_description -> descriptiongeneralized_user_query -> examplesrequired_slots -> required_slotsaction_type -> 统一 action_typeclarify_when / reject_when -> guardrail hints这样当前服务默认会同时加载手工高精度样例能力和 500 条原始种子能力。
Добавь это в claude_desktop_config.json и перезапусти Claude Desktop.
{
"mcpServers": {
"router-mcp": {
"command": "npx",
"args": []
}
}
}