SVCG 开发者文档SVCG 开发者文档
首页
快速开始
  • 前端开发
  • 后端开发
  • API 文档
部署运维
更新日志
GitHub
首页
快速开始
  • 前端开发
  • 后端开发
  • API 文档
部署运维
更新日志
GitHub

系统架构设计

系统概览

┌─────────────────────────────────────────────────────────────────┐
│                        前端层 (Vue.js)                          │
│  ┌──────────────────────────────────────────────────────────┐  │
│  │ - AI助手界面 (AIAssistant.vue)                           │  │
│  │ - 消息展示与输入                                        │  │
│  │ - RAG参考资料展示                                       │  │
│  └──────────────────────────────────────────────────────────┘  │
└───────────────────────────┬──────────────────────────────────────┘
                            │ HTTP/REST
┌───────────────────────────▼──────────────────────────────────────┐
│                     API网关 (nginx/直连)                         │
└───────────────────────────┬──────────────────────────────────────┘
                            │
        ┌───────────────────┼───────────────────┐
        │                   │                   │
        ▼                   ▼                   ▼
┌─────────────────┐ ┌──────────────┐ ┌─────────────────┐
│  RAG服务层      │ │  业务服务层  │ │  n8n工作流引擎  │
│ ┌─────────────┐ │ ┌────────────┐ │ ┌───────────────┐ │
│ │RAGService   │ │ │Auth Service│ │ │AI处理节点     │ │
│ │- Query处理  │ │ │User Service│ │ │- 提示词注入   │ │
│ │- Embedding  │ │ │Member Srv  │ │ │- 文本处理     │ │
│ │- 相似度计算 │ │ └────────────┘ │ │- 输出格式化   │ │
│ │- 热更新     │ │                │ │- 反馈收集     │ │
│ └─────────────┘ │                │ └───────────────┘ │
└─────────────────┴──────────────────┴─────────────────┘
        │                   │                   │
        └───────────────────┼───────────────────┘
                            │
        ┌───────────────────┼───────────────────┐
        │                   │                   │
        ▼                   ▼                   ▼
┌──────────────────┐ ┌──────────────────┐ ┌──────────────┐
│ 数据存储层       │ │  缓存层          │ │ 外部服务     │
│ ┌──────────────┐ │ ┌──────────────┐ │ ┌────────────┐ │
│ │SQLite        │ │ │Redis         │ │ │Deepseek    │ │
│ │- documents   │ │ │- Query缓存   │ │ │Embedding   │ │
│ │- chunks      │ │ │- 会话缓存    │ │ │API         │ │
│ │- embeddings  │ │ │- 用户缓存    │ │ └────────────┘ │
│ │- users       │ │ └──────────────┘ │                │
│ │- members     │ │                  │                │
│ └──────────────┘ │                  │                │
└──────────────────┴──────────────────┴──────────────────┘

核心模块详解

1. RAG处理层架构

用户查询
   │
   ▼
┌────────────────────────────────────┐
│ 查询处理 (QueryHandler)             │
│ - 文本预处理                       │
│ - 参数验证                        │
└────────────────────────────────────┘
   │
   ▼
┌────────────────────────────────────┐
│ FAQ检查 (FAQMatcher)               │
│ - 精确匹配                         │
│ - 相似匹配                        │
└────────────────────────────────────┘
   │
   ├─ 如果匹配 ─→ 返回FAQ答案
   │
   └─ 如果不匹配 ↓
   │
   ▼
┌────────────────────────────────────┐
│ 向量化 (EmbeddingGenerator)         │
│ - 输入语义压缩                     │
│ - Embedding生成                   │
│ - API回退处理                     │
└────────────────────────────────────┘
   │
   ▼
┌────────────────────────────────────┐
│ 相似度搜索 (SimilaritySearcher)      │
│ - 加载向量块                       │
│ - 余弦相似度计算                   │
│ - Top-K排序                       │
└────────────────────────────────────┘
   │
   ▼
┌────────────────────────────────────┐
│ 上下文构建 (ContextBuilder)         │
│ - 组织相关文档                     │
│ - 添加元数据                      │
│ - 格式化输出                      │
└────────────────────────────────────┘
   │
   ▼
