本文介绍了Google ADK框架如何帮助开发者快速构建AI Agent智能体,作者通过实战案例展示了使用ADK框架搭建智能体并进行ELK系统日志分析的过程。文章详细提供了配置步骤、代码示例和测试方法,支持Python、Java、Go三种语言。通过MCP协议扩展智能体功能,实现与外部系统的交互。文末提供了完整项目源码,供读者深入学习AI Agent开发技术。

一、官网资料

官网:https://google.github.io/adk-docs/

搭建:https://google.github.io/adk-docs/get-started/

  • ADK 以轻便化构建 Ai Agent 智能体,解决智能体开发的复杂流程而设计。目前支持 Python、Java、Go 3种语言对应的技术框架。
  • 整个文档完整的描述了,智能体的创建和运行、工具的调用(tools、function、mcp)、可观测性以及 A2A 协议等。
  • Agent Development Kit (ADK) is designed to empower developers to quickly build, manage, evaluate and deploy AI-powered agents. These quick start guides get you set up and running a simple agent in less than 20 minutes.

二、工程实践

1. 前置说明

本次的 Ai Agent 实践,是以 Google ADK 框架为基础,配和 Github system-prompts-and-models-of-ai-tools 开源提示词项目中的 claude-code-system-prompt 作为必要描述。来实验,ELK 系统日志智能分析场景。

  • API Key:https://ai.google.dev/gemini-api 需要申请开发 API 秘钥,是免费的。
  • Docker 环境,本项目部署了一套 ELK 日志服务,基于 Docker 部署,之后对 ELK 模拟写入日志,让 Ai Agent 智能体进行分析。如果暂时配置不了,可以在测试的时候去掉这部分 mcp 服务
  • JDK 17+Maven 3.8.x

2. 工程说明

  • 工程地址:https://github.com/fuzhengwei/xfg-dev-tech-google-adk
  • 这是一套引入了 Google ADK 0.1.0 版本的 Agent 最基础智能体测试。如果需要扩展,还要额外增加很多东西,可以参考 《Ai Agent 智能体项目》
2.1 YML 配置
server:
  port: 8901

# 可申请API秘钥;https://ai.google.dev/gemini-api
google:
  api:
    base-url: https://generativelanguage.googleapis.com
    key: AIzaSyDF6JnvFx7xWEsARS*******可以自己申请免费的
  cloud:
    project: xfg-google-adk

logging:
  level:
    root: info
  config: classpath:logback-spring.xml
  • application-dev.yml 修改你的参数配置,配置你的 Google api key
2.2 ADK 单测
import com.google.adk.agents.LlmAgent;
import com.google.adk.events.Event;
import com.google.adk.models.Gemini;
import com.google.adk.runner.InMemoryRunner;
import com.google.adk.sessions.Session;
import com.google.genai.Client;
import com.google.genai.types.Content;
import com.google.genai.types.HttpOptions;
import com.google.genai.types.Part;
import io.reactivex.rxjava3.core.Flowable;

publicclass ApiTest {

    /**
     * 可申请免费测试api
     * https://ai.google.dev/gemini-api/docs/quickstart?hl=zh-cn#apps-script
     */
    public static void main(String[] args) {
        LlmAgent agent = LlmAgent.builder()
                .name("test")
                .description("test agent help user do work")
                .model(Gemini.builder()
                        .apiClient(Client.builder()
                                .apiKey("AIzaSyDF6JnvFx7xWEsARSGosNmvTU3ZoCwo-mc")
                                .httpOptions(HttpOptions
                                        .builder()
                                        .baseUrl("https://generativelanguage.googleapis.com")
                                        .timeout(500000)
                                        .build())
                                .build())
                        .modelName("gemini-2.0-flash")
                        .build())
                .build();

        InMemoryRunner runner = new InMemoryRunner(agent);

        Session session = runner
                .sessionService()
                .createSession("test", "xiaofuge")
                .blockingGet();

        Flowable<Event> events = runner.runAsync("xiaofuge", session.id(), Content.fromParts(Part.fromText("hi agent can you help me")));

        System.out.print("\nAgent > ");
        events.blockingForEach(event -> System.out.println(event.stringifyContent()));

    }

}
Agent > Hi there! Yes, I'm here to help.  To best assist you, could you tell me what you need help with?  The more information you give me, the better I can understand your request and provide a useful response.
  • 这是一套最基础的 Ai Agent 智能体 ADK 的测试使用代码。其实它的配置和调用与 Spring AI 框架是有类似之处的,基本上这类框架也都是这样的使用模式。
  • LlmAgent 提供了一整套构建智能体的方式,可以设置客户端(Gemini),并设置相关的 baseUrl、apiKey 参数,以及模型和超时时间等。
  • InMemoryRunner 的用途是把 Agent 放入一个记忆执行里,让一整个 Session 会话下的执行都被记录下,这样才能记录上下文。
  • 之后就是放到响应框架进行之后和拿到最后结果啦。
