news 2026/9/14 3:34:37

ADK 中 BigQuery AI.GENERATE 函数完全指南:语法、参数与 Agent 集成实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ADK 中 BigQuery AI.GENERATE 函数完全指南:语法、参数与 Agent 集成实战

ADK 中 BigQuery AI.GENERATE 函数完全指南:语法、参数与 Agent 集成实战

【免费下载链接】adk-pythonAn open-source, code-first Python toolkit for building, evaluating, and deploying sophisticated AI agents with flexibility and control.项目地址: https://gitcode.com/GitHub_Trending/ad/adk-python

本篇技术指南聚焦 ADK(adk-python)预置的bigquery-ai-mlSkill 中最核心的通用内容生成函数AI.GENERATE,系统讲解其 SQL 语法、输入参数、输出 STRUCT 结构,以及四个可直接运行的实战示例(文本生成、结构化输出、GCS 图片处理、Grounding 联网搜索)。读完本文,你将掌握在 ADK Agent 中通过execute_sql()使用AI.GENERATE的完整方法,并能结合BigQueryToolsetSkillToolset快速搭建数据洞察 Agent。

一、背景:bigquery-ai-mlSkill 与 AI.GENERATE 的定位

在 ADK 的 BigQuery 集成中,官方推荐优先使用 SQL Skill 而非专用高层工具来处理 AI/ML 类功能(如预测、异常检测)。这一约定明确写在预置 Skill 的说明文件 SKILL.md 中:

Agents should prefer using the Skill (SQL viaexecute_sql()) over dedicated BigQuery tools for functionalities like Forecasting and Anomaly Detection.

bigquery-ai-mlSkill 覆盖了 11 个AI.*系列函数,其中AI.GENERATE通用目的(general-purpose)的文本与内容生成函数,负责调用 Gemini 等模型完成摘要、抽取、问答、多模态理解等任务。其余函数各有分工:

