【Code With SOLO】20分钟搭建医患在线沟通系统,AI辅助回复润色,让医生的回复更有温度

一、摘要

本项目使用 React + TypeScript + Vite 从零构建了一个本地优先的医患沟通助手,解决患者就医咨询难、医生回复效率低的痛点。 AI 仅作为辅助工具,帮助医生分析紧急程度和润色回复语气,最终诊断和回复决策权始终在医生手中。

:warning: AI 伦理声明 : 本系统中 AI 仅辅助医生工作,不参与任何诊断、治疗建议。紧急程度分析仅供参考,最终判断由医生做出。AI 润色不改变医生回复的原意,仅调整语气风格。

二、背景

我是谁?

非计算机专业在校大学生,上一个帖子还是小说家,这次挑战全栈开发。

为什么做这个东西?

源于亲身经历吧,大家在医院也或多或少会经历类似找不到医生。病人有问题又不知道问谁的情况。

所有我就想到了这个。

病人给医生发消息,医生能够看到。医生看到后即使是随意简短的回复,也能成为病人的定心丸。

医患沟通中,医生时间紧张,回复往往简短生硬;患者焦虑等待,一句"术后疼痛正常"反而让人更不安。我想,如果AI能帮医生把"没问题"翻译成"请放心,这是恢复过程的一部分",会不会让医患关系更温暖?

我觉得这是一件值得去做的有意义的事。所有我就做啦。

适用的工作场景:

小型诊所或社区医院,医生需要处理大量患者咨询,但现有沟通方式效率低。

主要的问题:

对于患者来说:不知道医生何时回复,紧急情况无法及时处理 快速得到专业回复

**对于医生来说:**重复性回答多,难以区分哪些需要紧急处理 高效处理,优先处理紧急情况

核心目标:

1.患者能快速发起咨询

2.医生能按紧急程度排序处理

3.AI 辅助判断紧急程度和润色回复

三、实践过程

第一步:

很简单,把自己的想法直接告诉solo,我们一起来深化场景。

Solo主动确认了一些关键结点,说明它有它的思考。

/spec模式下直接长任务生成文档,再执行文档,solo自己设计运行一会后就把最初版本端上来了。

Solo的步骤归纳如下:

1 任务拆解思路(患者端/医生端/数据层)

2 设计数据模型(IndexedDB 索引结构)

思路: 先确定数据结构,再设计界面。

3 第二步:实现数据层(IndexedDB)

思路: 使用 idb 库封装 IndexedDB 操作,支持用户的 by-phone 索引和消息的 by-sender/by-receiver 索引。

4 第三步:实现 AI 紧急程度分析

思路: 基于关键词匹配,判断消息是否包含紧急/心理相关词汇。

5 第四步:实现 AI 语气润色(三种风格)

思路: 在不改变原意的前提下,调整语气风格。

6 第五步:实现患者端

包括登录逻辑和发起咨询

7 第六步:实现医生端

主要是按紧急程度排序

第二步:让它告诉我怎么用。

对的:red_exclamation_mark:它直接就全部完成生成文件放在那里了,但是我不知道怎么用。

不得不说自己啥都不会,全让solo教。

干脆生成一键脚本了。

本人懒。

当然solo不是万能的,事情没有一帆风顺。

马上就是一大堆的问题。

四、问题与解决

问题一:路由问题

或者

或者

一打开是一片空白,换路径、刷新、重开,各种404。

这种情况出现了好多次:red_exclamation_mark:

Solo在路由配置这块有待加强啊,当然因为多了角色切换、多端跳转,路由复杂度翻倍,反正我自己是肯定不会的,solo牛逼

所以忍无可忍,直接说“类似跳转出错问题已经发生很多次了。请反复测试后生成测试报告”,之后就没问题了。

至于怎么去调剂解决的办法就是:

简单粗暴,让kimi生成prompt,让ai生成的东西去调教solo。

Solo发现问题: React Router v6 使用 HashRouter,但跳转时页面空白。

原因: 没有正确配置 HashRouter 的 history 模式。

解决: 使用 createHashRouter 替代 createBrowserRouter,路径自动带 #。

其实我也看不懂,它说什么是什么吧,我只知道页面跳转和空白问题都解决了。

这个时候页面仅仅能够正常打开功能还没测试。

问题2:回答的太垃圾了,ai润色不好。

可以看到医生的简短回复,下图是润色后的回复。

“术后疼痛正常"润色成"我理解您的不适,术后疼痛正常,别担心。请安心休养,有问题随时联系我。”

看似长了,实则空洞。 患者要的是"为什么正常"“什么情况下不正常”,不是正确的废话。

润色后和没润色一样。还得医生自己修改。这肯定是无用又不靠谱的。

所以这个时候就有了两个方法。

方法一:优化本地模型来生成更人性化的回答。

方法一其实并不太现实,效果有限,但是我还是让kimi生成了prompt改动一次。

改动效果有区别也有成效:

