Hello AgentScope Java

作者:远云

随着 LLM 应用的飞速发展,越来越多的 Agent 应用开始走近每个人。围绕着 Agent 应用的核心,目前业界有零代码、低代码和高代码三条主流的技术路线。AgentScope 作为 Python 社区中受到广泛应用的高代码框架,在 Java 生态下的需求也越来越大。

今天,我们很高兴地宣布AgentScope Java v0.2 版本正式发布了,具备了所有核心的 ReActAgent 的能力。

第一性原则:透明度

AgentScope 的首要设计目标是对开发者透明

当下,许多 Agent 框架将底层的调度进行了深度的封装,这固然会给用户带来一些概念上的简化,但是也带来了遇到问题时排查的复杂度。AgentScope 不同:

  • Prompt Engineering:用户可以自己修改所有提示词相关的内容。
  • API 调用:每一次 API 调用都能够被定位。
  • Agent 构建:所有 Agent 的配置都来自用户确定性的配置。
  • 决策过程:Agent 的推理、执行过程都可以通过 Hook 对外暴露。

三分钟构建一个智能体

以下是一个简单的智能体示例:

Maven 依赖

<dependency> <groupId>io.agentscope</groupId> <artifactId>agentscope-core</artifactId> <version>0.2.1</version> </dependency>

ReActAgent

public class HelloAgentScope { public static void main(String[] args) { // 创建 ReActAgent ReActAgent agent = ReActAgent.builder() .name("Assistant") .model(DashScopeChatModel.builder() .apiKey(System.getenv("DASHSCOPE_API_KEY")) .modelName("qwen3-max") .build()) .build(); // 调用智能体 Msg response = agent.call( Msg.builder() .role(MsgRole.USER) .content(TextBlock.builder() .text("你好,请介绍一下自己") .build()) .build() ).block(); System.out.println(response.getTextContent()); } }

至此,一个 Agent 就构建完成了。在这个示例中,ReActAgent是 AgentScope 的核心,我们后面几乎所有的功能都是基于它的。

架构概览

和 Python 版本类似,AgentScope Java 采用分层架构:

基础组件层(Foundational Components)

Message:统一的消息抽象对象,通过一套数据结构支持文本、图像、音频、视频。

Model API:支持 DashScope、OpenAI 等主流模型提供商。通过 Formatter 机制屏蔽不同模型提供商的格式差异。

Tool:允许用户定义工具给 LLM 使用,支持同步/异步、流式/非流式等 API 风格。

智能体基础设施层(Agent-level Infrastructure)

ReAct 范式:核心 Agentic 实现,通过推理(Reasoning)再行动(Acting)的迭代循环。

Agent Hooks:运行于 ReActAgent 内部,允许用户对 Agent 执行的过程进行监测、修改。

状态管理:会话持久化组件,支持用户对话状态的保存和恢复。

多智能体协作层(Multi-Agent Cooperation)

MsgHub:支持多个 Agent 之间共享消息,实现多 Agent 沟通协作的工具。

Pipeline:组合多个 Agent 按照特定(顺序、并行等)策略执行的工具。

部署层(Deployment)

AgentScope Runtime:解决分布式部署与安全隔离问题的企业级运行时基础设施,提供工具运行沙箱、A2A 协议、远程部署等能力。

AgentScope Studio:提供开发阶段到运行阶段的可视化调试、观测能力,为开发者从 0 到 1 的开发提速。

Reasoning and Acting

ReAct(Reasoning and Acting)是 AgentScope 最核心的实现范式。其设计思路很简单:将思考和执行分离,通过迭代循环解决问题。

工作原理

Reasoning(推理)阶段:Agent 会基于当前的上下文分析,决定下一步行动:

  • 理解用户意图
  • 评估已有信息(上下文)
  • 确定需要调用的工具及参数

Acting(行动)阶段:执行 Reasoning 阶段所需的获取数据行为。

