发布时间:2026/8/14 7:00:42
【免费】AI智能医疗问诊平台系统(RAG+Spring AI2.0+Neo4j知识图谱+SpringBoot4+Vue3) 锋哥原创出品,必属精品 大家好我是Java1234_小锋老师分享一套锋哥原创的AI智能医疗问诊平台系统(RAGSpring AI2.0Neo4j知识图谱SpringBoot4Vue3) 。项目介绍随着分级诊疗制度持续推进和居民健康管理意识不断增强基层医疗机构与互联网平台都面临着“咨询量大、专科医生相对不足、健康知识获取渠道分散”的现实矛盾。传统在线问诊系统多以表单留言或人工即时通讯为主难以对患者的自然语言症状描述进行结构化理解也缺少可追溯的医学依据。与此同时大语言模型、检索增强生成RAG和图数据库技术日趋成熟为构建“可引用、可解释、可转诊”的智能问诊系统提供了技术条件。本文设计并实现了一套面向本科毕业设计场景的AI智能医疗问诊平台系统。系统采用前后端分离架构后端基于Java 17与Spring Boot 4构建RESTful服务集成Spring AI 2.0对接通义千问大语言模型前端采用Vue 3、Vite与Element Plus实现患者门户、医生工作台和管理后台三端界面。业务数据存储于MySQL 8数据库库名db_ai_medical表名均以t_开头医学实体关系存储于Neo4j知识图谱指南类文档经分块与向量化后写入本地向量库形成“关系数据 向量检索 图谱推理”的混合知识底座。在功能层面系统支持患者注册登录、AI多轮问诊、症状图谱推理、人工咨询、预约挂号、健康档案查询和健康资讯浏览支持医生处理咨询工单、确认预约并维护患者档案支持管理员进行用户与科室管理、知识库上传向量化、图谱可视化、文章公告运营以及首页数据统计。AI问诊采用SSE流式输出回答中附带知识库引用片段和图谱候选疾病并明确提示“仅供参考、不能替代面诊”以降低误导风险。测试结果表明系统三角色权限隔离正确核心业务流程闭环完整知识库文件可完成解析、分块与向量化图谱能够根据症状返回候选疾病及推荐科室。本系统对探索大模型在医疗咨询场景中的工程落地具有一定的参考价值。源码下载链接: https://pan.baidu.com/s/1eBPdVADGePMNl83McSUO7Q?pwd1234提取码: 1234系统展示核心代码package com.java1234.controller; import com.java1234.common.PageResult; import com.java1234.common.Result; import com.java1234.dto.AppointmentCreateRequest; import com.java1234.interceptor.RequireRoles; import com.java1234.service.AppointmentService; import jakarta.validation.Valid; import org.springframework.format.annotation.DateTimeFormat; import org.springframework.web.bind.annotation.*; import java.time.LocalDate; import java.util.List; import java.util.Map; /** * 预约挂号接口 */ RestController RequestMapping(/api/v1/appointments) public class AppointmentController { private final AppointmentService appointmentService; public AppointmentController(AppointmentService appointmentService) { this.appointmentService appointmentService; } /** * 创建预约患者 */ PostMapping(/create) RequireRoles(user) public ResultMapString, Object create(Valid RequestBody AppointmentCreateRequest req) { return Result.success(appointmentService.createAppointment(req), 预约成功); } /** * 我的预约患者 */ GetMapping(/my) RequireRoles(user) public ResultListMapString, Object my() { return Result.success(appointmentService.myAppointments()); } /** * 医生的预约 */ GetMapping(/doctor/my) RequireRoles(doctor) public ResultListMapString, Object doctorMy() { return Result.success(appointmentService.doctorAppointments()); } /** * 管理员预约列表 */ GetMapping(/admin/list) RequireRoles(admin) public ResultPageResultMapString, Object adminList( RequestParam(defaultValue 1) int page, RequestParam(name page_size, defaultValue 10) int pageSize, RequestParam(defaultValue ) String keyword, RequestParam(name department_id, required false) Integer departmentId, RequestParam(name visit_date, required false) DateTimeFormat(iso DateTimeFormat.ISO.DATE) LocalDate visitDate, RequestParam(required false) Integer status) { PageResultMapString, Object result appointmentService.adminList( page, pageSize, keyword, departmentId, visitDate, status); return Result.page(result.getItems(), result.getTotal(), result.getPage(), result.getPageSize()); } /** * 管理员删除预约 */ DeleteMapping(/admin/{appt_id}) RequireRoles(admin) public ResultVoid adminDelete(PathVariable(appt_id) Integer apptId) { appointmentService.adminDelete(apptId); return Result.success(null, 删除成功); } /** * 更新预约状态管理员/医生 */ PutMapping(/{appt_id}/status) RequireRoles({admin, doctor}) public ResultVoid updateStatus(PathVariable(appt_id) Integer apptId, RequestParam Integer status) { appointmentService.updateStatus(apptId, status); return Result.success(null, 状态更新成功); } }script setup import { ref, onMounted, onUnmounted } from vue import { ElMessage, ElMessageBox } from element-plus import { Upload } from element-plus/icons-vue import request from /utils/request import { formatDateTime, parseListData } from /utils/format const list ref([]) const loading ref(false) const uploading ref(false) /** 搜索关键词 */ const keyword ref() /** 分页参数 */ const page ref(1) const pageSize ref(10) const total ref(0) /** 状态轮询定时器 */ let pollTimer null /** 判断是否存在待处理或处理中的文件 */ function hasPendingFiles(items) { return items.some((item) item.vector_status 0 || item.vector_status 1) } /** 获取列表请求参数 */ function getListParams() { return { page: page.value, page_size: pageSize.value, keyword: keyword.value.trim(), } } /** 启动状态轮询向量化完成后自动停止 */ function startPolling() { if (pollTimer) return pollTimer setInterval(() { refreshList() }, 3000) } /** 停止状态轮询 */ function stopPolling() { if (pollTimer) { clearInterval(pollTimer) pollTimer null } } /** 加载知识库列表 */ async function loadList(silent false) { if (!silent) loading.value true try { const res await request.get(/knowledge/list, { params: getListParams() }) list.value parseListData(res) total.value res.data?.total ?? list.value.length if (hasPendingFiles(list.value)) { startPolling() } else { stopPolling() } } catch { list.value [] total.value 0 stopPolling() } finally { if (!silent) loading.value false } } /** 静默刷新列表轮询时使用避免 loading 闪烁 */ async function refreshList() { try { const res await request.get(/knowledge/list, { params: getListParams() }) list.value parseListData(res) if (!hasPendingFiles(list.value)) { stopPolling() } } catch { /* 轮询失败时忽略下次继续 */ } } /** 搜索知识库文件 */ function handleSearch() { page.value 1 loadList() } /** 重置搜索条件 */ function handleReset() { keyword.value page.value 1 loadList() } /** 分页切换 */ function handlePageChange(p) { page.value p loadList() } /** 上传知识文件 */ async function handleUpload({ file }) { uploading.value true const formData new FormData() formData.append(file, file) try { await request.post(/knowledge/upload, formData, { headers: { Content-Type: multipart/form-data }, }) ElMessage.success(上传成功正在向量化处理) page.value 1 await loadList() } catch { /* */ } finally { uploading.value false } } /** 删除知识库文件 */ async function handleDelete(row) { try { await ElMessageBox.confirm( 确定删除知识库文件「${row.file_name}」吗删除后不可恢复。, 提示, { type: warning }, ) await request.delete(/knowledge/${row.id}) ElMessage.success(删除成功) if (list.value.length 1 page.value 1) { page.value - 1 } await loadList() } catch { /* */ } } onMounted(loadList) onUnmounted(stopPolling) /script template div div classpage-header h2 classpage-title知识库管理/h2 el-upload :show-file-listfalse :http-requesthandleUpload accept.txt,.pdf,.doc,.docx,.md el-button typeprimary classgradient-btn :loadinguploading :iconUpload 上传文件 /el-button /el-upload /div div classmodern-card !-- 搜索栏 -- div classsearch-bar el-input v-modelkeyword placeholder搜索文件名 / 文件类型 clearable stylewidth: 280px keyup.enterhandleSearch / el-button typeprimary clickhandleSearch搜索/el-button el-button clickhandleReset重置/el-button /div el-table :datalist v-loadingloading classadaptive-table stripe el-table-column propid labelID min-width60 / el-table-column propfile_name label文件名 min-width200 show-overflow-tooltip / el-table-column propfile_type label类型 min-width100 template #default{ row } el-tag sizesmall{{ row.file_type || row.type || - }}/el-tag /template /el-table-column el-table-column propfile_size label大小 min-width100 template #default{ row } {{ row.file_size ? (row.file_size / 1024).toFixed(1) KB : (row.size ? (row.size / 1024).toFixed(1) KB : -) }} /template /el-table-column el-table-column propvector_status label状态 min-width100 template #default{ row } el-tag :typerow.vector_status 2 ? success : row.vector_status 3 ? danger : info sizesmall {{ row.vector_status 2 ? 已向量化 : row.vector_status 3 ? 失败 : row.vector_status 1 ? 处理中 : 已上传 }} /el-tag /template /el-table-column el-table-column propcreate_time label上传时间 min-width170 template #default{ row }{{ formatDateTime(row.create_time || row.created_at) }}/template /el-table-column el-table-column label操作 min-width100 fixedright template #default{ row } el-button link typedanger clickhandleDelete(row)删除/el-button /template /el-table-column /el-table el-empty v-if!loading !list.length description暂无知识库文件 / !-- 分页 -- div v-iftotal 0 classpagination-wrap el-pagination v-model:current-pagepage :page-sizepageSize :totaltotal layouttotal, prev, pager, next background current-changehandlePageChange / /div /div /div /template style scoped .page-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 20px; } .search-bar { display: flex; align-items: center; gap: 12px; margin-bottom: 16px; } .pagination-wrap { display: flex; justify-content: flex-end; margin-top: 16px; } /style

