跳到正文

函数调用、Google 搜索联网与托管智能体

用函数调用把 Gemini 接到真实的操作上,用 Google 搜索联网让它的回答有实时依据,再把开放式的多步任务交给托管智能体沙箱去完成。

当前有效最后核验

适用平台

  • Gemini API(Python、JavaScript、Java、REST)

官方文档怎么说

  • 函数调用让你把 Gemini 接到外部工具和 API 上;模型不会直接生成文本回答,而是判断该调用哪个具体函数,并给出执行真实操作所需的参数。

    Function calling with the Gemini API
  • 函数调用文档中给出的三个主要使用场景是——执行操作(预约、发邮件、控制智能家居设备)、扩充知识(访问数据库、API、知识库)、扩展能力(使用计算器、生成图表)。

    Function calling with the Gemini API
  • 一个函数需要定义 type、name、description,以及一个 JSON Schema 风格、列出必填字段的 parameters 对象;它作为 type 为 function 的工具传给 interactions.create,模型返回的是一个指明函数名和参数的 function_call 步骤,而不是自己去调用它。

    Function calling with the Gemini API
  • Google 搜索联网让 Gemini 连接到实时网页内容,支持所有可用语言,能减少幻觉、回答关于近期事件的问题,并提供引用来源。

    Grounding with Google Search
  • 联网通过添加一个 type 为 google_search 的工具来启用;模型会自动判断搜索是否能改善回答,自行生成并执行查询,返回的响应带有内联引用标注,以及 google_search_call 和 google_search_result 步骤。

    Grounding with Google Search
  • 联网响应的文本输出里包含内联的 annotations,把具体的表述和对应的引用来源关联起来。

    Grounding with Google Search
  • 托管智能体只需一次 API 调用就能配置好一整套智能体运行环境——一个 Linux 沙箱,智能体在里面自主进行推理、执行代码、管理文件、浏览网页。

    Managed agents on the Gemini API
  • 目前可用的托管智能体是 Antigravity agent(基于 Gemini 3.8 Flash 的通用型智能体,可以通过 agent_config 配置成其他模型,运行在 Google 托管的安全 Linux 沙箱里)和 Deep Research(自主规划、执行并综合多步研究任务的智能体)。

    Managed agents on the Gemini API
  • 托管智能体目前处于 Public Preview 阶段;每个智能体的沙箱在操作系统层面是隔离的,默认对外网络访问不受限制,可以用网络白名单来限制。

    Managed agents on the Gemini API
  • 托管智能体的运行环境在连续 7 天不活跃后会被永久删除,虚拟机在短暂空闲后会自动挂起(下一次请求会恢复状态,但要经历冷启动);最多可以拥有 1,000 个托管智能体;预览期间环境计算资源不计费。

    Managed agents on the Gemini API
  • Gemini 也可以通过外部框架构建进智能体——LangChain/LangGraph、LlamaIndex、CrewAI 和 Vercel AI SDK 都是文档记录在案的集成方式。

    Managed agents on the Gemini API

函数调用:Gemini 决定,你的代码去执行

函数调用是 Gemini 走出纯文本生成、接到真实系统上的方式——但它自己从不执行任何操作。你描述一个函数的名称、说明和参数;模型判断什么时候调用它会有帮助,然后返回一个 function_call 步骤,指明该调用哪个函数、用什么参数。真正去执行,是你的事。

from google import genai

schedule_meeting_function = {
    "type": "function",
    "name": "schedule_meeting",
    "description": "Schedules a meeting with specified attendees at a given time and date.",
    "parameters": {
        "type": "object",
        "properties": {
            "attendees": {"type": "array", "items": {"type": "string"}},
            "date": {"type": "string", "description": "Date (e.g., '2024-07-29')"},
            "time": {"type": "string", "description": "Time (e.g., '15:00')"},
            "topic": {"type": "string", "description": "The meeting topic."},
        },
        "required": ["attendees", "date", "time", "topic"],
    },
}

client = genai.Client()

interaction = client.interactions.create(
    model="gemini-3.8-flash",
    input="Schedule a meeting with Bob and Alice for 03/14/2025 at 10:00 AM about Q3 planning.",
    tools=[{"type": "function", **schedule_meeting_function}],
)

for step in interaction.steps:
    if step.type == "function_call":
        print(f"Function to call: {step.name}")
        print(f"Arguments: {step.arguments}")

判断函数调用是否适合某个场景时,文档给出的三个使用场景值得分清楚:执行操作(预约、发邮件、控制设备)、扩充知识(接入模型本身没有内置访问权限的数据库或 API)、扩展能力(把精确计算或生成图表这类事情交给真正擅长它的工具)。

Google 搜索联网:不只是事实,还有引用

函数调用把工作交给你的代码,Google 搜索联网则交给 Gemini 自己。加上 google_search 工具,模型会按每次请求自行判断搜索是否有帮助,执行搜索,再把结果融进回答里——带着内联引用,而不只是一段没有出处的文本:

interaction = client.interactions.create(
    model="gemini-3.8-flash",
    input="Who won the euro 2024?",
    tools=[{"type": "google_search"}]
)

print(interaction.output_text)

响应的文本内容里带有 annotations,把具体的表述和对应的来源关联起来,同时还有记录了实际搜索内容的 google_search_callgoogle_search_result 步骤。文档把这一点定位为这个功能的核心价值——减少幻觉,让你能向用户展示答案的出处——所以要把引用来源当成需要展示出来的输出的一部分,而不是可以丢弃的元数据。

