当前位置: 首页 > news >正文

[开源] 互联网医院多模态意图路由器:统一接收语音/文字/图片输入,自动识别挂号/咨询/改预约等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:5000):

python 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.py

TF-IDF + 朴素贝叶斯主分类器,含中文分词(jieba)与向量化逻辑

否(核心)

src/llm_classifier.py

LLM 辅助分类封装,调用 OpenAI API(仅当置信度不足时触发)

是(删除后仍可运行)

src/routing_engine.py

解析routing_rules.json,执行意图到服务节点的映射

否(核心)

src/multi_modal_input.py

统一处理 text/voice/image 输入,标准化为文本字符串

否(核心)

src/api_server.py

Flask 接口实现,含/classify/health/intents等端点

是(若仅用 CLI)

src/cli.py

命令行交互逻辑,支持--text--voice--interactive等参数

是(若仅用 API)

templates/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.json:JSON 数组,每项含text(原始输入)、intent(标注意图)、keywords(人工提取关键词),用于训练与验证
-data/routing_rules.json:路由策略配置,字段语义直白,支持注释(JSONC 不被 Python 原生支持,建议用 YAML 或保持无注释)
-data/sample_intents.json:覆盖六类意图的典型输入语句,供快速测试与培训演示
-data/mock_responses.json:mock 模式下各模态的返回示例,便于前端联调

扩展新意图类型时,只需按相同 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

http://www.zskr.cn/news/1326717.html

相关文章:

  • Windows 11终极优化指南:使用Win11Debloat实现专业级系统调校
  • 华硕笔记本终极控制指南:如何用G-Helper替代臃肿的Armoury Crate
  • 使用 curl 命令直接测试 Taotoken 聊天补全接口的步骤详解
  • 2026 年上半年云手机横评:傲晨云 / 掌派 / ACE 深度实测
  • 给工程师的傅里叶变换:从信号处理到图像压缩,用Python代码理解核心推导
  • 像素空间解算赋能,跳出UWB硬件受限技术天花板——四无架构+孪生定位重构行业格局
  • 华硕笔记本性能革命:G-Helper轻量控制工具深度评测
  • 2026年抖音视频怎么保存无水印?抖音本地去水印最新方法盘点
  • 找工具这件事,我被“智能”两个字骗了好几次
  • 1A,30VIN,XZ4119,降压恒流LED驱动芯片 输入电压:8V-30V
  • 终极指南:5分钟掌握B站视频转文字工具bili2text,一键将B站视频转换为可编辑文字稿
  • G-Helper终极指南:如何用5分钟替换臃肿的Armoury Crate,让你的华硕笔记本性能翻倍
  • 新手避坑指南:你的FPGA按键消抖仿真为什么和板子对不上?
  • 一道2厘米的伤口,照见了人间的双重标准
  • Allegro铺铜皮别再一层层画了!用Copy to Layers功能5分钟搞定多层板电源地平面
  • 解决Cesium自定义天空盒的‘天旋地转’问题:preUpdate事件监听与姿态修正指南
  • 市场主流零代码平台选型榜单
  • 使用svg图标
  • 量子化学计算中的自旋适应算符与费米子激发算符
  • 一种基于TSPC-DFF的高速低功耗Fractional PLL实现
  • 养老护理员网课选哪家好?3大平台网课深度测评!
  • 人机协同新范式:AI数字员工Agent如何破解企业系统孤岛
  • 基于MATLAB的GPS捕获、跟踪与PVT计算实现
  • AI 钻牛角尖怎么办?Vibe Coding 中人工介入的 4 个关键信号
  • 深入Linux Input子系统:从全志T113-S3的按键事件,看懂/dev/input/eventX
  • ToastFish:终极Windows通知栏摸鱼背单词神器,上班族必备的隐蔽学习工具
  • Maven高级
  • 期货合约乘数与最小变动价位:从 Quote 读规格做下单预算
  • python学习笔记 | 11.0、面向对象高级编程
  • 告别降级:PyTorch高版本下Mask R-CNN/Faster R-CNN THC头文件与内存分配兼容性修复实战