RAGSpring BootAI系统上下文感知企业架构
超越RAG:用Spring Boot构建具备上下文感知能力的AI系统
超越RAG:用Spring Boot构建具备上下文感知能力的AI系统
作者: Syed Danish Ali | 译者: 马可薇 | 发布时间: 2026-04-26
核心观点
- RAG可以有效将LLM输出与外部知识对齐,但不会建模运行时上下文
- 上下文增强生成(CAG)通过显式上下文管理扩展RAG
- CAG关注「这些信息对谁相关、在什么情境下相关、受到哪些约束」
- Spring Boot可清晰实现上下文管理器,保持既有架构不变
RAG的局限
RAG已成为企业系统集成LLM的实用基础方案:
- 从外部知识库检索相关文档
- 注入到模型提示中
- 生成比仅依赖训练数据更准确的回答
但RAG的不足:
| RAG能做 | RAG不能做 |
|---|---|
| 提升信息准确性 | 处理用户身份和角色 |
| 基于检索生成回答 | 维护会话连续性 |
| 连接外部知识 | 应用领域规则和策略 |
| - | 处理时间或流程状态 |
典型问题:
- 回答事实正确,但上下文不合适
- 类似问题对不同用户回答不一致
- 难以解释或审计回答为何产生
CAG架构模式
CAG vs RAG:
| 维度 | RAG | CAG |
|---|---|---|
| 关注点 | 哪些信息相关 | 对谁相关、在什么情境下、受什么约束 |
| 上下文处理 | 隐式/不处理 | 显式管理 |
| 运行时信号 | 忽略 | 收集并规范化 |
CAG核心组件:
上下文管理器负责收集运行时信号,包括用户信息、会话历史、策略约束等,然后传递给RAG流程。
Spring Boot实现
典型架构:
@RestController public class AiController { private final ContextManager contextManager; private final RagService ragService; @PostMapping("/ask") public String ask(QueryRequest request) { Context context = contextManager.buildContext(request); return ragService.generateResponse(request.getQuery(), context); } }
上下文对象结构:
public class Context { private final UserProfile user; // 用户画像 private final SessionHistory session; // 会话历史 private final PolicyRules policies; // 策略规则 private final RuntimeSignals signals; // 运行时信号 }
实际案例
企业内部政策助手场景:
| 查询 | 不同上下文下的回答 |
|---|---|
| 「请假流程是什么?」 | 普通员工 → 3天审批流程 |
| 部门经理 → 包含团队管理选项 | |
| HR → 完整政策和异常处理 |
DoorDash实践: 在其基于大语言模型的客服自动化系统中,明确区分检索组件和上下文模块,后者负责整合骑手状态、流程上下文以及业务约束。
微软Copilot实践: 强调不仅要基于内容进行检索,还要结合组织上下文、权限以及用户特征来生成响应。
CAG的优势
| 优势 | 说明 |
|---|---|
| 关注点分离 | 检索、模型行为、上下文影响可分别分析 |
| 可测试性 | 上下文处理可独立测试 |
| 可审计性 | 清晰解释AI响应的生成过程 |
| 渐进演进 | 在保持既有RAG投入的前提下扩展 |
| 受监管友好 | 适合多租户和合规环境 |
实施建议
**第一步:**识别应用中已隐式使用上下文的场景
- 用户属性拼接到prompt
- 手动加入对话历史
- 通过零散逻辑注入策略文本
**第二步:**将这些做法集中到ContextManager
- 统一收集运行时信号
- 规范化上下文格式
- 与RAG流程解耦
**第三步:**逐步扩展上下文维度
- 从用户身份开始
- 加入会话历史
- 最后纳入领域策略
结论
CAG不是替代RAG,而是演进式扩展:
- RAG解决「找什么信息」
- CAG解决「这些信息如何使用」
通过将「上下文」提升为一等架构要素,企业可以在受监管或多租户环境中清晰解释AI响应的生成过程,同时保留已有投入和系统稳定性。
原文来源:InfoQ | 原文:THE NEW STACK | 整理时间:2026-04-27