┌────────────────────────────────────┐
│ 提示词生成 (PromptGenerator)        │
│ - 系统提示词                       │
│ - 人设约束                        │
│ - 压缩要求                       │
│ - 用户查询                       │
└────────────────────────────────────┘
   │
   ▼
┌────────────────────────────────────┐
│ n8n转发 (N8NForwarder)             │
│ - 构建请求                        │
│ - 异常处理                       │
│ - 响应解析                       │
└────────────────────────────────────┘

2. 数据存储架构

SQLite数据库schema

-- 文档表
CREATE TABLE documents (
  id INTEGER PRIMARY KEY,
  title TEXT NOT NULL,
  content TEXT NOT NULL,
  file_path TEXT NOT NULL,
  hash TEXT NOT NULL,
  category TEXT,
  created_at TIMESTAMP,
  updated_at TIMESTAMP
);

-- 文档块表
CREATE TABLE document_chunks (
  id INTEGER PRIMARY KEY,
  document_id INTEGER NOT NULL,
  content TEXT NOT NULL,
  chunk_index INTEGER,
  embedding TEXT,  -- JSON格式的向量
  created_at TIMESTAMP,
  FOREIGN KEY (document_id) REFERENCES documents(id)
);

-- 用户表
CREATE TABLE users (
  id INTEGER PRIMARY KEY,
  username TEXT UNIQUE NOT NULL,
  password_hash TEXT NOT NULL,
  email TEXT,
  role VARCHAR(20),
  created_at TIMESTAMP,
  updated_at TIMESTAMP
);

-- 社团成员表
CREATE TABLE club_members (
  id INTEGER PRIMARY KEY,
  cn TEXT UNIQUE NOT NULL,
  role VARCHAR(50),
  email TEXT,
  created_at TIMESTAMP,
  updated_at TIMESTAMP
);

3. 向量存储架构

┌─────────────────────────────────────┐
│  向量块 (DocumentChunk)              │
├─────────────────────────────────────┤
│ ID: 1                               │
│ Document ID: 1                      │
│ Content: "先用打点工具标记..."        │
│ Embedding: [0.234, 0.456, ...]      │
│ (1024维向量)                        │
│ Index: 0                            │
│ Created: 2025-10-16                 │
└─────────────────────────────────────┘
        │
        ▼ (存储到SQLite)
┌─────────────────────────────────────┐
│  JSON序列化                          │
│  "[0.234, 0.456, ..., 0.789]"       │
└─────────────────────────────────────┘
        │
        ▼ (检索时)
┌─────────────────────────────────────┐
│  反序列化到内存                      │
│  []float64{0.234, 0.456, ...}       │
└─────────────────────────────────────┘
        │
        ▼
┌─────────────────────────────────────┐
│  余弦相似度计算                      │
│  similarity = (A·B) / (|A|×|B|)     │
└─────────────────────────────────────┘

4. 热更新机制

┌──────────────────┐
│ 监听文件系统      │
└────────┬─────────┘
         │
         ▼
┌──────────────────────────────┐
│ 检测文件变化 (MD5哈希比对)    │
└────────┬──────────────────────┘
         │
    ┌─────┴──────┐
    │            │
   哈希一致     哈希不一致
    │            │
    ▼            ▼
  跳过       ┌─────────────────┐
         │ 重新处理文件      │
         │ 1. 读取内容      │
         │ 2. 分块          │
         │ 3. 生成向量      │
         │ 4. 存储到DB      │
         └────────┬──────────┘
                  │
                  ▼
         ┌──────────────────┐
         │ 更新用户会话     │
         │ 确保立即使用新知识│
         └──────────────────┘

交互流程图

查询处理流程

用户发送消息 (Frontend)
    │
    ▼
POST /api/rag/chat (Backend)
    │
    ├─ 验证参数
    ├─ 检查FAQ匹配
    │
    ▼
