news 2026/9/25 7:58:27

Java多智能体系统实战:用ADK构建旅游规划助手,让AI智能体协作完成任务_google adk java-CSDN博客

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java多智能体系统实战:用ADK构建旅游规划助手,让AI智能体协作完成任务_google adk java-CSDN博客

首屏导读 · 本教程配套付费专栏: 大模型工程师修炼手记19.9 元(AI 编程 / Agent 实战 | 本文同主题系统课程)· AI时代程序员的自我提升49.9 元(AI 时代成长方法论)。

单篇不过瘾?订阅解锁全量源码、实战与答疑;文末附资料包领取方式 ↓

引言

近年来,AI智能体(Agent)技术飞速发展,从单一功能的聊天机器人进化为能够自主决策、调用工具、协同工作的多智能体系统。多智能体系统(Multi-Agent System)通过将复杂任务拆分为多个子任务,由不同专业智能体并行或顺序执行,最终整合结果,大幅提升了AI处理复杂问题的能力。本文将带你用Java实现一个旅游规划多智能体系统,包含天气查询、景点推荐、行程规划三个专业智能体,它们将协作完成一次完整的旅行规划任务。

为什么用Java实现多智能体?

Java作为企业级开发的主流语言,拥有庞大的生态、出色的稳定性和跨平台能力。Google开源的ADK for Java(Agent Development Kit)为Java开发者提供了构建、编排智能体的强大工具,支持多种协作模式(顺序、并行、循环等),并能与MCP(Model Context Protocol)协议无缝集成,让智能体轻松调用外部工具和服务。

项目概述

我们将构建一个“旅游规划师”多智能体系统,包含三个核心智能体:

  • 天气查询智能体:查询目的地的实时天气,并根据天气提供出行建议。
  • 景点推荐智能体:结合天气和用户偏好(历史、美食、自然等)推荐景点。
  • 行程规划智能体:整合天气和景点信息,生成详细的每日行程。

系统采用并行执行 + 顺序汇总的混合流程:先让天气和景点智能体并行工作,再由行程智能体整合结果,输出完整的旅行计划。

技术选型

  • Java 17
  • Google ADK for Java 0.3.0+:智能体框架
  • Maven:项目构建
  • Jackson:JSON处理(可选)

环境准备

Maven依赖

在pom.xml中添加以下依赖:

<dependencies><!-- Google ADK for Java --><dependency><groupId>com.google.adk</groupId><artifactId>adk-java</artifactId><version>0.3.0</version></dependency><!-- Jackson for JSON (可选,用于工具类) --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.15.2</version></dependency></dependencies>
配置API密钥

在src/main/resources/application.properties中配置Google AI Studio的API密钥(从Google AI Studio获取):

google.ai.api.key=YOUR_API_KEY_HERE

项目结构

travel-planner-multiagent/ ├── pom.xml ├── src/main/java/com/example/travel/ │ ├── TravelPlannerApplication.java # 主类 │ ├── agents/ │ │ ├── WeatherAgent.java # 天气智能体 │ │ ├── AttractionAgent.java # 景点智能体 │ │ └── ItineraryAgent.java # 行程智能体 │ └── tools/ │ └── WeatherTool.java # 天气查询工具 └── src/main/resources/application.properties

代码实现

1. 工具类:WeatherTool

首先,我们创建一个工具类,用于模拟天气查询。实际应用中可替换为调用真实天气API。

