Skip to content

Latest commit

 

History

History
335 lines (308 loc) · 21.7 KB

File metadata and controls

335 lines (308 loc) · 21.7 KB

系统架构详解

整体架构

本项目采用分层架构设计,从下到上分为数据层、服务层、应用层和接入层。

┌─────────────────────────────────────────────────────────────────┐
│                        接入层 (Access Layer)                      │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────────────┐  │
│  │   REST API   │  │  WebSocket   │  │  SSE Streaming       │  │
│  └──────────────┘  └──────────────┘  └──────────────────────┘  │
└─────────────────────────────────────────────────────────────────┘
                                    │
                                    ▼
┌─────────────────────────────────────────────────────────────────┐
│                       应用层 (Application Layer)                   │
│  ┌───────────────┐  ┌───────────────┐  ┌────────────────────┐ │
│  │  Agent Orch.  │  │  RAG Pipeline  │  │  Tool Orchestrator │ │
│  └───────────────┘  └───────────────┘  └────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
                                    │
                                    ▼
┌─────────────────────────────────────────────────────────────────┐
│                        服务层 (Service Layer)                      │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐  ┌──────┐│
│  │   Chat      │  │  Document   │  │   Vector    │  │ Tool ││
│  │   Service   │  │   Service   │  │   Service   │  │ Svc  ││
│  └─────────────┘  └─────────────┘  └─────────────┘  └──────┘│
└─────────────────────────────────────────────────────────────────┘
                                    │
                                    ▼
┌─────────────────────────────────────────────────────────────────┐
│                       集成层 (Integration Layer)                   │
│  ┌─────────────────┐  ┌─────────────────┐  ┌─────────────────┐│
│  │ LangChain4j     │  │  Model Clients  │  │  Data Clients   ││
│  └─────────────────┘  └─────────────────┘  └─────────────────┘│
└─────────────────────────────────────────────────────────────────┘
                                    │
                                    ▼
┌─────────────────────────────────────────────────────────────────┐
│                        数据层 (Data Layer)                         │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────────────┐  │
│  │   MySQL      │  │    Redis     │  │  Milvus / PGVector   │  │
│  └──────────────┘  └──────────────┘  └──────────────────────┘  │
└─────────────────────────────────────────────────────────────────┘

核心流程

1. RAG检索流程

用户提问
    │
    ▼
┌──────────────────────────────────────────────────────────────┐
│  1. 查询理解 (Query Understanding)                            │
│     - 语义分析                                                 │
│     - 关键词提取                                                │
│     - 查询改写 (可选)                                           │
└──────────────────────────────────────────────────────────────┘
    │
    ▼
┌──────────────────────────────────────────────────────────────┐
│  2. 向量化 (Embedding)                                        │
│     - 调用Embedding模型                                        │
│     - 生成Query向量                                            │
└──────────────────────────────────────────────────────────────┘
    │
    ▼
┌──────────────────────────────────────────────────────────────┐
│  3. 向量检索 (Vector Search)                                  │
│     - 相似度搜索 (Top-K)                                       │
│     - 过滤低相似度结果                                          │
│     - 混合搜索 (可选: 关键词 + 语义)                           │
└──────────────────────────────────────────────────────────────┘
    │
    ▼
┌──────────────────────────────────────────────────────────────┐
│  4. 结果重排序 (Reranking) (可选)                              │
│     - 交叉编码器重排                                            │
│     - 相关性分数调整                                            │
└──────────────────────────────────────────────────────────────┘
    │
    ▼
┌──────────────────────────────────────────────────────────────┐
│  5. 上下文构建 (Context Building)                              │
│     - 拼接检索到的文档片段                                      │
│     - 添加元数据信息                                            │
└──────────────────────────────────────────────────────────────┘
    │
    ▼
┌──────────────────────────────────────────────────────────────┐
│  6. 提示词工程 (Prompt Engineering)                           │
│     - 系统提示词                                                │
│     - 上下文注入                                                │
│     - 用户问题                                                  │
└──────────────────────────────────────────────────────────────┘
    │
    ▼
┌──────────────────────────────────────────────────────────────┐
│  7. LLM生成 (Generation)                                      │
│     - 调用大模型                                                │
│     - 流式输出 (可选)                                           │
└──────────────────────────────────────────────────────────────┘
    │
    ▼
返回给用户

2. 工具调用流程

用户请求
    │
    ▼
┌──────────────────────────────────────────────────────────────┐
│  1. 意图识别 (Intent Recognition)                             │
│     - 判断是否需要工具调用                                       │
│     - 选择合适的工具                                             │
└──────────────────────────────────────────────────────────────┘
    │
    ▼
┌──────────────────────────────────────────────────────────────┐
│  2. 参数提取 (Parameter Extraction)                            │
│     - 从用户输入提取工具参数                                     │
│     - 参数验证                                                  │
└──────────────────────────────────────────────────────────────┘
    │
    ▼
┌──────────────────────────────────────────────────────────────┐
│  3. 工具执行 (Tool Execution)                                  │
│     ┌──────────────────┐  ┌──────────────────┐               │
│     │  Database Query  │  │   External API   │               │
│     └──────────────────┘  └──────────────────┘               │
│     - SQL执行              - HTTP请求                          │
│     - 结果限制              - 超时控制                          │
└──────────────────────────────────────────────────────────────┘
    │
    ▼
