如何在 Composio 会话中用 session.authorize() 生成 Connect Link 并完成聊天外的预授权

发布时间:2026/9/12 7:05:02

如何在 Composio 会话中用 session.authorize() 生成 Connect Link 并完成聊天外的预授权 如何在 Composio 会话中用 session.authorize() 生成 Connect Link 并完成聊天外的预授权【免费下载链接】composioComposio powers 1000 toolkits, tool search, context management, authentication, and a sandboxed workbench to help you build AI agents that turn intent into action.项目地址: https://gitcode.com/GitHub_Trending/co/composio如果你的 Agent 用户在开始聊天前就应该完成账号授权——例如 onboarding 流程、设置页连接管理或在任务执行前做连接预检——Composio 提供了session.authorize()方法它在会话上按需生成一条 Connect Link托管授权页 URL你负责把该链接引导给用户授权完成后再校验连接状态。本文基于仓库中的 Manual auth management 文档 和相关 SDK 参考给出从创建会话到验证连接的完整操作路径适用于 Python 与 TypeScript 两种 SDK。前置条件已安装 Composio SDK并拥有 Composio API keyPython 中通过Composio(api_key...)传入TypeScript 中通过new Composio({ apiKey: ... })传入一个稳定的user_idAuthentication 文档 要求使用数据库主键或 UUID 这类不会变化的标识避免使用邮箱生产环境禁止使用default要预授权的 toolkit slug例如gmail、github。创建会话并生成 Connect Link在会话上调用session.authorize(toolkit_slug)返回一个 connection request 对象其中的redirect_urlPython/redirectUrlTypeScript就是 Connect Link。session composio.create(user_iduser_123) connection_request session.authorize(gmail) print(connection_request.redirect_url) # https://connect.composio.dev/link/ln_abc123import { Composio } from composio/core; const composio new Composio({ apiKey: your_api_key }); const session await composio.create(user_123); const connectionRequest await session.authorize(gmail); console.log(connectionRequest.redirectUrl); // https://connect.composio.dev/link/ln_abc123上例输出中的ln_abc123为文档示例实际链接每次生成时不同。把这个 URL 交给用户——可以渲染在你自己的连接 UI 里、发邮件或在设置页展示——用户打开后在 Composio 托管页面上完成登录凭据不经过你的应用或模型。等待授权完成wait_for_connection拿到 redirect URL 后用同一个 connection request 对象等待用户完成授权connected_account connection_request.wait_for_connection(60000) print(fConnected: {connected_account.id})const connectedAccount await connectionRequest.waitForConnection(60000); console.log(Connected: ${connectedAccount.id});该方法会持续轮询 Composio API直到连接进入ACTIVE状态返回 connected account、进入FAILED或EXPIRED等终态抛出错误或超过超时时间抛出超时错误。文档说明默认超时为 60 秒上面的代码块展示了显式传入参数等待的用法。控制授权完成后的回跳地址默认情况下用户授权后停留在 Composio 页面。如果要把用户带回你的应用在authorize()传入callback_url/callbackUrl并可以自带 query 参数携带上下文connection_request session.authorize( gmail, callback_urlhttps://your-app.com/callback?user_iduser_123sourceonboarding )const connectionRequest await session.authorize(gmail, { callbackUrl: https://your-app.com/callback?user_iduser_123sourceonboarding, });授权完成后Composio 会保留你已有的参数并追加两个参数再重定向到该地址ParameterDescriptionstatussuccess或failedconnected_account_id新创建的 connected account 的 ID文档示例示例结果实际值不同https://your-app.com/callback?user_iduser_123sourceonboardingstatussuccessconnected_account_idca_abc123在你的回调页读取status与connected_account_id即可区分授权成功或失败并把 account ID 记录到自己的数据库中。验证连接状态除了等待方法本身的返回值还可以用session.toolkits()查看会话内所有 toolkit 及其连接状态作为预授权流程的核对手段toolkits session.toolkits() for toolkit in toolkits.items: status toolkit.connection.connected_account.id if toolkit.connection.is_active else Not connected print(f{toolkit.name}: {status})const toolkits await session.toolkits(); toolkits.items.forEach((toolkit) { console.log(${toolkit.name}: ${toolkit.connection?.connectedAccount?.id ?? Not connected}); });输出中能看到对应 toolkit 的 connected account ID 说明已连接否则显示Not connected。注意只有ACTIVE状态的连接可用于执行工具如果连接停留在INITIATED说明用户打开了 Connect Link 但没有完成授权——此时需要重新引导用户访问该链接完成认证。关闭聊天内授权提示把授权完全交给自己的 UI会话默认包含COMPOSIO_MANAGE_CONNECTIONSmeta-tool会在聊天中提示用户授权。既然你要做聊天外的预授权应把它关掉避免两套授权入口并存session composio.create( user_iduser_123, manage_connectionsFalse, )const session await composio.create(user_123, { manageConnections: false, });完整流程预检必备 toolkit 再启动 Agent文档给出的典型模式是在启动 Agent 前检查所有必需连接缺哪个补授权哪个。以下代码块来自文档your-api-key与user_123需替换为你自己的 API key 和用户标识from composio import Composio composio Composio(api_keyyour-api-key) required_toolkits [gmail, github] session composio.create( user_iduser_123, manage_connectionsFalse, # Disable in-chat auth prompts ) toolkits session.toolkits() connected {t.slug for t in toolkits.items if t.connection.is_active} pending [slug for slug in required_toolkits if slug not in connected] print(fConnected: {connected}) print(fPending: {pending}) for slug in pending: connection_request session.authorize(slug) print(fConnect {slug}: {connection_request.redirect_url}) connection_request.wait_for_connection() print(All toolkits connected!)import { Composio } from composio/core; const composio new Composio({ apiKey: your-api-key }); const requiredToolkits [gmail, github]; const session await composio.create(user_123, { manageConnections: false, // Disable in-chat auth prompts }); const toolkits await session.toolkits(); const connected toolkits.items .filter((t) t.connection?.connectedAccount) .map((t) t.slug); const pending requiredToolkits.filter((slug) !connected.includes(slug)); console.log(Connected:, connected); console.log(Pending:, pending); for (const slug of pending) { const connectionRequest await session.authorize(slug); console.log(Connect ${slug}: ${connectionRequest.redirectUrl}); await connectionRequest.waitForConnection(); } console.log(All toolkits connected!);TypeScript 版本中connected的判定基于connection?.connectedAccount是否存在而 Python 版本基于is_active两者语义略有差异以你实际使用的 SDK 为准。边界与已知状态用户关闭 Connect Link 未完成授权时连接保持在INITIATED状态直到过期Authenticating Tools 文档 说明INITIATED状态的连接会在 10 分钟后自动过期之后需要重新生成 Connect Link。wait_for_connection抛出错误时对应连接进入终态如FAILED或超时FAILED的常见原因包括用户在 OAuth 中拒绝授权、授权码无效或 auth config 配置错误可检查status_reason字段后重试。若某个 toolkit 的授权流程需要额外参数如 Zendesk 的subdomainsession.authorize()之外的直接 SDK 路径composio.connected_accounts.link()/composio.connectedAccounts.link()支持传入更完整的 auth 配置参见 Authenticating Tools。仓库中还有一个更精简的官方示例Python 版 authorize.py创建限定github、gmail的会话后调用session.authorize(github)并等待连接成功打印 Connected Account ID 与 Status失败打印错误和 TypeScript 版 authorize.ts。完成上述流程后session.toolkits()中目标 toolkit 显示已连接、回调地址收到statussuccess即代表聊天外预授权完成之后可以正常创建 Agent 会话开始对话。【免费下载链接】composioComposio powers 1000 toolkits, tool search, context management, authentication, and a sandboxed workbench to help you build AI agents that turn intent into action.项目地址: https://gitcode.com/GitHub_Trending/co/composio创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/12 7:05:02

