返回社区
公开项目
可预览原型图
by 匿名用户

基于RAG的宠物健康知识智能问答系统

选题ID:topic_item_mr0s44rq_eqlph9 项目名:基于RAG的宠物健康知识智能问答系统 描述:构建宠物健康知识库,用户可通过对话界面询问宠物常见疾病、症状、养护等问题,系统利用DeepSeek API结合RAG技术检索相关资料生成专业易懂的回答。 建议学历:本科 难度星级:3/5 选题重复概率:20% 优势:贴近生活,数据易获取;技术栈成熟,适合课程设计;演示直观,答辩效果好;可扩展性强,未来可加入图片识别 劣势:宠物医学知识准确性需人工审核;需收集整理大量知识文档;API调用成本可能较高;回答可能涉及医疗建议需谨慎 注意事项:在界面显著位置添加免责声明,仅限教育用途;知识库内容需定期更新和维护;避免对严重疾病给出确切诊断;保护用户隐私,不存储敏感数据 毕业难度-实现角度:需整合前后端、向量数据库和DeepSeek API,中等难度,但现有教程丰富,可较快搭建原型。 毕业难度-论文角度:可探讨RAG在非专业医疗领域应用的可行性与优化,与通用问答系统对比分析,有创新点。 毕业难度-师生关系角度:老师可能担心医学严谨性,需提前说明技术实验性质,不替代兽医,强调检索增强生成的技术价值。

AI 摘要:公开项目案例,包含 58 条需求、349 个交付文件、技术栈 spring-boot、java、vue、vite;引用和总结时请优先使用本详情页。

预览原型图

版本

v1 · 完成

需求

58 条

文件

349 个 · 4.8 MB

论文

暂无

答辩技巧

暂无

需求树

58 条
FR-CONVERSATION

对话管理

functional
pending
完成

管理用户的问答会话,包括创建新会话、查看会话列表、切换会话、删除会话以及加载历史对话记录。

FR-CONV-001

创建新会话

functional
pending
完成

对话界面顶部提供"新建会话"按钮,点击后创建一条空白会话(默认标题"新对话",以用户第一条提问的前30字自动更新标题),会话创建时间记录到数据库。新会话自动切换到当前展示,历史会话列表同步刷新。

FR-CONV-002

会话列表展示

functional
pending
完成

左侧会话列表面板按最后更新时间倒序展示所有会话,每条显示会话标题、最后一条消息摘要(截断20字)、更新时间。列表支持滚动加载更多(每页20条)。三态处理:加载中骨架屏、空会话引导提示"点击新建会话开始提问"、加载失败重试按钮。

FR-CONV-003

切换与删除会话

functional
pending
完成

点击会话列表中任意会话项切换当前对话,加载该会话的历史消息。每条会话项右侧有删除图标(悬停显示),点击弹出确认对话框"确定删除该会话?删除后不可恢复",确认后删除会话及其所有消息。当前会话被删除后自动切换到最近会话或新建空白会话。

FR-CONV-004

对话历史加载

functional
pending
完成

切换到某会话时,分页加载该会话的历史消息(每页20条),默认展示最近一页。向上滚动触发加载更早消息(无限滚动),加载时顶部显示加载指示器。历史消息按时间正序排列,区分用户消息与AI回答,AI回答保留原Markdown渲染和引用来源。

FR-DISCLAIMER

免责与安全

functional
pending
完成

在系统界面显著位置展示免责声明(仅限教育用途,不替代兽医诊断),并对涉及求诊、开药等敏感问题进行拦截与安全提示。

FR-DISCLAIMER-001

页面免责声明展示

functional
pending
完成

对话页面顶部固定展示免责声明横幅(黄色背景+警告图标),文案为"⚠️ 本系统仅供教育用途,AI生成内容不构成兽医诊断或医疗建议。如宠物出现严重症状,请立即就医。"横幅在页面滚动时保持可见,提供关闭按钮(关闭后本次会话不再显示,但刷新页面后恢复)。

