[开源] 互联网医院多模态意图路由器:统一接收语音/文字/图片输入,自动识别挂号/咨询/改预约等6类意图并路由到对应服务节点

发布时间:2026/5/20 7:25:30

[开源] 互联网医院多模态意图路由器:统一接收语音/文字/图片输入,自动识别挂号/咨询/改预约等6类意图并路由到对应服务节点 本项目是面向互联网医院中台建设的轻量级意图理解与分发组件专为解决患者多渠道输入文字问诊、语音描述症状、上传检查报告截图后意图模糊、人工分流低效、服务节点调用错配等问题而设计。我们不替代医生决策或生成诊疗建议而是做「第一层语义过滤器」先准确判断用户到底想干什么是挂号、查报告、改预约、投诉还是其他未明确定义的需求再按预设规则把请求稳准快地转给注册服务、报告服务、反馈系统等下游节点同时附带可读的归因说明让运营和开发人员一眼看懂系统为何这么判。它提供 HTTP API、命令行 CLI 和本地 Web 界面三种交互形态核心分类器基于 TF-IDF 朴素贝叶斯scikit-learn 实现对中文医疗短文本优化充分当置信度低于阈值默认 0.6时自动启用 LLM 辅助兜底所有路由逻辑通过routing_rules.json配置无需改代码即可调整意图与服务节点的映射关系。技术栈精简可控Python 3.8、Flask、jieba 分词、无 GPU 依赖部署门槛低适合嵌入现有医院微服务架构。定位与能力范围我们不做通用大模型对话引擎也不做端到端语音识别或 OCR 引擎。本项目的边界非常清晰只处理「患者侧输入 → 意图判定 → 路由分发」这一窄链条。输入模态限定为三类纯文本如 App 内输入框、语音文件wav/mp3当前默认 mock可对接真实 ASR、图片文件含报告截图当前 OCR 为 mock但接口已预留。输出不是答案而是结构化结果意图标签挂号/咨询/改预约/查报告/投诉/其他、置信度数值、目标服务节点名如registration_service、以及一句自然语言归因如“因您提到‘预约’和‘专家号’系统判断您想要挂号”。它不生成处方、不解释指标异常、不校验医保资格这些都交给下游专业服务完成。它的价值在于把混乱入口收束成标准语义通道让挂号系统不必自己解析“我想挂心内科张主任下周二的号”让报告服务不用再从“帮我看看这个CT单子”里猜用户要查哪份报告。核心功能本项目六大能力全部围绕「多模态输入→意图识别→服务路由」主干展开每项均可独立启用或组合使用多模态输入统一接入同一套逻辑处理文字、语音、图片三类载体避免为不同输入方式重复开发意图识别模块双阶段意图分类机制首层用 TF-IDF 朴素贝叶斯快速打标低置信度 case 自动触发 LLM 辅助推理需配置 OPENAI_API_KEY可配置路由引擎意图到服务节点的映射关系存于data/routing_rules.json支持一对多、优先级排序、灰度切换全链路归因说明生成每个分类结果附带一句话解释说明关键词依据与逻辑路径便于人工复核与流程审计三端一致交互体验API 供系统集成、CLI 供运维调试、Web 界面供临床培训演示三者共享同一套核心逻辑开箱即用的测试数据集内置data/intent_dataset.json含 6 类意图标注样本与sample_intents.json典型用例降低冷启动成本下表列出当前支持的 6 类意图及其标准定义与服务节点映射所有条目均可在data/routing_rules.json中增删改意图业务含义对应服务节点是否支持低置信度 LLM 补充挂号主动预约门诊号源含科室、医生、时段registration_service是咨询病情描述、用药疑问、科室推荐等非事务性提问consultation_service是改预约修改、取消、重新预约已有挂号记录appointment_service是查报告查询历史检查/检验/体检报告含时间、类型、机构report_service是投诉对服务、流程、态度等提出意见或反馈feedback_service是其他无法归入上述五类的泛化请求general_service是使用与配置项目开箱即用无需训练模型或准备算力资源。安装后可通过三种模式立即验证效果pip install -r requirements.txt启动 API 服务默认监听http://localhost:5000python app.py --mode api使用 CLI 进行本地测试支持单次输入、交互模式、批量评估# 文字输入 python app.py --mode cli --text 我想预约心内科专家号 # 语音输入mock 模式返回示例 python app.py --mode cli --voice test.wav # 图片输入mock 模式返回示例 python app.py --mode cli --image report.png # 交互模式持续输入实时反馈 python app.py --mode cli --interactive # 批量测试输出准确率、召回率 python app.py --mode cli --batch关键配置项集中于两处- 置信度阈值控制 LLM 触发时机默认 0.6可修改config.yaml或设环境变量CONFIDENCE_THRESHOLD- 路由规则完全由data/routing_rules.json文件定义格式为 JSON 数组每项含intent意图名、service_nodes服务节点列表按优先级排序、description可选说明添加新意图只需两步在data/intent_dataset.json中补充带标签的训练样本在data/routing_rules.json中新增对应路由项。无需修改任何 Python 代码。工程结构项目采用清晰分层结构各模块职责单一、边界明确便于医院信息科或第三方厂商按需裁剪模块文件主要职责是否可移除app.py统一入口解析命令行参数并分发至对应模式否src/intent_classifier.pyTF-IDF 朴素贝叶斯主分类器含中文分词jieba与向量化逻辑否核心src/llm_classifier.pyLLM 辅助分类封装调用 OpenAI API仅当置信度不足时触发是删除后仍可运行src/routing_engine.py解析routing_rules.json执行意图到服务节点的映射否核心src/multi_modal_input.py统一处理 text/voice/image 输入标准化为文本字符串否核心src/api_server.pyFlask 接口实现含/classify、/health、/intents等端点是若仅用 CLIsrc/cli.py命令行交互逻辑支持--text、--voice、--interactive等参数是若仅用 APItemplates/index.html响应式 Web 界面适配手机横竖屏含文字/语音/图片三入口是若仅用 API/CLI所有配置、数据、模板均置于项目根目录或data/、templates/子目录下无隐式路径依赖符合医院信息系统部署规范。环境与运行运行环境要求极低仅需 Python 3.8无 GPU 或 CUDA 依赖。语音与图片处理当前均为 mock 模式返回预设示例结果如需对接真实 ASR 或 OCR 服务只需在src/multi_modal_input.py中替换对应函数实现不影响其余模块。LLM 辅助分类为可选增强能力配置OPENAI_API_KEY后自动启用未配置时降级为纯规则统计模型不影响主流程稳定性。Web 界面完全静态无需额外 Web 服务器直接打开templates/index.html或通过 Flask 服务访问均可。所有依赖列于requirements.txt含版本锁定避免因包更新引发线上故障。数据与扩展项目数据资产全部明文可读、结构清晰-data/intent_dataset.jsonJSON 数组每项含text原始输入、intent标注意图、keywords人工提取关键词用于训练与验证-data/routing_rules.json路由策略配置字段语义直白支持注释JSONC 不被 Python 原生支持建议用 YAML 或保持无注释-data/sample_intents.json覆盖六类意图的典型输入语句供快速测试与培训演示-data/mock_responses.jsonmock 模式下各模态的返回示例便于前端联调扩展新意图类型时只需按相同 JSON 结构向intent_dataset.json追加样本并同步更新routing_rules.json。若需支持英文输入可在src/multi_modal_input.py中加入英文分词逻辑当前 jieba 仅处理中文其余模块无需改动。限制与说明本项目当前有三项明确限制均已在设计中留出升级路径- 语音识别与图片 OCR 为 mock 模式真实场景需对接医院已有 ASR/OCR 服务或采购第三方 API- LLM 辅助分类依赖 OpenAI暂不支持国产大模型 API但llm_classifier.py已抽象出call_llm()接口可自行替换实现- 中文分词仅用 jieba未集成医学词典如需提升专科术语识别率可在src/intent_classifier.py中加载自定义词典所有限制均不阻碍主流程运行。mock 模式下仍能完整走通「输入→分类→路由→归因」全链路确保逻辑验证与流程培训不受影响。界面中置信度进度条采用三级颜色示意绿色 0.8黄色 0.5–0.8红色 0.5仅为帮助使用者快速建立判断信心非临床决策依据。项目地址https://github.com/nexorin9/internet-hospital-intent-router

相关新闻