不过依旧一坨,拉完了。

方法二:利用api调用大厂的模型。

还是让kimi发力。让它生成cn实现大模型调用功能的prompt。

关键设计:让 AI 润色成为可选模式,医生可自主选择本地模型或 API。

说明“这是一个可以选择的模式,是附加功能。可以选择使用大模型进行,也可以就按照原来的润色”

新加问题:

Solo完成后去测试发现了新问题:API"假装工作"

Api功能保存成功后。

Ai润色出现了同样的回复。

说明api没有成功调用。让kimi生成prompt继续调教。

这一步solo发现问题后也是自己解决了。

说的什么咱也不懂,就不贴图了。(设计我自己的密钥)

想了解我可以发在评论区。

再次生成回复有了明显变化。

问题3:患者登录后消息列表空白

此时患者已经发了消息,医生这边成功调用deepseek进行了回复和发送。

但是登录患者账号却一片空白,仿佛一切都没有发生。失忆了?

很明显错误,不但看不到自己发的历史记录,也看不到医生的回复。

排查过程:

还是先问kimi

得到prompt,solo去自己排查。

包括

检查 localStorage - 会话存储正常

检查 IndexedDB - 数据存在

检查查询逻辑 - 发现 getMessagesByUser 查询的是 by-receiver 索引

最终原因: 医生回复后,消息的 receiverId 仍是医生ID,患者用 by-receiver 查不到。

解决: 合并查询 by-sender(患者发的)和 by-receiver(应该改为患者接收的),并进行去重。并且优化了整个数据流。

五、成果展示

数据层 db/index.ts 用于IndexedDB 封装

AI 分析 ai/urgency.ts 用于紧急程度判断

AI 润色 ai/polishing.ts 用于语气风格调整

患者端 pages/patient/ 用于登录/咨询/查看

医生端 pages/doctor/ 用于列表/回复/润色

流程图展示:

0.选择自己的角色(实际场景中这一步意义不大)

1.患者登录:

这里用的是2号病人,李阿姨。

2.病人发起咨询

3.描述问题,提交医生

4.退回页面,能看到更新的历史记录

切换到医生端

5.登录医生界面后

发现多条未回复和已回复内容。

其中就有2号病人李阿姨的消息。

6.1回复病患李阿姨

下图是调用deepseek的过程和结果。

6.2下图是调用本地模型的回复

依旧拉完了

7.回复发送回到消息界面,李阿姨的状态更新,显示以回复。

切回患者端

8.最后回到患者李阿姨

可以看到正常收到回复,而且已经回复和还没被回复的消息有了绿色标点区分。

9.点开消息查看回复

至此流程全部完成。

六、效果与总结

SOLO 作用:

1.从零设计数据模型和架构

2.封装 IndexedDB 操作

3.实现 AI 关键词匹配和语气润色

4.解决路由、数据关联、账号复用等问题

5.伦理边界,自动在代码中添加 AI 辅助声明和约束

可复用方法:

1.本地优先架构: IndexedDB + localStorage,适合离线优先的轻量应用

2.AI 紧急分类: 关键词匹配可复用到客服、工单等场景

3.语气润色: 三种风格模板可扩展

下一步优化方向:

添加消息推送提醒

支持语音输入

最后的最后我想说:

这个作品,我想为真实的医患关系做一点小事。

技术不复杂,但场景真实。

如果能让医生的回复少一分冰冷,多一分温度,这20分钟就值得。

但我也清楚,目前的版本放在真实医院里,还远远不够。

1.现在只是本地网页,localhost运行,但是真实场景需要微信小程序或App,患者扫码即用,我不会小程序开发,没申请过资质。

2.现在单机存储,数据在浏览器,真实场景需要云端数据库,多设备同步,病历关联,但我没做过服务器部署,不懂数据安全合规。

3.现在是模拟医生账号登录,但是真实场景是对接医院HIS系统,实名认证,处方权限,我完全没接触过医院信息化,也没有对接医院的实力。

4.现在AI润色是"玩具"级别,但是真实场景医疗AI需要药监局审批,责任界定清晰,我不懂医疗法规,不敢越界。

所以这个项目,我更想分享的是想法和思路——

1.医患沟通的温度,可以来自AI的语气润色,而非更贵的设备

2.本地优先+AI辅助,是小团队也能尝试的技术路径

3.非计算机专业的人,用SOLO也能把想法跑起来

至于小程序开发、医院对接、医疗合规、规模化运营……这些都超出了我一个在校大学生的能力。

如果有开发者、产品经理、医疗从业者看到这里,觉得方向有价值,欢迎继续优化和投入使用。代码开源,思路共享,就当是我抛砖引玉。

如果这个东西真的真的能够实现,还请勿忘我。

“自有后来人”

这个想法在我很早之前就有了,但是我连做到现在这种程度的能力都没有。所以感谢solo提供了这么一个工具,也算是给当初的自己一个答复了。

1 个赞