┌──────────────────────────────────────────────────────────────┐
│  4. 结果格式化 (Result Formatting)                            │
│     - 转换为自然语言                                            │
│     - 数据摘要                                                  │
└──────────────────────────────────────────────────────────────┘
    │
    ▼
┌──────────────────────────────────────────────────────────────┐
│  5. 思考链 (Chain-of-Thought) (可选)                           │
│     - 记录推理过程                                              │
│     - 多步工具调用                                              │
└──────────────────────────────────────────────────────────────┘
    │
    ▼
返回给用户

3. 会话管理流程

用户请求
    │
    ▼
┌──────────────────────────────────────────────────────────────┐
│  1. 会话检查 (Session Check)                                   │
│     - 验证Session ID有效性                                      │
│     - 检查会话是否过期                                          │
└──────────────────────────────────────────────────────────────┘
    │
    ▼
┌──────────────────────────────────────────────────────────────┐
│  2. 历史加载 (History Loading)                                 │
│     - 从Redis读取历史消息                                       │
│     - 限制消息数量 (Sliding Window)                            │
└──────────────────────────────────────────────────────────────┘
    │
    ▼
┌──────────────────────────────────────────────────────────────┐
│  3. 上下文构建 (Context Building)                              │
│     - 拼接历史对话                                              │
│     - 构建对话上下文                                            │
└──────────────────────────────────────────────────────────────┘
    │
    ▼
┌──────────────────────────────────────────────────────────────┐
│  4. 请求处理 (Request Processing)                              │
│     - 调用Agent服务                                             │
│     - 执行RAG/工具调用                                          │
└──────────────────────────────────────────────────────────────┘
    │
    ▼
┌──────────────────────────────────────────────────────────────┐
│  5. 会话保存 (Session Saving)                                  │
│     - 保存新消息到Redis                                         │
│     - 更新会话TTL                                               │
│     - 持久化到MySQL (可选)                                      │
└──────────────────────────────────────────────────────────────┘
    │
    ▼
返回响应

性能优化策略

1. 缓存策略

多层缓存架构:

┌──────────────────────────────────────────────────────────────┐
│  L1: 本地缓存 (Caffeine)                                       │
│  - 高频配置                                                     │
│  - 热点Embedding                                               │
└──────────────────────────────────────────────────────────────┘
           │
           ▼
┌──────────────────────────────────────────────────────────────┐
│  L2: Redis缓存                                                 │
│  - 会话数据                                                     │
│  - 检索结果缓存                                                 │
│  - API响应缓存                                                  │
└──────────────────────────────────────────────────────────────┘
           │
           ▼
┌──────────────────────────────────────────────────────────────┐
│  L3: 向量数据库 + MySQL                                        │
│  - 持久化存储                                                   │
│  - 全量数据                                                     │
└──────────────────────────────────────────────────────────────┘

2. 并发处理

请求处理流程:

                    ┌─────────────┐
                    │   入口请求   │
                    └──────┬──────┘
                           │
                    ┌──────▼──────┐
                    │  Tomcat线程  │
                    │   池 (200)   │
                    └──────┬──────┘
                           │
            ┌──────────────┼──────────────┐
            │              │              │
    ┌───────▼──────┐ ┌────▼─────┐ ┌─────▼──────┐
    │  异步任务    │ │  同步处理 │ │  流式输出   │
    │  执行器      │ │           │ │             │
    │  (100线程)   │ │           │ │  SSE/WebSocket│
    └───────┬──────┘ └────┬─────┘ └─────┬──────┘
            │               │              │
            └───────────────┼──────────────┘
                            │
                    ┌───────▼───────┐
                    │   响应返回     │
                    └───────────────┘

3. 批处理优化

Embedding批处理:

单个文档 → 分块(100个chunks) → 批量Embedding → 批量存入向量库
                                │
                          减少API调用
                          降低延迟
                          节省成本

生产部署建议

1. 容器化部署

# Kubernetes Deployment 示例
apiVersion: apps/v1
kind: Deployment
metadata:
  name: ai-agent
spec:
  replicas: 3
  selector:
    matchLabels:
      app: ai-agent
  template:
    metadata:
      labels:
        app: ai-agent
    spec:
      containers:
      - name: ai-agent
        image: ai-agent:latest
        ports:
        - containerPort: 8080
        resources:
          requests:
            cpu: "2"
            memory: "4Gi"
          limits:
            cpu: "4"
            memory: "8Gi"
        env:
        - name: JAVA_OPTS
          value: "-Xms4g -Xmx8g -XX:+UseG1GC"
        livenessProbe:
          httpGet:
            path: /api/v1/agent/health
            port: 8080
          initialDelaySeconds: 60
          periodSeconds: 10
        readinessProbe:
          httpGet:
            path: /api/v1/agent/health
            port: 8080
          initialDelaySeconds: 30
          periodSeconds: 5

2. 监控告警

  • 应用监控: Spring Boot Actuator + Prometheus + Grafana
  • 日志管理: ELK Stack (Elasticsearch + Logstash + Kibana)
  • 链路追踪: Jaeger / Zipkin
  • 性能监控: JVM监控、GC日志分析

3. 安全加固

  • 网络隔离: VPC、安全组、网络ACL
  • 数据加密: 传输加密(TLS)、存储加密
  • 访问控制: IAM、RBAC、API网关
  • 安全审计: 操作日志、异常检测