TradingAgents:金融级多智能体架构设计与实盘落地

1. TradingAgents不是新概念,而是金融自动化演进的必然结果你可能在GitHub上见过几十个叫TradingAgents的仓库,点进去发现要么是空架子,要么跑不起来——这恰恰说明这个领域正处在从“玩具级Demo”向“生产级系统”跃迁的关键节点。TradingAg…

2026/9/12 7:05:02

Android Picker组件实战:时间/日历/城市选择器深度优化指南

1. 这不是“又一个Picker库”,而是Android原生选择器的生存现状实录你有没有在某个深夜改需求时,被产品甩来一句:“这个日期选得不够直观,换成日历视图吧”;或者测试提了个Bug:“城市选择器点开后卡顿两秒&…

2026/9/12 7:00:02

猫抓:3 步嗅探网页视频并保存到本地的完整指南

猫抓:3 步嗅探网页视频并保存到本地的完整指南 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 猫抓(cat-catch)…

2026/9/12 8:00:07

UFS Hibernate机制深度解析:链路级低功耗状态切换原理与实战

1. UFS Hibernate不是“休眠”,而是协议层的深度状态切换很多人第一次看到“UFS Hibernate”这个词,下意识会联想到操作系统里的休眠(Hibernate)——把内存内容写入硬盘、断电保存、唤醒时恢复。但UFS协议里的Hibernate完全不是一…

2026/9/12 8:00:07

流式输出+SSE:大模型响应秒出的工程实战

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

2026/9/12 8:00:07

SpringBoot+SSM框架实现课堂作业管理系统开发实践

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

2026/9/12 8:00:07

Python爬虫实战:豆瓣图书Top250数据采集全流程

1. 项目概述:豆瓣图书Top250爬虫实战 这个项目是一个完整的Python爬虫解决方案,目标是抓取豆瓣读书Top250榜单的所有图书信息。不同于简单的教学示例,我们将从零开始构建一个生产级别的爬虫系统,包含数据采集、清洗、存储和导出的…

2026/9/12 8:00:07

基于.NET Core MVC的在线考试系统开发实践

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

2026/9/12 2:05:33

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/12 3:55:12

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/9 16:31:09

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/12 0:04:17

MATLAB仿生优化框架:长鼻浣熊算法多策略融合实现

简介:本资源是一份面向智能优化算法研究者与MATLAB初学者的仿生智能算法实践代码包,聚焦于长鼻浣熊优化算法(COA)的多策略改进与性能验证。针对传统COA易陷局部最优、收敛精度不足等问题,作者融合Circle映射初始化提升…

2026/9/12 0:04:17

【JAVA毕设源码分享】基于 JavaWeb 的校园一卡通管理系统的设计与实现 基于 JavaWeb 的校园卡业务管理系统(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/9/12 0:04:17

【JAVA毕设源码分享】基于 Java 的图书馆借阅管理平台的搭建与实现 基于 Java 的图书馆综合管理系统(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/9/12 6:29:36

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/10 15:19:50

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/12 6:37:43

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码