2.3 Agent 智能体测试
@Slf4j
@RunWith(SpringRunner.class)
@SpringBootTest
public class AutoAgentTest {

    @Value("${google.api.base-url}")
    private String baseUrl;

    @Value("${google.api.key}")
    private String apiKey;

    privatestaticfinal String USER_ID = "xiaofuge";
    privatestaticfinal String NAME = "multi_tool_agent";

    publicstatic BaseAgent agent;

    @Before
    public void init() {
        List<McpTool> mcpTools = new ArrayList<>();
        mcpTools.addAll(mcp_elk());
        mcpTools.addAll(mcp_filesystem());

        agent = LlmAgent.builder()
                .name(NAME)
                .model(Gemini.builder()
                        .apiClient(Client.builder()
                                .apiKey(apiKey)
                                .httpOptions(HttpOptions
                                        .builder()
                                        .baseUrl(baseUrl)
                                        .timeout(500000)
                                        .build())
                                .build())
                        .modelName("gemini-2.0-flash")
                        .build())
                .description("You are an interactive CLI tool that helps users with software engineering tasks. Use the instructions below and the tools available to you to assist the user.")
                .instruction(
                        """
                                 You are an interactive CLI tool that helps users with software engineering tasks. Use the instructions below and the tools available to you to assist the user.
                                
                                 可以在这里复制全部提示词;https://github.com/x1xhlol/system-prompts-and-models-of-ai-tools/blob/main/Claude%20Code/claude-code-system-prompt.txt
                                """)
                .tools(mcpTools)
                .build();
    }

    /**
     * - 需要配置后,才能在单测控制台输入内容
     * IntelliJ IDEA Help -> Edit Custom VM Options -> -Deditable.java.test.console=true
     * <br/>
     * - <a href="https://ai.google.dev/api">ai.google.dev/api</a>
     */
    @Test
    public void test_agent() {
        InMemoryRunner runner = new InMemoryRunner(agent);

        Session session =
                runner
                        .sessionService()
                        .createSession(NAME, USER_ID)
                        .blockingGet();

        try (Scanner scanner = new Scanner(System.in, StandardCharsets.UTF_8)) {
            while (true) {
                System.out.print("\nYou > ");
                String userInput = scanner.nextLine();

                if ("quit".equalsIgnoreCase(userInput)) {
                    break;
                }

                Content userMsg = Content.fromParts(Part.fromText(userInput));
                Flowable<Event> events = runner.runAsync(USER_ID, session.id(), userMsg);

                System.out.print("\nAgent > ");
                events.blockingForEach(event -> System.out.println(event.stringifyContent()));
            }
        }

    }

    private List<McpTool> mcp_elk() {
        Map<String, String> env = new HashMap<>();
        env.put("ES_HOST", "http://127.0.0.1:9200");
        env.put("ES_API_KEY", "none");

        ServerParameters mcp_elk = ServerParameters.builder("npx")
                .args(List.of(
                        "-y",
                        "@awesome-ai/elasticsearch-mcp"
                ))
                .env(env)
                .build();

        CompletableFuture<McpToolset.McpToolsAndToolsetResult> futureResult =
                McpToolset.fromServer(mcp_elk, JsonBaseModel.getMapper());

        McpToolset.McpToolsAndToolsetResult result = futureResult.join();

        return result.getTools();
    }

