15-06 AgentScope Java特性:Hook
✅AgentScope Java特性:Hook
就像Spring AI Alibaba一样,ASJ中也提供了完善的Hook机制,Hook 是一个事件拦截器链,横跨 ReActAgent 的”推理-行动-总结”全生命周期。他可以说是ASJ的一个基石。很多功能都要基于这个Hook机制来实现。
Hook 机制就是一套统一事件模型,允许开发者在 Agent 执行的各个阶段插入自定义逻辑,用于监控、拦截和修改 Agent 行为。所有 Hook 通过实现 Hook 接口来接入系统。
Hook 系统自 2.0.0 起已被标记为 @Deprecated(forRemoval = true),官方推荐迁移到 MiddlewareBase 中间件系统。但由于大量现有代码和扩展仍依赖 Hook,理解其工作原理仍然非常必要。
Hook机制介绍Hook的接口定义如下:
12345public interface Hook { <T extends HookEvent> Mono<T> onEvent(T event); default ...
15-05 AgentScope Java特性:智能上下文压缩
✅AgentScope Java特性:智能上下文压缩
ASJ中在多轮对话、持久化对话以及长期记忆之外,还提供了个内置的上下文自动管理的机制,能实现自动的上下文压缩和卸载。用来解决长会话或者多轮 ReAct 工具调用中出现的token 爆炸、上下文窗口溢出问题。
这部分能力靠AutoContextMemory实现的,它实现了 Memory 接口,通过六级渐进式压缩策略,在对话长度逼近模型上下文窗口时自动”瘦身”,同时把原始内容卸载到外部存储(可通过 ID 重新加载)。
传统做法只能”截断”或”全量摘要”,AutoContextMemory 则按场景智能选择”压什么”和”怎么压”。
压缩触发条件:
1// 消息数量超过 msgThreshold,默认 100 条boolean msgCountReached = messages.size() >= msgThreshold; // Token 数量超过 模型最大上下文 × tokenRatio ,默认 128k * 0.75 = 96kboolean tokenCountReached = toke ...
15-04 AgentScope Java特性:长期记忆
✅AgentScope Java特性:长期记忆
(虽然在ASJ的2.0的relesse note中提到:RAG (Knowledge / KnowledgeRetrievalTools / RAGMode) and long-term memory modules deprecated — being rewritten on the v2 architecture; don’t depend on them in new code`,但是截止目前,2.0还没正式发布,也没给出替代方案,我们先讲1.0的方案和用法,后续新版本更新了我能再单独讲方案和用法)
✅什么是长期记忆前面我们讲过,Agent的记忆能力必不可少。Agent 的“记忆”是指其在与环境或用户交互过程中,用于存储、检索和利用信息的机制。这些信息可以包括: 没有记忆的 Agent 只能处理孤立的请求,无法实现上下文感知、个性化服务或持续改进。
LLMentor
前面讲过了长期记忆,也介绍过如何在spring ai alibaba中接入mem0做长期记忆,agent scope也是支持长期记忆 ...
15-03 AgentScope Java特性:多轮会话&会话持久化
✅AgentScope Java特性:多轮会话&会话持久化
AgentScope Java 的多轮会话由两个核心机制协作完成:Memory(短期会话记忆)负责维护当前对话上下文,Session(会话持久化)负责将状态保存/恢复到外部存储。两者结合实现了”跨请求的连续对话”和”跨重启的会话恢复”。
多轮会话的核心:Memory
AgentScope Java 中的 Memory 接口扮演”短期记忆”角色。每次用户发送消息调用 agent.call(msg) 时,框架自动完成以下流程:
将用户消息加入 Memory(addToMemory(msgs))
构造完整消息列表传给 LLM(System Prompt + 历史消息 + 当前输入)
将 LLM 的回复也加入 Memory
如果触发工具调用,工具结果同样加入 Memory
循环直到 LLM 决定结束(无工具调用或达到 maxIters)
因此只要 Agent 实例不被销毁,多轮对话天然支持——Memory 中持续积累所有历史消息。
12public interface Memory exte ...
15-02 AgentScope Java特性:流式输出、结构化输出、超时与重试、执行控制
✅AgentScope Java特性:流式输出、结构化输出、超时与重试、执行控制
流式输出
AgentScope Java 的流式输出基于 Reactor 的 Flux 实现。Agent 提供 stream() 方法,返回一个事件流,每个事件包含推理过程的增量输出、工具调用结果等。
关键类:
Agent.stream(Msg, StreamOptions) — 流式调用入口,返回 Flux
StreamOptions — 流式配置项(事件类型过滤、增量/累积模式等)
Event — 流式事件对象,包含类型、消息内容、是否为最后一条
EventType — 事件类型枚举:ALL、REASONING、TOOL_RESULT、SUMMARY、AGENT_RESULT、HINT
REASONING:Agent 的”思考和规划”阶段产生的事件。对应 ReAct 循环中的 Reasoning 步骤,即模型在决定下一步行动之前的推理输出。(包括TOOL_USE的内容)
TOOL_RESULT:Agent 调用工具(Acting 阶段)执行完成后产生的事件,包含工具的返回 ...
15-01 AgentScope初探
✅AgentScope初探
AgentScope 是由阿里巴巴团队开源的一个以开发者为中心、高度灵活的多智能体(Multi-Agent)应用开发框架。它的核心目标是帮助开发者更轻松地构建基于大语言模型(LLM)的分布式、高容错、多智能体应用。
AgentScope Java 是一个面向智能体的编程框架,用于构建 LLM 驱动的应用程序。它提供了创建智能体所需的一切:ReAct 推理、工具调用、内存管理、多智能体协作等。
项目地址:https://github.com/agentscope-ai/agentscope-java
和Spring AI Alibaba的关系
我们前面介绍过Spring AI Alibaba,它是基于Spring AI的扩展,在Spring AI之上,构建了Graph和Agent能力。提供了ReactAgent的实现。以 ReactAgent + StateGraph 为核心,提供 ReAct 推理循环、多智能体编排、Checkpoint 持久化、人机协同等生产级能力。
有了Spring ai alibaba 可以大大降低JAVA ...
14-13 Hermes Agent的Skill自进化机制
✅Hermes Agent的Skill自进化机制
这几天(4月初级到四月中旬),Nous Research开源的Hermes Agent突然火起来了,github的star数在疯涨,热度高到有超越open claw的势头了。
为什么他这么火呢?主要是因为他解决了open claw中的这样一个痛点:
在使用 OpenClaw 完成一个任务后,无论过程中走了多少弯路、犯了多少错误,这些宝贵的经验都不会沉淀下来,都是用后即焚的。即使下次再遇到相同的任务,他还会从头再来一遍,把踩过的坑再踩一遍。即使你让它记录Memory,他也只是会记录一些简要的重点事项和用户习惯,并不会记录太多执行细节。
Hermes则引入了一种Skill自进化机制,来解决这个问题。
说的简单点,就是引入了一种动态的Skill沉淀的能力。在Hermes Agent中,每次完成复杂任务后,Hermes不会简单地丢弃对话历史,而是会启动一个“复盘”流程。它会回过头来审视整个执行轨迹,提取其中的关键步骤,特别是那些“踩过的坑”、有效的纠错手段以及人工验证过的最佳实践。
随后,系统将这套经验总结、抽象为一个结构 ...
14-12 Agent Skills的安全问题
✅Agent Skills的安全问题
大家应该已经比较了解Skills了,他就想 AI Agent的”可插拔能力包”。一个 Skill告诉Agent如何完成某类特定任务,例如生成 PDF 文档、操作Excel、简历评估等。
有哪些安全问题?Skills 的价值在于它实现了能力的模块化和可复用——开发者可以编写 Skill 并共享给社区,用户则可以按需安装,像给手机装 App 一样扩展 AI 的本领。
但也正是这种开放性和灵活性,让安全问题变得格外复杂。
代码执行与权限边界模糊。 Agent Skills 最根本的安全挑战在于,它们往往需要执行真实的代码、访问真实的文件系统,甚至调用外部 API。当一个 Skill 被授权在用户本地环境中运行 Shell 命令或读写文件时,恶意或有缺陷的 Skill 可能造成严重后果:删除关键文件、窃取敏感信息、安装后门程序,不一而足。问题的关键在于,许多系统对 Skill 的权限边界定义不够清晰——一个用于”生成报告”的 Skill,到底该不该有权限读取用户的私钥文件?
供应链攻击。 当 Skills 以社区生态的方式分发时,供应链攻 ...
14-11 Claude Code中的Skills实现原理
✅Claude Code中的Skills实现原理
claude-code-m
ain.zip(9.4 MB)
- 0%
Claude Code的源码泄露了,我下载了一份,放到上面的链接了。
省流版
相比于OpenCode,CC的实现有几个特点(或者叫优势也行)
1、没有单独定义一个Skill的数据模型,而是复用了Command类型,把所有用**/** 触发的都叫做Command
2、支持多种Skill的集成方式,包括了内置的,以及插件类型的Skill,以及常见的包路径扫描方式。并且是多路并行同时加载的。
3、Skill的描述声明过程中,会看token的情况,如果”预算”不足,会精简skill的描述(截断或者干脆不提供)
4、Skill支持多种执行方式,包括inline、fork和remote,尤其是fork这种,可以让skill只在隔离的子agent中运行。
以上,3、4两个点,都是上下文管理的手段,可见,CC真的是在上下文工程上做的很极致。
一、数据模型
在CC中,Skill 在代码中并没有一个独立的 Skill 类型,而是复用了 Command(命令) ...
14-10 Spring AI中Skill集成的实现原理
✅Spring AI中Skill集成的实现原理
在Spring AI Alibaba 中,Skill的实现设计灵感来源于 Claude Code 的 Skill 机制。一样的,这里面的每个 Skill 本质上就是一个目录,里面包含一个 SKILL.md 文件,这个文件用 YAML frontmatter 定义元数据(name、description),正文则是详细的使用说明、工作流、最佳实践等内容。Skill 目录下还可以放辅助脚本、参考文档等支撑资源。
(本文代码基于saa 1.1.2.0)
SkillMetadata
数据模型是 SkillMetadata,包含 name(技能名)、description(描述)、skillPath(技能目录路径)、source(来源,区分 “user” 还是 “project”)、fullContent(SKILL.md 去掉 frontmatter 后的正文)。
Skill 的发现与注册Skill 的注册中心抽象为 SkillRegistry 接口,核心方法包括 get(name)、listAll()、readSkil ...
