Skip to main content
Vertex AI 上的 Gemini 可以调用你提供的搜索 API,并将返回结果作为 grounding 的信息来源。本指南将在 Cloud Run 上部署一个简短的适配器,它会把 Gemini 的请求转换为 Firecrawl 搜索,并按 Gemini 要求的格式返回结果。
Google 在文档中将此功能称为 Grounding with your search API。本指南中的适配器运行在你自己的 Google Cloud 项目中,其发起的搜索费用将计入你的 Firecrawl 账户。

工作原理

  1. 你发送给 Gemini 的请求中包含一个类型为 externalApi 的检索工具,该工具指向你的适配器。
  2. 当 Gemini 需要信息时,会向适配器发送 POST {"query": "..."},并以 ?key= 的形式附加你的 API 密钥。
  3. 适配器调用 Firecrawl /v2/search,并返回一个由 object 组成的 JSON 数组,每个 object 都包含 snippet 和 uri。空数组表示没有结果。
  4. Gemini 将这些 snippet 作为 grounding 来源,并在响应的 groundingMetadata 中列出。

前提条件

  • 一个 Firecrawl API 密钥
  • 一个已启用计费、Vertex AI 和 Cloud Run 的 Google Cloud 项目,并已通过 gcloud CLI 登录
  • 一个支持基于你的搜索 API 进行 grounding (接地) 的 Gemini 模型。Google 在上方链接的页面中列出了支持的模型,gemini-2.5-flash 就是其中之一。

构建适配器

创建一个文件夹,并在其中添加以下三个文件。
适配器从 ?key= 读取密钥,并将其作为 Bearer 令牌发送给 Firecrawl,因此你提供给 Gemini 的 apiKeyString 就是你的 Firecrawl API 密钥。密钥缺失或被拒绝时,返回 401。Dockerfile 启动 gunicorn 时不启用访问日志,因为访问日志会记录 ?key= 的值。适配器也从不记录查询内容或密钥。

部署到 Cloud Run

该命令会输出一个服务 URL,在其后加上 /v0/search 即为你的端点。由于 Gemini 无法为此调用附加 Google 身份令牌,该服务需允许未经身份验证的请求,并依靠 ?key= 检查进行访问控制。

避免 Firecrawl API 密钥出现在 URL 中

Cloud Run 会为每个服务保留请求日志,其中会记录请求 URL。为避免 Firecrawl API 密钥被写入日志,请以 gateway 模式运行适配器:由您选择一个共享密钥供 Gemini 发送,适配器则从 Secret Manager 中读取 Firecrawl API 密钥。
在这两个密钥上,为该服务的运行时服务账户授予 roles/secretmanager.secretAccessor 角色。在此模式下,apiKeyString 即为网关密钥,可通过 gcloud secrets versions access latest --secret grounding-gateway-key 读取。

检查端点

你会获取到一个 object 数组,每个 object 都包含 snippet 和 uri。如果请求中未带 ?key=,服务会返回 401。

为 Gemini 请求接入 grounding

将 YOUR_SERVICE_URL 替换为你的服务主机地址,将 YOUR_KEY 替换为你的 Firecrawl API 密钥;如果以 gateway 模式部署,则替换为 gateway 密钥。如需使用 global 以外的区域位置,请参照 Google 的参考文档,将主机设为 LOCATION-aiplatform.googleapis.com。 Gemini 所用的信息来源位于响应的 candidates[0].groundingMetadata.groundingChunks 下。在 REST 响应中,每个 chunk 的 retrievedContext 都包含你的适配器返回的 uri 和 snippet。

选项

请在 Cloud Run 服务上将以下选项设置为环境变量,例如:gcloud run services update firecrawl-grounding --update-env-vars RESULT_LIMIT=5。

选择 snippet

Gemini 以 snippet 文本作为回答依据,因此 snippet 的内容比链接更重要。默认使用 Firecrawl 搜索返回的描述。搜索默认会在该字段中返回与 query 相关的重点摘录,无法生成时则回退为页面的普通描述,因此每个 snippet 都是针对该 query 挑选出的段落。markdown 模式会截取每个结果正文的开头部分,而在某些网站上,这部分可能是文章前面的横幅或菜单,因此通常效果较差。此外,它还会让每个 Firecrawl 响应大幅增大。仅当你关注的结果缺少有用的描述时,才建议使用该模式。

限制与行为

  • Google 允许单次生成请求最多使用 10 个 grounding 信息来源,你也可以将此工具与 Google Search 等其他工具搭配使用。
  • Google 的页面未说明你的端点的最大响应大小或超时时间。请确保适配器响应迅速,并尽量缩短 snippet。在默认设置下,一个响应最多包含 10 个 snippet,每个不超过 1,200 个字符。
  • Firecrawl 搜索支持最长 500 个字符的查询,超出部分会被适配器截断。
  • 每个查询对应一次 Firecrawl 搜索请求,因此 Gemini 发起的每次搜索都会计入你的限流和计费。
  • Gemini 每决定执行一次搜索,就会调用一次适配器;单个请求可能触发多次调用。