跳转到内容
快速开始

引擎

引擎即库

pip install mirobody:离线指标解析、一次调用解析文档,以及从 77 MB 的库到完整对话服务之间的四档安装分层。

对话服务是构建在引擎之上的一层。引擎本身的① 采集② 标准化是一个普通的 Python 包:不依赖任何框架,不需要数据库,也不发起网络请求,pip install mirobody 即可使用。

这样切分的原因在于:标准化健康数据通常需要把数据交给外部服务处理,而这里的词表随 wheel 一并安装,整个过程不需要联网。

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 # True
r.candidates # 72 —— 有多少条别名指向这个名字
readings = await parse_file("physical-2026.pdf") # 需要一把模型 key

resolve() 是离线且确定性的。parse_file() 是读文档的那一次调用:只有抽取那半需要模型 key,紧随其后的标准化是离线运行的,所以这个函数在没有 key 时也仍然做得了事。

它是以控制台脚本形式安装的,所以光 pip install mirobody 就能获得一条可执行命令。部署里用 python -m mirobody

命令做什么需要什么
mirobody resolve <terms…>指标名 → 标准编码什么都不需要:无 key、无配置、无网络
mirobody parse <file>进去一份化验单,出来一张标准化的 LOINC 表一把 LLM key
mirobody serveHTTP 服务(对话、MCP、API)[agents] extra + Postgres/Redis
mirobody worker后台任务 worker(指标同步、画像刷新)serve

serveworker 会先检查 agent 层在不在,并直接告诉你该装什么,而不是在深处抛一个 ModuleNotFoundError: langchain

Terminal window
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)

三种语言,其中两种落到同一个编码。第四行值得注意:血圧 指的是一个套餐而不是一个观测项,词法索引给出的是诚实的未命中,而不是从两个分项中任选其一。

安装方式能用什么占用
只有 wheel + numpyfrom 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 框架的环境里,引擎必须能 import 成功。 langchain*deepagentslanggraph 只允许出现在 agent/server/ 之下,这和 langchain 自己给 langchain-core 定的分层是同一套。pyproject.toml 里两条 import-linter 契约会在违规时让构建失败,函数内的局部 import 也算:

Terminal window
pip install -e '.[test]' && lint-imports

正是这条契约,让 mirobody.engine 能在环境里只有 numpy 一个第三方包的情况下解析一个指标。

examples/ 下有五个脚本,按所需依赖由少到多排列,每个都可以直接运行。

示例需要展示什么
0101_resolve_offline.pypip install mirobody② 名字 → LOINC,任意语言,完全离线
0202_standardize_a_reading.pypip install mirobody① 单位换算 + 指标目录
0303_parse_a_lab_report.py再加一把模型 key一次调用把文档变成标准化读数
0404_mcp_tool_surface.pypip install mirobody③ 外部 MCP 客户端到手的究竟是什么
0505_agent_server_preflight.pypip install 'mirobody[agents]'这台机器能不能运行全套服务,还缺什么

示例 01、02、04 只需要这个包本身。示例 05 会在一次运行里列出全套服务的所有前置条件,是确认一台机器还缺什么的最快方式。