直接上简单的代码示例
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-plus3.写代码
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