托管智能体:把整个任务都交出去

函数调用和联网检索都是在延伸单次交互。托管智能体更进一步——一次 API 调用就配置好一个隔离的 Linux 沙箱,智能体在里面推理、写代码、跑代码、管理文件、浏览网页,横跨很多步骤,全部自主完成。

目前有两种可用:Antigravity,基于 Gemini 3.8 Flash 的通用型智能体(可以通过 agent_config 配置成其他模型),以及 Deep Research,专门为规划、执行、综合多步研究任务打造。

在依赖它之前,有几个运行细节值得了解:

  • Public Preview 阶段。 在依赖托管智能体处理敏感工作流之前,先审查它的操作和输出——这是文档自身的表述,不是这里额外加的提醒。
  • 默认对外网络访问不受限制。 用网络白名单把它限定到任务实际需要的域名。
  • 运行环境会过期。 连续 7 天不活跃后会被永久删除;空闲一段时间的虚拟机会挂起,下一次请求会冷启动恢复。
  • 最多 1,000 个托管智能体,预览期间环境计算资源不计费——不过模型 token 和工具调用仍然计费。

如果托管智能体的 Linux 沙箱对你来说超出了需要,Gemini 也集成了 LangChain/LangGraph、LlamaIndex、CrewAI 和 Vercel AI SDK,可以自己搭建一套控制力更强的智能体循环。

怎么选对层级

有具体、定义明确、需要你自己代码去执行的操作时,用函数调用。只需要回答保持实时并带引用、不涉及自定义逻辑时,用 Google 搜索联网。任务本身是开放式、多步骤的——也就是那种你原本要手动循环调用函数才能完成的事——用托管智能体。把多模态输入和这些能力结合起来——比如让智能体因为看到了图片里的内容而去采取行动——正是多模态理解和这篇教程交汇的地方。

实际操作

  1. 函数调用场景下,先定义函数的 type、name、description 和 JSON Schema 格式的 parameters,再把它作为工具传给 client.interactions.create。
  2. 检查返回的 steps 里有没有 function_call 条目,自己用给出的参数执行对应函数,需要的话把结果通过后续调用传回去。
  3. 联网检索场景下,加一个 type 为 google_search 的工具,让模型自行按每次请求判断要不要搜索。
  4. 除了 interaction.output_text,还要读联网响应里的内联 annotations,把引用来源也展示出来,不只是答案文本。
  5. 遇到多步骤任务时,用托管智能体(Antigravity 或 Deep Research)代替自己手动循环调用函数,授予敏感凭据之前先用网络白名单收紧它的访问范围。

Windows 步骤

不适用函数调用、联网检索和托管智能体都是 API 层面的能力,跟操作系统无关。

手机步骤

不适用这篇教程讲的是服务端和脚本化场景下使用工具和智能体,不涉及移动端客户端。

使用案例

  • 让 Gemini 从一句自然语言消息里,用函数调用生成内部 API 需要的精确预约或排期参数。
  • 打开 Google 搜索联网,而不是依赖模型的训练数据,构建一个能标注来源的客服或研究助手。
  • 把研究一个主题并产出报告这种开放式、多步骤的任务,交给托管智能体,而不是自己一步步编排。

常见错误

  • 以为函数调用会真的执行那个操作。模型只会返回一个带函数名和参数的 function_call 步骤——真正调用函数、并且通常还要在后续轮次里把结果传回去,是你自己代码的责任。
  • 把 Google 搜索联网当成默认一直开启的功能。它只有在加入 google_search 工具时才会运行,而且即便加了,模型也是按每次请求自行判断要不要真的搜索。
  • 把联网响应里的引用来源当成可有可无的元数据直接忽略。文档把提供引用来源明确定位为这个功能的核心价值之一,不是附带产物。
  • 忘了托管智能体处于 Public Preview 阶段,把它的输出当成已经完全审核过的结果直接用在敏感场景——文档明确建议在依赖之前先审查智能体的操作和输出。
  • 明明只需要少数几个域名,却让托管智能体的网络访问保持默认的不受限状态——网络白名单存在的意义正是用来收紧这一点。

常见问题

Gemini 真的会自己执行调用的函数吗?
不会。它只返回一个 function_call 步骤,说明该调用哪个函数、传什么参数——由你的应用代码去实际执行。这样可以避免模型自己直接对现实世界采取行动。
函数调用文档里说的三个使用场景是什么?
执行操作(调用外部 API 完成某件事)、扩充知识(接入模型本身没有的数据)、扩展能力(把计算或生成图表这类任务交给更擅长的外部工具)。
Google 搜索联网和函数调用有什么区别?
联网检索时,Gemini 自己生成并执行搜索查询,再把结果综合进回答——你不需要实现任何东西。函数调用则是你定义函数,模型提出请求之后,由你自己的代码去执行。
托管智能体具体是什么?
一个由 Google 托管、操作系统层面隔离的 Linux 沙箱,通过一次 API 调用就能配置好,智能体在里面自主推理、运行代码、管理文件、浏览网页。目前有 Antigravity(通用型)和 Deep Research(专注研究)两种。
让托管智能体在敏感数据上无人值守地运行安全吗?
按文档的说法,不安全,除非先审查。托管智能体目前是 Public Preview,Google 自己的指导建议是——在依赖智能体的输出之前先验证,并把凭据和网络访问范围限定在最小必要程度。

官方来源

这些是本教程对照核验的官方页面。需要厂商的原始措辞时请直接查阅。

来源状态