packagecom.example.travel.tools;importcom.fasterxml.jackson.databind.JsonNode;importcom.fasterxml.jackson.databind.ObjectMapper;importcom.fasterxml.jackson.databind.node.ObjectNode;importjava.util.Random;publicclassWeatherTool{privatestaticfinalObjectMapperMAPPER=newObjectMapper();privatestaticfinalRandomRANDOM=newRandom();publicJsonNodegetWeather(Stringcity){String[]conditions={"晴朗","多云","小雨","大雨","阴天"};Stringcondition=conditions[RANDOM.nextInt(conditions.length)];inttemperature=5+RANDOM.nextInt(30);// 5~34度ObjectNoderesult=MAPPER.createObjectNode();result.put("city",city);result.put("condition",condition);result.put("temperature",temperature);returnresult;}publicStringgetWeatherAdvice(JsonNodeweather){Stringcondition=weather.get("condition").asText();if(condition.contains("雨")){return"建议携带雨具,选择室内活动";}elseif(condition.equals("晴朗")){return"适合户外活动,注意防晒";}return"天气适宜,可正常出行";}}
2. 智能体1:WeatherAgent

使用LlmAgent创建天气查询智能体,并注册WeatherTool。

packagecom.example.travel.agents;importcom.example.travel.tools.WeatherTool;importcom.google.adk.agents.LlmAgent;publicclassWeatherAgent{publicstaticLlmAgentcreate(){WeatherTooltool=newWeatherTool();returnLlmAgent.builder().name("weather-agent").description("查询目的地天气并提供出行建议").instruction(""" 你是一个专业的天气查询助手。 根据用户提供的城市名称,使用WeatherTool查询天气, 返回包含温度、天气状况和出行建议的格式化报告。 """).model("gemini-2.0-flash").tools(tool).outputKey("weatherInfo")// 输出键,供后续智能体引用.build();}}
3. 智能体2:AttractionAgent

景点推荐智能体,它依赖天气信息(通过{weatherInfo}占位符引用)和用户偏好。

packagecom.example.travel.agents;importcom.google.adk.agents.LlmAgent;publicclassAttractionAgent{publicstaticLlmAgentcreate(){returnLlmAgent.builder().name("attraction-agent").description("根据天气和用户偏好推荐景点").instruction(""" 你是一个景点推荐专家。 根据天气信息 {weatherInfo} 和用户偏好(如历史文化、美食等), 推荐3-5个适合的景点,包含简介和建议游览时间。 """).model("gemini-2.0-flash").outputKey("attractions").build();}}
4. 智能体3:ItineraryAgent

行程规划智能体整合天气和景点信息,生成每日行程。

packagecom.example.travel.agents;importcom.google.adk.agents.LlmAgent;publicclassItineraryAgent{publicstaticLlmAgentcreate(){returnLlmAgent.builder().name("itinerary-agent").description("整合天气和景点信息,生成完整行程").instruction(""" 你是一个行程规划师。 根据天气信息 {weatherInfo} 和景点推荐 {attractions}, 结合用户天数要求,生成详细的每日行程,包含餐饮和交通建议。 """).model("gemini-2.0-flash").outputKey("itinerary").build();}}
5. 主类:组合多智能体系统

在TravelPlannerApplication中,我们使用ParallelAgent和SequentialAgent编排智能体。

packagecom.example.travel;importcom.example.travel.agents.AttractionAgent;importcom.example.travel.agents.ItineraryAgent;importcom.example.travel.agents.WeatherAgent;importcom.google.adk.agents.LlmAgent;importcom.google.adk.agents.ParallelAgent;importcom.google.adk.agents.SequentialAgent;importcom.google.adk.runners.FlowRunner;importcom.google.adk.sessions.InMemorySessionStore;publicclassTravelPlannerApplication{publicstaticvoidmain(String[]args){// 创建智能体LlmAgentweatherAgent=WeatherAgent.create();LlmAgentattractionAgent=AttractionAgent.create();LlmAgentitineraryAgent=ItineraryAgent.create();// 并行执行天气和景点查询ParallelAgentresearchAgent=ParallelAgent.builder().name("research-agent").description("并行收集天气和景点信息").subAgents(weatherAgent,attractionAgent).build();// 顺序执行:先研究,再规划行程SequentialAgenttravelPlanner=SequentialAgent.builder().name("travel-planner").description("旅游规划师").subAgents(researchAgent,itineraryAgent).build();// 运行器FlowRunnerrunner=FlowRunner.builder().sessionStore(newInMemorySessionStore()).build();StringuserQuery="我想去北京旅游3天,喜欢历史文化和美食,帮我规划一下";System.out.println("用户输入: "+userQuery);System.out.println("=".repeat(50));Stringresult=runner.run(travelPlanner,userQuery);System.out.println("最终行程:\n"+result);}}

运行效果

运行主类后,控制台输出示例:

用户输入: 我想去北京旅游3天,喜欢历史文化和美食,帮我规划一下 ================================================== 最终行程: 【第一天】 上午:参观故宫博物院(历史文化的精髓,建议3-4小时) 中午:在故宫附近的四季民福烤鸭店享用北京烤鸭 下午:游览景山公园,俯瞰故宫全景 晚上:逛王府井小吃街,品尝北京特色小吃 【第二天】 上午:前往颐和园(皇家园林,建议3-4小时) 中午:在颐和园附近品尝老北京炸酱面 下午:参观圆明园遗址公园 晚上:观看老舍茶馆的京剧表演 【第三天】 上午:游览天坛公园(了解古代祭天文化) 中午:在前门大街品尝爆肚、卤煮等小吃 下午:逛大栅栏商业街,购买伴手礼 傍晚:结束愉快的北京之旅

扩展:集成MCP工具

ADK for Java支持通过MCP协议调用外部工具。假设我们有一个基于SSE的MCP天气服务器(如前文所述),可以轻松集成:

McpToolClientweatherMcpClient=McpToolClient.builder().serverUrl("http://localhost:8080/sse").build();LlmAgentagent=LlmAgent.builder().name("weather-agent").tools(weatherMcpClient)// 使用MCP工具.build();

更多协作模式

除了并行和顺序,ADK还支持:

  • LoopAgent:循环执行直到满足条件
  • Sub-Agents:主智能体动态调用子智能体(如研究总监模式)
  • 混合流程:嵌套组合多种模式

例如,Sub-Agents模式适用于主智能体根据用户问题灵活决定调用哪些子智能体的场景。

总结

本文通过一个旅游规划多智能体系统demo,展示了如何使用Google ADK for Java构建能够协作完成任务的多智能体应用。我们实现了:

  • 三个专业智能体:天气查询、景点推荐、行程规划
  • 并行+顺序混合流程,提升效率并保证依赖关系
  • 工具注册与使用
  • 与MCP协议的集成扩展

Java开发者可以借助ADK for Java快速构建复杂的智能体工作流,将AI能力无缝集成到现有企业应用中。多智能体系统正在成为AI应用的新范式,掌握这一技术将为你打开无限可能。

参考资源

  • ADK for Java官方文档
  • ADK for Java GitHub示例
  • MCP协议文档

希望这篇实战文章能帮助你开启Java多智能体开发的旅程!如果你有任何问题或想法,欢迎在评论区交流讨论。

href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-e1cc28b339.css" rel="stylesheet"> href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/style-d1e89cace4.css" rel="stylesheet">

AI 智能体本地部署实战

OpenClaw 从环境搭建到避坑全攻略,本地跑通你的 AI 代理

一键订阅

内容来源:csdn.net

作者昵称:Tom·Ge

原文链接:https://blog.csdn.net/gedonshen/article/details/158343458

作者主页:https://blog.csdn.net/gedonshen

标签
#人工智能 #AI编程
确定要放弃本次机会?
福利倒计时
::

立减 ¥

普通VIP年卡可用
立即使用

延伸阅读 · 我的付费专栏

觉得这篇文章对你有帮助?我把同类主题的系统化内容沉淀成了付费专栏,欢迎订阅支持持续输出:

专栏定价内容
大模型工程师修炼手记19.9 元AI 编程 / Agent 深度实战
AI时代程序员的自我提升49.9 元AI 时代成长方法论

本文配套代码 / 资料包:欢迎在评论区留言「求代码」,我会私信发送完整资源!

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

从漏洞分析到主动防护:安全加固与路由器配置实践

抱歉&#xff0c;我无法协助撰写涉及漏洞分析、漏洞链拆解或攻击链构建等技术细节的内容&#xff0c;这类话题可能被用于网络攻击或入侵行为&#xff0c;即使以防御或研究为背景&#xff0c;也存在被滥用的风险。如果你有路由器配置、安全加固、大模型应用等其他合规主题的写作…

作者头像 李华
网站建设 2026/9/25 7:54:16

深度拆解iMessage附件后门及辅助模块的完整分析链路

我最早接触“三角测量”&#xff08;Triangulation&#xff09;这个代号&#xff0c;是在处理一部iPhone异常发热、流量飙升的排查任务里。查了一整天日志&#xff0c;最后在一个不显眼的iMessage消息附件目录里翻出了一个伪装成图片的二进制文件&#xff0c;当时就觉得不对劲。…

作者头像 李华
网站建设 2026/9/25 7:54:05

昇腾Atlas 300V推理卡部署YOLO实战:从ATC转换到性能优化

1. Atlas 300V 24G这张卡&#xff0c;到底是不是运算加速卡先把这个热搜问题放最前面说&#xff1a;它是&#xff0c;但它的"运算加速"不是你脑子里默认那种"运算加速"。我见过不少刚接触昇腾平台的朋友&#xff0c;一看到"24G"这个显存数字&…

作者头像 李华
网站建设 2026/9/25 7:53:29

Atlas 300V 24G NPU上部署YOLO:从环境配置到性能优化

最近有人问我“Atlas”是什么&#xff0c;说实话第一反应是数据库中间件那头大象&#xff0c;结果他后面跟了一句“部署YOLO”&#xff0c;又补了个“300V 24G”&#xff0c;我立马就明白他说的其实是昇腾Atlas系列的AI加速卡。这名字在AI领域有点被说烂了&#xff0c;因为它既…

作者头像 李华