引言
本文将介绍如何利用谷歌的Agent Development Kit(ADK)框架,结合本地化运行的大语言模型(如通过Ollama部署的Gemma3或Llama3.2),通过Model Context Protocol(MCP)协议调用外部工具实现实时搜索功能。

我们将基于ADK框架开发一个YouTube视频搜索智能体。该智能体将使用Gemma 3模型进行推理与响应生成,并通过MCP协议动态调用工具获取实时搜索结果。

Gemma 3 模型是什么?

Gemma 3 是谷歌最新推出的开源大语言模型(LLM),具备高性能、高效率及多模态处理能力。

该模型提供多种参数量级版本(1B、4B、12B 和 27B),用户可根据硬件配置与性能需求灵活选择。

作为轻量级前沿开源模型系列,Gemma 3 采用了与 Gemini 2.0 同源的核心技术,继承了其研究优势。

Gemma 3 核心特性

  • 多模态输入:支持图像与文本分析,实现跨模态数据处理
  • 128K 上下文窗口:输入容量提升16倍,可解析更复杂任务
  • 函数调用:通过自然语言交互API和工具
  • 多语言支持:覆盖140+种语言,满足全球化AI应用需求
  • 灵活规格:1B/4B/12B/27B四种参数规模适配不同算力场景

方案架构

在上一篇文章中,我们探讨了ADK框架与MCP协议,并演示了如何基于Gemini-2.5 Pro构建MCP客户端智能体。本文将改用Ollama平台部署的Gemma 3模型实现升级。

本案例将构建一个YouTube视频搜索智能体:

  • ADK框架作为系统基础
  • Gemma 3负责逻辑推理与内容生成
  • MCP协议实现工具动态调用,实时获取搜索结果

核心组件

  • 1、Google ADK:提供智能体开发框架
  • 2、模型上下文协议 (MCP):标准化工具通信规范
  • 3、Gemma 3 (12B 版本):负责语言理解与生成
  • 4、Ollama:本地化托管 Gemma 模型
  • 5、MCP 服务器:提供 YouTube 搜索功能
  • 6、Python 3.11+:基础运行环境

工作流程

  1. 1、用户提交查询:通过交互界面输入请求

  2. 2、ADK 智能体处理:解析查询内容、识别用户意图

  3. 3、搜索触发阶段

    • 请求路由至 MCP 工具注册中心
    • MCP 搜索工具获取并返回标准化格式结果
  4. 4、Gemma 3 模型处理(通过 Ollama + LiteLlm):

    • 接收搜索结果
    • 生成自然语言响应
  5. 5、 返回最终结果:格式化输出至用户界面

实现指南

以下是通过 ADK 框架结合 Gemma 3 模型构建本地 AI 助手的完整实施步骤:

1、先决条件
  • 已安装 Python 3.11+ 运行环境
  • 已部署 Ollama 服务
  • 已下载 gemma3:12b 模型文件
  • 有效的 SerpAPI 密钥(用于搜索)
  • 已配置本地或远程 MCP 服务器(mcp-youtube-search)
2、项目结构
adk_mcp_gemma3/├── search/│   ├── __init__.py              # Package initialization│   └── agent.py                 # Agent implementation with ADK├── README.md                    # Project documentation└── requirements.txt             # Dependencies

步骤1:配置虚拟环境

1、 安装依赖

# Setup virtual environment (Mac or Unix )python -m venv venv && source venv/bin/active 
# Install agent development kitpip install google-adk
# Install MCP server pip install mcp-youtube-search
# Install litellmpip install litellm

依赖包说明

  • google-adk:安装谷歌官方推出的智能体开发套件(Agent Development Kit)
  • mcp-youtube-search:专用MCP服务器组件,负责处理YouTube搜索请求并返回结果
  • litellm:轻量级LLM统一接口库(支持Ollama等各类大模型服务接入)

设置环境变量

export SERP_API_KEY="your-serpapi-key"

步骤2:安装MCP服务器

本文将使用基于ADK框架开发的mcp-youtube-search作为MCP服务器组件

# Install from PyPI ( Already Installed from Step 1)pip install mcp-youtube-search

步骤3:实现辅助功能函数 (agent.py)