FR-DISCLAIMER-002

敏感医疗问题拦截

functional
pending
完成

后端对用户问题进行敏感词检测,识别明确求诊、开药、剂量咨询等关键词(如"开药""吃什么药""什么剂量""怎么治"等)。命中敏感词时,不调用DeepSeek API,直接返回预设安全提示:"涉及诊断用药的问题无法回答,请咨询专业兽医。您可以换个方式来问,例如:'猫咪掉毛的常见原因有哪些?'"

FR-KNOWLEDGE-BASE

知识库管理

functional
pending
完成

宠物健康知识库的文档上传、解析、向量化、存储与维护。支持多种文档格式(PDF/TXT/Markdown),通过Embedding模型将知识片段向量化后存入向量数据库,并提供知识条目的查询、更新与删除能力。

FR-KB-001

知识文档上传

functional
pending
完成

支持上传 PDF、TXT、Markdown 格式的宠物健康知识文档。单文件上限 20MB,前端校验格式与大小;上传后后端校验文件完整性,返回上传状态(成功/格式不支持/文件过大)。上传入口:知识库管理页面的"上传文档"按钮 + 拖拽区域。

FR-KB-002

文档内容解析与分段

functional
pending
完成

后端接收文档后异步解析文本内容(PDF用Apache PDFBox、TXT/Markdown直接读取),按段落/章节智能切分,分段大小可配置(默认500字符/段,重叠50字符)。解析失败时记录错误日志并通知前端。

FR-KB-003

文本向量化与存储

functional
pending
完成

将文档分段后的文本通过Embedding模型(如text-embedding-3-small)转换为向量,存入向量数据库(如Chroma/Milvus),每条向量关联元数据(来源文档名、段落序号、分类标签)。存储成功后回写知识条目状态为"已就绪"。

FR-KB-004

知识库列表查看

functional
pending
完成

知识库管理页面展示已上传文档列表,支持按文档名搜索、按分类标签筛选、按上传时间排序,分页展示(默认20条/页)。每条显示文档名、分类、分段数、上传时间、状态(解析中/已就绪/失败)。三态处理:加载中骨架屏、空数据引导提示、错误重试按钮。

FR-KB-005

知识条目删除与重新向量化

functional
pending
完成

支持对单个知识文档执行软删除(标记删除,向量数据库中对应向量同步删除);支持对已有文档触发重新向量化(解析+向量化流程重跑),操作前弹出二次确认对话框。删除操作为不可逆,确认后执行。

FR-KB-006

知识分类标签管理

functional
pending
完成

提供预设分类标签(常见疾病、症状识别、日常养护、饮食营养、疫苗驱虫、紧急处理),管理员可新增/编辑/删除分类标签。上传文档时可选择关联一个或多个分类标签。标签删除时需检查是否有关联文档,有关联则提示先解绑。

FR-QA

智能问答

functional
pending
完成

用户通过对话界面提交宠物健康相关问题,系统利用RAG技术从向量知识库中检索相关文档片段,结合DeepSeek API生成专业、易懂的回答,并展示引用来源。

FR-QA-001

用户提问输入

functional
pending
完成

对话界面底部固定输入区域,包含多行文本输入框(最大500字,实时字数统计)、发送按钮和回车快捷发送。输入框placeholder提示"请输入宠物健康相关问题…"。空内容时发送按钮置灰不可点击。发送后输入框清空并展示加载态。

FR-QA-002

RAG知识检索

functional
pending
完成

后端接收用户问题后,调用Embedding模型将问题向量化,在向量数据库中执行Top-K相似度搜索(K默认5,可配置),返回最相关的文档片段及其元数据(来源文档名、相似度分数)。检索结果按相似度降序排列,相似度低于阈值(默认0.7)的片段自动过滤。

FR-QA-003

DeepSeek API调用与回答生成

functional
pending
完成

