Spring AI 智能体 6 : 基于 A2A 协议构建交互智能体

Agent2Agent(A2A)协议 是一种用于实现 AI 智能体无缝通信的开放标准。它让不同平台的智能体能够彼此发现能力、交换消息、协同工作流,而不受其底层实现方式的限制。

Spring AI A2A 通过 Spring Boot 自动配置,将 A2A Java SDK 与 Spring AI 深度集成。它能把 A2A 协议与 Spring AI 的 ChatClient 和工具体系无缝连接,让你可以…

Spring AI 智能体 5 : 子智能体编排

一个能够包办所有任务的大而全的通用智能体并不讨好,不如将任务委派给专业化的子智能体。这能让上下文窗口保持聚焦,避免因信息杂乱而降低执行效果。

Task 工具(任务工具)是 spring-ai-agent-utils 工具集的一部分,是一个可移植、与模型无关的 Spring AI 实现,其设计灵感来自 Claude Code 的子智能体(subagents)。它支持构建分层式…

Spring AI 智能体 4 : 使用 TodoWriteTool

你是否遇到过这样的情况:让 AI 智能体执行一项复杂的多步骤任务,结果它中途跳过了某个关键步骤。

研究表明,大语言模型普遍存在 “中间丢失” 问题 —— 在长上下文里会忘记埋在中间的任务。当你的智能体同时处理文件修改、测试执行、文档更新等工作时,重要步骤可能会无声无息地消失。受 Claude Code 启发,一种解决方案是:借助专用的 TodoWrite 工具,让规划变得显式且…

Spring AI 智能体 3 : 关于AskUserQuestionTool

传统的 AI 交互遵循一种常见模式:你给出提示词,AI 自行做出各种假设,然后生成回复。当这些假设与你的实际需求不符时,你就需要反复进行修正。每一个假设都会带来额外的返工,浪费时间与上下文。

如果 AI 智能体能够在给出答案之前先向你提出澄清问题,会怎么样?

AskUserQuestionTool 正是为此而生。它让 AI 智能体在回答之前先提出澄清问题,以交互式方式收集需求,…

Spring AI 的 MCP BootStarter 入门

MCP(模型上下文协议:Model Context Protocol)为 AI 应用与外部工具、资源的交互提供了标准化方式。Spring 早期就作为核心贡献者加入 MCP 生态,参与开发并维护官方 MCP Java SDK,为基于 Java 的 MCP 实现奠定基础。在此贡献之上,Spring AI 通过专属的 Boot Starter 与 MCP Java 注解全面支持 MCP,让构建可无缝对接外部系…

Spring AI 智能体 2 : Anthropic 智能体 Skill

Spring AI 新增了对 Anthropic 智能体 Skill 的支持 — 这类模块化能力可让 Claude 直接生成实际文件,而非单纯的文本描述。启用该 Skill 后,Claude 能生成可直接下载使用的 Excel 电子表格、PowerPoint 演示文稿、Word 文档和 PDF 文件。

局限性说明

Anthropic Skill 的实现方案仅适用于其自研的 Claude 系列模型,存在以下局…

基于生成式注解为类添加toString方法

在组内讨论时,有同事提建议在把对象写到日志中时最好直接输出对象不要做任何加工,也就是尽量调用对象自己的toString()方法,不要用JsonKit.toJson(obj)这样先把对象转为json字符串再输出的写法。

这个建议不是没有道理的,jackson和fastjson这些json工具将对象序列化为字符串时会有一个自动检查推测的过程,在这个过程中做了如下事…

使用Spring AOP实现注解式的分布式锁

这里简单说一个springboot生态下基于redis实现的分布式锁方案。预期实现的效果是在要加锁的方法上添加一个注解,然后就能根据请求参数得到并加上锁,方法执行完后,也会自动释放锁。这样在实现方法时,开发者就可以只关注业务逻辑,不用考虑加锁解锁相关的事情。务求整个过程的丝滑程度类似Spring的 @Transactional 注解。

这个分布式锁暂时基于red…

MapStruct属性多转一实现

在项目里遇到了需要使用mapstruct将source对象的多个属性转为target对象的一个属性的场景。针对这个问题研究了一段时间,发现想要解决得好一些还是挺让人头疼的。

先说结论吧:MapStruct支持将多个对象转为一个对象,但是不支持将多个属性转为一个属性。对,mapstruct是不支持这么做的。

最终的解决方案也非常简单:在使用mapstruct完成对…