如何在 Pi coding agent 会话中使用 PiProvider 调用 Composio 工具

如何在 Pi coding agent 会话中使用 PiProvider 调用 Composio 工具 如何在 Pi coding agent 会话中使用 PiProvider 调用 Composio 工具【免费下载链接】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如果你的 TypeScript 项目正在使用earendil-works/pi-coding-agent搭建 Pi coding agent需要让它在会话中搜索、执行 Composio 工具本文给出从安装依赖、创建 Composio 会话到把 Composio 工具挂进 Pi 会话并用 hooks 拦截调用这条完整路径。PiProvider从composio/experimental包发布仅面向 TypeScript 项目该包是实验性出口API 可能在版本之间变更或被移除。安装依赖与配置 API key在 TypeScript 项目中安装三个包npm 为例pnpm / bun / yarn 同理npm install composio/core composio/experimental earendil-works/pi-coding-agent在.env中配置 Composio 项目 API keyCOMPOSIO_API_KEYxxxxxxxxxxxxxxxxxx替换为你在 Composio 平台上的项目 API key。创建 Composio 会话并生成 Pi 工具核心流程分三步创建 session、用createSessionTools生成 Pi 工具、把这些工具交给createAgentSession。完整可运行示例user_123与callbackUrl需替换见下文说明import { Composio } from composio/core; import { PiProvider, createPiComposioSystemPrompt } from composio/experimental; import { createAgentSession, DefaultResourceLoader, getAgentDir, SessionManager, } from earendil-works/pi-coding-agent; const composio new Composio({ apiKey: process.env.COMPOSIO_API_KEY, provider: new PiProvider(), }); const composioSession await composio.sessions.create(user_123, { toolkits: [github, gmail], manageConnections: { enable: true, callbackUrl: https://your-app.example.com/auth/callback, }, sandbox: { enable: true }, }); const composioTools composio.provider.createSessionTools({ sessionId: composioSession.sessionId, search: composioSession.search.bind(composioSession), execute: composioSession.execute.bind(composioSession), callbackUrl: https://your-app.example.com/auth/callback, includeWorkbenchTools: true, connections: { getToolkitStates: toolkits composioSession.toolkits({ toolkits }), authorizeToolkit: (toolkit, options) composioSession.authorize(toolkit, options), }, hooks: { execute: (ctx, next) { if (ctx.request.toolSlug COMPOSIO_MANAGE_CONNECTIONS) { return ctx.deny(Use composio_manage_connections instead.); } return next(); }, onAuthLink: async ctx { await sendConnectionLinkToUser(ctx.url); return { message: Connection link sent out-of-band. }; }, }, }); const loader new DefaultResourceLoader({ cwd: process.cwd(), agentDir: getAgentDir(), systemPromptOverride: () createPiComposioSystemPrompt(composioSession.sessionId, { includeWorkbenchTools: true, }), }); await loader.reload(); const { session: piSession } await createAgentSession({ cwd: process.cwd(), resourceLoader: loader, sessionManager: SessionManager.inMemory(process.cwd()), customTools: composioTools, tools: [ composio_search_tools, composio_manage_connections, composio_execute_tool, composio_remote_workbench, composio_remote_bash, ], }); await piSession.prompt(Find my open GitHub issues and summarize the blockers.);示例中有几处需要按自己的应用替换user_123Composio 用它做用户隔离标识文档建议使用不会变化的数据库 UUID 或主键生产环境不要用default。callbackUrlOAuth 回调地址替换为你应用自己的回调端点。sendConnectionLinkToUser你应用中把连接链接投递给用户的函数文档示例中未给出实现。toolkits: [github, gmail]把会话限制在这些 toolkit 内不传该参数时会话可发现 Composio 目录中的全部 toolkit。manageConnections: { enable: true }让模型可以在缺少连接时发起认证sandbox: { enable: true }是composio_remote_workbench/composio_remote_bash两个远程助手的前提——sandbox 被关闭时COMPOSIO_REMOTE_WORKBENCH和COMPOSIO_REMOTE_BASH_TOOL不会出现在会话中。provider 按配置生成这些 Pi 工具composio_search_tools搜索 Composio拿到精确的 tool slug 和 schema。composio_manage_connections检查连接状态为缺失的 toolkit 发起认证。composio_execute_tool按精确 slug 执行 Composio 工具。composio_remote_workbench在 Composio 沙箱里运行 Python需要includeWorkbenchTools: true。composio_remote_bash在沙箱文件系统里运行简短 bash 命令需要includeWorkbenchTools: true该选项默认关闭。这几个助手名可以通过createSessionTools的names选项重命名常量定义在PI_COMPOSIO_SESSION_TOOL_NAMES上。用 hooks 拦截每次助手调用hooks 是 Pi provider 区别于其他 provider 的机制每个助手调用都经过(ctx, next)形式的中间件。await next()执行默认行为直接返回一个值会替换模型看到的结果ctx.deny(reason)拦截调用并返回模型可见的错误。ctx.request可改写ctx.context只读。const composioTools composio.provider.createSessionTools({ sessionId: composioSession.sessionId, search: composioSession.search.bind(composioSession), execute: composioSession.execute.bind(composioSession), hooks: { search: (ctx, next) { ctx.request.toolkits ctx.request.toolkits?.map(toolkit toolkit slack ? slackbot : toolkit ); return next(); }, execute: async (ctx, next) { if (ctx.request.toolSlug.startsWith(COMPOSIO_)) { return ctx.deny(Meta tools are blocked.); } const result await next(); const file await saveLargeOutput(result); return file ? { message: Output saved to ${file} } : result; }, remoteBash: (ctx, next) { if (ctx.request.command.includes(rm -rf)) { return ctx.deny(Destructive bash commands are blocked.); } return next(); }, onAuthLink: async (ctx, next) { await sendConnectionLinkToUser(ctx.url); return shouldShowLinkToModel(ctx) ? next() : { message: Connection link sent out-of-band. }; }, }, });可用的 hook 按PiSessionHooks定义各自包装一个环节Hook包装对象search工具发现可改写query或toolkitsmanageConnections连接检查与认证execute工具执行可改写toolSlug、args、accountremoteWorkbench远程 Python 助手remoteBash远程 bash 助手onAuthLink结果中出现的任意认证链接每个ctx.request都有完整类型编辑器能给出精确字段提示。ctx.deny也可以从包入口以denyPiToolCall(reason)的形式导入使用。验证集成是否生效文档给出的验证方式就是发起一次真实 promptawait piSession.prompt(Find my open GitHub issues and summarize the blockers.);模型会依次经过composio_search_tools找到工具 slug再经composio_execute_tool执行。仓库中的单元测试 pi.test.ts 固定了这条路由行为可作为核对基准composio_search_tools调用等价于session.search({ query, toolkits })composio_execute_tool调用等价于session.execute(toolSlug, args, { account })开启includeWorkbenchTools: true后composio_remote_workbench会以COMPOSIO_REMOTE_WORKBENCH这个 slug 执行并自动带上session_id。另外注意一个来自会话文档的边界session meta tools 只能在 tool-router 会话内执行绕过会话直接用tools.execute()执行会报can only be called inside a tool-router session。Pi provider 的连接管理走的是session.toolkits()session.authorize()内部不会去执行COMPOSIO_MANAGE_CONNECTIONS所以上面示例里的executehook 才会拦截直接指向该 meta tool 的调用。限制与后续操作PiProvider位于实验性包composio/experimental接口可能在版本之间变化。多轮对话中不要重复create保存 session ID用composio.use(sessionId)复用同一个会话工具、认证和沙箱状态都会保留。会话配置项toolkits 过滤、connectedAccounts账号选择、sandbox 关闭等详见 Configuring Sessions会话模型本身见 What is a session?。需要更多 hook 字段和类型定义时可直接查 pi/types.ts。【免费下载链接】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),仅供参考