# Step 1: Import required modulesfrom google.adk.agents import LlmAgentfrom google.adk.tools.mcp_tool.mcp_toolset import MCPToolset, StdioServerParametersfrom google.adk.models.lite_llm import LiteLlmimport osimport dotenv
# Step 2: Load environment variablesdotenv.load_dotenv()
# Step 3: Create tool execution helper functionsasync def execute_tool(tool, args):    """Execute a single tool and handle cleanup."""    try:        result = await tool.run_async(args=args, tool_context=None)        return (True, result, None)  # Success, result, no error    except Exception as e:        return (False, None, str(e))  # Failed, no result, error message

async def try_tools_sequentially(tools, args, exit_stack):    """Try each tool in sequence until one succeeds."""    errors = []
    for tool in tools:        success, result, error = await execute_tool(tool, args)        if success:            return result        errors.append(f"Tool '{tool.name}' failed: {error}")
    if errors:        return f"All tools failed: {'; '.join(errors)}"    return "No tools available"

核心组件功能说明

LlmAgent(智能体协调器)
  • 核心作用:作为系统中枢协调器

  • 主要功能

    • 管理会话状态与历史记录
    • 协调工具调用流程
    • 解析并执行用户指令
    • 维护整个系统的工作流
MCPToolset(MCP工具集)
  • 核心作用:MCP兼容工具的交互接口

  • 主要功能

    • 建立与MCP工具的连接通道
    • 提供工具发现机制
    • 标准化工具访问接口
    • 管理工具注册与调用
StdioServerParameters(标准I/O服务器参数)
  • 核心作用:MCP服务器连接配置

  • 配置内容

    • 标准输入/输出通道设置
    • 连接协议参数
    • 通信安全配置
LiteLlm(轻量级LLM适配层)
  • 核心作用:多模型兼容接口

  • 核心价值

    • 提供ADK与各类LLM服务商的通用接口
    • 实现模型调用的标准化
    • 支持Ollama等本地化部署方案

系统协作关系

  1. LlmAgent 作为流程协调中枢
  2. LiteLlm 承担模型接口适配职责
  3. MCPToolset 提供工具注册与管理功能

步骤4:创建MCP工具执行器
以下函数创建了一个异步封装器,用于连接MCP工具服务器并运行可用工具:

  1. 通过MCPToolset.from_server()连接工具
  2. 按步骤3定义的逻辑,依次尝试MCP服务器返回的所有工具直至其中一个成功
  3. 通过exit_stack.aclose()确保资源被正确清理
# Step 4: Create MCP tool executordef create_mcp_tool_executor(command, args=None, env=None):    """Create a function that connects to an MCP server and executes tools."""    async def mcp_tool_executor(**kwargs):        # Connect to MCP server        tools, exit_stack = await MCPToolset.from_server(            connection_params=StdioServerParameters(                command=command,                args=args or [],                env=env or {},            )        )
        try:            # Try all tools until one succeeds            return await try_tools_sequentially(tools, kwargs, exit_stack)        finally:            # cleanup            await exit_stack.aclose()
    return mcp_tool_executor

步骤5:使用上述函数创建搜索功能
我们需要确保为搜索功能提供正确的指令,以便LLM(大语言模型)能够解析自然语言查询,并在需要时调用搜索功能。通过mcp-youtube-search MCP服务器,定义了工具执行器。