RAGService.SearchSimilarChunks()
    │
    ├─ 生成查询向量
    │  ├─ 尝试: Deepseek API
    │  └─ 回退: 本地向量
    │
    ├─ 查询SQLite获取所有块向量
    │
    ├─ 计算相似度 (cosine)
    │
    └─ 返回 Top-K 结果
    │
    ▼
RAGService.EnhanceQuery()
    │
    ├─ 组织相关文档
    ├─ 添加系统提示词
    ├─ 添加人设信息
    ├─ 添加压缩要求
    │
    └─ 返回增强查询
    │
    ▼
sendToN8N()
    │
    ├─ 构建n8n请求体
    ├─ 添加上下文和提示词
    │
    └─ HTTP POST 到 n8n
    │
    ▼
n8n AI Node
    │
    ├─ 接收提示词和上下文
    ├─ 调用Deepseek Chat API
    ├─ 获得AI回复
    │
    └─ 返回JSON响应
    │
    ▼
Backend 响应处理
    │
    ├─ 解析n8n响应
    ├─ 应用输出压缩
    │
    └─ 返回给Frontend
    │
    ▼
Frontend 显示结果
    │
    ├─ 显示参考资料 (RAG chunks)
    ├─ 显示AI回复
    │
    └─ 显示处理时间

并发和性能优化

1. 连接池配置

// 数据库连接池
db.SetMaxIdleConns(10)
db.SetMaxOpenConns(100)

// HTTP客户端复用
httpClient := &http.Client{
    Timeout: 30 * time.Second,
    Transport: &http.Transport{
        MaxIdleConns: 100,
        MaxConnsPerHost: 10,
    },
}

2. 缓存策略

┌─────────────────────────────────┐
│ Redis 缓存层                     │
├─────────────────────────────────┤
│ 1. FAQ精确匹配结果 (TTL: 1天)    │
│ 2. 用户会话信息 (TTL: 24小时)   │
│ 3. 热查询结果 (TTL: 1小时)      │
└─────────────────────────────────┘

3. 异步处理

// 成员同步异步执行
go func() {
    if err := ragService.SyncMembersToMarkdown(); err != nil {
        log.Printf("异步同步失败: %v", err)
    }
}()

安全设计

1. 输入验证

// 查询长度限制
if len(query) > 5000 {
    return errors.New("查询过长")
}

// 参数范围检查
if topK < 1 || topK > 50 {
    topK = 5
}

2. 错误处理

// 不暴露内部错误详情
if err != nil {
    return c.JSON(500, map[string]interface{}{
        "error": "处理失败",
        // 不返回具体的内部错误
    })
}

3. 速率限制

e.Use(middleware.RateLimiter(
    middleware.NewRateLimiterConfig().
    Store(middleware.NewRateLimiterMemoryStore(100))))

扩展性设计

1. 支持多个知识库源

// 支持添加新的数据源
knowledgeSources := []string{
    "backend/AI-data-source",
    "backend/custom-knowledge",
    "backend/user-uploaded",
}

2. 可插拔的Embedding模型

interface EmbeddingProvider {
    Generate(text string) ([]float64, error)
}

// 支持多种实现
- DeepseekEmbedding
- LocalEmbedding
- OpenAIEmbedding

3. 模块化的提示词管理

type PromptTemplate struct {
    SystemPrompt   string
    PersonaInfo    string
    CompressionReq string
    OutputFormat   string
}

灾备和恢复

1. 数据备份

# 每日自动备份
0 2 * * * backup /path/to/app.db

2. 故障转移

主服务器 ─────→ 负载均衡器 ─────→ 备用服务器
                     ▲
                     │
              心跳检测 (每5秒)

3. 日志记录

┌────────────────────┐
│ 应用日志           │
│ - 请求日志         │
│ - 错误日志         │
│ - 性能日志         │
└────────────────────┘

总结

该架构设计强调:

  • 模块化:各功能独立,易于测试和维护
  • 可扩展性:支持添加新的数据源和embedding模型
  • 性能:通过缓存和连接池优化
  • 可靠性:错误处理和备份策略完善
  • 安全:输入验证和错误隐藏
在 GitHub 上编辑此页
上次更新: 2025/10/16 11:45
贡献者: NingBye