很多互联网医院都在做“推荐医生”功能,但真正有效的推荐,不是简单按科室排序,而是——
基于症状结构化数据 + 医生能力标签 + 实时接诊状态 + 评分机制的综合匹配。
如果做不好:
- 患者选错医生
- 医生接到不匹配病例
- 接诊效率下降
- 投诉率上升
如果做好:
- 分诊准确率提升
- 医生资源利用率提高
- 接诊转化率明显增加
下面我们从架构逻辑 + 数据模型 + 核心算法 + 代码示例,完整拆解实现思路。
一、整体架构逻辑
推荐医生系统核心分为四层:
- 症状结构化层
- 医生标签体系
- 匹配评分算法
- 实时调度机制
流程如下:
用户输入症状 → AI结构化 → 生成疾病标签 → 匹配医生标签 → 综合评分排序 → 推荐前N名医生
二、第一步:症状结构化处理
用户输入:
最近三天咳嗽,有点发烧,喉咙疼
需要转化为结构化数据:
{
"symptoms": ["咳嗽", "发烧", "喉咙疼"],
"duration": 3,
"possible_department": "呼吸科"
}
示例解析代码(简化示例):
public ConsultContext parseInput(String input) {
ConsultContext context = new ConsultContext();
if (input.contains("咳嗽")) {
context.addTag("咳嗽");
}
if (input.contains("发烧")) {
context.addTag("发烧");
}
if (input.contains("喉咙")) {
context.addTag("咽喉炎");
}
context.setDepartment("呼吸科");
return context;
}
实际生产中通常会调用大模型或医疗NLP模型,但核心思路不变:
先结构化,再决策。
三、第二步:医生标签体系设计
医生表结构设计示例:
CREATE TABLE doctor (
id BIGINT PRIMARY KEY,
name VARCHAR(100),
department VARCHAR(100),
rating DOUBLE,
online_status TINYINT,
max_daily_limit INT,
current_load INT
);
医生标签表:
CREATE TABLE doctor_tag (
doctor_id BIGINT,
tag VARCHAR(100)
);
例如:
| doctor_id | tag |
|---|---|
| 1001 | 咳嗽 |
| 1001 | 呼吸感染 |
| 1002 | 慢性咽炎 |
标签体系越细,匹配越精准。

四、核心匹配算法设计
推荐不是“只要科室一致就行”,
而是一个多因素加权模型。
评分模型可以设计为:
匹配分 = 症状匹配度 × 0.5
+ 医生评分 × 0.2
+ 在线状态权重 × 0.2
+ 当前负载权重 × 0.1
1️⃣ 计算症状匹配度
public double calculateMatchScore(List<String> patientTags,
List<String> doctorTags) {
int matchCount = 0;
for (String tag : patientTags) {
if (doctorTags.contains(tag)) {
matchCount++;
}
}
return (double) matchCount / patientTags.size();
}
2️⃣ 负载权重计算
public double calculateLoadWeight(int currentLoad,
int maxLimit) {
if (currentLoad >= maxLimit) {
return 0;
}
return 1 - ((double) currentLoad / maxLimit);
}
医生越空闲,权重越高。
3️⃣ 综合评分排序
public double calculateFinalScore(double matchScore,
double rating,
int onlineStatus,
double loadWeight) {
double onlineWeight = onlineStatus == 1 ? 1 : 0;
return matchScore * 0.5
+ rating * 0.2
+ onlineWeight * 0.2
+ loadWeight * 0.1;
}
五、精准分诊逻辑(避免误匹配)
在匹配前要做科室过滤:
public List<Doctor> filterByDepartment(String department) {
return doctorMapper.findByDepartment(department);
}
如果AI判断风险等级较高:
- 自动优先推荐三甲资深医生
- 或直接升级为人工紧急分诊
示例:
if (context.getRiskLevel() == HIGH) {
return doctorMapper.findSeniorDoctors();
}
这一步决定系统专业性。
六、高并发优化(缓存 + 预计算)
在实际运营中:
- 医生标签不频繁变化
- 医生评分更新频率低
可以将医生标签缓存到Redis:
public List<String> getDoctorTags(Long doctorId) {
String key = "doctor:tags:" + doctorId;
List<String> tags = redisTemplate.opsForList().range(key, 0, -1);
if (tags != null && !tags.isEmpty()) {
return tags;
}
tags = doctorTagMapper.findByDoctorId(doctorId);
redisTemplate.opsForList().rightPushAll(key, tags);
return tags;
}
高并发下减少数据库查询压力。
七、最终推荐流程汇总
完整流程:
- 用户输入症状
- AI结构化解析
- 生成症状标签
- 根据科室过滤医生
- 计算匹配分
- 按综合评分排序
- 返回前3名推荐医生
这才是真正的“智能推荐”。
八、商业价值在哪里?
技术做对了,商业价值自然体现:
- 提高问诊转化率
- 减少误分诊投诉
- 优化医生资源配置
- 提升患者满意度
医院得到的是:
- 更高的接诊效率
- 更均衡的医生负载
- 更稳定的线上运营能力

结尾
AI问诊推荐医生系统,本质不是排序算法,
而是一个“医疗决策辅助系统”。
它的核心能力在于:
- 症状结构化能力
- 医生标签体系建设
- 多维度评分模型
- 实时负载调度机制
真正成熟的系统,一定是:
技术逻辑清晰 + 医疗逻辑严谨 + 业务闭环完整。
如果只是简单按科室列医生,那不叫智能匹配。
真正的精准分诊,是让对的患者,第一时间找到对的医生。