人工智能AI 应用交互助手AI Agent【免费下载链接】ironclawIronClaw is an Agent OS focused on privacy, security and extensibility项目地址https://gitcode.com/gh_mirrors/iro/ironclaw点击查看免费下载本篇技术指南以 IronClaw 扩展包google-sheets中的batch_read_values工具为对象讲解如何通过 capability id 驱动的调用方式一次性读取多个 A1 记法区间range的单元格数据并深入其 WASM 沙箱实现与 JSON Schema 参数契约帮助读者掌握批量读表的最佳实践及背后的权限、凭证与错误处理机制。工具定位capability id 驱动的批量读取操作batch_read_values是 IronClaw 的google-sheets扩展extension id 为google-sheets提供的 11 个工具之一。根据包内 README该扩展是一个data-only package不包含 Rust crate工具本体以 WASM guest 形式随wasm/google_sheets_tool.wasm交付源码位于 wasm-src/src。该工具的功能一句话概括Read values from multiple ranges从多个区间读取值对应 Google Sheets API v4 的spreadsheets.values.batchGet端点。工具的原始提示文档 batch_read_values.md 只有三句话但含义精炼Read values from multiple ranges. The host selects this operation from the capability id. Provide only the parameters described by the input schema; do not include an action field.这三句话揭示了 IronClaw 扩展工具调用的两个核心约定能力标识capability id选择操作调用方不需要在参数里声明我要执行哪个动作操作由宿主host根据 capability id 决定。对批量读取而言capability id 就是google-sheets.batch_read_values。严格遵循输入 Schema请求参数只能包含输入 Schema 中声明的字段严禁携带action字段——这一点在源码层面有强制校验下文会展开。输入参数契约spreadsheet_id 与 rangesbatch_read_values的输入由 batch_read_values.input.v1.json 定义JSON Schema draft-07{ $schema: http://json-schema.org/draft-07/schema#, title: Google Sheets batch_read_values, description: Read values from multiple ranges., type: object, required: [spreadsheet_id, ranges], properties: { spreadsheet_id: { type: string, description: The spreadsheet ID. }, ranges: { type: array, items: { type: string, description: A1 notation range. }, description: A1 notation ranges. } }, additionalProperties: false }两个必填参数参数类型必填说明spreadsheet_idstring是电子表格 ID与 Google Drive 文件 ID 相同rangesstring[]是一个或多个 A1 记法区间例如Sheet1!A1:D10additionalProperties: false意味着传入任何未声明的字段都会被拒绝从 Schema 层面杜绝了多余参数与注入风险。关于 spreadsheet_id 的获取从 lib.rs 的模块文档可以确认Spreadsheet ID 与 Google Drive 文件 ID 相同若用户只提供了电子表格名称/标题应先用google-drive扩展的list_files工具按名称/标题查找文件拿到 ID 后再调用本工具。A1 记法要点ranges数组中的每个元素都是 A1 记法字符串支持多种写法见 lib.rs指定工作表与矩形区域Sheet1!A1:D10省略工作表名使用第一个工作表A1:B5整列范围Sheet1!A:E整行范围Sheet1!1:10注意批量读取与单区间读取共用同一套 A1 解析约定因此格式完全一致。底层实现WASM 工具如何调用 batchGet 端点batch_read_values的实现位于 api.rs其核心逻辑如下pub fn batch_read_values( spreadsheet_id: str, ranges: [String], ) - ResultBatchValuesResult, GuestFailure { let range_params: VecString ranges .iter() .map(|r| format!(ranges{}, url_encode(r))) .collect(); let path format!( {}/values:batchGet?{}, url_encode(spreadsheet_id), range_params.join() ); let response api_call(GET, path, None)?; // 解析 response[valueRanges]逐个映射为 ValuesResult // ... Ok(BatchValuesResult { value_ranges }) }关键调用链URL 构造基于常量SHEETS_API_BASE https://sheets.googleapis.com/v4/spreadsheets见 api.rs拼出GET https://sheets.googleapis.com/v4/spreadsheets/{spreadsheet_id}/values:batchGet?rangesA1rangesB2这样的请求URL 编码每个ranges参数都经过urlencoding::encodeapi.rs因此包含特殊字符的区间名也能安全传输宿主 HTTP 能力所有网络请求都经由host::http_request发出api.rsWASM 工具永远看不到真实的 OAuth token——凭证注入由宿主完成这是 IronClaw 安全模型的核心设计。返回结构valueRanges 数组batch_read_values的响应类型是BatchValuesResult定义在 types.rspub struct BatchValuesResult { pub value_ranges: VecValuesResult, }其中每个ValuesResulttypes.rs对应一个被请求的区间pub struct ValuesResult { pub range: String, // 返回区间服务端归一化后的 A1 记法 pub values: VecVecserde_json::Value, // 二维数组外层行内层列 }解析逻辑位于 api.rs从响应的valueRanges数组中取出每一项提取range与values字段并映射为ValuesResult。由于values的元素类型是serde_json::Value单元格内容可以是字符串、数字、布尔值等任意 JSON 标量。一次真实的调用示例假设要同时读取Sheet1!A1:D10与Sheet2!A1:B5{ spreadsheet_id: 1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms, ranges: [Sheet1!A1:D10, Sheet2!A1:B5] }返回结果形如{ value_ranges: [ { range: Sheet1!A1:D10, values: [ [Name, Age, City, Score], [Alice, 30, Shanghai, 95], [Bob, 25, Beijing, 88] ] }, { range: Sheet2!A1:B5, values: [ [Item, Price], [Laptop, 7999] ] } ] }注意若某个区间为空服务端返回的values可能缺失此时解析逻辑会退化为空数组unwrap_or_default调用方应做好空结果容错。调用约束为什么不能携带 action 字段提示文档明确要求do not include an action field这在 lib.rs 的params_with_action中有强制实现if obj.contains_key(action) { return Err(input_failure(invalid_parameters)); } obj.insert(action, serde_json::Value::String(action.to_string()));也就是说宿主根据 capability id 解析出动作名google-sheets.batch_read_values→batch_read_values映射见 lib.rs由工具内部注入action字段如果调用方自己带上了action会直接得到ErrorKind::Input、code 为invalid_parameters的失败响应。该行为有单元测试背书lib.rs。此外工具对外公布的 Schema 由GoogleSheetsAction枚举通过schemars派生生成lib.rs保证广告的 schema 与 serde 反序列化契约永不漂移。权限模型只读 scope 与逐工具凭证注入batch_read_values在 manifest.toml 中声明如下元数据[[tools]] origin_gate_matrix { loop_run gated_unless_granted, product forbidden, automation forbidden } id google-sheets.batch_read_values description Read values from multiple ranges. effects [network, use_secret] default_permission ask visibility model input_schema_ref schemas/google-sheets/batch_read_values.input.v1.json prompt_doc_ref prompts/google-sheets/batch_read_values.md [[tools.credentials]] handle google_runtime_token vendor google scopes [https://www.googleapis.com/auth/spreadsheets.readonly] audience { scheme https, host sheets.googleapis.com } injection { type header, name authorization, prefix Bearer }几个值得注意的细节只读 scopebatch_read_values申请的是spreadsheets.readonly而不是写操作使用的spreadsheets。这是最小权限原则的体现——批量读取工具永远不需要写权限Bearer 头注入凭证以Authorization: Bearer token形式由宿主注入请求头WASM guest 不可见 token 本身效果声明effects [network, use_secret]即该工具会发起网络请求并消费密钥但不会产生外部写入对比write_values等工具还带external_write来源门控origin_gate_matrix规定该工具在 loop 运行中是gated_unless_granted默认询问、授权后可免确认在 product 与 automation 场景下被禁止默认权限default_permission ask即默认需要用户确认后才执行。OAuth 流程本身配置在[auth.google]manifest.tomloauth2_code授权码模式、PKCE S256、access_typeoffline换取长期 refresh token并要求promptconsent。宿主还会在 604800 秒7 天空闲前主动刷新 tokenkeepalive_idle_seconds规避 Google 对 testing 状态应用 refresh token 7 天失效的限制。同时宿主在 network.rs 维护了 HTTPS 域名白名单www.googleapis.com、gmail.googleapis.com、calendar.googleapis.com、oauth2.googleapis.comWASM 工具只能访问白名单内的主机网络层面进一步收敛攻击面。与单区间读取 read_values 的对比google-sheets包同时提供read_values单区间与batch_read_values多区间两个只读工具。选择建议维度read_valuesbatch_read_values参数spreadsheet_idrange单个字符串spreadsheet_idranges字符串数组底层端点GET /values/{range}GET /values:batchGet?ranges...返回结构单个ValuesResultBatchValuesResult含value_ranges数组适用场景读取一个明确的区域一次读取多个分散区域如多个 sheet tab、多个命名区域当模型需要同时汇总多个 sheet 或多个不相邻区域的数据时batch_read_values可将多次往返合并为一次请求既减少网络开销也让单次工具调用携带更完整的上下文。若要读取的只是单一区域使用read_values语义更简洁。错误处理与失败信号工具失败的返回遵循 IronClaw 的GuestFailure契约lib.rs包含kind错误类别与稳定的code机器可读信号。针对 Google Sheets 批量读取重点错误码包括401 认证失败kind AuthRequiredcode 为google_api_error_status_401api.rs提示 token 失效或用户未授权应触发重新授权流程非 2xx 状态kind Clientcode 为api_status_{status}如 429 限流message 内含服务端返回的受限文本上限 512 字符见bounded_message网络/传输失败由host::http_request的错误映射为NetworkDenied、Executor等类别api.rs参数非法kind Input如invalid_parameters调用方携带action或 JSON 无法反序列化。这些错误码有单元测试覆盖api.rs是宿主与工具之间稳定、可编程的失败信号Agent 侧可根据 code 决定是重试、提示授权还是转交人工。验证与测试入口google-sheets包的正确性由以下机制保障manifest 投影校验cargo test -p ironclaw_extension_registry校验 manifest 中input_schema_ref与prompt_doc_ref的引用完整性与 schema 一致性见 READMEWASM 产物新鲜度python3 scripts/ci/check-wasm-artifact-freshness.py校验提交的wasm/google_sheets_tool.wasm与wasm-src/源码是否一致防止产物漂移gsuite 包集成ironclaw_extension_support通过packages::gsuite将本包嵌入宿主见 packages/mod.rs相关契约在 gsuite_core.rs 中有集成测试覆盖。小结google-sheets.batch_read_values是 IronClaw 扩展体系中小工具、严契约设计的典型样本输入侧由 JSON Schema 强制约束spreadsheet_idranges拒绝多余字段输出侧返回结构化的value_ranges二维数组实现上由 WASM guest 构造values:batchGet请求经宿主 HTTP 能力与只读 scope 凭证spreadsheets.readonly完成调用全程 token 对 guest 不可见。掌握它的参数契约、A1 记法与错误码约定即可在 Agent 工作流中高效、安全地实现跨区域批量取数。赞分享人工智能AI 应用交互助手AI Agent【免费下载链接】ironclawIronClaw is an Agent OS focused on privacy, security and extensibility项目地址https://gitcode.com/gh_mirrors/iro/ironclaw点击查看免费下载相关推荐IronClaw Google Sheets 扩展 create_spreadsheet 能力全解析参数契约、WASM 调用链与安全模型IronClaw Google Sheets 扩展 create_spreadsheet 能力全解析参数契约、WASM 调用链与安全模型 IronClaw 是人工智能AI 应用交互助手AI AgentSeaTunnel GoogleSheets 源连接器实战基于 Google Sheets API 的表格数据批量读取指南SeaTunnel GoogleSheets 源连接器实战基于 Google Sheets API 的表格数据批量读取指南 本文以 SeaTunnel 官方文数据集成ETL大数据批处理流处理变更数据捕获IronClaw 零开销延迟追踪宏ironclaw_observability 的设计契约与实现剖析IronClaw 零开销延迟追踪宏ironclaw_observability 的设计契约与实现剖析 ironclaw_observability 是 Iro人工智能AI 应用交互助手AI Agent创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