# Step 5: Create YouTube search functionsearch_youtube = create_mcp_tool_executor(    command="mcp-youtube-search",    args=[],    env={"SERP_API_KEY": os.getenv("SERP_API_KEY")})
# Step 6: Add documentation for the LLMsearch_youtube.__name__ = "search_youtube"search_youtube.__doc__ = """Search for YouTube videos based on a search query.
Args:    search_query: The search terms to look for on YouTube (e.g., 'Google Cloud Next 25')    max_results: Optional. Maximum number of results to return (default: 10)
Returns:    List of YouTube videos with details including title, channel, link, published date,     duration, views, thumbnail URL, and description."""

步骤6:创建LlmAgent
我们将使用LlmAgentOllama/gemma3:12b来构建智能体。

已知问题:LiteLLM/Ollama的KeyError错误
目前存在一个已知问题,即Ollama返回的JSON格式响应与LiteLLM的解析方式不兼容,可能导致KeyError: 'name'错误。

venv/lib/python3.12/site-packages/litellm/llms/ollama/completion/transformation.py", line 266, in transform_response    "name": function_call["name"]KeyError: 'name'

问题原因:
当Ollama返回的JSON格式不符合工具调用(tool call)的特定结构时,会触发该错误。具体表现为:
KeyError: 'name' in litellm/llms/ollama/completion/transformation.py

当前状态:
我已向LiteLLM仓库提交了修复补丁(PR #9966),目前仍在审核合并中。

影响说明:
此缺陷可能导致以下问题:

  • 应用程序在使用Ollama模型进行函数调用(function calling)时崩溃
  • 程序陷入死循环

临时解决方案:

  1. 手动修补本地LiteLLM安装:

    • 应用PR #9966的修改内容
    • 覆盖文件路径:.venv/lib/python3.11/site-packages/litellm/llms/ollama/completion/transformation.py

注意事项:
若PR #9966已被合并到LiteLLM主分支,则无需采用上述临时方案。

# Step 7: Create the agent with instructions for formatting resultsagent = LlmAgent(    name="youtube_assistant",    model=LiteLlm(model="ollama/gemma3:12b"),    instruction="""You are a helpful YouTube video search assistant.Your goal is to use the search_youtube tool and present the results clearly.
1.  When asked to find videos, call the search_youtube tool.2.  The tool will return a JSON object. Find the list of videos in the 'results' field of this JSON.3.  For each video in the list, create a bullet point (*).4.  Format each bullet point like this: **Title** (Link) by Channel: Description. (Published Date, Views, Duration)    - Use the 'title', 'link', 'channel', 'description', 'published_date', 'views', and 'duration' fields from the JSON for each video.    - Make the title bold.    - Put the link in parentheses right after the title.5.  Your final response should ONLY be the formatted bullet list of videos. Do not include the raw JSON.6.  If the 'results' list in the JSON is empty, simply respond: "I couldn't find any videos for that search."""",    tools=[search_youtube],)

GitHub代码仓库:
本教程涉及的完整代码已开源,您可以通过以下地址访问:

https://github.com/arjunprabhulal/adk-mcp-gemma3

总结
本文演示了如何利用以下技术构建本地AI智能体:

  • 谷歌Agent Development Kit (ADK)开发框架
  • 通过Ollama集成的Gemma 3大语言模型
  • 基于Model Context Protocol (MCP)协议连接的外部工具链

如何学习AI大模型 ?

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

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

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

我意识到有很多经验和知识值得分享给大家,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。【保证100%免费】🆓

CSDN粉丝独家福利

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

读者福利: 👉👉CSDN大礼包:《最新AI大模型学习资源包》免费分享 👈👈

(👆👆👆安全链接,放心点击)

对于0基础小白入门:

如果你是零基础小白,想快速入门大模型是可以考虑的。

一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以根据这些资料规划好学习计划和方向。

👉1.大模型入门学习思维导图👈

要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。

对于从来没有接触过AI大模型的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。(全套教程文末领取哈)
在这里插入图片描述

👉2.AGI大模型配套视频👈

很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,每个章节都是当前板块的精华浓缩。

在这里插入图片描述
在这里插入图片描述

👉3.大模型实际应用报告合集👈

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。(全套教程文末领取哈)

在这里插入图片描述

👉4.大模型落地应用案例PPT👈

光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。(全套教程文末领取哈)

在这里插入图片描述

👉5.大模型经典学习电子书👈

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。(全套教程文末领取哈)
img

在这里插入图片描述

👉6.大模型面试题&答案👈

截至目前大模型已经超过200个,在大模型纵横的时代,不仅大模型技术越来越卷,就连大模型相关的岗位和面试也开始越来越卷了。为了让大家更容易上车大模型算法赛道,我总结了大模型常考的面试题。(全套教程文末领取哈)

在这里插入图片描述
👉学会后的收获:👈
基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习

CSDN粉丝独家福利

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

读者福利: 👉👉CSDN大礼包:《最新AI大模型学习资源包》免费分享 👈👈

(👆👆👆安全链接,放心点击)
Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