补充原视频和readme文件
基于 Nexent、DataMate、MCP 与 A2A,实现「数据处理 → 医疗知识图谱 → 可溯源问答 → 图谱感知分析」完整闭环的开源智能体系统,面向 2026 ModelEngine 开源项目贡献赛。
医疗声明:本项目是比赛/研究原型,不提供诊断、处方或医学建议。
medigraph/agents/
medigraph/operators/
finetune/
medigraph/extraction/
medigraph/graph/
medigraph/agents/qa_agent.py
medigraph/analysis/
benchmarks/eval_nl2sql.py
NPU/
integration/
mcp_server/
每个评分项对应的证据文件、实测数字与复现命令,见 docs/EVIDENCE_MAP.md。
python -m venv .venv-neural # 本文档后续命令都假定用这个环境(Python 3.10-3.12) .\.venv-neural\Scripts\Activate.ps1 python -m pip install -r requirements.txt copy .env.example .env
也可以直接装进系统 Python,但后文所有写成 .\.venv-neural\Scripts\python.exe ... 的 命令要相应替换。混用两个解释器是最常见的”明明装过却报 ModuleNotFoundError“来源—— 新开的终端里裸 python 未必是你装依赖的那个。
.\.venv-neural\Scripts\python.exe ...
ModuleNotFoundError
python
本地离线 L1、测试、图谱和确定性 NL2SQL 不需要 API Key。只有 L2 难例、文字洞察、 向量检索和大模型规划需要填写 .env。
.env
如需在 Nexent/MCP 网页端真实运行自训练神经 GPLinker L1(需要 torch),先执行:
powershell -ExecutionPolicy Bypass -File scripts/setup_neural_env.ps1
之后 scripts/start_mcp.ps1 会自动优先使用 .venv-neural;缺少 torch 时系统仍会 自动退回词典/LLM 路径。
scripts/start_mcp.ps1
.venv-neural
前提:Docker Desktop / Docker Engine 已启动;端口 8011、8100 空闲;如需 LLM 能力,先将 .env.example 复制为 .env 并填写自己的 Key。
8011
8100
.env.example
powershell -ExecutionPolicy Bypass -File scripts\docker_up.ps1
等价的跨平台命令:
docker compose up -d --build
启动后:
http://127.0.0.1:8011/sse
http://host.docker.internal:8011/sse
http://127.0.0.1:8100/.well-known/agent.json
http://host.docker.internal:8100/.well-known/agent.json
检查与停止:
docker compose ps docker compose logs --tail 100 powershell -ExecutionPolicy Bypass -File scripts\docker_down.ps1
说明:
data/
outputs/
scripts\docker_up.ps1 -Neural
scripts/start_finetuned_model.ps1
host.docker.internal:18088
http://host.docker.internal:8080/api
8011/8100
.\.venv-neural\Scripts\python.exe -X utf8 scripts/reproduce_offline.py --quick
脚本依次重建本地抽取产物、拟合标定、执行全部离线测试、跑抽取与两套 NL2SQL 评测、 进行发布检查,并生成 outputs/reproduction_manifest.json(命令、耗时、环境、产物 SHA-256)。若需从上一级四套原始数据重新生成项目数据:
outputs/reproduction_manifest.json
python scripts/reproduce_offline.py --rebuild-dataset
分步复现命令与各指标的评测口径见 docs/EVALUATION_PROTOCOL.md。
chinese-macbert-large
chinese-roberta-wwm-ext
默认 EXTRACTION_BACKEND=auto:神经 L1 命中即用,难例/缺 GPU 时回退词典或 LLM:
EXTRACTION_BACKEND=auto
$env:EXTRACTION_BACKEND="fast" # 完全离线 $env:EXTRACTION_BACKEND="llm" # 纯 API 对照 $env:EXTRACTION_BACKEND="auto" # 推荐
训练、评测细节与模型/数据边界见 docs/MODEL_AND_DATA_CARDS.md。
▶ 总决赛演示视频 (约 76 MB,网页端点击后下载播放)
一镜到底展示在 Nexent 网页端的真实运行:文档上传与 DataMate 五算子批处理 → 0.8B 编排模型 自动规划算子 DAG → 神经 GPLinker 建图 → 可溯源问答与安全拒答 → NL2SQL 与图谱可视化 → 多智能体协作 → 工程质量与关键指标。全程可见真实的工具调用轨迹。
同目录下还保留了分任务的原始录屏与截图,可与视频逐段对照(这些仍以 Git LFS 交付, 需 git lfs pull 拉取):
git lfs pull
任务一会话1.mp4
任务一会话2.mp4
任务二会话1.mp4
任务二会话2.mp4
任务三会话1.mp4
任务三会话2.mp4
命令行复现视频.mp4
NPU运行录屏.mp4
NPU截图.png
微调日志截图.png
# 任务一:数据处理智能体 python demos/demo_task1_dataproc.py --input data/corpus --max-docs 1 ` --goal "读取并清洗医疗文档,检查质量和隐私,抽取并规范化实体关系,校验三元组" # 任务二:知识图谱问答 python demos/demo_task2_complete.py python demos/demo_task2_qa.py --question "高血压使用的药物有哪些禁忌?" --hops 2 # 任务三:图谱驱动分析 python demos/demo_task3_complete.py # 图算法:PageRank / 度中心性 / Louvain 社区发现 / 最短路径(任务三"关联分析") python -c "from medigraph.analysis.analysis_agent import AnalysisAgent; a=AnalysisAgent('outputs/analytics.db', graph_json='outputs/graph.json'); print(a.analyze('图谱中最核心的疾病有哪些?', verbose=True)['insight'])" # 证据总览页:汇总核心指标 + 链接全部 BI/图谱图表 + 一次真实 DAG 执行血缘 python scripts/build_evidence_overview.py
评审可从 outputs/evidence_overview.html 一页起步,找到所有产物与对应证据文件。
outputs/evidence_overview.html
除 CLI、MCP 与 A2A 之外,同一套算子与智能体也以 REST 服务暴露:
python service/main.py # 默认 127.0.0.1:8020
GET /healthz
/readyz
/metrics
POST /api/v1/extract
POST /api/v1/kg/build
/kg/qa
POST /api/v1/kg/qa/stream
Last-Event-ID
POST /api/v1/analysis/nl2sql
GET /docs
工程特性:请求级 X-Request-ID 贯穿 JSON 结构化日志;DAG 执行器支持拓扑分层并行 与节点级超时;计划在执行前经静态校验(算子白名单、环检测、输入可满足性传播、 预算上限),不合法计划零执行成本被拒并触发重规划;SQL 走 AST 白名单 + SQLite authorizer 双层防御。
X-Request-ID
存储层可选升级(.env 一键切换,SQLite 仍为零配置默认):PostgreSQL 分析后端 (连接池 + 复合索引 + 服务端只读事务与语句超时,生成 SQL 经 sqlglot AST 转译双方言 执行);pgvector HNSW 向量检索(LocalVectorStore 同接口);Redis 结果缓存 (键含模型指纹,换模型自动失效;缓存不可用时自动降级为直连,命中率进 /metrics)。
LocalVectorStore
实测吞吐 530.2 req/s、p99 49.9 ms、错误率 0%(关缓存基线;开缓存 577.5 req/s); SSE 首字节 17 ms(阻塞式为 10.3 s); 20 万行下点查索引加速 85–355×、连接池 p50 6.6×;抽取缓存命中 1497 ms → 2.3 ms; 10 万×1024 维向量检索 recall@10=0.99 时 p50 5.7 ms(同轮 numpy 精确基线 16.4 ms)。 完整口径、复现命令与诚实边界见 docs/PERFORMANCE.md。
推荐直接使用上文的 Docker Compose。若不使用 Docker,也可在宿主机分别启动:
powershell -ExecutionPolicy Bypass -File scripts/check_demo_services.ps1 powershell -ExecutionPolicy Bypass -File scripts/start_finetuned_model.ps1 # 可选 powershell -ExecutionPolicy Bypass -File scripts/start_mcp.ps1 powershell -ExecutionPolicy Bypass -File scripts/start_a2a.ps1
DataMate 五个可上传算子:
python datamate_ops/build_zip.py python integration/datamate/upload_operators.py
Nexent AgentConfig 模板位于 integration/nexent_agents/。MCP 直接暴露多格式读取、 质量检查、PII 脱敏、实体链接、建图、问答、分析与审计等 17 个工具。
integration/nexent_agents/
以下为已落盘实测的头部指标;完整表格、样本数与逐项证据见 docs/EVIDENCE_MAP.md,口径定义见 docs/EVALUATION_PROTOCOL.md。
tests/
outputs/eval_neural_cmeie_v1_dev.json
outputs/eval_neural_cmeie_dev.json
outputs/eval_entity_linking.json
outputs/eval_kg_qa.json
outputs/kg_scale_report.json
outputs/eval_nl2sql*.json
finetune/outputs/eval_orchestrator.json
NPU/NPU_results/summary.json
诚实边界:完整 53 关系、无 gold 实体的端到端三元组 F1,公开 SOTA 约 0.55–0.65; 本仓 0.534/0.543 为该困难口径下实测值,方案中的 0.80/0.85 属于未达成的挑战目标。
* 该 1.000/1.000/1.000 度量的是 QAAgent 与 eval_kg_qa.py 共用的检索/ 溯源/安全打分核心(离线、无 API,问题由图谱自身遍历确定性生成),不包含 LLM 表述层——即不衡量 QAAgent.answer() 实际生成给用户的那段自然语言回答 是否忠实、相关、检索是否够用。这一层的独立评测见 docs/EVIDENCE_MAP.md 的 Ragas 结果(outputs/eval_ragas_kg_qa.json), 用与作答同源的 LLM 作为裁判对真实生成的回答打分,与本行互为补充、不互相替代。 所有数字均可由仓内产物与一键复现脚本验证。
eval_kg_qa.py
QAAgent.answer()
outputs/eval_ragas_kg_qa.json
† 这三个 100% 的口径必须一起读,否则会被高估。 ① 128 题压力集由 benchmarks/build_nl2sql_stress.py 按模板生成,且 128 题全部由确定性模板路由 命中(llm_calls=0)——问题与答案出自同一套模板,它度量的是路由覆盖面与可复现性, 不是 LLM 的 Text-to-SQL 能力;② 人工 16 题同样 16/16 走模板路由;③ 真正有区分度的 是 44 题非模板自然问句集(含子查询、跨表 JOIN、DISTINCT 计数、第 N 名、排除条件), 其中 35 题由 LLM 生成、35/35 正确。④ 三个集合在定稿前都被用来定位并修复路由器缺陷 (见 docs/EVALUATION_PROTOCOL.md 的”从 14 题到 44 题”),因此它们更接近开发集而非 留出测试集。作为补充,用一组从未参与调优的留出问句复测确定性路由,修掉两个新发现的 真实缺陷后为 25/25;两个缺陷已固化为回归测试(tests/test_nl2sql_router.py)。
benchmarks/build_nl2sql_stress.py
llm_calls=0
docs/EVALUATION_PROTOCOL.md
tests/test_nl2sql_router.py
service/
data/prep/
data/models/
benchmarks/
docs/
scripts/
Dockerfile
compose.yaml
docs/MediGraphModelEngine技术报告.pdf
.docx
先激活项目虚拟环境(见「安装」),否则 python 会落到系统解释器,缺 sqlglot / prometheus_client 等依赖时会在收集阶段报 5 个 ModuleNotFoundError:
sqlglot
prometheus_client
.\.venv-neural\Scripts\Activate.ps1 python -m pytest -q # 期望 315 passed python scripts/check_release.py
不想改变当前会话时,等价的一次性写法:
.\.venv-neural\Scripts\python.exe -X utf8 -m pytest -q
其中 1 项(test_cmeie_schema_has_all_53_rows)需要 CMeIE-V2 原始 schema 位于 仓库上一级目录 ../CMeIE-V2/53_schemas.json。该数据集有独立许可证、不随本仓库分发, 未放置时该项自动 skip(314 passed, 1 skipped)而不是失败。放置方式见 data/external_manifest.json;数据已在别处时也可以只建一个目录链接:
test_cmeie_schema_has_all_53_rows
../CMeIE-V2/53_schemas.json
314 passed, 1 skipped
data/external_manifest.json
New-Item -ItemType Junction -Path ..\CMeIE-V2 -Target <你的CMeIE-V2目录>
.env、虚拟环境、缓存和临时日志由 .gitignore 排除;模型权重、演示视频等大文件 使用 Git LFS 交付。外部数据逐文件来源与 SHA-256 清单见 data/external_manifest.json(原始 CMeIE-V1/V2、DIAKG、CM3KG 位于仓库上一级目录, 保留各自许可证边界)。
.gitignore
NOTICE
THIRD_PARTY_NOTICES.md
INSPIRATION_REGISTER.md
ORIGINALITY.md
SECURITY.md
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
MediGraph Agent 3.0:医疗数据—知识—洞察智能体
基于 Nexent、DataMate、MCP 与 A2A,实现「数据处理 → 医疗知识图谱 → 可溯源问答 → 图谱感知分析」完整闭环的开源智能体系统,面向 2026 ModelEngine 开源项目贡献赛。
核心能力
与赛题任务的对应
medigraph/agents/、medigraph/operators/、finetune/medigraph/extraction/、medigraph/graph/、medigraph/agents/qa_agent.pymedigraph/analysis/、benchmarks/eval_nl2sql.pyNPU/integration/、mcp_server/每个评分项对应的证据文件、实测数字与复现命令,见 docs/EVIDENCE_MAP.md。
快速开始
安装
本地离线 L1、测试、图谱和确定性 NL2SQL 不需要 API Key。只有 L2 难例、文字洞察、 向量检索和大模型规划需要填写
.env。如需在 Nexent/MCP 网页端真实运行自训练神经 GPLinker L1(需要 torch),先执行:
之后
scripts/start_mcp.ps1会自动优先使用.venv-neural;缺少 torch 时系统仍会 自动退回词典/LLM 路径。Docker 一键部署
前提:Docker Desktop / Docker Engine 已启动;端口
8011、8100空闲;如需 LLM 能力,先将.env.example复制为.env并填写自己的 Key。等价的跨平台命令:
启动后:
http://127.0.0.1:8011/ssehttp://host.docker.internal:8011/ssehttp://127.0.0.1:8100/.well-known/agent.jsonhttp://host.docker.internal:8100/.well-known/agent.json检查与停止:
说明:
data/与outputs/由 Compose 挂载进容器,不重复打入镜像;scripts\docker_up.ps1 -Neural;scripts/start_finetuned_model.ps1, 容器通过host.docker.internal:18088访问;http://host.docker.internal:8080/api, 已有 DataMate/Nexent 容器时直接连通;8011/8100端口。一键离线复现
脚本依次重建本地抽取产物、拟合标定、执行全部离线测试、跑抽取与两套 NL2SQL 评测、 进行发布检查,并生成
outputs/reproduction_manifest.json(命令、耗时、环境、产物 SHA-256)。若需从上一级四套原始数据重新生成项目数据:分步复现命令与各指标的评测口径见 docs/EVALUATION_PROTOCOL.md。
抽取级联
chinese-macbert-large主力 +chinese-roberta-wwm-ext集成),单次前向联合输出实体与三元组默认
EXTRACTION_BACKEND=auto:神经 L1 命中即用,难例/缺 GPU 时回退词典或 LLM:训练、评测细节与模型/数据边界见 docs/MODEL_AND_DATA_CARDS.md。
Demo
演示视频
▶ 总决赛演示视频 (约 76 MB,网页端点击后下载播放)
一镜到底展示在 Nexent 网页端的真实运行:文档上传与 DataMate 五算子批处理 → 0.8B 编排模型 自动规划算子 DAG → 神经 GPLinker 建图 → 可溯源问答与安全拒答 → NL2SQL 与图谱可视化 → 多智能体协作 → 工程质量与关键指标。全程可见真实的工具调用轨迹。
同目录下还保留了分任务的原始录屏与截图,可与视频逐段对照(这些仍以 Git LFS 交付, 需
git lfs pull拉取):任务一会话1.mp4、任务一会话2.mp4任务二会话1.mp4、任务二会话2.mp4任务三会话1.mp4、任务三会话2.mp4命令行复现视频.mp4NPU运行录屏.mp4、NPU截图.png微调日志截图.png命令行 Demo
评审可从
outputs/evidence_overview.html一页起步,找到所有产物与对应证据文件。HTTP 服务层
除 CLI、MCP 与 A2A 之外,同一套算子与智能体也以 REST 服务暴露:
GET /healthz/readyz/metricsPOST /api/v1/extractPOST /api/v1/kg/build/kg/qaPOST /api/v1/kg/qa/streamLast-Event-ID断线续传POST /api/v1/analysis/nl2sqlGET /docs工程特性:请求级
X-Request-ID贯穿 JSON 结构化日志;DAG 执行器支持拓扑分层并行 与节点级超时;计划在执行前经静态校验(算子白名单、环检测、输入可满足性传播、 预算上限),不合法计划零执行成本被拒并触发重规划;SQL 走 AST 白名单 + SQLite authorizer 双层防御。存储层可选升级(
.env一键切换,SQLite 仍为零配置默认):PostgreSQL 分析后端 (连接池 + 复合索引 + 服务端只读事务与语句超时,生成 SQL 经 sqlglot AST 转译双方言 执行);pgvector HNSW 向量检索(LocalVectorStore同接口);Redis 结果缓存 (键含模型指纹,换模型自动失效;缓存不可用时自动降级为直连,命中率进/metrics)。实测吞吐 530.2 req/s、p99 49.9 ms、错误率 0%(关缓存基线;开缓存 577.5 req/s); SSE 首字节 17 ms(阻塞式为 10.3 s); 20 万行下点查索引加速 85–355×、连接池 p50 6.6×;抽取缓存命中 1497 ms → 2.3 ms; 10 万×1024 维向量检索 recall@10=0.99 时 p50 5.7 ms(同轮 numpy 精确基线 16.4 ms)。 完整口径、复现命令与诚实边界见 docs/PERFORMANCE.md。
Nexent / DataMate / A2A 集成
推荐直接使用上文的 Docker Compose。若不使用 Docker,也可在宿主机分别启动:
DataMate 五个可上传算子:
Nexent AgentConfig 模板位于
integration/nexent_agents/。MCP 直接暴露多格式读取、 质量检查、PII 脱敏、实体链接、建图、问答、分析与审计等 17 个工具。实测结果
以下为已落盘实测的头部指标;完整表格、样本数与逐项证据见 docs/EVIDENCE_MAP.md,口径定义见 docs/EVALUATION_PROTOCOL.md。
tests/outputs/eval_neural_cmeie_v1_dev.jsonoutputs/eval_neural_cmeie_dev.jsonoutputs/eval_entity_linking.jsonoutputs/eval_kg_qa.jsonoutputs/kg_scale_report.jsonoutputs/eval_nl2sql*.jsonfinetune/outputs/eval_orchestrator.jsonNPU/NPU_results/summary.json诚实边界:完整 53 关系、无 gold 实体的端到端三元组 F1,公开 SOTA 约 0.55–0.65; 本仓 0.534/0.543 为该困难口径下实测值,方案中的 0.80/0.85 属于未达成的挑战目标。
* 该 1.000/1.000/1.000 度量的是 QAAgent 与
eval_kg_qa.py共用的检索/ 溯源/安全打分核心(离线、无 API,问题由图谱自身遍历确定性生成),不包含 LLM 表述层——即不衡量QAAgent.answer()实际生成给用户的那段自然语言回答 是否忠实、相关、检索是否够用。这一层的独立评测见 docs/EVIDENCE_MAP.md 的 Ragas 结果(outputs/eval_ragas_kg_qa.json), 用与作答同源的 LLM 作为裁判对真实生成的回答打分,与本行互为补充、不互相替代。 所有数字均可由仓内产物与一键复现脚本验证。† 这三个 100% 的口径必须一起读,否则会被高估。 ① 128 题压力集由
benchmarks/build_nl2sql_stress.py按模板生成,且 128 题全部由确定性模板路由 命中(llm_calls=0)——问题与答案出自同一套模板,它度量的是路由覆盖面与可复现性, 不是 LLM 的 Text-to-SQL 能力;② 人工 16 题同样 16/16 走模板路由;③ 真正有区分度的 是 44 题非模板自然问句集(含子查询、跨表 JOIN、DISTINCT 计数、第 N 名、排除条件), 其中 35 题由 LLM 生成、35/35 正确。④ 三个集合在定稿前都被用来定位并修复路由器缺陷 (见docs/EVALUATION_PROTOCOL.md的”从 14 题到 44 题”),因此它们更接近开发集而非 留出测试集。作为补充,用一组从未参与调优的留出问句复测确定性路由,修掉两个新发现的 真实缺陷后为 25/25;两个缺陷已固化为回归测试(tests/test_nl2sql_router.py)。目录结构
medigraph/extraction/medigraph/operators/medigraph/agents/medigraph/graph/medigraph/analysis/service/data/prep/data/models/benchmarks/integration/mcp_server/finetune/NPU/docs/scripts/Dockerfile、compose.yaml文档导航
docs/MediGraphModelEngine技术报告.pdf.docx为同内容可编辑源文件)提交前自检
先激活项目虚拟环境(见「安装」),否则
python会落到系统解释器,缺sqlglot/prometheus_client等依赖时会在收集阶段报 5 个ModuleNotFoundError:不想改变当前会话时,等价的一次性写法:
其中 1 项(
test_cmeie_schema_has_all_53_rows)需要 CMeIE-V2 原始 schema 位于 仓库上一级目录../CMeIE-V2/53_schemas.json。该数据集有独立许可证、不随本仓库分发, 未放置时该项自动 skip(314 passed, 1 skipped)而不是失败。放置方式见data/external_manifest.json;数据已在别处时也可以只建一个目录链接:.env、虚拟环境、缓存和临时日志由.gitignore排除;模型权重、演示视频等大文件 使用 Git LFS 交付。外部数据逐文件来源与 SHA-256 清单见data/external_manifest.json(原始 CMeIE-V1/V2、DIAKG、CM3KG 位于仓库上一级目录, 保留各自许可证边界)。开源与安全
NOTICE、THIRD_PARTY_NOTICES.md;INSPIRATION_REGISTER.md、ORIGINALITY.md;SECURITY.md;