基于原生 Spring AI 的智能体(Agent)开发框架,提供 ReAct 执行引擎、分层记忆、工具调度、Human-in-the-Loop 等核心能力,形成完整的 Harness Engineering 方案,帮助开发者快速构建 AI Agent,可以快速搭建 Java 版的 Claude Code。
当前版本:1.0.0-M2 | JDK 21+ | Spring Boot 3.5.x | Spring AI 1.1.0
Spring AI AgentX 是一款面向 Java 开发者的 AI Agent 开发框架。基于 Spring AI 和 Reactor 构建,专注于 Agent 执行引擎,不引入 Graph 编排范式,以简洁的方式帮助开发者构建 AI Agent。
不造轮子,只做 Agent 引擎。 框架基于 Spring AI 原生机制(ChatClient、ToolCallback、ChatMemory)构建,不引入额外的抽象层。开发者无需学习新的编程范式,只要会用 Spring AI,就会用 AgentX。
不用 Graph,基于 Reactor 实现。 不引入 LangGraph 等 Graph 编排框架复杂的节点和边定义,执行引擎基于 Reactor 构建,以声明式的响应式流驱动 Agent 的多轮推理与工具调用。从流式输出到工具执行全链路响应式,天然适配 WebFlux 等异步场景。
Harness Engineering。 借鉴 Claude Code 的架构理念,大模型是引擎,框架是底盘(Harness)。框架不限定模型选择,但模型以外的一切 —— 工具调度、分层记忆、执行控制、Human-in-the-Loop、上下文管理、技能体系 —— 全部由框架统一提供,让开发者只需关注业务逻辑和模型选型。
这个框架源于我近三年在 Agent 产品领域的持续深耕。最初只是出于好奇 —— 不论是 Python 的 LangChain、LangGraph、AutoGen……还是 Java 的 Spring AI、Spring AI Alibaba、AgentScope,就想搞清楚这些框架底层到底在做什么,不只是知其然,更想知其所以然。
后来在公司主导 Agent 产品开发的过程中,踩了不少坑,也遇到了开源框架的一些局限性。与其在各种框架之间反复适配修补,不如把积累的经验沉淀成一套自己的框架。AgentX 的每个功能模块都源自真实业务场景,是反复打磨的成果。框架完全基于原生 Spring AI,只用基础能力来实现 Agent 的各种功能。
最初的代码根基,也就是 ReAct 主循环,完全是我手搓实现。随着 vibe coding 的发展、大模型能力的增强,现在框架中大部分代码在我的架构设计和思路引导下由 AI 辅助完成,但每个模块的设计决策、技术选型和边界把控,都来自实战中的思考。
希望这个框架能让大家对 Agent 开发有更深层次的理解。
| 功能 | 说明 |
|---|---|
| TodoWrite 任务追踪 | 结构化任务列表工具,流式 TodoProgress 进度事件,保证多步骤任务不遗漏 |
| 功能 | 说明 |
|---|---|
| ReAct Agent 引擎 | 基于 Reasoning + Acting 范式构建多轮执行闭环,自动驱动模型推理与工具调用 |
| 同步与流式输出 | 同步调用(call)与流式输出(stream)两种模式,流式基于 Reactor Flux 实现 |
| 统一工具调度 | 原生支持 Function Calling / MCP,工具执行由框架统一接管 |
| 运行时参数注入 | 通过 RunnableParams 动态覆盖工具参数,精准控制工具行为 |
| 任务管理与执行控制 | 会话级并发控制与中断机制,保障同一会话执行的有序性与可控性 |
| 分层记忆体系 | 短期记忆、用户画像、长期记忆(RAG)三层结构,多粒度上下文管理 |
| 分阶段输出 | StageOutputProvider SPI,在 Agent 生命周期钩子点注入自定义输出 |
| Human-in-the-Loop | 暂停/恢复机制,支持输入工具与操作工具,支持自定义用户输入工具 |
| 内置工具能力集 | Bash、文件系统、文本检索(Grep)、Python 等通用工具 |
| Skills 技能体系 | 基于渐进式披露机制,按需加载技能内容,支持多技能注册与组合 |
| 思考模型适配 | 新增 ThinkingMode 枚举统一 THINK_TAG / REASONING_CONTENT / DISABLED 三种模式,支持 DeepSeek、Qwen3.6-plus 等模型的 reasoning_content 字段解析 |
| DeepSeek-V4 兼容 | 内置 DeepSeekV4ChatModel,解决 Spring AI 原生模块在思考模式 + 工具调用场景下的兼容性问题(spring-ai#6026) |
| 异常处理与重试 | 内置透明重试机制,统一异常处理(AgentException + AgentErrorCode) |
| 上下文压缩 | 两层自动压缩策略(micro_compact + auto_compact),控制长对话 Token 消耗 |
| ToolSearch 工具检索 | 工具按需发现,LLM 通过 tool_search 元工具搜索加载 deferred 工具 |
| 结构化输出 | 非流式调用输出标准 JSON,支持单对象和泛型集合 |
当前版本需从源码构建安装到本地 Maven 仓库:
git clone https://github.com/bigchuidw3/spring-ai-agentx.git
cd spring-ai-agentx
mvn clean install -DskipTests后续会考虑发布到 Maven Central,届时可直接通过坐标引入,无需手动构建。
在项目 pom.xml 中引入:
<dependency>
<groupId>com.agentx.ai</groupId>
<artifactId>spring-ai-agentx-core</artifactId>
<version>1.0.0-M2</version>
</dependency>框架基于 Spring AI 1.1.0,core 模块已内置 spring-ai-starter-model-openai,无需额外引入。
框架本身不绑定特定大模型,任何 Spring AI 支持的 ChatModel 都可以直接传入。
方式 A:兼容 OpenAI 接口的模型(Qwen / DeepSeek / Moonshot 等)
ChatModel chatModel = OpenAiChatModel.builder()
.openAiApi(OpenAiApi.builder()
.baseUrl("https://dashscope.aliyuncs.com/compatible-mode/") // 替换为对应厂商的 base URL
.apiKey("your-api-key")
.build())
.defaultOptions(OpenAiChatOptions.builder()
.model("qwen-plus")
.temperature(0.7)
.build())
.build();推荐模型 base URL 参考:
| 厂商 | base URL | 推荐模型 | 类型 |
|---|---|---|---|
| 通义千问 (DashScope) | https://dashscope.aliyuncs.com/compatible-mode/ |
qwen-plus | 普通模型 |
| 智谱 AI (GLM) | 需引入 spring-ai-starter-model-zhipuai |
glm-4.7 / glm-5.1 | 普通模型 |
| DeepSeek | https://api.deepseek.com/ |
deepseek-v4-flash | reasoning_content 模型(需使用框架内置 DeepSeekV4ChatModel,详见 15-DeepSeek-V4兼容) |
| MiniMax | https://api.minimaxi.com/ |
minimax-M2.7 | Think 模型 |
模型选择建议:一般场景推荐 qwen-plus;需要 Agent 展示思考过程时,根据模型类型选择对应的
ThinkingMode:
<think/>标签格式(MiniMax 等)→thinkingMode(ThinkingMode.THINK_TAG)reasoning_content字段格式(DeepSeek、Qwen3.6-plus)→thinkingMode(ThinkingMode.REASONING_CONTENT)详见 09-思考模型适配。
关于模型兼容性:虽然各家模型厂商都声称兼容 OpenAI 接口,但实际在请求参数和响应格式上往往存在差异(如思考模式入参出参的差异、字段校验)。框架会优先适配主流模型(如上表所列),但无法保证当前框架兼容市面上所有模型,希望各位理解。
方式 B:智谱 AI(GLM 系列,需额外引入 spring-ai-starter-model-zhipuai)
ChatModel chatModel = new ZhiPuAiChatModel(
ZhiPuAiApi.builder().apiKey("your-api-key").build(),
ZhiPuAiChatOptions.builder()
.model("glm-4.7")
.temperature(0.7)
.build()
);方式 C:DeepSeek V4 思考模型(必须使用框架内置 DeepSeekV4ChatModel)
ChatModel chatModel = DeepSeekV4ChatModel.builder()
.deepSeekApi(DeepSeekApi.builder()
.apiKey("your-api-key")
.baseUrl("https://api.deepseek.com")
.build())
.defaultOptions(DeepSeekChatOptions.builder()
.model("deepseek-v4-flash")
.temperature(0.4)
.build())
.build();注意:DeepSeek V4 等思考模型存在
reasoning_content回传兼容性问题,不能使用 OpenAI 兼容接口或 Spring AI 原生模块。详见 15-DeepSeek-V4兼容。
方式 D:Spring Boot 自动注入
# application.yml
spring:
ai:
openai:
base-url: https://dashscope.aliyuncs.com/compatible-mode/
api-key: your-api-key
chat:
options:
model: qwen-plus
temperature: 0.7@Autowired
ChatModel chatModel; // Spring Boot 自动注入,直接传给 Agent3 行代码构建一个可用的智能体:
ReactAgent agent = ReactAgent.builder()
.chatModel(chatModel)
.build();
String answer = agent.call("帮我分析一下 Java 和 Go 的优劣势");流式输出:
agent.stream("用三句话介绍 Spring AI")
.doOnNext(chunk -> System.out.print(chunk))
.blockLast();通过 instructions 设置 Agent 的角色和行为规则:
ReactAgent agent = ReactAgent.builder()
.chatModel(chatModel)
.instructions("""
你是一个 Java 架构师助手。
遵循以下原则:
- 给出可落地的方案,不写空话
- 优先使用成熟框架和最佳实践
""")
.build();
String answer = agent.call("帮我设计一个订单系统的架构");详细的功能说明和使用示例请查看 docs/core/ 目录下的文档。
| # | 功能 | 说明 | 文档 |
|---|---|---|---|
| 1 | 同步与流式输出 | call/stream 双模式,基础 API 和高级 API | 01-同步与流式输出 |
| 2 | 工具与 MCP | 内置工具、自定义工具、MCP 协议支持 | 02-工具与MCP |
| 3 | 动态会话参数 | RunnableParams、addParam / addToolParam 参数注入 | 03-动态会话参数 |
| 4 | 任务管理与并发控制 | 会话级并发控制、外部中断 | 04-任务管理与并发控制 |
| 5 | 分层记忆体系 | 短期记忆、用户画像、长期记忆三层架构 | 05-分层记忆体系 |
| 6 | 分阶段输出 | StageOutputProvider SPI,三阶段钩子 | 06-分阶段输出 |
| 7 | Human-in-the-Loop | 暂停/恢复机制,用户输入工具与操作审批 | 07-Human-in-the-Loop |
| 8 | Skills 技能体系 | 渐进式披露,按需加载技能 | 08-Skills技能体系 |
| 9 | 思考模型适配 | 支持 <think/> 标签和 reasoning_content 两种思考输出格式 |
09-思考模型适配 |
| 10 | 异常处理与重试 | 透明重试机制,统一异常处理 | 10-异常处理与重试 |
| 11 | 上下文压缩 | 两层自动压缩策略,控制 Token 消耗 | 11-上下文压缩 |
| 12 | ToolSearch 工具检索 | 工具按需发现,keyword + LLM 双模式搜索 | 12-ToolSearch工具检索 |
| 13 | 结构化输出 | 非流式调用输出标准 JSON,支持单对象和泛型集合 | 13-结构化输出 |
| 14 | 综合示例 | Skills + HITL + 分阶段输出完整示例 | 14-综合示例 |
| 15 | DeepSeek-V4 兼容 | reasoning_content 回传兼容性修复与使用指南 | 15-DeepSeek-V4兼容 |
| 16 | TodoWrite 任务追踪 | 结构化任务列表,多步骤任务进度可视化 | 16-TodoWrite任务追踪 |
项目提供了完整的示例代码,位于 spring-ai-agentx-samples 模块,可直接运行体验各功能。
示例需要真实 API Key 和数据库连接。首次运行前复制配置模板并填入真实值:
cd spring-ai-agentx-samples/src/main/resources
cp secrets.properties.example secrets.properties
# 编辑 secrets.properties,填入真实配置secrets.properties.example— 模板文件(仅占位符),提交到 Gitsecrets.properties— 真实配置,已在.gitignore中排除,不提交
| 示例类 | 涵盖功能 | 说明 |
|---|---|---|
RunnableParamsTest |
运行时参数注入 | addParam / addToolParam 参数覆盖 |
AgentSkillsTest |
Skills 技能体系 | 技能加载与多技能组合 |
TaskManagerTest |
任务管理与并发控制 | 会话级并发控制与中断 |
RetryErrorTest |
异常处理与重试 | 重试机制与错误码处理 |
HumanInTheLoopTest |
Human-in-the-Loop | 暂停/恢复、ask_user、操作审批 |
StageOutputTest |
分阶段输出 | StageOutputProvider、多时机钩子、Think 标签 |
ThinkingModeTest |
思考模型适配 | REASONING_CONTENT / THINK_TAG / DISABLED 三种模式 |
MemoryTest |
分层记忆体系 | 短期记忆、用户画像、长期记忆 |
ContextManagementTest |
上下文压缩 | 默认配置、自定义配置、保护工具 |
FullIntegrationTest |
完整集成 | 三层记忆 + Skills + 全量工具 |
ToolSearchTest |
ToolSearch 工具检索 | 同步/流式调用、Session 隔离验证 |
StructuredOutputTest |
结构化输出 | call/callForResult 单对象与集合输出 |
TodoWriteTest |
TodoWrite 任务追踪 | 流式/非流式 TodoProgress 事件,纯 TodoWrite 场景 |
各示例内部通过
testNumber切换测试场景,修改后直接运行main方法即可。
| 版本 | 状态 | 说明 |
|---|---|---|
| v1.0.0-M2 | 当前版本 | TodoWrite 任务追踪,结构化任务列表工具与流式进度事件 |
| v1.0.0-M1 | 历史版本 | 首个里程碑版本,ReAct 引擎 + 分层记忆 + 工具调度 + 思考模型适配 + DeepSeek-V4 兼容等核心能力 |
- ReAct Agent 引擎 — 基于 Reasoning + Acting 范式的多轮执行闭环
- 同步调用与流式输出 — call / stream 双模式,流式基于 Reactor Flux
- 统一工具调度 — 原生支持 Function Calling / MCP,框架统一接管执行
- 运行时参数注入 — RunnableParams 动态覆盖工具参数
- 任务管理与执行控制 — 会话级并发控制与中断机制
- 分层记忆体系 — 短期记忆、用户画像、长期记忆(RAG)
- Human-in-the-Loop — Agent 主动提问与操作审批,暂停/恢复执行
- 阶段式输出 — StageOutputProvider SPI,三种钩子时机
- 内置工具能力集 — Bash、文件系统、Grep、Python
- Skills 技能体系 — 渐进式披露,按需加载
- 思考模型适配 —
ThinkingMode枚举统一 THINK_TAG / REASONING_CONTENT / DISABLED 三种模式 - DeepSeek-V4 兼容 — 内置
DeepSeekV4ChatModel,解决思考模式 + 工具调用兼容性问题 - 异常处理与重试 — 内置透明重试机制,AgentException + AgentErrorCode
- 上下文压缩 — 两层自动压缩策略,控制 Token 消耗
- ToolSearch 工具检索 — 工具按需发现,keyword + LLM 双模式搜索
- 结构化输出 — 非流式调用输出标准 JSON,支持单对象和泛型集合
- TodoWrite 任务追踪 — 结构化任务列表工具,流式 TodoProgress 进度事件
- SubAgent 机制(Agent Tools) — 将 Agent 封装为另一个 Agent 的工具
- 后置任务校验机制 — 任务完成后引入模型校验或规则校验
- 执行沙箱 — 为工具调用与代码执行提供隔离运行环境
- Plan & Execute 架构 — 在 ReAct 基础上引入显式规划阶段
- Agent Teams — 多 Agent 按角色协同
- 可观测性体系 — 全链路追踪,支持接入 Langfuse 等观测系统
- 外部记忆系统对接 — 支持 mem0 等外部长期记忆系统
This project is licensed under the Apache License 2.0.
