
基于症状结构化数据 + 医生能力标签 + 实时接诊状态 + 评分机制的综合匹配。
如果做不好:
如果做好:
下面我们从架构逻辑 + 数据模型 + 核心算法 + 代码示例,完整拆解实现思路。

推荐医生系统核心分为四层:
流程如下:
用户输入症状 → 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.1public 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();
}public double calculateLoadWeight(int currentLoad,
int maxLimit) {
if (currentLoad >= maxLimit) {
return 0;
}
return 1 - ((double) currentLoad / maxLimit);
}医生越空闲,权重越高。
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问诊推荐医生系统,本质不是排序算法, 而是一个“医疗决策辅助系统”。
它的核心能力在于:
真正成熟的系统,一定是:
技术逻辑清晰 + 医疗逻辑严谨 + 业务闭环完整。
如果只是简单按科室列医生,那不叫智能匹配。 真正的精准分诊,是让对的患者,第一时间找到对的医生。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。