    private List<McpTool> mcp_filesystem() {
        ServerParameters mcp_filesystem = ServerParameters.builder("npx")
                .args(List.of(
                        "-y",
                        "@modelcontextprotocol/server-filesystem",
                        "/Users/fuzhengwei/Desktop"
                ))
                .build();

        CompletableFuture<McpToolset.McpToolsAndToolsetResult> futureResult =
                McpToolset.fromServer(mcp_filesystem, JsonBaseModel.getMapper());

        McpToolset.McpToolsAndToolsetResult result = futureResult.join();

        return result.getTools();
    }

}
  • AutoAgentTest 智能体,配置了两个 mcp,mcp_elk、mcp_filesystem 服务。其实 AI Agent 智能体,都少不了 MCP 服务的加持,这样才能让这个大脑有手脚可以行动起来。
  • init 初始化阶段,instruction 配置了对应的智能体提示词,这部分很重要,有点像智能体的神经。https://github.com/x1xhlol/system-prompts-and-models-of-ai-tools/blob/main/Claude%20Code/claude-code-system-prompt.txt - 可以选择这里的提示词配置到智能体进行测试。
  • 这部分也可以运行测试,之后会你可以进行提问。注意,如果你没有配置 elk,那么可以删掉 mcpTools.addAll(mcp_elk()); 代码。
  • mcp_filesystem() 配置了,/Users/fuzhengwei/Desktop 你需要修改为你的本地的有权限访问的地址。
2.4 Agent 智能体服务

有了前面的案例测试基础,就可以把服务配置成对应的接口,以及开发个简单的页面进行对接验证了。

2.4.1 服务接口
@Slf4j
@RestController
@RequestMapping("/trigger")
@CrossOrigin(origins = "*")
publicclass AgentController {

    privatefinal AgentService agentService;

    public AgentController(AgentService agentService) {
        this.agentService = agentService;
    }

    @PostMapping(path = "/session", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
    public CreateSessionResponse createSession(@RequestBody CreateSessionRequest req) {
        String sessionId = agentService.createOrGetSession(req.getUserId());
        log.info("创建会话ID:{}", sessionId);
        returnnew CreateSessionResponse(sessionId);
    }

    @PostMapping(path = "/chat", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
    public ChatResponse chat(@RequestBody ChatRequest req) {
        String sessionId = req.getSessionId();
        if (sessionId == null || sessionId.isEmpty()) {
            sessionId = agentService.createOrGetSession(req.getUserId());
        }
        log.info("使用会话ID:{}", sessionId);
        List<String> outputs = agentService.chat(req.getUserId(), sessionId, req.getMessage());
        returnnew ChatResponse(sessionId, String.join("\n", outputs));
    }
}
  • 这里就是把单测的服务,包装成接口。详细的部分可以直接看工程代码。
2.4.2 页面对接

  • 把服务端的接口对接到页面。

三、功能测试

1. 部署 elk 日志服务

  • 整个 Ai Agent 案例,配置了 ELK 作为日志分析的基础,所以最好配置下。
  • 这里也有云服务器的部署操作,也可以参考教程来部署。教程:https://bugstack.cn/md/road-map/docker-install.html
  • 注意配置完成后,要执行 elk-blacklist-data.sh 模拟的写入进去一些日志,这样才能用于分析使用。

2. 启动服务访问页面

  • 以上演示了,使用 Ai Agent 进行 ELK 日志分析,通过对话可以看到,最终我们可以拿到系统的日志数据。

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

https://img-blog.csdnimg.cn/img_convert/05840567e2912bcdcdda7b15cba33d93.jpeg

在这里插入图片描述

为什么要学习大模型?

我国在A大模型领域面临人才短缺,数量与质量均落后于发达国家。2023年,人才缺口已超百万,凸显培养不足。随着AI技术飞速发展,预计到2025年,这一缺口将急剧扩大至400万,严重制约我国AI产业的创新步伐。加强人才培养,优化教育体系,国际合作并进是破解困局、推动AI发展的关键。

在这里插入图片描述

在这里插入图片描述

大模型入门到实战全套学习大礼包

1、大模型系统化学习路线

作为学习AI大模型技术的新手,方向至关重要。 正确的学习路线可以为你节省时间,少走弯路;方向不对,努力白费。这里我给大家准备了一份最科学最系统的学习成长路线图和学习规划,带你从零基础入门到精通!

img


2、大模型学习书籍&文档

学习AI大模型离不开书籍文档,我精选了一系列大模型技术的书籍和学习文档(电子版),它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础。

在这里插入图片描述

3、AI大模型最新行业报告

2025最新行业报告,针对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。

img

4、大模型项目实战&配套源码

学以致用,在项目实战中检验和巩固你所学到的知识,同时为你找工作就业和职业发展打下坚实的基础。

img

5、大模型大厂面试真题

面试不仅是技术的较量,更需要充分的准备。在你已经掌握了大模型技术之后,就需要开始准备面试,我精心整理了一份大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余

img

适用人群

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范
第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署
第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建
第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

https://img-blog.csdnimg.cn/img_convert/05840567e2912bcdcdda7b15cba33d93.jpeg

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