拓展yupi-ai-agent
半年后回看鱼皮哥的 Spring AI 教程,我把 AI Agent 翻新了一遍
距离鱼皮哥的教程,已经过去半年多了。
这段时间里,我一边跟写 yupi-ai-agent项目,一边也越来越明显地感受到一个问题:
AI 相关生态更新得太快了,Spring AI 的变化尤其明显。很多当时能跑通的 API、示例和用法,现在已经陆续过期,新的能力也在持续补进来。
其实不只是 Spring AI 在变,整个 AI Agent 方向的发展速度也远超预期。
Spring AI 官方新增和强化的能力就很有代表性:
- Part 1: Agent Skills
- Part 2: AskUserQuestionTool
- Part 3: TodoWriteTool
- Part 4: Subagent Orchestration
- Part 5: A2A Integration
再加上最近很火的 openclaw 🦞,其实也完全可以被整合进我们自己的 AI Agent 项目里。
所以我结合这半年 Agent 和 AI 方向的新变化,自己重新补了一套更贴近当下的能力结构。
我在项目里新增了什么?
目前我主要补了下面这些能力:
-
Agent Skills
把能力模块化,便于复用和组合。 -
追问系统
当用户问题不完整时,Agent 可以继续追问,拿到更充分的上下文。 -
AI 生成的任务清单系统
让 Agent 不只是“回答问题”,而是能先拆任务、再执行任务。 -
调用 openclaw 深度研究系统
也可以理解成一种 A2A 思路,只不过我这里没有直接使用官方定义的工具协议,而是走命令行方式集成。 -
Manus 状态保存系统
用来辅助追问系统和任务清单系统,让 AI 能记住当前状态,而不是每轮都“失忆”。 -
各种小工具和 MCP 接入
让整个 Agent 的可扩展性更强,能逐步接入更多外部能力。
仓库和过程记录
如果你也对这类方向感兴趣,可以看看我的仓库:
- 项目地址:https://github.com/keweizhuazuki/kewei-ai-agent
- 过程记录:https://github.com/keweizhuazuki/kewei-ai-agent/blob/main/PROCEDURES.md
其中第二个链接里,我把整个实现过程、踩坑记录,以及当时的一些解决思路都尽量完整地记下来了。
如果你最近也在折腾 Spring AI、AI Agent、工具调用、状态管理并且觉得有参考价值,不妨给个⭐️。
最后再说一嘴,Spring AI Agent 需要 springBoot 的版本至少为 4 且 Spring AI 的版本不低于 2.0.0-M2。
下面也把我application-local的配置也贴上,如果想要复线的小伙伴也可以自行调试。
▼yml复制代码search-api: api-key: "${SEARCH_API_KEY}" spring: data: redis: host: "${REDIS_HOST:127.0.0.1}" port: "${REDIS_PORT:6379}" datasource: url: "${POSTGRES_URL}" username: "${POSTGRES_USERNAME}" password: "${POSTGRES_PASSWORD}" driver-class-name: org.postgresql.Driver sql: init: mode: never ai: dashscope: api-key: "${DASHSCOPE_API_KEY}" chat: options: model: "qwen-plus" mybatis-plus: configuration: map-underscore-to-camel-case: true global-config: banner: false app: chat-memory: # 可选值: file / mysql / redis type: mysql file-dir: "${CHAT_MEMORY_DIR:${user.dir}/tmp/chat-memory}" redis: key-prefix: "chat:memory:" datasource: mysql: url: "${MYSQL_URL}" username: "${MYSQL_USERNAME}" password: "${MYSQL_PASSWORD}" driver-class-name: com.mysql.cj.jdbc.Driver mail: smtp: host: "${MAIL_HOST}" port: "${MAIL_PORT:465}" username: "${MAIL_USERNAME}" password: "${MAIL_PASSWORD}" from: "${MAIL_FROM}" ssl: true openclaw: agent: command: "${OPENCLAW_COMMAND}" id: "main" timeout-seconds: 120 session-prefix: "spring-ai-research"