将RAG检索到的Top-K文档片段拼接为上下文,与用户问题一起构造Prompt(System Prompt约束:仅基于知识库回答,不提供诊断,标注"仅供参考"),调用DeepSeek Chat API生成回答。API调用设置超时30秒、最多重试2次,失败时返回降级提示"服务暂时不可用,请稍后重试"。

FR-QA-004

回答展示

functional
pending
完成

对话区域以聊天气泡形式展示问答对:用户问题右对齐、AI回答左对齐。AI回答支持Markdown渲染(标题、列表、加粗、表格),每条回答底部展示引用来源标签(可点击展开查看原文片段)。三态处理:生成中显示打字动画加载态、生成失败显示错误提示+重试按钮、无检索结果时显示"未找到相关知识,建议换个问法"。

FR-QA-005

回答反馈机制

functional
pending
完成

每条AI回答底部提供"有帮助"和"没帮助"两个反馈按钮。点击后弹出反馈原因选择器(有帮助:回答准确/引用可靠/解释清晰;没帮助:答非所问/信息过时/引用无关/其他)。反馈结果存入数据库,用于后续知识库优化分析。同一回答不可重复反馈。

MOD-KB

知识库管理

functional
pending
完成

宠物健康知识文档的导入、解析、分块、向量化与存储管理,为RAG检索提供结构化知识基底。

FR-KB-001

知识文档上传

functional
pending
完成

支持上传PDF、TXT、Markdown格式的宠物健康知识文档;单文件上限10MB;上传后自动触发解析与向量化流程;前端提供拖拽上传区域与文件格式校验提示。

FR-KB-002

文档解析与文本提取

functional
pending
完成

后端接收上传文件后,按格式(PDF/TXT/MD)调用对应解析器提取纯文本内容;解析失败时返回明确错误信息(如"PDF解析失败:文件损坏或加密")。

FR-KB-003

文本分块处理

functional
pending
完成

将提取的文本按固定大小(默认512 tokens,可配置)切分为重叠块(重叠128 tokens);保留块序号与源文档ID的映射关系,供后续检索溯源。

FR-KB-004

文本向量化与存储

functional
pending
完成

将每个文本块调用Embedding模型(默认DeepSeek Embedding API)生成向量,存入向量数据库;向量维度与模型输出一致;存储时附带源文档名、块序号、原始文本等元数据。

FR-KB-005

知识库文档列表查询

functional
pending
完成

提供文档列表查询接口,支持按文件名关键字搜索、按上传时间排序、分页返回;返回字段含文档ID、文件名、格式、上传时间、分块数量、处理状态。

FR-KB-006

知识库文档删除

functional
pending
完成

支持按文档ID删除知识库文档,级联删除对应向量数据库中的全部文本块向量;删除前弹窗二次确认;删除后列表即时刷新。

MOD-QA

智能问答

functional
pending
完成

用户提问后通过向量检索召回相关知识片段,结合DeepSeek API进行RAG增强生成,返回专业易懂的回答并保存对话记录。

FR-QA-001

用户提问提交接口

functional
pending
完成

POST /api/qa/ask,入参{question:string, conversationId?:string},question必填且1-2000字符;返回{answer:string, conversationId:string, sources:[{docName, chunkIndex, snippet}]};空问题返回400。

FR-QA-002

向量相似度检索

functional
pending
完成

将用户问题向量化后,在向量数据库中执行Top-K(默认K=5,可配置)余弦相似度检索;返回最相关的文本块及相似度分数;检索超时5秒则降级返回空结果并提示。

FR-QA-003

RAG上下文构建与DeepSeek生成

functional
pending
完成

将检索到的Top-K文本块拼入System Prompt作为上下文,明确指令"仅基于提供的知识片段回答,无法回答时请说明";调用DeepSeek Chat API生成回答;附带最近3轮对话历史以支持多轮对话。

FR-QA-004

对话历史保存

functional
pending
完成

每次问答完成后自动保存本轮Q&A到对话历史;记录字段含conversationId、用户问题、AI回答、引用来源、时间戳;新对话自动生成UUID作为conversationId。

