408 lines
7.9 KiB
Markdown
408 lines
7.9 KiB
Markdown
|
|
# RAG知识库系统 - 快速启动指南
|
|||
|
|
|
|||
|
|
## 🚀 快速启动步骤
|
|||
|
|
|
|||
|
|
### 1. 环境检查
|
|||
|
|
|
|||
|
|
确保以下服务已安装并运行:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 检查Java
|
|||
|
|
java -version
|
|||
|
|
# 应该显示: java version "1.8.0" 或更高
|
|||
|
|
|
|||
|
|
# 检查Ollama
|
|||
|
|
curl http://localhost:11434/api/tags
|
|||
|
|
# 应该返回模型列表JSON
|
|||
|
|
|
|||
|
|
# 检查Python
|
|||
|
|
python --version
|
|||
|
|
# 应该显示: Python 3.8+ 或更高
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. 启动ChromaDB
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 安装ChromaDB (首次运行)
|
|||
|
|
pip install chromadb
|
|||
|
|
|
|||
|
|
# 启动ChromaDB服务
|
|||
|
|
chroma run --path D:\wwwroot\RAG\data\chroma_db --port 8000
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
保持此窗口打开,ChromaDB将在后台运行。
|
|||
|
|
|
|||
|
|
### 3. 创建必要目录
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 创建数据目录
|
|||
|
|
mkdir D:\wwwroot\RAG\uploads
|
|||
|
|
mkdir D:\wwwroot\RAG\logs
|
|||
|
|
mkdir D:\wwwroot\RAG\data\chroma_db
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 4. 启动Spring Boot应用
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 方式1: 使用Maven直接运行
|
|||
|
|
cd ry-xinli-admin
|
|||
|
|
mvn spring-boot:run
|
|||
|
|
|
|||
|
|
# 方式2: 打包后运行
|
|||
|
|
mvn clean package -DskipTests
|
|||
|
|
java -jar target/xinli-admin.jar
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 5. 验证系统状态
|
|||
|
|
|
|||
|
|
打开浏览器访问:
|
|||
|
|
```
|
|||
|
|
http://localhost:8080/psychology/rag-test/health
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
应该看到类似以下的JSON响应:
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 200,
|
|||
|
|
"msg": "系统健康检查完成",
|
|||
|
|
"data": {
|
|||
|
|
"ollama": "OK",
|
|||
|
|
"chromadb": "OK",
|
|||
|
|
"file_watcher": {
|
|||
|
|
"enabled": true,
|
|||
|
|
"running": true,
|
|||
|
|
"watch_path": "D:/wwwroot/RAG/uploads"
|
|||
|
|
},
|
|||
|
|
"knowledge_base": {
|
|||
|
|
"totalDocuments": 0,
|
|||
|
|
"totalVectors": 0
|
|||
|
|
},
|
|||
|
|
"overall_status": "HEALTHY"
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 🧪 功能测试
|
|||
|
|
|
|||
|
|
### 测试1: 向量化功能
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
curl -X POST "http://localhost:8080/psychology/rag-test/test-embedding" \
|
|||
|
|
-H "Content-Type: application/x-www-form-urlencoded" \
|
|||
|
|
-d "text=这是一个测试文本"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
预期结果:
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 200,
|
|||
|
|
"msg": "嵌入测试成功",
|
|||
|
|
"data": {
|
|||
|
|
"text": "这是一个测试文本",
|
|||
|
|
"embedding_dimension": 768,
|
|||
|
|
"first_5_values": [0.123, -0.456, 0.789, ...]
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 测试2: 文本生成功能
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
curl -X POST "http://localhost:8080/psychology/rag-test/test-generation" \
|
|||
|
|
-H "Content-Type: application/x-www-form-urlencoded" \
|
|||
|
|
-d "prompt=什么是心理学?"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
预期结果:
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 200,
|
|||
|
|
"msg": "生成测试成功",
|
|||
|
|
"data": {
|
|||
|
|
"prompt": "什么是心理学?",
|
|||
|
|
"response": "心理学是研究人类心理现象及其规律的科学...",
|
|||
|
|
"response_length": 150
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 测试3: ChromaDB存储和查询
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
curl -X POST "http://localhost:8080/psychology/rag-test/test-chromadb"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
预期结果:
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 200,
|
|||
|
|
"msg": "ChromaDB测试成功",
|
|||
|
|
"data": {
|
|||
|
|
"stored_document": "这是一个测试文档...",
|
|||
|
|
"query_results": ["这是一个测试文档..."],
|
|||
|
|
"similarities": [0.999]
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 测试4: 上传文档
|
|||
|
|
|
|||
|
|
准备一个测试文档(test.txt),内容如下:
|
|||
|
|
```
|
|||
|
|
心理学基础知识
|
|||
|
|
|
|||
|
|
人格心理学是研究个体在不同情境下表现出的稳定行为模式的学科。
|
|||
|
|
主要理论包括特质理论、精神分析理论和人本主义理论。
|
|||
|
|
|
|||
|
|
认知心理学关注人类的思维过程,包括注意、记忆、语言和问题解决。
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
上传文档:
|
|||
|
|
```bash
|
|||
|
|
curl -X POST "http://localhost:8080/psychology/knowledge/upload" \
|
|||
|
|
-H "Content-Type: multipart/form-data" \
|
|||
|
|
-F "file=@test.txt" \
|
|||
|
|
-F "category=综合心理学"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
预期结果:
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 200,
|
|||
|
|
"msg": "文档上传成功",
|
|||
|
|
"data": {
|
|||
|
|
"doc_id": "doc_1234567890",
|
|||
|
|
"filename": "test.txt",
|
|||
|
|
"category": "综合心理学",
|
|||
|
|
"chunks": 2,
|
|||
|
|
"vectors": 2
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 测试5: 查询文档列表
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
curl "http://localhost:8080/psychology/knowledge/list?pageNum=1&pageSize=10"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
预期结果:
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 200,
|
|||
|
|
"msg": "查询成功",
|
|||
|
|
"rows": [
|
|||
|
|
{
|
|||
|
|
"docId": "doc_1234567890",
|
|||
|
|
"filename": "test.txt",
|
|||
|
|
"category": "综合心理学",
|
|||
|
|
"uploadTime": "2025-12-19 10:30:00",
|
|||
|
|
"fileSize": 256,
|
|||
|
|
"chunkCount": 2
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"total": 1
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 测试6: 智能问答
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
curl -X POST "http://localhost:8080/psychology/ai/chat" \
|
|||
|
|
-H "Content-Type: application/json" \
|
|||
|
|
-d '{
|
|||
|
|
"question": "什么是人格心理学?",
|
|||
|
|
"context": ""
|
|||
|
|
}'
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
预期结果:
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 200,
|
|||
|
|
"msg": "操作成功",
|
|||
|
|
"data": {
|
|||
|
|
"content": "人格心理学是研究个体在不同情境下表现出的稳定行为模式的学科...",
|
|||
|
|
"sources": [
|
|||
|
|
{
|
|||
|
|
"documentId": "doc_1234567890",
|
|||
|
|
"documentName": "test.txt",
|
|||
|
|
"snippet": "人格心理学是研究个体在不同情境下...",
|
|||
|
|
"score": 0.85
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"generationTime": 3500
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 测试7: 生成综合报告
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
curl -X POST "http://localhost:8080/psychology/ai/generate-report" \
|
|||
|
|
-H "Content-Type: application/json" \
|
|||
|
|
-d '{
|
|||
|
|
"assessmentData": {
|
|||
|
|
"questionnaire_name": "MMPI",
|
|||
|
|
"scores": {
|
|||
|
|
"抑郁": 65,
|
|||
|
|
"焦虑": 70,
|
|||
|
|
"社交退缩": 60
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
"userProfile": {
|
|||
|
|
"user_id": "123",
|
|||
|
|
"name": "张三",
|
|||
|
|
"age": 30,
|
|||
|
|
"gender": "男"
|
|||
|
|
}
|
|||
|
|
}'
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
预期结果:
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 200,
|
|||
|
|
"msg": "操作成功",
|
|||
|
|
"data": {
|
|||
|
|
"content": "# 心理评估综合报告\n\n## 基本信息\n...",
|
|||
|
|
"sources": [...],
|
|||
|
|
"generationTime": 8500
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 测试8: 文件监听功能
|
|||
|
|
|
|||
|
|
1. 将一个文档(如 `心理学教材.pdf`)复制到 `D:\wwwroot\RAG\uploads` 目录
|
|||
|
|
2. 等待2-3秒
|
|||
|
|
3. 查看日志,应该看到:
|
|||
|
|
```
|
|||
|
|
检测到新文件: 心理学教材.pdf
|
|||
|
|
自动处理文档成功: 心理学教材.pdf, 文档ID: doc_xxx
|
|||
|
|
```
|
|||
|
|
4. 查询文档列表,应该能看到新上传的文档
|
|||
|
|
|
|||
|
|
## ❌ 常见问题排查
|
|||
|
|
|
|||
|
|
### 问题1: Ollama连接失败
|
|||
|
|
|
|||
|
|
**症状**: `ollama: FAILED`
|
|||
|
|
|
|||
|
|
**解决方案**:
|
|||
|
|
```bash
|
|||
|
|
# 检查Ollama是否运行
|
|||
|
|
curl http://localhost:11434/api/tags
|
|||
|
|
|
|||
|
|
# 如果没有响应,启动Ollama
|
|||
|
|
ollama serve
|
|||
|
|
|
|||
|
|
# 检查模型是否已下载
|
|||
|
|
ollama list
|
|||
|
|
|
|||
|
|
# 如果缺少模型,下载它们
|
|||
|
|
ollama pull nomic-embed-text
|
|||
|
|
ollama pull deepseek-r1:32b
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 问题2: ChromaDB连接失败
|
|||
|
|
|
|||
|
|
**症状**: `chromadb: FAILED`
|
|||
|
|
|
|||
|
|
**解决方案**:
|
|||
|
|
```bash
|
|||
|
|
# 检查ChromaDB是否运行
|
|||
|
|
curl http://localhost:8000/api/v1/heartbeat
|
|||
|
|
|
|||
|
|
# 如果没有响应,启动ChromaDB
|
|||
|
|
chroma run --path D:\wwwroot\RAG\data\chroma_db --port 8000
|
|||
|
|
|
|||
|
|
# 检查端口是否被占用
|
|||
|
|
netstat -ano | findstr :8000
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 问题3: 文档上传失败
|
|||
|
|
|
|||
|
|
**症状**: 上传返回500错误
|
|||
|
|
|
|||
|
|
**可能原因**:
|
|||
|
|
1. 文件格式不支持(只支持PDF、Word、TXT)
|
|||
|
|
2. 文件太大(超过50MB)
|
|||
|
|
3. uploads目录不存在或无权限
|
|||
|
|
|
|||
|
|
**解决方案**:
|
|||
|
|
```bash
|
|||
|
|
# 检查目录是否存在
|
|||
|
|
dir D:\wwwroot\RAG\uploads
|
|||
|
|
|
|||
|
|
# 创建目录
|
|||
|
|
mkdir D:\wwwroot\RAG\uploads
|
|||
|
|
|
|||
|
|
# 检查文件格式
|
|||
|
|
# 确保文件是 .pdf, .docx, .doc, 或 .txt
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 问题4: 文件监听不工作
|
|||
|
|
|
|||
|
|
**症状**: 放入uploads目录的文件没有被自动处理
|
|||
|
|
|
|||
|
|
**解决方案**:
|
|||
|
|
1. 检查配置文件 `application.yml`:
|
|||
|
|
```yaml
|
|||
|
|
rag:
|
|||
|
|
file-watcher:
|
|||
|
|
enabled: true # 确保是true
|
|||
|
|
watch-path: D:/wwwroot/RAG/uploads # 确保路径正确
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
2. 查看日志:
|
|||
|
|
```bash
|
|||
|
|
tail -f D:\wwwroot\RAG\logs\xinli-admin.log
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
3. 重启应用
|
|||
|
|
|
|||
|
|
### 问题5: 生成报告很慢
|
|||
|
|
|
|||
|
|
**症状**: 生成报告超过30秒
|
|||
|
|
|
|||
|
|
**可能原因**:
|
|||
|
|
1. 模型太大(deepseek-r1:32b需要较好的硬件)
|
|||
|
|
2. 知识库文档太多
|
|||
|
|
|
|||
|
|
**解决方案**:
|
|||
|
|
1. 使用更小的模型:
|
|||
|
|
```yaml
|
|||
|
|
rag:
|
|||
|
|
ollama:
|
|||
|
|
generate-model: qwen2.5:7b # 或其他更小的模型
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
2. 减少检索数量:
|
|||
|
|
```yaml
|
|||
|
|
rag:
|
|||
|
|
retrieval:
|
|||
|
|
top-k: 3 # 从5减少到3
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 📊 性能基准
|
|||
|
|
|
|||
|
|
在标准配置下(Intel i7, 16GB RAM, RTX 3060):
|
|||
|
|
|
|||
|
|
- **文档解析**: ~1-2秒/页 (PDF)
|
|||
|
|
- **向量生成**: ~100ms/文本块
|
|||
|
|
- **语义检索**: ~50ms (Top-5)
|
|||
|
|
- **报告生成**: ~5-15秒 (取决于模型)
|
|||
|
|
- **并发支持**: 10+ 用户
|
|||
|
|
|
|||
|
|
## 🎯 下一步
|
|||
|
|
|
|||
|
|
系统现在已经可以正常运行!你可以:
|
|||
|
|
|
|||
|
|
1. **上传心理学文档**: 将PDF、Word文档放入知识库
|
|||
|
|
2. **测试智能问答**: 询问心理学相关问题
|
|||
|
|
3. **生成评估报告**: 基于知识库生成专业报告
|
|||
|
|
4. **开发前端页面**: 创建用户友好的Web界面
|
|||
|
|
|
|||
|
|
需要帮助?查看完整文档:`RAG-README.md`
|