Guide · 使用教程
Arcade.dev Python 教程:用户授权、连接归属与敏感操作审批
固定官方 SDK,演示可信用户映射、OAuth 身份确认、批准参数快照、持久化去重与超时待核对。
给 Agent 接上 Gmail 等第三方账户时,先验证登录身份与账户归属,再决定当前工具能否执行。本文以 Arcade.dev 为例,把用户 OAuth、生产身份确认和敏感操作审批串起来,用 Python 与 SQLite 保存一个明确的批准版本,并处理重复请求和结果不明的外部调用。
核对日期:2026 年 10 月 16 日。 示例固定 arcadepy 1.10.0。已用官方 SDK 和 httpx.MockTransport 做 12 组离线检查;没有创建真实 Arcade 账户、连接 Gmail、运行真实 OAuth 或发送邮件。示例是单机应用核心,不包含登录系统、公开回调路由或完整审批 UI。
1. 三种身份与两次决定
- 应用用户:从已验证的登录会话取得本地 user 和 tenant。
- Arcade 用户:由服务端数据库保存稳定映射,不能让浏览器或模型自行传 user_id。不同租户下的同名本地用户必须映射到不同身份。
- 第三方账户:用户在提供商页面选择并授权的账户。应用还应让用户确认它确实是业务所需的工作账户。
OAuth 决定应用可以访问哪些账户权限;业务审批决定这次操作是否按这些参数执行。前一次允许 Gmail.SendEmail,不代表后续任意收件人、正文和附件都已获批准。授权工具调用
2. 固定 SDK 并核对工具版本
python3 -m venv .venv
source .venv/bin/activate
python -m pip install arcadepy==1.10.0
通过服务端秘密管理设置 ARCADE_API_KEY。生产客户端限制自动重试:写操作请求超时可能已生效,自动重试不是业务幂等保证。
from arcadepy import Arcade
client = Arcade(max_retries=0, timeout=20.0)
definition = client.tools.get("Gmail.SendEmail")
version = definition.toolkit.version
if not version:
raise ValueError("无法确定工具版本,停止接入")
#在受控开发环境审核 definition.input,不把用户数据或凭据打印进公共日志。
这里的 get 是真实 SDK 读取入口,只有在你准备好的测试账户中才调用。本文离线测试中的 fixture-version 仅是模拟值,不能复制到生产。应保存审核过的工具定义和版本,升级后重新检查 schema、授权范围与行为。
官方当前 Quickstart 使用 recipient、subject、body 调用 Gmail.SendEmail。下文只开放这三个字段,拒绝额外参数,不开放附件、抄送、任意工具名或调度发送。实际接入仍应对照你所固定的版本定义。官方示例
3. 授权入口与生产用户验证
应用后端取得可信会话后,加载 principal 映射,再请求授权。授权链接只在该用户的受控界面展示,不放到共享日志或当作团队通用连接。用户必须亲自完成提供商同意页面。
生产环境按官方指南配置自定义 user verifier。回调中的 flow_id 是不可信输入;服务端会话决定 principal,不能采用 query string 中的 user_id。confirm_user 再向 Arcade 验证该会话身份与原流程是否匹配。生产授权指南
公开路由还要处理登录、回调与待办流程绑定、CSRF / 重放、短时效、失败限流和固定跳转目的地。不要把“客户端返回成功”直接写成账户授权完成。下面的 confirm_identity 是已鉴权服务端路由调用的核心,既不是可直接暴露的 HTTP 接口,也不是自建 OAuth 协议实现。
常见问题
- user_id 可以直接从模型或请求参数取得吗?
- 不应如此。后端先验证登录会话和租户,再从自己的数据库读取稳定 Arcade 身份映射。
- 账户授权 completed 就能执行任意操作吗?
- 不能。账户权限和本次业务批准不同,敏感操作仍要检查工具、版本、完整参数和有效期。
- 工具版本为什么也要进入审批快照?
- 同名工具升级可能改变 schema 或行为。把版本和参数一起审核,升级后重新验证,避免批准内容和执行内容不同。
- 重复点击会发送两次吗?
- 示例用业务 request_id 唯一约束和事务占位减少重复领取,但不承诺跨外部 API 的恰好一次效果。
- 超时后应该怎么恢复?
- 保留 executing / unknown 状态,先核对 Arcade 运行记录与上游实际结果。不要盲目重试或生成新业务 ID 绕过台账。
- 十二组测试包含真实 Gmail 发信吗?
- 没有。使用官方 arcadepy 1.10.0 和 MockTransport 验证请求与状态,真实 OAuth、账户撤销和外发需在自己的测试环境另行验收。