函数用途参考文档
AI.FORECAST基于预训练 TimesFM 模型做时序预测bigquery_ai_forecast.md
AI.CLASSIFY将非结构化数据分类到预定义标签bigquery_ai_classify.md
AI.DETECT_ANOMALIES基于 TimesFM 识别时序异常bigquery_ai_detect_anomalies.md
AI.GENERATE通用文本与内容生成bigquery_ai_generate.md
AI.GENERATE_BOOL依据 prompt 生成布尔值(TRUE/FALSE)bigquery_ai_generate_bool.md
AI.GENERATE_DOUBLE依据 prompt 生成浮点数bigquery_ai_generate_double.md
AI.GENERATE_INT依据 prompt 生成整数bigquery_ai_generate_int.md
AI.IF求值自然语言布尔条件bigquery_ai_if.md
AI.SCORE按语义相关性排序(配合ORDER BYbigquery_ai_score.md
AI.SIMILARITY计算两个输入的余弦相似度bigquery_ai_similarity.md
AI.SEARCH在表上做语义搜索,自动生成 embeddingbigquery_ai_search.md

关键路由规则SKILL.md明确要求 Agent 在生成 SQL之前必须读取对应的参考文档,且严禁猜测文件名,只能使用表中给出的精确路径。本文所讲的AI.GENERATE完整语法即来自 bigquery_ai_generate.md。

二、AI.GENERATE 语法参考

AI.GENERATE的完整函数签名如下:

AI.GENERATE( [ prompt => ] 'PROMPT', [, endpoint => 'ENDPOINT'] [, model_params => 'MODEL_PARAMS'] [, output_schema => 'OUTPUT_SCHEMA'] [, connection_id => 'CONNECTION_ID'] [, request_type => 'REQUEST_TYPE'] )
  • 参数全部采用**命名参数(named argument)**形式,通过=>传值;
  • prompt外,其余参数均为可选项,可按需组合;
  • prompt可以是一个字符串字面量,也可以是由列名、字符串拼接(||)、元组((...))构成的表达式——下文示例会展示这三种用法。

三、输入参数详解

参数必填类型说明
prompt必填String传给模型的提示词文本或指令。可拼接列值、可传多模态内容(如图片引用)
connection_id可选StringBigQuery 连接 ID,格式形如my-project.us.my-connection。若通过其他方式配置(如默认连接)或仅做测试时可不填
endpoint可选String模型名称,例如'gemini-2.5-flash'。不指定时使用默认模型
output_schema可选String结构化输出的 Schema 定义,例如'answer BOOL, reason STRING',使模型返回符合该结构的字段而非自由文本
request_type可选String取值为'DEDICATED''SHARED',控制请求使用专用还是共享的资源通道
model_params可选JSONJSON 对象形式的模型参数,例如temperaturemax_output_tokens,以及 Grounding 工具配置(见下文)

各参数要点:

  • prompt与列数据的结合:最典型的用法是用||将列值与指令拼接,例如'Summarize this article: ' || article_content,让模型对每一行数据分别生成结果;也可以使用元组形式('指令', 列或表达式)同时传入多个内容片段。
  • endpoint决定模型能力:选择不同的endpoint会直接影响生成质量、速度与成本,示例中给出的'gemini-2.5-flash'是面向高吞吐、低成本场景的选择,你可以按任务复杂度替换为其他可用模型。
  • output_schema触发结构化输出:一旦指定,返回结果中原本的result字段将被 Schema 中定义的字段取代,模型输出将严格对齐字段名与类型,便于下游直接做类型化解析。
  • model_params的 Grounding 扩展:该参数不仅支持temperaturemax_output_tokens等常规采样参数,还能通过 JSON 内嵌工具声明启用 Google 搜索 Grounding(见示例四),让模型获得实时外部信息。

四、输出结构(Output Schema)

AI.GENERATE返回一个STRUCT,包含以下字段:

字段类型说明
resultSTRING(或自定义类型)生成的内容。若使用了output_schema,该字段被 Schema 中的字段取代
statusSTRINGAPI 响应状态,成功时为空字符串
full_responseJSON模型返回的完整原始 JSON 响应,包含安全评分(safety ratings)、用量元数据(usage metadata)等

理解这个返回结构对编写查询很重要:

  • 直接SELECT AI.GENERATE(...)会得到整个 STRUCT;若要只取文本,通常配合.*展开字段,或访问result字段;
  • status字段可用于在 SQL 中做错误处理判断——非空即表示本次生成未成功;
  • full_response保留完整的模型原始输出,便于审计、调试与计量 token 用量,适合在需要追溯生成过程的场景下保留。

五、实战示例

以下四个示例均直接取自参考文档,覆盖了AI.GENERATE最典型的四类使用场景。

5.1 基础文本生成

dataset.articles表中前 5 篇文章做摘要生成,prompt||拼接列值,指定 Gemini 模型与连接:

SELECT AI.GENERATE( 'Summarize this article: ' || article_content, connection_id => 'my-project.us.my-connection', endpoint => 'gemini-2.5-flash' ) as summary FROM `dataset.articles` LIMIT 5;

5.2 结构化输出生成

从发票文本中抽取日期与金额,通过output_schema强制模型输出DATEFLOAT64类型字段,返回结果可直接参与类型化运算:

SELECT AI.GENERATE( 'Extract the date and amount from this invoice: ' || invoice_text, output_schema => 'date DATE, amount FLOAT64' ) as extracted_data FROM `dataset.invoices`;

5.3 处理 Cloud Storage 桶中的图片

这是多模态能力的典型用法:先创建引用 GCS 图片的外部表,再用OBJ.GET_ACCESS_URL为每张图片生成带签名的访问 URL,并把图片与指令以元组形式传入prompt,配合output_schema要求模型返回图片描述与实体数组,最后用.*展开 STRUCT 字段:

CREATE SCHEMA IF NOT EXISTS bqml_tutorial; CREATE OR REPLACE EXTERNAL TABLE bqml_tutorial.product_images WITH CONNECTION DEFAULT OPTIONS ( object_metadata = 'SIMPLE', uris = ['gs://cloud-samples-data/bigquery/tutorials/cymbal-pets/images/*.png']); SELECT uri, STRING(OBJ.GET_ACCESS_URL(ref,'r').access_urls.read_url) AS signed_url, AI.GENERATE( ("What is this: ", OBJ.GET_ACCESS_URL(ref, 'r')), output_schema => "image_description STRING, entities_in_the_image ARRAY<STRING>").* FROM bqml_tutorial.product_images WHERE uri LIKE "%aquarium%";

要点:

  • 外部表通过WITH CONNECTION DEFAULT OPTIONS声明,object_metadata = 'SIMPLE'只读取对象元数据,uris以通配符形式批量指向桶内图片;
  • prompt的元组写法("What is this: ", OBJ.GET_ACCESS_URL(ref, 'r'))将指令与图片一并交给多模态模型;
  • 返回的result字段已被output_schema替换为image_descriptionentities_in_the_image两个字段,.*展开后每行图片直接得到结构化描述。

5.4 使用 Grounding(联网搜索)

通过model_params传入JSON '{"tools": [{"googleSearch": {}}]}',让模型在生成前借助 Google 搜索获取实时信息,从而回答天气这类依赖时效性数据的问题:

SELECT name, AI.GENERATE( ('Please check the weather of ', name, ' for today.'), model_params => JSON '{"tools": [{"googleSearch": {}}]}' ) FROM UNNEST(['Seattle', 'NYC', 'Austin']) AS name;

UNNEST数组展开后,三座城市各生成一行查询,模型会为每座城市分别进行联网检索并返回当日天气结论。

六、在 ADK Agent 中集成 bigquery-ai-ml Skill

bigquery-ai-mlSkill 以预打包形式随 ADK 分发,官方加载入口是 bigquery_skill.py 中的get_bigquery_skill(),其内部通过load_skill_from_dir()加载skills/bigquery-ai-ml目录(遵循 agentskills.io 规范)。参考文档中给出的集成骨架如下:

from google.adk.tools.bigquery import BigQueryToolset from google.adk.tools.bigquery.bigquery_skill import get_bigquery_skill from google.adk.tools.skill_toolset import SkillToolset bq_skill = get_bigquery_skill() toolset = SkillToolset(skills=[bq_skill]) bigquery_toolset = BigQueryToolset(...) agent = LlmAgent(tools=[bigquery_toolset, toolset])

这样配置后,Agent 同时获得两类能力:BigQueryToolset提供execute_sqllist_table_idsget_table_info等查询与元数据工具(当前实现在 src/google/adk/integrations/bigquery 模块下),而SkillToolset让 Agent 能按 SKILL.md 的强制路由规则先读取参考文档、再据此写出正确的AI.GENERATESQL。

更完整的可运行 Agent 示例见 contributing/samples/integrations/bigquery/agent.py,该示例展示了四种凭据模式的配置方式:

  • ADC(Application Default Credentials)CREDENTIALS_TYPE = None,适合本地开发,通过google.auth.default()获取凭据;
  • 服务账号AuthCredentialTypes.SERVICE_ACCOUNT,从service_account_key.json加载并刷新凭据;
  • 交互式 OAuthAuthCredentialTypes.OAUTH2,依赖OAUTH_CLIENT_ID/OAUTH_CLIENT_SECRET环境变量;
  • 外部 Access TokenAuthCredentialTypes.HTTP,通过external_access_token_key="AUTH_ID"从 tool context 读取 Gemini Enterprise 注入的令牌。

同时可通过BigQueryToolConfig控制写入策略:write_mode的默认值是BLOCKED(只读),演示时可用ALLOWED,会话匿名数据集场景可考虑PROTECTEDmax_query_result_rows用于限制返回行数(示例中设为 50)。值得说明的是,bigquery-ai-ml的查询行为本身由 BigQuery 侧模型能力决定,上述工具配置主要影响 SQL 的执行通道与权限边界。

七、工程质量保障:Skill 的测试验证

ADK 为bigquery-ai-mlSkill 提供了专门的单元测试 test_bigquery_skill.py,从多个维度保证该 Skill 与AI.GENERATE参考文档可被 Agent 正常加载使用:

  • Skill 元数据完整get_bigquery_skill()返回的 Skill 名称必须为 kebab-case 的bigquery-ai-ml,且与目录名一致,description 与 instructions 非空(test_get_bigquery_skill_returns_valid_skilltest_skill_name_matches_spec);
  • 参考文档齐全非空:包括bigquery_ai_generate.md在内的全部 11 个参考文件必须存在且内容非空(test_skill_has_expected_references);
  • 与 SkillToolset 无缝集成:Skill 挂载到SkillToolset后应产出 4 个工具——ListSkillsToolLoadSkillToolLoadSkillResourceToolRunSkillScriptTooltest_skill_works_with_skill_toolset);
  • 通过内置校验器:Skill 目录必须通过_validate_skill_dir校验,且 frontmatter 中 license 为Apache-2.0、metadata 含 author 与 version 字段(test_skill_passes_validationtest_skill_frontmatter_has_licensetest_skill_frontmatter_has_metadata)。

