SpringAI实现AI Agent
基于Spring AI的AI Agent应用demo地址:https://github.com/q644266189/aiagentdemo
项目核心模块
本项目是一个基于Spring AI的AI Agent应用,主要包含以下六个模块
| 模块/功能 | 核心能力描述 |
|---|---|
| AgentCore核心编排器 | 负责意图识别、记忆管理与大模型调用,协调各模块运行。 |
| ChatMemory | 对话记忆管理,支持三层上下文压缩:摘要压缩 → Assistant裁剪 → 滑动窗口。 |
| Tool (Function Calling) | 可插拔工具注册机制,通过InnerTool统一接口注册,LLM自主决策调用工具。 |
| RAG | 完整检索增强生成流水线:文档加载 → 分块 → 向量化 → 存储 → 多路召回(语义+BM25+查询改写)→ RRF融合 → 重排 → LLM生成。 |
| Command & Skill | Markdown驱动的Prompt模板机制:Command由用户主动触发,Skill作为Tool由LLM决策调用。 |
| SubAgent | 拥有独立记忆的子代理,支持内部SubAgent和外部IdeaLab Agent两种形态。 |
| MCP | 双向MCP支持:作为Client动态连接外部MCP服务,或作为Server对外暴露服务。 |
1.AgentCore
AgentCore 是整个系统的"大脑",负责编排对话的完整流程:意图识别 → RAG 注入 → 记忆管理 → 模型调用 → 工具执行。
2.ChatMemory 对话记忆(会话压缩)实现
三层递进上下文压缩策略(防 Token 溢出 / 成本失控)
第一层:摘要压缩(智能压缩,优先触发)
触发条件:历史消息 > 16 条
执行逻辑:自动用 LLM 将早期消息总结为300 字内摘要,注入 system prompt,原消息移除
核心设计
增量压缩:旧摘要 + 新对话合并总结,避免信息丢失
TOOL 消息保护:截断自动避开 TOOL 消息,保证工具调用上下文完整
第二层:Assistant 消息裁剪(精准裁剪,持续生效)
规则:仅保留最近 3 条LLM 回复,只将最近3条回复放到上下文
优势:LLM 回复占 Token 多,精准裁剪大幅减少上下文体积
第三层:滑动窗口(兜底保护,最后防线)
规则:消息总数 > maxRounds×4 时,直接丢弃最早消息
作用:硬性限制上下文大小,防止无限增长
三层协同逻辑
摘要压缩(保信息)→ Assistant 裁剪(省 Token)→ 滑动窗口(硬保护)
3.TOOL
所有工具实现统一的 InnerTool 接口,启动时,Spring 自动扫描所有 InnerTool Bean,调用 loadToolCallbacks() 收集所有工具,统一注册到 AgentCore。新增工具只需实现这个接口,无需修改任何已有代码。
4.RAG 模块:检索增强生成

一、RAG 整体流程(总览)
文档分块 → 向量入库 → 用户提问 → 多路召回 → RRF 融合 → Rerank 重排 → 拼接上下文 → 交给 LLM 回答
二、分步详细流程
- 文档预处理:分块(决定检索质量)
使用递归语义分块 TextSplitter(默认)
规则:500 字符 / 块,重叠 50 字符
目标:保证语义完整,不破坏段落逻辑 - 向量存储
用 EmbeddingModel 生成文本向量
存入内存 VectorStore(生产可换 Milvus/Pinecone)
支持余弦相似度检索 - 用户发起查询
输入用户问题 question - 多路召回(语义 + BM25 + 查询改写,共 9 个候选)
同时启动 3 路召回,每路取若干候选,汇总成候选池:
SemanticRecaller 语义召回:向量相似度,懂语义
Bm25Recaller 关键词召回:BM25 算法,精准匹配
QueryRewriteRecaller 查询改写召回:把问题转 3 种说法再检索,扩大覆盖
→ 输出:9 个候选文档 - RRF 融合(多路结果合并)
对 3 路结果用 RRF 倒数排名融合
不看原始分数,只看排名
合并、去重、重新排序
输出:排序后的候选集 - Rerank 重排(精检索,求精)
将 9 个候选送入 LLM 重排模型
按问题相关性重新精准打分
取 TOP3 最相关文档 - 构建上下文
把 TOP3 文档按格式拼接:
【参考资料1】【参考资料2】【参考资料3】
返回干净的上下文字符串
供 LLM 基于事实回答
三、核心技术串讲
多路召回:向量 + BM25 + 查询改写,互补盲区
RRF 融合:按倒数排名合并多路结果
Rerank:精排提升相关性,只留最有用的 3 条
BM25:关键词匹配召回
TextSplitter:递归语义分块
Embedding + VectorStore:向量检索
四、精简流程
文档先分块、转向量入库;用户提问后,走三路召回 + RRF 融合,再经 Rerank 取 TOP3,最后拼接成上下文给大模型生成答案。
5.Command 与 Skill
Command 是"用户告诉 Agent 做什么",Skill 是"Agent 自己判断该做什么"
6.SubAgent
主 LLM 根据对话上下文自主决定是否需要创建 SubAgent。整个生命周期(创建 → 多轮对话 → 销毁)都由主 LLM 通过工具调用来驱动。
7.MCP
同时实现了 MCP Server(对外暴露能力)和 MCP Client(连接外部服务)。
MCP Server:对外暴露知识库检索能力。通过 SimpleMcpServer 对外提供知识库检索工具,其他 AI 应用可以通过 MCP 协议来调用。
MCP Client:动态连接外部 MCP 服务。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)