在大模型加速落地的当下,「怎么把 LLM 真正融入到业务流程」已经成为医疗机构、互联网医院、数字化团队共同关注的问题。本篇文章基于 heyou-medical 项目,从实际代码出发,拆解一个可落地的「智能医疗客服 + 挂号助手」方案,并给出面向企业级应用的优化建议。
一、项目定位与整体能力概览
项目定位
产品名称:禾优小智(医疗版)
使用场景:医院官网 / 小程序 / 公众号 / 自助终端上的 智能导诊 + 挂号助手
核心角色:
智能医疗顾问:提供病情咨询、就诊建议、用药建议(基于提示词约束在医疗领域内)。
就医流程助手:分导诊、查询号源、预约挂号、取消预约等。
| 维度 | 说明 |
|---|---|
| 产品名称 | 禾优小智(医疗版) |
| 使用场景 | 医院官网 / 小程序 / 公众号 / 自助终端 |
| 核心角色 | 智能医疗顾问 + 就医流程助手 |
整体能力
支持基于 医院专属知识库 的 RAG 问答(如医院介绍、科室信息、神经内科介绍等)。
支持基于 工具调用(Tool Calling) 的智能挂号:查询是否有号源、预约、取消预约。
支持 按用户维度的会话记忆(基于 MongoDB)以及 高性能流式输出体验(WebFlux + 前端流式渲染)。
前后端分离:后端 Spring Boot + LangChain4j,前端 Vue3 + Element Plus 打造聊天工作台式体验。
整体能力结构图
二、整体架构设计
系统架构图
从代码结构看,heyou-medical 主要分为三层:
1、前端 (heyou-ui)
技术栈:Vue3 + Element Plus + Vite
主要页面:App.vue + ChatWindow.vue
聊天 UI、会话列表、本地 UUID 用于标识用户会话。
2、后端服务
2.1 技术栈:
Spring Boot 3.4.4
LangChain4j(含 DashScope、Reactor、Pinecone、Easy-RAG 等组件)
MyBatis-Plus + MySQL(挂号记录)
MongoDB(会话记忆)
Knife4j(接口文档)
2.2核心模块:
启动入口:HeyouAgentApplication
控制层:HeyouController(/heyou/chat 流式接口)
智能体:HeyouAgent、MemoryChatAssistant、SeparateChatAssistant
配置:HeyouAgentConfig、MemoryChatAssistantConfig、SeparateChatAssistantConfig、EmbeddingStoreConfig
业务挂号:Appointment / AppointmentMapper / AppointmentService / AppointmentServiceImpl / AppointmentTools
3、外部依赖与基础设施
大模型与向量模型:阿里云百炼 Qwen 系列(qwen-max / qwen-plus / text-embedding-v3)
向量库:Pinecone
存储:
MySQL:挂号订单表 MongoDB:会话记忆库本地知识库:src/main/resources/knowledge/*.md(医院信息、科室信息、神经内科等)
可以概括为一套 “前端聊天工作台 + 后端智能体服务 + RAG 知识库 + 工具驱动业务流程” 的完整闭环。
三、核心技术栈拆解
技术栈结构图
- 后端技术栈
Spring Boot 3.4.4
负责 REST 接口、依赖注入、配置管理,端口 8088。WebFlux + Reactor
HeyouController.chat 直接返回 Flux<String>,支持流式响应,提升对话体验和性能。LangChain4j(1.0.0-beta3 系列)
- langchain4j-spring-boot-starter:与 Spring 深度集成,通过 @AiService 注解声明智能体。
- langchain4j-reactor:与 Reactor 结合,实现流式、响应式对话。
- langchain4j-community-dashscope-spring-boot-starter:对接阿里百炼 Qwen 系列模型。
- langchain4j-document-parser-apache-pdfbox、langchain4j-easy-rag、langchain4j-pinecone:支撑文档解析、RAG 能力与 Pinecone 向量库。
- 数据层与存储
- MyBatis-Plus + MySQL:封装挂号数据操作(AppointmentMapper、AppointmentServiceImpl)。
- Spring Data MongoDB:存储会话记忆(MongoChatMemoryStore)。
- Pinecone:作为可扩展的在线向量存储,适合后续大规模知识库。
前端技术栈
Vue3 + Element Plus + Vite
- 单页应用,构建快捷,支持现代浏览器特性。
- Axios
- 通过 POST /api/heyou/chat 发起对话请求。
- 利用 onDownloadProgress 处理 流式文本增量渲染。
- UUID
- 浏览器端生成并缓存 user_uuid,经过转换后作为 Long 型 memoryId 与后端的 @MemoryId 对应,实现「按用户隔离的会话上下文」。
四、核心功能拆解
对话请求处理流程(时序图)
智能体与配置关系图
预约挂号业务流程图
- 智能医疗顾问
- 系统提示词定义在 heyou-prompt-template.txt 中,指定:
- 助手名称为「禾优小智」,医院为「北京协和医院」。
- 角色:医疗顾问 + 医疗伴诊助手。
- 必须只在首次会话时打招呼,后续直接进入问答。
- 对病情咨询需给出:
- 可能病因
- 诊断流程建议
- 治疗与用药建议(含药品名、剂量、疗程)
- 就医与检查建议
严格限制只回答医疗相关问题,非本领域需礼貌拒绝。
答案中适当加入轻松可爱的表情符号(面向 C 端用户体验)。
这些规则最终通过 @SystemMessage(fromResource = “heyou-prompt-template.txt”) 注入到 HeyouAgent.chat 中,对 LLM 行为做了非常清晰的「安全护栏」。
- AI 分导诊 + RAG 知识库
- 在 HeyouAgentConfig 中:
使用 FileSystemDocumentLoader 从 knowledge 目录加载如:
医院信息.md
科室信息.md
神经内科.md
使用 EmbeddingStoreIngestor 将这些文档切分为 TextSegment,并写入 InMemoryEmbeddingStore。
通过EmbeddingStoreContentRetriever 暴露为 ContentRetriever,供智能体检索。
- 另一条路径通过 EmbeddingStoreConfig + PineconeEmbeddingStore 集成了 Pinecone,contentRetrieverHeyouPinecone 使用外部向量库:
支持:
指定 index 名称、namespace。
根据 EmbeddingModel.dimension() 自动配置维度。
设置 maxResults 与 minScore 过滤相似度。
- 智能预约挂号与取消
- 实体与数据表
Appointment:挂号信息实体,字段包含姓名、身份证号、科室、日期、时间、医生等。
AppointmentMapper:继承 BaseMapper
,直接使用 MyBatis-Plus 的 CRUD 能力。
AppointmentServiceImpl:使用 LambdaQueryWrapper 自定义 getOne 查询,用于判断是否已有相同时间段、科室的预约。
工具函数(Tool)驱动业务流
AppointmentTools 中定义了 3 个关键 Tool:
bookAppointment(预约挂号)
cancelAppointment(取消挂号)
queryDepartment(查询是否有号源,当前为示例逻辑)
工具的核心逻辑:
预约前 先通过 getOne 判断是否存在相同时间、科室的记录,避免重复预约。
新增成功则返回「预约成功,并返回详情信息」,失败返回失败提示。
取消预约通过查询匹配记录并调用 removeById 删除。
queryDepartment 中预留 TODO,用于接入真正的医生排班逻辑。
在 HeyouAgent 的 @AiService 注解中,通过 tools = {“appointmentTools”} 暴露这些 Tool 给大模型:
- 大模型可在对话中根据用户意图自动调用挂号、取消等工具,实现真正的「对话即业务操作」。
- 会话记忆与用户识别
后端侧会话记忆
HeyouAgentConfig.chatMemoryProviderHeyou 中:
- 使用 MessageWindowChatMemory 并配置 maxMessages(20)。
- 使用自定义的 MongoChatMemoryStore 实现持久化。
前端侧用户标识
ChatWindow.vue 中:
- 首次访问时在浏览器端生成 UUID,通过 uuidToNumber 转为 Long 范围数值并存在 localStorage。
- 每次请求带上 memoryId,与后端的 @MemoryId Long memoryId 对应。
- 新会话时清空本地 user_uuid,重新生成,从而重置会话记忆。
五、运行与搭建步骤
搭建流程图
1. 后端服务(Spring Boot)
运行前准备
JDK 17+
Maven 3.8+
本地 MySQL,创建库 heyou-agent,配置账号密码(application.properties 中默认 root/root)。
本地 MongoDB,默认连接串:mongodb://localhost:27017/chat_memory_db。
配置阿里云百炼环境变量:
ALI_API_KEY:用于 Qwen 对话与向量模型。
配置 Pinecone 环境变量:
PINECONE_API_KEY:用于创建与访问向量索引。
启动步骤
在 heyou-medical 目录执行:
mvn clean package(或直接 mvn spring-boot:run)
应用启动类:HeyouAgentApplication
启动成功日志:HeyouAgent Server Start Success!
默认服务端口:8088
2. 前端应用(Vue3)
安装依赖
进入 heyou-ui 目录:
npm install 或 pnpm install
启动开发环境
npm run dev
通过 Vite 本地启动前端服务。
与后端联调
前端中调用接口地址为 /api/heyou/chat,可在 Vite 代理配置中将 /api 代理到 http://localhost:8088:
例如在 vite.config.js 中配置:
proxy: { ‘/api’: { target: ‘http://localhost:8088’, changeOrigin: true, rewrite: path => path.replace(/^/api/, ‘’) } }
六、项目亮点总结
- 智能体编排清晰,易于扩展
HeyouAgent、MemoryChatAssistant、SeparateChatAssistant 将不同场景的对话逻辑拆分为多个智能体接口,使用 @AiService 描述 wiring 模式、模型、记忆、工具、内容检索等,后续新增业务只需新增接口和配置 Bean,非常符合企业级可扩展性要求。
- 业务「工具化」抽象合理
将挂号、取消、查询号源等功能抽象为 Tool(AppointmentTools),对模型而言就是可调用的「函数」,实现了「自然语言 → 业务动作」的桥接,这种架构设计在未来扩展如检验报告查询、费用查询时也可以复用。
- 诊疗知识与医院知识分层管理
医院及科室信息以 Markdown 文档形式存储在 knowledge 目录,便于非技术人员维护;通过 RAG 将其载入向量库供模型检索,兼顾了准确性与可维护性。
- 用户体验友好的流式对话
WebFlux + Vue 的流式渲染方案,让用户在医疗场景下获得接近 IM 工具的顺滑体验,尤其对移动端做了响应式适配(@media 媒体查询)。
核心亮点小结
七、面向企业级落地的优化建议
企业级落地建议(结构图)
从企业医疗项目视角看,这套方案已经具备很好的骨架,但在真正面向生产时,还可以进一步强化:
1. 安全与合规
- 合规提示与免责声明
- 在前端 Chat 页面增加明显的「免责声明」区域,强调本系统提供的是健康建议,不能替代医生面诊。
- 对涉及处方药、敏感疾病的回答增加固定模板提示。
- 权限与风控
- 为挂号、取消等操作增加 用户身份体系(如登录态、患者账号),避免仅凭姓名 + 身份证号即可操作所有记录。
- 对敏感操作(如取消他人预约)增加二次确认或短信验证码校验。
2. 医疗业务深度融合
- 与 HIS/预约系统打通
目前 queryDepartment 中仍是 TODO,建议:
接入医院真实排班表,综合科室、日期、时间、医生的号源信息。
设计 失败回退机制:当外部系统不可用时,模型不要给出成功预约的承诺,而是友好提示「系统繁忙,请稍后再试」。
- 多科室、多医院支持
- 将医院信息、科室信息抽象为数据配置,增加医院/院区/科室的层级字段,支持多机构共用同一平台。
3. 知识库与模型治理
- 知识库管理后台
将 knowledge 目录中的 markdown 文本管理后台化:
支持运营同学在后台更新科室介绍、医生简介、就医流程。
后端自动触发重新向量化与索引更新。
- 答案追踪与反馈闭环
为每次问答增加唯一 traceId,记录:
用户问题、模型回答、调用过的 Tool、RAG 命中文档片段。
提供运营或医生审核界面,对不当回答打标,并基于反馈优化提示词或知识库内容。
4. 性能与可观测性
- 缓存策略
- 对高频访问的静态知识问答可加入缓存(如科室信息),减少重复向量检索。
- 日志与监控
对关键环节(Tool 调用、RAG 检索、外部接口调用)增加结构化日志与指标:
QPS、错误率、超时率、平均响应时长等。
利用 Prometheus + Grafana 打造监控大盘。
5. 工程与多环境管理
- 多环境配置
- 将 Ali 百炼、Pinecone、数据库连接等参数统一放入多 profile(dev、test、prod)配置中,通过环境变量注入,避免硬编码路径(如本地知识库绝对路径)。
- 自动化测试与灰度
已有测试类基础上,补充更多模拟会话、Tool 调用的集成测试,确保升级 LangChain4j 或模型时行为可控。
引入灰度发布策略,在小部分用户上先验证新版本的提示词、RAG 策略、Tool 行为。
结语
heyou-medical 项目很好地展示了一条可复制的路径:用 LangChain4j 将大模型、结构化业务系统和医院知识库编排在一起,构建一个真正能「办事」的智能医疗助手。在此基础上,结合企业级的安全、合规、监控与多环境管理能力,就可以逐步把这套系统从 Demo 推向真实生产环境。
如果你后续希望,我可以再帮你拆一份更偏「产品白皮书」或「招标/立项文档」风格的版本,或者针对当前代码给出更细致的重构与优化建议。
学AI大模型的正确顺序,千万不要搞错了
🤔2026年AI风口已来!各行各业的AI渗透肉眼可见,超多公司要么转型做AI相关产品,要么高薪挖AI技术人才,机遇直接摆在眼前!
有往AI方向发展,或者本身有后端编程基础的朋友,直接冲AI大模型应用开发转岗超合适!
就算暂时不打算转岗,了解大模型、RAG、Prompt、Agent这些热门概念,能上手做简单项目,也绝对是求职加分王🔋
📝给大家整理了超全最新的AI大模型应用开发学习清单和资料,手把手帮你快速入门!👇👇
学习路线:
✅大模型基础认知—大模型核心原理、发展历程、主流模型(GPT、文心一言等)特点解析
✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑
✅开发基础能力—Python进阶、API接口调用、大模型开发框架(LangChain等)实操
✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用
✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代
✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经
以上6大模块,看似清晰好上手,实则每个部分都有扎实的核心内容需要吃透!
我把大模型的学习全流程已经整理📚好了!抓住AI时代风口,轻松解锁职业新可能,希望大家都能把握机遇,实现薪资/职业跃迁~