RAG系统概述
简介
RAG(检索增强生成)系统是柒世纪视频组AI助手的核心,通过向量化技术和语义搜索为n8n提供精准的知识库上下文,实现更准确的AI回复。
系统架构
┌─────────────────┐
│ 用户查询 │
└────────┬────────┘
│
▼
┌─────────────────────────────┐
│ RAG处理层 │
│ ┌────────────────────────┐ │
│ │ 1. 语义压缩 (输入) │ │
│ │ 2. Embedding生成 │ │
│ │ 3. 相似度计算 │ │
│ │ 4. 上下文构建 │ │
│ │ 5. 语义压缩 (输出) │ │
│ └────────────────────────┘ │
└────────┬────────────────────┘
│
▼
┌─────────────────────────────┐
│ 知识库 │
│ ┌────────────────────────┐ │
│ │ SQLite数据库 │ │
│ │ - documents │ │
│ │ - document_chunks │ │
│ └────────────────────────┘ │
└──────────────────────────────┘
│
▼
┌─────────────────────────────┐
│ n8n AI处理 │
│ ┌────────────────────────┐ │
│ │ - 系统提示词注入 │ │
│ │ - 人设约束应用 │ │
│ │ │ - 语义压缩要求 │ │
│ └────────────────────────┘ │
└────────┬────────────────────┘
│
▼
┌─────────────────┐
│ AI回复 │
└─────────────────┘
核心特性
1. 智能文档检索
- 向量化存储:文档以1024维向量形式存储在SQLite中
- 余弦相似度:计算查询和文档的语义相似度
- 分块处理:长文档自动分块(≤1500字符)以提高检索精度
2. 自适应回退机制
- Deepseek Embedding API:优先使用Deepseek的embedding模型
- 本地特征向量:当API不可用时自动回退到本地向量生成
- 无缝切换:用户无需感知API状态变化
3. 语义压缩优化
- 输入压缩:减少embedding API调用的token消耗
- 输出压缩:适度压缩最终响应,保留关键信息
- 成本控制:降低API调用费用
4. 人设约束系统
- 助理身份:明确定义为"视小姬" - 社团AI小助理
- 分工管理:严格区分MAD和MMD创作线
- 版权合规:自动提醒版权政策
- 学习导向:鼓励用户持续学习和创作
5. 热更新支持
- 文档动态加载:无需重启即可更新知识库
- 成员同步:自动将新增成员信息写入markdown
- 实时刷新:支持API触发的热刷新
工作流程
查询处理流程
1. 用户提交查询
│
▼
2. 验证用户权限和输入
│
▼
3. 检查FAQ精确匹配
├─ 如果匹配 → 返回标准答案
└─ 如果不匹配 → 继续
│
▼
4. 生成查询向量
├─ 尝试: Deepseek Embedding API
└─ 失败: 本地特征向量
│
▼
5. 余弦相似度计算
│
▼
6. 检索Top-K相似文档块
│
▼
7. 构建系统提示词
├─ 人设信息
├─ 压缩要求
├─ 分工约束
└─ 输出格式指南
│
▼
8. 添加检索上下文
├─ 相关文档内容
└─ 相似度指示
│
▼
9. 发送给n8n处理
│
▼
10. 接收并展示AI回复
性能指标
| 指标 | 值 | 说明 |
|---|---|---|
| 向量维度 | 1024维 | 与Deepseek保持一致 |
| 响应时间 | ~27ms | 使用本地向量 |
| 文档块总数 | 53+ | 可根据知识库增长 |
| 单块大小 | ≤1500字符 | 保证检索精度 |
| 相似度阈值 | 0.0-1.0 | 无硬性阈值,返回Top-K |
配置信息
环境变量 (.env)
# Deepseek API
DEEPSEEK_API_KEY=sk-ebd9b6eaf5144b4489be23b22f103808
DEEPSEEK_EMBEDDING_MODEL=deepseek-chat
DEEPSEEK_API_BASE=https://api.deepseek.com
# RAG配置
RAG_EMBEDDING_DIMENSION=1024
RAG_TOP_K=5
知识库位置
- 主知识库:
backend/AI-data-source/scvg.md - 成员信息:
backend/AI-data-source/社团成员信息.md - 自定义知识:可在AI-data-source目录中添加.md文件
API端点
查询接口
1. RAG查询 (仅检索)
POST /api/rag/query
Content-Type: application/json
{
"query": "如何保证节奏同步感?",
"top_k": 5,
"category": ""
}
响应包含:
query: 原始查询relevant_chunks: 匹配到的文档块数组enhanced_query: 增强后的查询(包含上下文)processing_time: 处理时间
2. RAG聊天 (检索+n8n)
POST /api/rag/chat
Content-Type: application/json
{
"query": "如何保证节奏同步感?",
"top_k": 5,
"category": ""
}
响应包含:
- 所有RAG查询的信息
n8n_response: n8n处理后的AI回复
3. 知识库刷新
POST /api/rag/refresh
功能:热加载知识库,无需重启服务
4. 成员信息同步
POST /api/rag/sync-members
功能:将数据库中的新成员信息同步到markdown
5. 知识库状态
GET /api/rag/status
响应:
{
"status": "healthy",
"documents_count": 2,
"chunks_count": 53,
"last_refresh": "2025-10-16T10:40:39Z"
}
常见问题
Q: 如何添加新的知识库内容?
A: 在backend/AI-data-source/目录中添加.md文件,然后调用/api/rag/refresh刷新。
Q: Embedding API费用是多少?
A: 具体取决于Deepseek的定价。系统已内置压缩机制以减少API调用。
Q: 本地向量和Deepseek向量有什么区别?
A: 精度不同,但系统设计确保两者都能正常工作。本地向量是应急回退。
Q: 如何修改AI助手的人设?
A: 编辑rag_controller.go中的buildSystemPrompt()函数。
Q: 能否自定义压缩参数?
A: 可以,修改rag_service.go中的compressSemanticContent和compressOutput函数。
下一步规划
- [ ] 支持多语言检索
- [ ] 接入向量数据库(如Milvus)以支持大规模知识库
- [ ] 实现对话历史管理
- [ ] 添加用户反馈评分机制
- [ ] 支持自定义提示词模板
