151 lines
9.0 KiB
Markdown
151 lines
9.0 KiB
Markdown
|
|
# Requirements Document
|
|||
|
|
|
|||
|
|
## Introduction
|
|||
|
|
|
|||
|
|
本项目旨在为监狱心理评估系统集成本地RAG(检索增强生成)知识库,使用Ollama本地大模型(deepseek-r1:32b)和向量嵌入模型(nomic-embed-text)提供专业的心理学分析服务。系统将通过ChromaDB向量数据库存储和检索心理学专业文献,结合测评数据生成高质量的综合分析报告,同时支持智能问答功能。所有数据处理均在本地完成,确保数据安全和隐私保护。
|
|||
|
|
|
|||
|
|
## Glossary
|
|||
|
|
|
|||
|
|
- **RAG系统**: Retrieval-Augmented Generation,检索增强生成系统,通过检索相关知识来增强大模型的生成能力
|
|||
|
|
- **AI服务**: 基于Python Flask构建的独立AI服务应用,提供知识库管理、RAG检索和AI生成功能
|
|||
|
|
- **Spring Boot系统**: 现有的监狱心理评估系统后端,基于Java Spring Boot框架
|
|||
|
|
- **ChromaDB**: 轻量级向量数据库,用于存储和检索文档向量
|
|||
|
|
- **Ollama**: 本地大模型运行环境,提供API接口
|
|||
|
|
- **向量嵌入模型**: nomic-embed-text模型,用于将文本转换为768维向量
|
|||
|
|
- **生成模型**: deepseek-r1:32b模型,用于生成分析报告和回答问题
|
|||
|
|
- **知识库文档**: 上传到系统中的心理学专业文献(PDF、Word、TXT等格式)
|
|||
|
|
- **文档分块**: 将长文档切分成较小的语义单元(chunk),便于向量化和检索
|
|||
|
|
- **语义检索**: 基于向量相似度的检索方法,找到与查询最相关的文档片段
|
|||
|
|
- **上下文窗口**: 传递给大模型的文本内容,包含检索到的知识和用户数据
|
|||
|
|
- **提示词模板**: 预定义的文本模板,用于构建发送给大模型的提示词
|
|||
|
|
- **测评数据**: 用户完成心理测评后产生的答题记录和评分结果
|
|||
|
|
- **综合报告**: 基于多个测评结果和知识库生成的深度心理分析报告
|
|||
|
|
- **相似度阈值**: 判断检索结果是否相关的最低相似度分数
|
|||
|
|
|
|||
|
|
## Requirements
|
|||
|
|
|
|||
|
|
### Requirement 1
|
|||
|
|
|
|||
|
|
**User Story:** 作为系统管理员,我想要上传心理学专业文献到知识库,以便系统能够基于权威知识进行分析
|
|||
|
|
|
|||
|
|
#### Acceptance Criteria
|
|||
|
|
|
|||
|
|
1. WHEN 管理员上传PDF文档 THEN AI服务 SHALL 解析文档内容并提取纯文本
|
|||
|
|
2. WHEN 管理员上传Word文档 THEN AI服务 SHALL 解析文档内容并提取纯文本
|
|||
|
|
3. WHEN 管理员上传TXT文档 THEN AI服务 SHALL 读取文档内容
|
|||
|
|
4. WHEN 文档解析完成 THEN AI服务 SHALL 将文档按语义段落分块为500到1000字的片段
|
|||
|
|
5. WHEN 文档分块完成 THEN AI服务 SHALL 使用nomic-embed-text模型生成每个分块的768维向量
|
|||
|
|
6. WHEN 向量生成完成 THEN AI服务 SHALL 将向量和元数据存储到ChromaDB中
|
|||
|
|
7. WHEN 文档上传失败 THEN AI服务 SHALL 返回明确的错误信息并保持系统状态不变
|
|||
|
|
|
|||
|
|
### Requirement 2
|
|||
|
|
|
|||
|
|
**User Story:** 作为系统管理员,我想要管理知识库中的文档,以便维护知识库的质量和时效性
|
|||
|
|
|
|||
|
|
#### Acceptance Criteria
|
|||
|
|
|
|||
|
|
1. WHEN 管理员请求文档列表 THEN AI服务 SHALL 返回所有已上传文档的基本信息(文件名、上传时间、分类、大小)
|
|||
|
|
2. WHEN 管理员查看文档详情 THEN AI服务 SHALL 返回文档的完整元数据和分块统计信息
|
|||
|
|
3. WHEN 管理员删除文档 THEN AI服务 SHALL 从ChromaDB中移除该文档的所有向量和元数据
|
|||
|
|
4. WHEN 管理员按分类筛选文档 THEN AI服务 SHALL 返回指定分类下的所有文档
|
|||
|
|
5. WHEN 管理员搜索文档 THEN AI服务 SHALL 支持按文件名模糊匹配返回结果
|
|||
|
|
|
|||
|
|
### Requirement 3
|
|||
|
|
|
|||
|
|
**User Story:** 作为心理咨询师,我想要系统基于知识库生成综合分析报告,以便提供更专业准确的心理评估
|
|||
|
|
|
|||
|
|
#### Acceptance Criteria
|
|||
|
|
|
|||
|
|
1. WHEN 用户请求生成综合报告 THEN AI服务 SHALL 使用nomic-embed-text模型将用户测评数据转换为查询向量
|
|||
|
|
2. WHEN 查询向量生成完成 THEN AI服务 SHALL 从ChromaDB检索相似度最高的5个文档片段
|
|||
|
|
3. WHEN 检索到的片段相似度低于0.7 THEN AI服务 SHALL 过滤掉该片段
|
|||
|
|
4. WHEN 检索完成 THEN AI服务 SHALL 构建包含检索知识、测评数据和用户档案的上下文
|
|||
|
|
5. WHEN 上下文构建完成 THEN AI服务 SHALL 使用deepseek-r1:32b模型生成综合分析报告
|
|||
|
|
6. WHEN 报告生成完成 THEN AI服务 SHALL 返回报告内容和引用的知识来源
|
|||
|
|
7. WHEN 报告生成失败 THEN AI服务 SHALL 返回错误信息并记录日志
|
|||
|
|
|
|||
|
|
### Requirement 4
|
|||
|
|
|
|||
|
|
**User Story:** 作为心理咨询师,我想要向系统提问专业问题并获得基于知识库的回答,以便快速获取专业知识支持
|
|||
|
|
|
|||
|
|
#### Acceptance Criteria
|
|||
|
|
|
|||
|
|
1. WHEN 用户提交问题 THEN AI服务 SHALL 使用nomic-embed-text模型将问题转换为查询向量
|
|||
|
|
2. WHEN 查询向量生成完成 THEN AI服务 SHALL 从ChromaDB检索相似度最高的5个相关文档片段
|
|||
|
|
3. WHEN 检索完成 THEN AI服务 SHALL 构建包含问题和检索知识的提示词
|
|||
|
|
4. WHEN 提示词构建完成 THEN AI服务 SHALL 使用deepseek-r1:32b模型生成回答
|
|||
|
|
5. WHEN 回答生成完成 THEN AI服务 SHALL 返回回答内容和引用的知识来源
|
|||
|
|
6. WHEN 用户进行多轮对话 THEN AI服务 SHALL 保持对话上下文连贯性
|
|||
|
|
|
|||
|
|
### Requirement 5
|
|||
|
|
|
|||
|
|
**User Story:** 作为系统管理员,我想要监控AI服务的运行状态,以便及时发现和解决问题
|
|||
|
|
|
|||
|
|
#### Acceptance Criteria
|
|||
|
|
|
|||
|
|
1. WHEN 管理员请求系统状态 THEN AI服务 SHALL 返回Ollama连接状态、ChromaDB状态和可用模型列表
|
|||
|
|
2. WHEN 管理员测试Ollama连接 THEN AI服务 SHALL 尝试调用Ollama API并返回连接结果
|
|||
|
|
3. WHEN 管理员查看知识库统计 THEN AI服务 SHALL 返回文档总数、向量总数和存储空间使用情况
|
|||
|
|
4. WHEN AI服务发生错误 THEN AI服务 SHALL 记录详细的错误日志包含时间戳和堆栈信息
|
|||
|
|
|
|||
|
|
### Requirement 6
|
|||
|
|
|
|||
|
|
**User Story:** 作为开发人员,我想要Spring Boot系统能够调用AI服务,以便在现有业务流程中集成RAG功能
|
|||
|
|
|
|||
|
|
#### Acceptance Criteria
|
|||
|
|
|
|||
|
|
1. WHEN Spring Boot系统调用AI服务生成报告接口 THEN Spring Boot系统 SHALL 通过HTTP POST请求发送测评数据和用户档案
|
|||
|
|
2. WHEN AI服务返回报告 THEN Spring Boot系统 SHALL 解析响应并存储报告内容到MySQL数据库
|
|||
|
|
3. WHEN AI服务调用超时 THEN Spring Boot系统 SHALL 在30秒后返回超时错误
|
|||
|
|
4. WHEN AI服务返回错误 THEN Spring Boot系统 SHALL 记录错误日志并向用户显示友好提示
|
|||
|
|
5. WHEN Spring Boot系统调用AI服务问答接口 THEN Spring Boot系统 SHALL 通过HTTP POST请求发送问题内容
|
|||
|
|
|
|||
|
|
### Requirement 7
|
|||
|
|
|
|||
|
|
**User Story:** 作为系统用户,我想要在前端界面管理知识库和查看AI分析结果,以便方便地使用RAG功能
|
|||
|
|
|
|||
|
|
#### Acceptance Criteria
|
|||
|
|
|
|||
|
|
1. WHEN 用户访问知识库管理页面 THEN 前端系统 SHALL 显示文档列表和上传按钮
|
|||
|
|
2. WHEN 用户点击上传按钮 THEN 前端系统 SHALL 显示文件选择对话框支持PDF、Word和TXT格式
|
|||
|
|
3. WHEN 用户选择文件并确认上传 THEN 前端系统 SHALL 显示上传进度并在完成后刷新文档列表
|
|||
|
|
4. WHEN 用户查看综合报告 THEN 前端系统 SHALL 显示报告内容和引用的知识来源链接
|
|||
|
|
5. WHEN 用户点击知识来源链接 THEN 前端系统 SHALL 显示原始文档片段的详细信息
|
|||
|
|
6. WHEN 用户使用智能问答功能 THEN 前端系统 SHALL 提供对话界面支持多轮问答
|
|||
|
|
|
|||
|
|
### Requirement 8
|
|||
|
|
|
|||
|
|
**User Story:** 作为系统架构师,我想要AI服务独立部署并通过API与Spring Boot系统通信,以便保持系统的模块化和可维护性
|
|||
|
|
|
|||
|
|
#### Acceptance Criteria
|
|||
|
|
|
|||
|
|
1. WHEN AI服务启动 THEN AI服务 SHALL 在配置的端口上监听HTTP请求
|
|||
|
|
2. WHEN AI服务接收到请求 THEN AI服务 SHALL 验证请求格式并返回标准JSON响应
|
|||
|
|
3. WHEN Spring Boot系统修改 THEN AI服务 SHALL 继续正常运行不受影响
|
|||
|
|
4. WHEN AI服务修改 THEN Spring Boot系统 SHALL 继续正常运行不受影响
|
|||
|
|
5. WHEN AI服务重启 THEN ChromaDB数据 SHALL 保持完整不丢失
|
|||
|
|
|
|||
|
|
### Requirement 9
|
|||
|
|
|
|||
|
|
**User Story:** 作为数据安全负责人,我想要所有数据处理都在本地完成,以便符合监狱系统的安全要求
|
|||
|
|
|
|||
|
|
#### Acceptance Criteria
|
|||
|
|
|
|||
|
|
1. WHEN AI服务处理文档 THEN AI服务 SHALL 仅在本地服务器上进行处理不发送到外部网络
|
|||
|
|
2. WHEN AI服务生成报告 THEN AI服务 SHALL 仅调用本地Ollama API不访问云端服务
|
|||
|
|
3. WHEN AI服务存储向量 THEN AI服务 SHALL 将数据存储在本地ChromaDB目录中
|
|||
|
|
4. WHEN 系统运行 THEN AI服务 SHALL 不依赖互联网连接即可正常工作
|
|||
|
|
5. WHEN 用户上传文档 THEN AI服务 SHALL 将原始文件存储在本地指定目录中
|
|||
|
|
|
|||
|
|
### Requirement 10
|
|||
|
|
|
|||
|
|
**User Story:** 作为系统管理员,我想要能够重建知识库索引,以便在数据损坏或需要优化时恢复系统
|
|||
|
|
|
|||
|
|
#### Acceptance Criteria
|
|||
|
|
|
|||
|
|
1. WHEN 管理员触发重建索引 THEN AI服务 SHALL 清空现有ChromaDB数据
|
|||
|
|
2. WHEN ChromaDB清空完成 THEN AI服务 SHALL 重新读取所有已上传文档
|
|||
|
|
3. WHEN 文档读取完成 THEN AI服务 SHALL 重新执行分块、向量化和存储流程
|
|||
|
|
4. WHEN 重建过程中 THEN AI服务 SHALL 返回重建进度百分比
|
|||
|
|
5. WHEN 重建完成 THEN AI服务 SHALL 返回成功消息和新的统计信息
|