news 2026/8/14 14:25:20

面向企业级 Agent(智能体)编排 AgentScope Java

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
面向企业级 Agent(智能体)编排 AgentScope Java

直接上简单的代码示例

1.在pom文件加如下

<dependency><groupId>io.agentscope</groupId><artifactId>agentscope</artifactId><version>1.0.10</version><scope>compile</scope></dependency>

我测试了下,只添加上面的就行了,下面的是我备用的

<dependency><groupId>io.agentscope</groupId><artifactId>agentscope-spring-boot-starter</artifactId><version>1.0.10</version></dependency>

2.yaml文件添加

---#################### agentscope相关配置 ####################agentscope:dashscope:api-key:你的dashscope-api-keymodel-name:qwen-plus

3.写代码

3.1AgentScope 智能体配置

packagecn.iocoder.yudao.module.system.controller.admin.mall.order;importio.agentscope.core.ReActAgent;importio.agentscope.core.memory.InMemoryMemory;importio.agentscope.core.model.DashScopeChatModel;importio.agentscope.core.tool.Toolkit;importorg.springframework.beans.factory.annotation.Value;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importjavax.annotation.Resource;/** * AgentScope 智能体配置 * <p> * AgentScope 1.0 Core API 不提供 @AgentComponent / AgentRuntime, * 需要手动构建 ReActAgent 并注册为 Spring Bean。 * <p> * 配置项(application.yaml): * <pre> * agentscope: * dashscope: * api-key: 你的dashscope-api-key * model-name: qwen-turbo * </pre> */@ConfigurationpublicclassAgentConfig{@Value("${agentscope.dashscope.api-key:}")privateStringdashscopeApiKey;@Value("${agentscope.dashscope.model-name:qwen-turbo}")privateStringmodelName;@ResourceprivateOrderAssistantorderAssistant;@BeanpublicReActAgentorderAssistantAgent(){// 1. 初始化大模型(DashScope / 通义千问)DashScopeChatModelmodel=DashScopeChatModel.builder().apiKey(dashscopeApiKey).modelName(modelName).build();// 2. 构建工具集,注册订单查询工具Toolkittoolkit=newToolkit();toolkit.registerTool(orderAssistant);// 3. 构建 ReActAgentreturnReActAgent.builder().name("order-assistant").sysPrompt("你是订单查询助手,可以调用工具查询订单信息,使用中文回答用户问题").model(model).toolkit(toolkit).memory(newInMemoryMemory()).build();}}

3.2订单查询智能体工具

packagecn.iocoder.yudao.module.system.controller.admin.mall.order;importcn.iocoder.yudao.module.system.dal.dataobject.mall.MallOrderDO;importcn.iocoder.yudao.module.system.service.mall.MallOrderService;importio.agentscope.core.tool.Tool;importio.agentscope.core.tool.ToolParam;importorg.springframework.stereotype.Component;importjavax.annotation.Resource;/** * 订单查询智能体工具 * <p> * 提供 @Tool 注解的方法,供 ReActAgent 调用。 * AgentScope 1.0 Core API 不提供 @AgentComponent 注解, * 这里用 Spring 原生 @Component 注册 Bean,再在 AgentConfig 中通过 Toolkit.registerTool 注册。 */@ComponentpublicclassOrderAssistant{@ResourceprivateMallOrderServiceorderService;/** * 根据订单ID查询订单状态。 * * @param orderId 订单编号(数据库主键 ID) * @return 订单状态描述 */@Tool(description="根据订单ID查询订单状态,返回订单号、状态、金额和下单时间")publicStringqueryOrderStatus(@ToolParam(name="orderId",description="订单编号,数据库主键ID")LongorderId){MallOrderDOorder=orderService.getOrder(orderId);returnformatOrder(order);}/** * 根据订单号查询订单状态。 * * @param orderNo 订单流水号(如 NO20240101) * @return 订单状态描述 */@Tool(description="根据订单号查询订单状态,返回订单号、状态、金额和下单时间")publicStringqueryOrderByNo(@ToolParam(name="orderNo",description="订单流水号,如 NO20240101")StringorderNo){MallOrderDOorder=orderService.getOrderByNo(orderNo);returnformatOrder(order);}/** * 格式化订单信息为可读字符串 */privateStringformatOrder(MallOrderDOorder){if(order==null){return"未找到订单";}StringstatusText=convertStatus(order.getStatus());doublepriceYuan=order.getTotalPrice()!=null?order.getTotalPrice()/100.0:0.0;returnString.format("订单号:%s,状态:%s,金额:%.2f元,手机号:%s元,下单时间:%s",order.getOrderNo(),statusText,priceYuan,order.getMobile(),order.getCreateTime());}/** * 将订单状态码转换为中文描述 * * @param status 状态码:0-待处理 10-已发货 20-已完成 30-已取消 * @return 中文状态描述 */privateStringconvertStatus(Integerstatus){if(status==null){return"未知";}switch(status){case0:return"待处理";case10:return"已发货";case20:return"已完成";case30:return"已取消";default:return"未知状态("+status+")";}}}

3.3智能体对话接口

packagecn.iocoder.yudao.module.system.controller.admin.mall.order;importcn.iocoder.yudao.framework.common.pojo.CommonResult;importio.agentscope.core.ReActAgent;importio.agentscope.core.message.Msg;importio.agentscope.core.message.MsgRole;importio.swagger.v3.oas.annotations.Operation;importio.swagger.v3.oas.annotations.tags.Tag;importlombok.extern.slf4j.Slf4j;importorg.springframework.web.bind.annotation.PostMapping;importorg.springframework.web.bind.annotation.RequestBody;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RestController;importjavax.annotation.Resource;importstaticcn.iocoder.yudao.framework.common.pojo.CommonResult.success;/** * 智能体对话接口 * <p> * AgentScope 1.0 Core API 不提供 AgentRuntime / AgentResponse, * 直接注入 ReActAgent Bean,通过 agent.call(Msg) 返回 Mono<Msg>, * 在 Spring MVC 同步场景下使用 .block() 获取结果。 */@Slf4j@Tag(name="管理后台 - 智能体对话")@RestController@RequestMapping("/system/agent")publicclassAgentController{@ResourceprivateReActAgentorderAssistantAgent;@PostMapping("/chat")@Operation(summary="与订单助手对话")publicCommonResult<String>chat(@RequestBodyStringmessage){log.info("收到智能体对话请求: {}",message);try{// 构建用户消息MsguserMsg=Msg.builder().name("user").role(MsgRole.USER).textContent(message).build();// 调用 Agent(ReActAgent 会自主思考、调用工具),同步阻塞获取结果Msgresponse=orderAssistantAgent.call(userMsg).block();Stringanswer=response!=null?response.getTextContent():"抱歉,未能处理您的请求";log.info("智能体回复: {}",answer);returnsuccess(answer);}catch(Exceptione){log.error("智能体调用失败",e);returnsuccess("抱歉,智能体服务暂时不可用:"+e.getMessage());}}}

使用前须知

将 application-local.yaml 中的 api-key 替换为你的真实 DashScope API Key(在 阿里云百炼平台 获取)

调用流程

用户 POST /system/agent/chat {“帮我查一下订单ID为123的状态”}
→ AgentController.chat()
→ 构建 Msg(USER, message)
→ ReActAgent.call(msg) // Agent 自主思考
→ LLM 判断需要调用工具
→ Toolkit 调用 OrderAssistant.queryOrderStatus(123)
→ LLM 根据工具返回组织中文回答
→ .block() 同步获取结果
→ 返回 “订单号:NO20240101,状态:已发货,金额:99.00元,下单时间:…”

运行效果


不得不说,还挺智能的,能循环查询,给出数据

为什么要有AgentScope Java?

有些小伙伴可能已经尝试过用Python的LangChain或AutoGen来构建智能体。
确实,写个Demo很简单,但要落地到生产环境,尤其是Java主导的企业级系统,往往会遇到几个“拦路虎”:
第一,技术栈割裂。 你的核心交易系统是Spring Cloud,用户权限走的是Shiro,数据库连接池是Druid。现在为了一个Agent,要单独搭一套Python服务,两边通过HTTP调用,调试起来头皮发麻。
第二,安全难以保障。 金融场景下,Agent可能要查询订单、操作数据库。Python脚本跑在业务系统旁边,怎么隔离?怎么控制权限?出了问题谁负责?
第三,运维体系不兼容。 Java生态有成熟的监控(Arthas)、链路追踪(SkyWalking)、配置中心(Nacos)。Python那一套很难融入这个体系。
第四,多智能体协作复杂。 真实业务往往需要多个Agent分工协作(一个查订单、一个算积分、一个发通知)。Python框架要么不支持分布式部署,要么需要自己造轮子。
AgentScope Java正是为了解决这些痛点而生的。
它不是简单的“LangChain的Java翻译版”,而是站在企业级视角,重新设计的生产级智能体开发框架
更多内容可以参考链接:https://juejin.cn/post/7615515575942447142

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/14 14:20:38

深入CLI会话管理:从模型抽象到JSON持久化实战

1. 项目概述&#xff1a;为什么需要深入 CLI 的会话管理&#xff1f;如果你用过 Claude Code 的命令行工具&#xff0c;也就是我们常说的claude-code-cli&#xff0c;你可能会觉得它用起来挺顺手的&#xff1a;输入问题&#xff0c;得到代码建议&#xff0c;然后继续下一个问题…

作者头像 李华
网站建设 2026/8/14 14:18:33

Node.js入门教程(二十):模块导入

一、模块系统概述当你开始写 Node.js 项目时&#xff0c;最先遇到的问题之一就是——如何导入模块&#xff08;module&#xff09;。在 Node.js 里&#xff0c;模块就是可以重复使用的 JavaScript 文件&#xff0c;它们之间通过导入&#xff08;import&#xff09;和导出&#…

作者头像 李华
网站建设 2026/8/14 14:17:16

开发者 2026 检测书签栏:12 个链接应对 90% 网络故障

开发者 2026 检测书签栏&#xff1a;12 个链接应对 90% 网络故障工具地址&#xff1a;https://www.speedce.com 社区论坛&#xff1a;https://bbs.speedce.com 联系&#xff1a;speedceadsgmail.com写在前面 本文围绕「开发者 2026 检测书签栏」展开&#xff0c;提供可落地的技…

作者头像 李华
网站建设 2026/8/14 14:15:50

17CE vs SpeedCE:老牌表格派与新锐地图派实战对比

17CE vs SpeedCE&#xff1a;老牌表格派与新锐地图派实战对比工具地址&#xff1a;https://www.speedce.com 社区论坛&#xff1a;https://bbs.speedce.com 联系&#xff1a;speedceadsgmail.com写在前面 17CE 表格精确&#xff0c;SpeedCE 地图直观——看场景选。 本文是一份围…

作者头像 李华