FR-QA-005

历史对话列表查询

functional
pending
完成

GET /api/qa/conversations,分页返回对话列表,每条含conversationId、首条问题摘要、创建时间、消息条数;按更新时间倒序排列;支持按日期范围筛选。

FR-QA-006

历史对话详情查看

functional
pending
完成

GET /api/qa/conversations/{id},返回该对话的全部Q&A消息列表(按时间正序),每条消息含角色(user/assistant)、内容、引用来源、时间戳。

FR-QA-007

对话删除接口

functional
pending
完成

DELETE /api/qa/conversations/{id},删除指定对话及其全部消息记录;对话不存在返回404;删除成功后前端侧边栏列表即时移除该条目。

MOD-SYS

系统基础设施与技术约束

technical
pending
完成

DeepSeek API集成、向量数据库选型、免责声明机制及非功能性能约束,支撑系统可靠运行。

TR-SYS-001

DeepSeek API集成配置

technical
pending
完成

后端通过环境变量配置DeepSeek API Key与Base URL;支持Chat API(模型deepseek-chat)和Embedding API;请求超时30秒,失败自动重试1次;API调用失败时返回统一错误码并记录日志。

TR-SYS-002

向量数据库选型与集成

technical
pending
完成

选用支持Java SDK的向量数据库(Milvus/Qdrant/pgvector三选一);支持余弦相似度检索;向量维度与DeepSeek Embedding输出一致;数据库连接参数通过配置文件注入,支持本地或Docker部署。

TR-SYS-003

免责声明机制

technical
pending
完成

页面顶部固定展示免责声明:"本系统仅用于教育和技术实验目的,所有回答不构成兽医诊断或医疗建议,宠物健康问题请咨询专业兽医";声明可关闭但每次新会话重新出现;AI回答末尾附加简短免责提示。

MOD-UI

对话前端界面

functional
pending
完成

基于Vue + Vite构建的对话式用户界面,包含消息展示、输入交互、历史记录侧栏及各类状态反馈。

FR-UI-001

对话主页面布局

functional
pending
完成

页面顶部固定免责声明条(黄底黑字,可关闭);中部为对话消息滚动区(占满剩余高度);底部为输入区域;左侧可展开/收起的历史对话侧边栏;响应式适配移动端。

FR-UI-002

消息气泡展示

functional
pending
完成

用户消息右对齐蓝底白字气泡;AI回答左对齐灰底黑字气泡,支持Markdown渲染(标题、列表、加粗、链接);每条AI消息下方折叠显示引用的知识来源(文档名+片段摘要)。

FR-UI-003

输入区域与发送

functional
pending
完成

底部固定输入框,支持多行文本(最多2000字,右下角实时计数);Enter发送、Shift+Enter换行;发送按钮在输入框右侧;发送后输入框清空并禁用直到回答返回;新对话自动创建并切换到当前对话。

FR-UI-004

加载/空/错误三态反馈

functional
pending
完成

等待回答时显示骨架屏或打字动画(loading态);首次进入无对话时展示欢迎引导语与示例问题(empty态);网络异常或API报错时显示红色toast并允许重试(error态)。

FR-UI-005

历史对话侧边栏

functional
pending
完成

左侧侧边栏默认收起(汉堡图标展开);展开后显示对话列表(每项为首条问题摘要+时间),点击切换当前对话并加载历史消息;支持删除对话(二次确认);当前对话高亮标识。

FR-UI-006

知识库管理页面

functional
pending
完成

独立管理页面(路由 /admin/knowledge),包含:顶部拖拽/点击上传区(支持PDF/TXT/MD,格式不符toast提示);下方文档列表表格(文件名、格式、上传时间、分块数、状态列),支持关键词搜索和分页;每行末尾删除按钮(二次确认后调用FR-KB-006接口)。

TR-STACK

技术约束

technical
pending
完成

定义系统技术选型与集成约束,包括前后端技术栈、向量数据库、DeepSeek API、Embedding模型、关系型数据库及API规范。