  • 并行执行工具调用
  • 收集执行结果
  • 将结果计入记忆

迭代控制:ReActAgent 会不断执行 Reasoning 和 Acting 的迭代,如果模型在最大迭代轮内完成迭代则会正常结束,如果未完成则会触发 summary 的能力,进行会话总结。

为 ReActAgent 添加工具

为了让 ReActAgent 真正可以实现 Acting,需要为 ReActAgent 添加对应的工具。

这里以一个 Weather Assistant 为例子:

// 定义工具类 public class WeatherTools { @Tool(description = "获取指定城市的天气信息") public String getWeather( @ToolParam(name = "city", description = "城市名称") String city) { // 实际应用中调用天气 API return String.format("%s:晴天,气温 25 ℃", city); } } // 注册工具 Toolkit toolkit = new Toolkit(); toolkit.registerTool(new WeatherTools()); // 构建带工具的 ReActAgent ReActAgent agent = ReActAgent.builder() .name("WeatherAssistant") .sysPrompt("你是一个天气助手,可以查询城市天气信息。") .model(DashScopeChatModel.builder() .apiKey(System.getenv("DASHSCOPE_API_KEY")) .modelName("qwen3-max") .build()) .toolkit(toolkit) .build(); // 调用智能体 Msg response = agent.call( Msg.builder() .role(MsgRole.USER) .content(TextBlock.builder() .text("北京今天天气如何?") .build()) .build() ).block();

执行流程:

用户问题:北京今天天气如何? ↓ [推理] 需要查天气,决定调用 getWeather("北京") ↓ [行动] 执行工具 → "北京:晴天,气温 25℃" ↓ [推理] 已获取信息,生成回答 ↓ 回答:根据查询结果,北京今天晴天,气温 25℃

ReActAgent 核心特性

除了基础的 Reasoning 和 Acting 能力,AgentScope 的 ReActAgent 还具备多个特性。

1. 多模态消息支持

ReActAgent 可以处理多模态输入,不限于纯文本:

// 创建支持视觉的 ReActAgent(使用视觉模型) ReActAgent visionAgent = ReActAgent.builder() .name("VisionAssistant") .model(DashScopeChatModel.builder() .apiKey(System.getenv("DASHSCOPE_API_KEY")) .modelName("qwen3-vl-plus") // 视觉模型 .build()) .build(); // 发送包含图片的消息 Msg response = visionAgent.call( Msg.builder() .role(MsgRole.USER) .content(List.of( TextBlock.builder().text("请分析这张图片的内容").build(), ImageBlock.builder().source(URLSource.builder().url("https://example.com/image.jpg").build()).build() )) .build() ).block();

支持的多模态内容类型:TextBlock、ImageBlock、AudioBlock、VideoBlock。

2. 钩子机制

为 ReActAgent 添加钩子,监控和扩展其行为。这里以前文中用到的 WeatherAssistant 为例子添加钩子,实时看到智能体的思考和执行过程:

// 定义调试钩子,显示完整的 ReAct 执行过程 Hook debugHook = new Hook() { @Override public <T extends HookEvent> Mono<T> onEvent(T event) { try { switch (event) { case PreReasoningEvent e -> { System.out.println("\n[推理] 智能体开始思考..."); } case PostReasoningEvent e -> { System.out.println("[推理] 推理结果:" + new ObjectMapper().writeValueAsString(e.getReasoningMessage())); } case PostActingEvent e -> { System.out.println("[行动] 执行工具 → " + new ObjectMapper().writeValueAsString(e.getToolResult())); } case PostCallEvent e -> { System.out.println("[推理] 已获取信息,生成回答"); System.out.println("回答:" + e.getFinalMessage().getTextContent()); } default -> {} } ; } catch (JsonProcessingException e) { ... } return Mono.just(event); } }; // 将钩子添加到 WeatherAssistant ReActAgent weatherAgent = ReActAgent.builder() .name("WeatherAssistant") .sysPrompt("你是一个天气助手,可以查询城市天气信息。") .model(DashScopeChatModel.builder() .apiKey(System.getenv("DASHSCOPE_API_KEY")) .modelName("qwen3-max") .build()) .toolkit(toolkit) // 前文中定义的 Toolkit .hook(debugHook) // 添加调试钩子 .build(); // 查询天气 Msg response = weatherAgent.call( Msg.builder() .role(MsgRole.USER) .content(TextBlock.builder() .text("北京今天天气如何?") .build()) .build() ).block(); // 输出示例: // [推理] 智能体开始思考... // [推理] 推理结果:{"id":"xxx","name":"WeatherAssistant","role":"ASSISTANT","content":[{"type":"tool_use","id":"call_xxx","name":"getWeather","input":{"city":"北京"},"content":null}],"metadata":null,"timestamp":"xxx"} // [行动] 执行工具 → {"type":"tool_result","id":"call_xxx","name":"getWeather","output":[{"type":"text","text":"\"北京:晴天,气温 25 ℃\""}],"metadata":{}} // [推理] 智能体开始思考... // [推理] 推理结果:{"id":"xxx","name":"WeatherAssistant","role":"ASSISTANT","content":[{"type":"text","text":"北京今天天气晴朗,气温为25℃。建议外出时注意防晒,祝您拥有愉快的一天!"}],"metadata":null,"timestamp":"xxx"} // [推理] 已获取信息,生成回答 // 回答:北京今天天气晴朗,气温为25℃。建议外出时注意防晒,祝您拥有愉快的一天!

3. 会话持久化

保存和恢复 ReActAgent 的状态:

// 创建 ReActAgent ReActAgent agent = ReActAgent.builder() .name("PersistentAgent") .model(DashScopeChatModel.builder() .apiKey(System.getenv("DASHSCOPE_API_KEY")) .modelName("qwen3-max") .build()) .memory(new InMemoryMemory()) .build(); // 保存会话 SessionManager.forSessionId("session-001") .withJsonSession(Path.of("./sessions")) .addComponent(agent) .saveSession(); // 下次启动时恢复 SessionManager.forSessionId("session-001") .withJsonSession(Path.of("./sessions")) .addComponent(agent) .loadIfExists(); // agent 现在恢复到了之前的状态,可以继续对话

4. 结构化输出

让 ReActAgent 返回类型安全的结构化数据:

// 定义输出结构 public class WeatherReport { public String city; public int temperature; public String condition; public List<String> suggestions; } // ReActAgent 调用时指定输出类型 Msg response = agent.call( Msg.builder() .role(MsgRole.USER) .content(TextBlock.builder() .text("分析北京的天气并给出建议") .build()) .build(), WeatherReport.class // 指定结构化输出类型 ).block(); // 提取结构化数据 WeatherReport report = response.getStructuredData(WeatherReport.class); System.out.println("城市: " + report.city); System.out.println("温度: " + report.temperature);

避免了文本解析的不确定性,编译期就能发现类型错误。

5. 多智能体协作

多个 ReActAgent 可以通过 Pipeline 协作:

// 创建模型配置 DashScopeChatModel model = DashScopeChatModel.builder() .apiKey(System.getenv("DASHSCOPE_API_KEY")) .modelName("qwen3-max") .build(); // 创建多个 ReActAgent ReActAgent dataCollector = ReActAgent.builder() .name("DataCollector") .model(model) .build(); ReActAgent dataAnalyzer = ReActAgent.builder() .name("DataAnalyzer") .model(model) .build(); ReActAgent reportGenerator = ReActAgent.builder() .name("ReportGenerator") .model(model) .build(); // 顺序执行:智能体依次处理 Msg result = Pipelines.sequential( List.of(dataCollector, dataAnalyzer, reportGenerator), inputMsg ).block(); // 并行执行:多个智能体同时处理 List<Msg> results = Pipelines.fanout( List.of(dataCollector, dataAnalyzer, reportGenerator), inputMsg ).block();

Roadmap

AgentScope Java 自 2025 年 9 月开源以来,当前 v0.2 版本已具备 ReActAgent 核心能力。

我们计划于 11 月底发布 v1.0 版本,届时将新增 RAG、Plan、Tracing、Evaluation 及 Studio 等全套功能,标志着框架正式生产可用;Runtime v1.0 也将同步上线,提供涵盖安全沙箱、A2A Agent 在内的企业级落地方案。随后在 12 月,我们将进一步推出基于 ReMe 的上下文管理与基于 Trinity-RFT 的强化学习最佳实践。

在技术演进层面,我们正持续探索更高效、智能的上下文工程与多 Agent 协同范式,致力于支撑更强大的 AI 应用构建。此外,针对 Agent 流量呈现的“二八定律”特征(头部 20% 的 Agent 承载了 80% 的流量),我们在架构上全力推进 Serverless 化,通过实现毫秒级冷启动与混合部署,帮助开发者在应对高并发的同时,显著降低部署成本并提升效率。

未完待续

本文作为 AgentScope Java 系列推文的首篇,受篇幅限制只能抛砖引玉,在接下来还会有更多的干货:

  1. AgentScope Runtime:帮助开发者实现 Agent 应用从 1 到 100,提供工具运行沙箱、A2A 协议、远程部署等强大能力。
  2. Agent 开发范式讨论:Workflow or Agentic?AgentScope 基于狼人杀游戏的 Agent 实践分享。
  3. Meta Tool:面对日益膨胀的 Tool Definition,AgentScope 的解决方案。
  4. Plan:使 Agent 能够自主拆解复杂任务并系统性地执行。

如果你觉得 AgentScope Java 不错,欢迎给我们的项目 Star~
https://github.com/agentscope-ai/agentscope-java

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1191199.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(模型量化学习)基础准备

1.FLOPS&#xff08;大写&#xff09;和TOPSFLOPS指的是一秒钟可以处理的浮动小数点运算次数,而TOPS是一秒钟可以处理了的整形运算次数的能力&#xff0c;衡量计算机硬件性能&#xff0c;计算能力的一个单位。注意FLOPS与FLOPs不同&#xff0c;FLOPs是衡量模型大小的一个指标。…

Nature重磅!打破AI安全边界:微调代码为何会引发全面失准?

研究团队在OpenAI和阿里巴巴云模型上的实验揭示了一个令人不安的现象&#xff1a;如果你教一个大语言模型去写包含安全漏洞的代码&#xff0c;它学到的绝不仅仅是写代码。一项刚刚发表在《自然》杂志上的重磅新研究&#xff0c;发现了大模型安全的新幽灵&#xff1a;微小的恶意…

智谱新模型也用DeepSeek的MLA,苹果M5就能跑

这是一个30B总参数、仅3B激活参数的混合专家&#xff08;MoE&#xff09;架构模型&#xff0c;官方给它的定位是“本地编程与智能体助手”。 智谱AI上市后&#xff0c;再发新成果。 开源轻量级大语言模型GLM-4.7-Flash&#xff0c;直接替代前代GLM-4.5-Flash&#xff0c;API免…

【Da】达芬奇基础设置

--本篇导航--工程项目基础设置偏好设置代理优化面板写在前面:达芬奇用的是官方的免费版Davinvi Resolve 20,很多Studio版的功能就没涉及到了。 基本剪辑、调色的部分,此笔记中都涉及到了。 学达芬奇仅仅是想做长视频…

XML外部实体注入(XXE)漏洞深度剖析与防御实践

【精选优质专栏推荐】 《AI 技术前沿》 —— 紧跟 AI 最新趋势与应用《网络安全新手快速入门(附漏洞挖掘案例)》 —— 零基础安全入门必看《BurpSuite 入门教程(附实战图文)》 —— 渗透测试必备工具详解《网安渗透工具使用教程(全)》 —— 一站式工具手册《CTF 新手入门实战教…

快讯|萝博派对(RoboParty)Roboto_Origin项目全栈上线:1.2m人形机器人硬件结构、BOM清单、3m/s运动控制算法完全开源;灵心巧手与Xbotics推出线上实习项目,打造人才生态

&#x1f43e; 具身智能 / AI 赛道&#xff0c;过去24小时的行业焦点&#xff0c;像北京的冬日阳光一样&#xff0c;一半洒在突破想象力的AI疆界&#xff0c;另一半则直射向机器人领域那些试图“掀翻桌子”的年轻身影。当GPT-5.2 Pro在数学的圣殿里留下足迹时&#xff0c;一群0…

阿里云ECS部署hadoop+MapReduce+Spark实践

阿里云ECS部署hadoop+MapReduce+Spark实践host说明 Namenode:主机结点 Datanode1:数据节点1 Datanode2:数据节点2 私网ip(在阿里云查看) 172.xx.xxx.xx Namenode 172.xx.xx.xx Datanode1 172.xx.xxx.xxx D…

GBase 8s MTK工具,让数据库迁移更简单

在企业数字化转型和国产化替代的浪潮中&#xff0c;数据迁移往往是让IT团队最头疼的环节之一&#xff1a;源端系统五花八门&#xff0c;迁移过程怕丢数据、怕出错&#xff0c;操作复杂门槛高……而与GBase 8s数据库配套的GBase Migration Toolkit&#xff08;简称 MTK&#xff…

谷歌新发现:DeepSeek推理分裂出多重人格,左右脑互搏越来越聪明

谷歌最新研究表明&#xff0c;DeepSeek-R1这类顶尖推理模型在解题时&#xff0c;内部会自发“分裂”出不同性格的虚拟人格&#xff0c;比如外向的、严谨的、多疑的……AI变聪明的真相居然是正在“脑内群聊”&#xff1f;&#xff01;谷歌最新研究表明&#xff0c;DeepSeek-R1这…

【课程设计/毕业设计】机器学习基于python-cnn深度学习识别水果是否成熟

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

GBase 8c数据库故障定位解析

南大通用GBase 8c数据库定位数据库故障&#xff0c;可从以下方面进行排查分析&#xff1a;日志&#xff1a;数据库日志记录了数据库服务端启动、运行或停止时出现的问题&#xff0c;当数据库在启动、运行或停止的过程中出现问题时&#xff0c;数据库用户可以通过运行日志快速分…

无需PLC控制,威纶通触摸屏直接实现与台达变频器通信控制

一、PLC通信简介 威纶通(Weinview)触摸屏作为工业人机交互核心,与台达(Delta)变频器的通信是自动化控制系统中常见的应用场景。通过两者的稳定通信,可实现变频器运行状态监控、参数设置、启停控制等功能,简化操…

巴菲特的市场周期理解

巴菲特的市场周期理解 关键词:巴菲特、市场周期、价值投资、市场波动、长期投资、风险评估、投资策略 摘要:本文深入探讨了巴菲特对市场周期的理解。从背景介绍入手,阐述研究目的、预期读者、文档结构及相关术语。接着剖析核心概念,揭示市场周期与巴菲特投资理念的联系,并…

探索健康管理虚拟仿真实训室的创新教学应用

一、推动教学理念从知识传授向能力建构转型 健康管理虚拟仿真实训室的应用&#xff0c;首先带来的是教学理念的深刻革新。传统教学往往偏重于理论知识与标准流程的讲授&#xff0c;学生缺乏在复杂、动态的真实情境中综合决策与应急处置的机会。点击获取方案 而健康管理虚拟仿真…

GBase 8c数据库操作系统故障定位介绍

南大通用GBase 8c数据库查询状态时&#xff0c;显示一个节点上所有实例都不正常时&#xff0c;可能是操作系统发生了故障。可以通过如下方法确定操作系统是否存在问题&#xff1a;1、通过 SSH 或者其它远程登录工具登录该节点。如果连接失败&#xff0c;请尝试通过 ping 发包检…

【Effective Modern C++】第二章 auto:6. 当auto推导的类型不符合要求时,使用显式类型初始化习惯用法

个人认为原著写的非常难懂&#xff0c;所以精简总结如下&#xff1a; auto与代理类的问题&#xff1a; 当使用auto进行类型推导时&#xff0c;如果表达式返回的是代理类&#xff0c;auto会推导出代理类型而不是被代理的实际类型&#xff0c;可能导致未定义行为。 例如&#…

智慧旅游虚拟仿真实训:场景化与交互式学习

随着旅游产业的数字化转型不断深入&#xff0c;行业对既掌握专业理论知识&#xff0c;又具备实践操作与应变能力的高素质人才需求日益迫切。在这一背景下&#xff0c;旅游管理虚拟仿真实训室应运而生&#xff0c;它作为连接传统课堂与真实行业场景的关键桥梁&#xff0c;正深刻…

【毕业设计】(源码+文档+远程调试,全bao定制等)基于python-cnn深度学习识别水果是否成熟

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

GBase 8c数据库磁盘故障定位解析

南大通用GBase 8c数据库常见的磁盘故障是磁盘空间不足、磁盘出现坏块、磁盘未挂载等。部分磁盘故障会导致文件系统损坏&#xff0c;例如磁盘未挂载&#xff0c;数据库管理自动定期执行磁盘检测时会识别故障并将实例停止&#xff0c;查看数据库状态时对应实例状态异常&#xff1…