相关新闻

2026/8/14 7:00:42

Windows系统文件TtlsCfg.dll丢失找不到问题解决

在使用电脑系统时经常会出现丢失找不到某些文件的情况,由于很多常用软件都是采用 Microsoft Visual Studio 编写的,所以这类软件的运行需要依赖微软Visual C运行库,比如像 QQ、迅雷、Adobe 软件等等,如果没有安装VC运行库或者安装…

2026/8/14 7:00:42

边缘 AI 协同架构在物联网系统中的应用

一、引言随着大语言模型(LLM)和多模态AI技术的快速发展,将人工智能能力注入物联网(IoT)系统已成为产业数字化转型的核心驱动力。传统“端-云”集中式部署范式面临高延迟、隐私风险与带宽瓶颈等结构性挑战。边缘AI协同架…

2026/8/14 10:26:38

Workbench开发指南:从源码角度理解iCloud同步组件设计

Workbench开发指南:从源码角度理解iCloud同步组件设计 【免费下载链接】Workbench Seamless, automatic, “dotfile” sync to iCloud. 项目地址: https://gitcode.com/gh_mirrors/workbench1/Workbench Workbench是一款专注于实现"dotfile"无缝自…

2026/8/14 10:26:38

AI绘画进阶:从提示词工程到可控创作的完整实战指南

