本项目采用分层架构设计,从下到上分为数据层、服务层、应用层和接入层。
┌─────────────────────────────────────────────────────────────────┐
│ 接入层 (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. 查询理解 (Query Understanding) │
│ - 语义分析 │
│ - 关键词提取 │
│ - 查询改写 (可选) │
└──────────────────────────────────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────────────────┐
│ 2. 向量化 (Embedding) │
│ - 调用Embedding模型 │
│ - 生成Query向量 │
└──────────────────────────────────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────────────────┐
│ 3. 向量检索 (Vector Search) │
│ - 相似度搜索 (Top-K) │
│ - 过滤低相似度结果 │
│ - 混合搜索 (可选: 关键词 + 语义) │
└──────────────────────────────────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────────────────┐
│ 4. 结果重排序 (Reranking) (可选) │
│ - 交叉编码器重排 │
│ - 相关性分数调整 │
└──────────────────────────────────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────────────────┐
│ 5. 上下文构建 (Context Building) │
│ - 拼接检索到的文档片段 │
│ - 添加元数据信息 │
└──────────────────────────────────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────────────────┐
│ 6. 提示词工程 (Prompt Engineering) │
│ - 系统提示词 │
│ - 上下文注入 │
│ - 用户问题 │
└──────────────────────────────────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────────────────┐
│ 7. LLM生成 (Generation) │
│ - 调用大模型 │
│ - 流式输出 (可选) │
└──────────────────────────────────────────────────────────────┘
│
▼
返回给用户
用户请求
│
▼
┌──────────────────────────────────────────────────────────────┐
│ 1. 意图识别 (Intent Recognition) │
│ - 判断是否需要工具调用 │
│ - 选择合适的工具 │
└──────────────────────────────────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────────────────┐
│ 2. 参数提取 (Parameter Extraction) │
│ - 从用户输入提取工具参数 │
│ - 参数验证 │
└──────────────────────────────────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────────────────┐
│ 3. 工具执行 (Tool Execution) │
│ ┌──────────────────┐ ┌──────────────────┐ │
│ │ Database Query │ │ External API │ │
│ └──────────────────┘ └──────────────────┘ │
│ - SQL执行 - HTTP请求 │
│ - 结果限制 - 超时控制 │
└──────────────────────────────────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────────────────┐
│ 4. 结果格式化 (Result Formatting) │
│ - 转换为自然语言 │
│ - 数据摘要 │
└──────────────────────────────────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────────────────┐
│ 5. 思考链 (Chain-of-Thought) (可选) │
│ - 记录推理过程 │
│ - 多步工具调用 │
└──────────────────────────────────────────────────────────────┘
│
▼
返回给用户
用户请求
│
▼
┌──────────────────────────────────────────────────────────────┐
│ 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 (可选) │
└──────────────────────────────────────────────────────────────┘
│
▼
返回响应
多层缓存架构:
┌──────────────────────────────────────────────────────────────┐
│ L1: 本地缓存 (Caffeine) │
│ - 高频配置 │
│ - 热点Embedding │
└──────────────────────────────────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────────────────┐
│ L2: Redis缓存 │
│ - 会话数据 │
│ - 检索结果缓存 │
│ - API响应缓存 │
└──────────────────────────────────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────────────────┐
│ L3: 向量数据库 + MySQL │
│ - 持久化存储 │
│ - 全量数据 │
└──────────────────────────────────────────────────────────────┘
请求处理流程:
┌─────────────┐
│ 入口请求 │
└──────┬──────┘
│
┌──────▼──────┐
│ Tomcat线程 │
│ 池 (200) │
└──────┬──────┘
│
┌──────────────┼──────────────┐
│ │ │
┌───────▼──────┐ ┌────▼─────┐ ┌─────▼──────┐
│ 异步任务 │ │ 同步处理 │ │ 流式输出 │
│ 执行器 │ │ │ │ │
│ (100线程) │ │ │ │ SSE/WebSocket│
└───────┬──────┘ └────┬─────┘ └─────┬──────┘
│ │ │
└───────────────┼──────────────┘
│
┌───────▼───────┐
│ 响应返回 │
└───────────────┘
Embedding批处理:
单个文档 → 分块(100个chunks) → 批量Embedding → 批量存入向量库
│
减少API调用
降低延迟
节省成本
# 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- 应用监控: Spring Boot Actuator + Prometheus + Grafana
- 日志管理: ELK Stack (Elasticsearch + Logstash + Kibana)
- 链路追踪: Jaeger / Zipkin
- 性能监控: JVM监控、GC日志分析
- 网络隔离: VPC、安全组、网络ACL
- 数据加密: 传输加密(TLS)、存储加密
- 访问控制: IAM、RBAC、API网关
- 安全审计: 操作日志、异常检测