引擎
引擎即库
pip install mirobody:离线指标解析、一次调用解析文档,以及从 77 MB 的库到完整对话服务之间的四档安装分层。
对话服务是构建在引擎之上的一层。引擎本身的① 采集与② 标准化是一个普通的 Python 包:不依赖任何框架,不需要数据库,也不发起网络请求,pip install mirobody 即可使用。
这样切分的原因在于:标准化健康数据通常需要把数据交给外部服务处理,而这里的词表随 wheel 一并安装,整个过程不需要联网。
公开 API
Section titled “公开 API”mirobody/engine.py 就是引擎层对外的全部:两个函数、两个结果类型。
from mirobody.engine import resolve, parse_file
r = resolve("血红蛋白")r.loinc # '718-7'r.canonical # 'Hemoglobin [Mass/volume] in Blood'r.resolved # Truer.candidates # 72 —— 有多少条别名指向这个名字
readings = await parse_file("physical-2026.pdf") # 需要一把模型 keyresolve() 是离线且确定性的。parse_file() 是读文档的那一次调用:只有抽取那半需要模型 key,紧随其后的标准化是离线运行的,所以这个函数在没有 key 时也仍然做得了事。
它是以控制台脚本形式安装的,所以光 pip install mirobody 就能获得一条可执行命令。部署里用 python -m mirobody。
| 命令 | 做什么 | 需要什么 |
|---|---|---|
mirobody resolve <terms…> | 指标名 → 标准编码 | 什么都不需要:无 key、无配置、无网络 |
mirobody parse <file> | 进去一份化验单,出来一张标准化的 LOINC 表 | 一把 LLM key |
mirobody serve | HTTP 服务(对话、MCP、API) | [agents] extra + Postgres/Redis |
mirobody worker | 后台任务 worker(指标同步、画像刷新) | 同 serve |
serve 与 worker 会先检查 agent 层在不在,并直接告诉你该装什么,而不是在深处抛一个 ModuleNotFoundError: langchain。
mirobody resolve "LDL cholesterol" "血红蛋白" "ヘモグロビン" "血圧" LDL cholesterol LOINC 13457-7 Cholesterol in LDL [Mass/volume] in Serum or Plasma by calculation [63 candidates] 血红蛋白 LOINC 718-7 Hemoglobin [Mass/volume] in Blood [72 candidates] ヘモグロビン LOINC 718-7 Hemoglobin [Mass/volume] in Blood [72 candidates] 血圧 unresolved — not in the lexical index (the full semantic pipeline may still resolve it)三种语言,其中两种落到同一个编码。第四行值得注意:血圧 指的是一个套餐而不是一个观测项,词法索引给出的是诚实的未命中,而不是从两个分项中任选其一。
安装分层与对应能力
Section titled “安装分层与对应能力”| 安装方式 | 能用什么 | 占用 |
|---|---|---|
| 只有 wheel + numpy | from mirobody.engine import resolve:离线解析器 | 77 MB,2 个包 |
pip install mirobody | 再加 mirobody parse(一把 LLM key)· 文件解析(PDF/Excel/音频)· FHIR 输出 | 233 MB,90 个包 |
pip install 'mirobody[server]' | 再加 HTTP API 与 MCP 端点 | 需要 Postgres + Redis |
pip install 'mirobody[agents]' | 再加 DeepAgent / BaseAgent 与 mirobody serve(含 [server]) | 再加上 LangChain 那一栈 |
pip install 'mirobody[indicator-build]' | 重建词表本身 | 需要 LOINC / UMLS 源数据 |
77 MB 下限里有 51 MB 是随包分发的 LOINC/SNOMED 数据,也就是解析器本体;标准化之所以能在无网络环境下完成,靠的就是它。另外还有两个 extra:[cn](阿里云 OSS + 火山 Ark)与 [test](pytest + import-linter)。
数据库驱动、HTTP 服务、S3 与邮件客户端都在 [server] 里,[agents] 会把它一并带上,所以只把它当库用的人不需要为一个 Postgres 驱动付费。
引擎与 agent 层的依赖边界
Section titled “引擎与 agent 层的依赖边界”在没有装任何 agent 框架的环境里,引擎必须能 import 成功。 langchain*、deepagents 与 langgraph 只允许出现在 agent/ 与 server/ 之下,这和 langchain 自己给 langchain-core 定的分层是同一套。pyproject.toml 里两条 import-linter 契约会在违规时让构建失败,函数内的局部 import 也算:
pip install -e '.[test]' && lint-imports正是这条契约,让 mirobody.engine 能在环境里只有 numpy 一个第三方包的情况下解析一个指标。
examples/ 下有五个脚本,按所需依赖由少到多排列,每个都可以直接运行。
| 示例 | 需要 | 展示什么 | |
|---|---|---|---|
| 01 | 01_resolve_offline.py | pip install mirobody | ② 名字 → LOINC,任意语言,完全离线 |
| 02 | 02_standardize_a_reading.py | pip install mirobody | ① 单位换算 + 指标目录 |
| 03 | 03_parse_a_lab_report.py | 再加一把模型 key | 一次调用把文档变成标准化读数 |
| 04 | 04_mcp_tool_surface.py | pip install mirobody | ③ 外部 MCP 客户端到手的究竟是什么 |
| 05 | 05_agent_server_preflight.py | pip install 'mirobody[agents]' | 这台机器能不能运行全套服务,还缺什么 |
示例 01、02、04 只需要这个包本身。示例 05 会在一次运行里列出全套服务的所有前置条件,是确认一台机器还缺什么的最快方式。
Docker Compose、一个 demo 账号,以及你需要的那两把 key。
概念图、别名索引,以及正确性是怎么打分的。
每个步骤住在哪里,共享基础设施又是什么。
可编辑安装与测试套件。