最近,AI 绘画圈子里出现了一个新“梗”——“八仙真人来到人间”。这听起来像是一个神话故事的开头,但如果你点开相关的作品,看到的却是一系列风格极其独特、细节惊人的 AI 生成图像。这些图像往往融合了古典神话人物与现代场景,或…

2026/8/14 10:26:38

安卓端YOLOv6无训练目标检测:从模型部署到推理调优实战

1. 先搞清楚“无训练识别”到底是怎么一回事看到“无训练识别”这个词,很多人第一反应是“不用训练模型就能识别任何东西”,这其实是个误解。在YOLO这类目标检测框架里,所谓的“无训练识别”通常指的是利用预训练好的通用模型,直接…

2026/8/14 10:26:38

揭秘重庆高端网站建设价格:为什么有的网站卖几百万,有的却只收几千块?

很多在重庆创业的朋友,或者传统企业转型的老板,刚接触到“网站建设”这个词时,脑子里蹦出来的第一个念头往往都是——“不就做个网页吗?这么贵?”我见过太多这样的场景:老板拿着手机里存的一个看起来很“大气”的案例图,找到设计公司说:“我就要这种感觉,多少钱?”对…

2026/8/14 10:21:38

WebGPU本地AI部署:打破硬件壁垒的浏览器大模型推理方案

1. 项目概述:当大模型遇见WebGPU最近在折腾本地大模型部署的朋友,估计都绕不开几个名字:Ollama、llama.cpp,还有那个让人又爱又恨的GGUF格式。大家的目标很明确,就是想在有限的硬件资源下,比如我那台只有16…

2026/8/14 4:27:24

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/14 4:27:24

当 LLM 遇见大文档:主流开源项目如何处理上下文超限

从 Agentic Loop 到 Repo Map,七种策略与六类陷阱引言:128K vs 10MB 的硬冲突 2026 年的 LLM 上下文窗口已达到 128K ~ 1M token(≈ 0.5MB ~ 4MB 文本),但 LLM 想要处理的真实数据规模远远超过这个量级:真实…

2026/8/14 0:00:09

Flutter与OpenHarmony实现剧本杀组队表单开发实战

1. 项目概述在移动应用开发领域,跨平台框架Flutter因其高效的开发体验和出色的性能表现,已经成为众多开发者的首选。而OpenHarmony作为新兴的操作系统平台,其开放性和灵活性为开发者提供了全新的可能性。本文将聚焦于一个实际应用场景——剧本…

2026/8/14 0:00:09

VSCode高效Git管理:从入门到实战技巧

1. 为什么选择VSCode进行Git代码管理作为微软推出的轻量级代码编辑器,Visual Studio Code(简称VSCode)已经成为全球开发者使用率最高的编辑器之一。根据2023年Stack Overflow开发者调查,VSCode的市场占有率高达74.48%。它内置的Gi…

2026/8/14 4:27:24

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/14 4:27:24

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/14 4:27:24

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…