首页
看点啥
插画图片
首页 看点啥 分享一套锋哥原创的采用LangChain4j的RAG医疗健康知识智能问答系统(SpringBoot4+Vue3+Ollama)

分享一套锋哥原创的采用LangChain4j的RAG医疗健康知识智能问答系统(SpringBoot4+Vue3+Ollama)

2026-07-23 0

大家好,我是java1234_小锋老师,分享一套基于LangChain4j的RAG医疗健康知识智能问答系统(SpringBoot4+Vue3+Ollama) 。

项目简介

随着人工智能与大语言模型技术的快速发展,智能问答系统在医疗健康领域展现出广阔的应用前景。然而,通用大语言模型在回答医疗健康类问题时,普遍存在知识更新滞后、易产生“幻觉”以及缺乏可信来源等问题,难以直接应用于对准确性要求较高的医疗健康咨询场景。检索增强生成(Retrieval-Augmented Generation,RAG)技术通过将外部知识库检索与大语言模型生成相结合,能够在不重新训练模型的前提下显著提升回答的准确性与可追溯性,为构建可信的医疗健康知识问答系统提供了有效途径。

本文设计并实现了一个基于LangChain4j的RAG医疗健康知识智能问答系统。系统后端采用Spring Boot 4框架,以LangChain4j作为RAG应用编排框架,通过Ollama在本地部署qwen3对话模型与qwen3-embedding嵌入模型,使用Redis向量数据库存储文档向量并完成相似度检索,业务数据持久化采用MySQL与MyBatis-Plus,并通过Spring Security与JWT实现无状态的认证授权。前端采用Vue3、Element Plus与ECharts构建用户问答界面与管理后台。系统实现了知识库文档的上传、解析、分块、向量化入库,以及基于语义检索与提示词工程的智能问答、引用来源展示、问答历史管理、用户管理、分类管理和数据统计可视化等功能。

测试结果表明,本系统能够基于本地医疗健康知识库返回准确、可溯源的答案,有效缓解了大语言模型的幻觉问题,系统运行稳定、交互友好,达到了预期的设计目标,具有一定的实用价值与推广意义。

源码下载

链接:pan.baidu.com/s/185YGwaNf…提取码:1234

相关截图

核心代码

package com.java1234.rag.controller;import com.baomidou.mybatisplus.extension.plugins.pagination.Page;import com.java1234.rag.common.Result;import com.java1234.rag.security.LoginUserContext;import com.java1234.rag.service.KnowledgeService;import com.java1234.rag.vo.KnowledgeDocVO;import lombok.RequiredArgsConstructor;import org.springframework.web.bind.annotation.*;import org.springframework.web.multipart.MultipartFile;/** * 知识库文档控制器 */@RestController@RequiredArgsConstructorpublic class KnowledgeController {private final KnowledgeService knowledgeService;/** * 上传知识库文档(管理员) */@PostMapping("/api/admin/knowledge/upload")public Result upload(@RequestParam("file") MultipartFile file, @RequestParam Long categoryId, @RequestParam(required = false) String title) {Long uploaderId = LoginUserContext.get().getUserId();return Result.success(knowledgeService.upload(file, categoryId, title, uploaderId));}/** * 分页查询文档 */@GetMapping("/api/knowledge")public Result> page(@RequestParam(defaultValue = "1") int page, @RequestParam(defaultValue = "10") int size, @RequestParam(required = false) Long categoryId, @RequestParam(required = false) String keyword) {return Result.success(knowledgeService.pageDocs(page, size, categoryId, keyword));}/** * 删除文档(管理员) */@DeleteMapping("/api/admin/knowledge/{id}")public Result delete(@PathVariable Long id) {knowledgeService.deleteDoc(id);return Result.success();}}

<script setup>import { ref, reactive, onMounted } from 'vue'import { ElMessage } from 'element-plus'import { pageCategories, addCategory, updateCategory, deleteCategory } from '@/api/category'import { formatDateTime } from '@/utils/format'const keyword = ref('')const page = ref(1)const size = ref(10)const total = ref(0)const tableData = ref([])const dialogVisible = ref(false)const form = reactive({ id: null, name: '', description: '', sort: 0, status: 1 })const loadData = async () => {const res = await pageCategories({ page: page.value, size: size.value, keyword: keyword.value })tableData.value = res.data.recordstotal.value = res.data.total}const openDialog = (row) => {if (row) Object.assign(form, row)else Object.assign(form, { id: null, name: '', description: '', sort: 0, status: 1 })dialogVisible.value = true}const handleSave = async () => {if (form.id) await updateCategory(form)else await addCategory(form)ElMessage.success('保存成功')dialogVisible.value = falseloadData()}const handleDelete = async (id) => {await deleteCategory(id)ElMessage.success('删除成功')loadData()}onMounted(loadData)script><style scoped>.pagination { margin-top: 16px; justify-content: flex-end; }style>

喜欢(0)

上一篇

Hugging Face Jobs 计算任务提交和管理教程

Hugging Face Jobs 计算任务提交和管理教程

下一篇

第5章 B端与C端真正的分化机制

第5章 B端与C端真正的分化机制
猜你喜欢