这些测试保证了:只要 Agent 走 Skill 路由,就一定能读取到本文所讲的AI.GENERATE权威语法,而不会出现“猜测文件名导致加载失败”的情况。

八、使用建议与注意事项

  1. 遵循强制路由:在 ADK Agent 中使用AI.GENERATE时,应始终先让 Agent 读取 bigquery_ai_generate.md 再生成 SQL,不要凭记忆构造语法。
  2. 优先 Skill 而非专用工具:按SKILL.md的约定,AI/ML 类查询统一通过execute_sql()+AI.*函数完成,这比维护专用高层工具更简洁、可控。
  3. 结构化输出优先:需要下游程序化消费结果时,务必使用output_schema,让模型输出严格对齐字段类型(如DATEFLOAT64ARRAY<STRING>),减少后处理成本。
  4. 善用full_responsestatus:生产环境建议保留full_response用于审计与用量统计,并借助status字段识别失败调用。
  5. 凭据与写入安全:生产部署优先使用服务账号或 Gemini Enterprise 托管令牌,write_mode保持默认BLOCKED只读模式,避免 Agent 误写数据。

通过本文,你已掌握AI.GENERATE的完整语法、参数语义、四种实战模式,以及如何在 ADK 中通过get_bigquery_skill()SkillToolset将其接入 Agent——下一步即可在真实 BigQuery 数据上验证这些 SQL,构建自己的数据智能体。