TR-001

后端技术栈选型

technical
pending
完成

后端使用 Spring Boot 3.x + Java 21 + Maven 构建,数据库访问层使用 MyBatis-Plus,API文档使用 SpringDoc OpenAPI(Swagger UI),异步任务使用 Spring Async。项目结构遵循 Controller-Service-Mapper 分层,配置通过 application.yml 管理。

TR-002

前端技术栈选型

technical
pending
完成

前端使用 Vue 3 + Vite + TypeScript 构建,UI组件库使用 Element Plus,Markdown渲染使用 marked + highlight.js,HTTP客户端使用 Axios,状态管理使用 Pinia。页面路由使用 Vue Router,对话界面采用单页面布局(左侧会话列表 + 右侧对话区)。

TR-003

向量数据库选型与集成

technical
pending
完成

向量数据库选用 Chroma(嵌入式模式,适合课程设计轻量部署),通过 Java SDK 操作。存储 collection 命名为 pet_health_knowledge,向量维度与所选 Embedding 模型对齐(如 text-embedding-3-small 为1536维)。支持按相似度阈值过滤和 Top-K 检索。

TR-004

DeepSeek API集成规范

technical
pending
完成

DeepSeek Chat API 通过 API Key(环境变量 DEEPSEEK_API_KEY)认证,调用端点 POST https://api.deepseek.com/v1/chat/completions,模型选用 deepseek-chat。单次请求 max_tokens 设为 2000,temperature 0.7。实现请求级重试(最多2次,间隔1秒/3秒指数退避),超时30秒,失败降级返回友好提示。

TR-005

Embedding模型选型

technical
pending
完成

文本向量化使用 DeepSeek API 兼容的 Embedding 模型或 OpenAI text-embedding-3-small(通过 API 调用),输出向量维度 1536。文档分段向量化和用户问题向量化共用同一模型,保证向量空间一致性。向量化请求失败时重试1次,仍失败则标记文档状态为"向量化失败"。

TR-006

关系型数据库选型

technical
pending
完成

使用 MySQL 8.0 存储业务数据(会话、消息、知识文档元数据、反馈记录、分类标签),通过 MyBatis-Plus 操作。核心表包括:knowledge_documents(文档元数据)、knowledge_categories(分类标签)、conversations(会话)、messages(消息,含问题和回答完整内容)、feedbacks(反馈记录)。数据库连接池使用 HikariCP。

TR-007

后端API设计规范

technical
pending
完成

所有API遵循RESTful风格,路径前缀 /api/v1/,请求/响应格式为JSON。统一响应结构 {code, message, data},code=0表示成功。分页接口统一入参 {page, pageSize},出参含 {total, list}。错误码规范:400参数校验失败、401未认证、404资源不存在、500服务内部错误。跨域配置允许前端开发端口访问。

TR-008

回答响应时间约束

technical
pending
完成

端到端问答响应时间(从用户发送到AI回答首字展示)P95不超过8秒。其中RAG检索阶段不超过2秒,DeepSeek API调用不超过5秒(含重试)。前端展示typing动画缓解等待感知。如超时则前端展示超时提示并允许重试。

TR-009

隐私保护与数据安全

technical
pending
完成

系统不要求用户注册/登录,不收集个人身份信息。对话数据仅存储于本地数据库,用户可随时删除会话。API Key等敏感配置通过环境变量注入,不硬编码。前端不存储任何用户会话数据到localStorage/cookie(刷新后会话丢失需重新开始)。数据库连接使用加密密码,不暴露公网端口。

TR-010

API调用成本控制

technical
pending
完成

单次问答的DeepSeek API调用 max_tokens 限制为2000,避免长回答消耗过多Token。对相同或高度相似的问题(向量相似度>0.95)可考虑缓存回答(可选实现)。每日API调用总量通过日志监控,超过阈值(如500次/天)时展示降级提示"今日问答次数已用完,请明日再试"。