AI实践|基于 Spring AI 从0到1构建 AI Agent
AI实践|基于 Spring AI 从0到1构建 AI Agent
来源类型: 微信公众号文章
日期: 2026-06-02
标签: AI, 记忆系统, 编程, 区块链, 芯片, 大模型
原文链接: https://mp.weixin.qq.com/s/SWVnXUpnf1eig_jBOpNsvw
摘要
阿里妹导读 文章内容基于作者个人技术实践与独立思考,旨在分享经验,仅代表个人观点。 前言 Linux说过一句很经典的话:Talk is cheap, show me the code. 最近在学习AI Agent开发的时候,填鸭式地被灌输了很多新知识,但是这些新知识就像是漂浮的“空中楼阁”,看得见但摸不着,只知道理论如此但是不知道具体实现为何物。计算机工程的事儿,往往真的听再多毫无体感,看一遍代码就基本一通百通,由此产生一个很神奇的想法:“最好的学习资料是代码,既然我要学AI Agent开发,那就让AI Agent本身帮我生成学习资料。”于是乎,便有了这篇文章,即我本文的项目代码几乎是...
核心内容
阿里妹导读
文章内容基于作者个人技术实践与独立思考,旨在分享经验,仅代表个人观点。
前言
Linux说过一句很经典的话:Talk is cheap, show me the code.
最近在学习AI Agent开发的时候,填鸭式地被灌输了很多新知识,但是这些新知识就像是漂浮的“空中楼阁”,看得见但摸不着,只知道理论如此但是不知道具体实现为何物。计算机工程的事儿,往往真的听再多毫无体感,看一遍代码就基本一通百通,由此产生一个很神奇的想法:“最好的学习资料是代码,既然我要学AI Agent开发,那就让AI Agent本身帮我生成学习资料。”于是乎,便有了这篇文章,即我本文的项目代码几乎是由AI生成,我在其中的角色只是指挥家与验收员。
开始之前先作一些声明:
1、该项目本身纯作为学习用途的Demo,只是用作展示“理论背后看得见的代码”。
2、Agent的理解较为宽泛,从整体概念层面是包含LLM的,一般Agent开发往往指的是Harness开发,但本文不做具体区分。
3、不深入每个概念的设计哲学,如Skill的渐进式披露,主要关注于实现层面。
4、Function Calling:LLM本身不会调工具,工具调用都是Harness做的;实际上Function Calling是大地基,很多复杂能力都是作为tool的形式包装给LLM的,例如Skill与SubAgent调用。
快速开始
本项目是一个基于Spring AI的AI Agent应用(纯Demo,仅学习用途),集成了 RAG 检索增强生成、Function Calling 工具调用、MCP 协议、SubAgent 子代理、Skill 技能系统等核心能力。本文将从六个核心模块出发,深入剖析其架构设计和实现细节。
代码仓库
github地址:https://github.com/q644266189/aiagentdemo
git clone git@github.com:q644266189/aiagentdemo.git
环境要求
-
Java 21+
-
Maven 3.9+
核心模块
模块
说明
AgentCore
核心编排器,具备意图识别、记忆管理与大模型调用等能力。
ChatMemory
对话记忆管理,支持三层上下文压缩(摘要压缩 → Assistant 裁剪 → 滑动窗口)。
Tool(Function Calling)
可插拔的工具注册机制,通过 InnerTool 统一接口注册,LLM 自主决策调用
RAG
完整的检索增强生成流水线:文档加载 → 文档分块 → 向量化 → 向量存储 → 多路召回(语义 + BM25 + 查询改写)→ RRF 融合 → Rerank 重排 → LLM → 内容生成
Command & Skill
两种 Markdown 驱动的 Prompt 模板机制:Command 由用户主动调用,Skill 本质作为Tool由 LLM 决策调用。
SubAgent
拥有独立记忆的子代理,支持内部 SubAgent 和外部 IdeaLab Agent 两种形态
MCP
双向 MCP 支持:作为 Client 动态连接外部 MCP 服务,作为 Server 对外暴露服务
配置
编辑 src/main/resources/application.properties,配置大模型 API
-
-
spring.ai.openai.base-url=https://open.bigmodel.cn/api/paas/v4spring.ai.openai.api-key=你的API密钥spring.ai.openai.chat.options.model=glm-4spring.ai.openai.embedding.options.model=embedding-3
访问
前端页面
启动成功后,打开浏览器访问:
-
http://localhost:8080
项目内置了一个完整的 Web 聊天界面(src/main/resources/static/index.html),支持: -
流式对话:实时逐字输出 AI 回复(SSE)
-
Markdown 渲染:自动渲染代码块、表格、列表等
-
命令面板:输入 / 唤起快捷命令列表
-
会话管理:支持清空对话历史
API 直接调用
-
-
-
- # 非流式对话curl -X POST http://localhost:8080/api/chat \ -H "Content-Type: application/json" \ -d '{"message": "你好,介绍一下你的能力", "sessionId": "test-001"}'# 流式对话(SSE)curl -X POST http://localhost:8080/api/chat/stream \ -H "Content-Type: application/json" \
一、核心编排器:AgentCore
AgentCore 是整个系统的"大脑",负责编排对话的完整流程:意图识别 → RAG 注入 → 记忆管理 → 模型调用 → 工具执行。
1.1 对话流程
-
-
-
-
-
-
-
-
- 用户输入 │ ▼意图识别(IntentRecognizer) │ 判断:这是知识问答还是通用对话? ▼RAG 注入(RagService) │ 如果是知识问答,检索知识库,将参考资料拼入上下文 ▼记忆管理(ChatMemory) │ 自动摘要压缩 → 构建消息列表 ▼模型调用(ChatClient + ToolCallbacks) │ LLM 决策:直接回答 or 调用工具? │ 如果调用工具 → 执行工具 → 将结果返回 LLM → 继续决策(ReAct 循环) ▼返回最终回复
核心代码(AgentCore.chat()):
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- public String chat(String sessionId, String userInput) { ChatMemory memory = getOrCreateMemory(sessionId); // 1. 意图识别 Intent intent = intentRecognizer.recognize(userInput); // 2. 如果是 RAG 意图,先检索知识库并注入上下文 if (intent == Intent.RAG && ragService.isKnowledgeLoaded()) { String ragContext = ragServi
...(内容截断,完整内容请查看原文)
本页由自动化脚本生成,待人工审核补充