【免费下载链接】adk-pythonAn open-source, code-first Python toolkit for building, evaluating, and deploying sophisticated AI agents with flexibility and control.项目地址: https://gitcode.com/GitHub_Trending/ad/adk-python

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

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

SpringBoot环保网站开发:毕业设计实战指南

1. 项目概述与核心价值这个基于SpringBoot的环境保护宣传网站项目&#xff0c;本质上是一个典型的计算机专业毕业设计解决方案包。它包含了从技术实现到论文撰写的完整闭环&#xff0c;特别适合需要快速搭建环保类Web应用的学生开发者。我经手过二十多个类似项目&#xff0c;这…

作者头像 李华
网站建设 2026/9/14 3:33:09

小番茄目标检测数据集:从VOC XML到YOLO训练全流程解析

简介&#xff1a;这是一份面向计算机视觉与智慧农业领域的小番茄目标检测数据集&#xff0c;包含不同光照、拍摄角度下的果实图像及对应XML标注&#xff0c;能够支撑YOLO等主流目标检测算法的训练、验证与优化&#xff0c;常用于果实成熟度判别、自动化采摘等任务。资源包总计1…

作者头像 李华
网站建设 2026/9/14 3:32:08

威尔伯福斯摆:耦合振动建模、实时参数辨识与教学可视化系统

简介&#xff1a;本资源为2021年全国大学生物理实验竞赛一等奖获奖项目——威尔伯福斯摆&#xff08;Wilberforce Pendulum&#xff09;的完整开源实现&#xff0c;面向物理类本科生、实验课程教师及对振动与耦合动力学感兴趣的科研初学者。项目聚焦共振耦合现象&#xff0c;系…

作者头像 李华
网站建设 2026/9/14 3:31:53

PHP双端适配软件分发系统:PC+移动端分离架构与会话安全实践

简介&#xff1a;这是一套开箱即用的软件下载系统网站源码&#xff0c;面向Web开发初学者、中小型项目开发者及个人站长&#xff0c;解决软件分发平台快速搭建需求。系统原生支持PC端与移动端双适配&#xff0c;具备分类浏览、关键词搜索、下载管理及基础用户交互能力&#xff…

作者头像 李华
网站建设 2026/9/14 3:30:23

C++常用数据结构与STL函数实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/14 3:29:18

turbostat详解:用Linux命令行工具监控CPU频率与功耗

简介&#xff1a;面向Linux/Unix系统管理员与开发者的Intel处理器性能监控资源&#xff0c;提供turbostat工具的核心C语言源代码。turbostat是一款命令行实用程序&#xff0c;能够实时显示CPU在Turbo Boost动态加速下的工作频率变化&#xff0c;并统计各C-state&#xff08;C0、…

作者头像 李华