跳到主要内容

CopilotKit Channels

为应用内 copilot 提供支持的同一个 Mastra Agent,也可以作为机器人运行在消息平台中。CopilotKit 的 Channels SDK 可将你的 Agent 连接到 Slack 和其他消息平台,并在频道中原生处理线程、Tool 调用、富交互消息和人在回路审批。

信息

完整的平台设置请参阅 CopilotKit Channels 文档。本页介绍 Channels 如何与 Mastra Agent 协同工作。

工作原理
工作原理的直接链接

你的 Mastra Agent 仍运行在原有部署位置,并通过 registerCopilotKit() 以 AG-UI 协议对外提供服务(参阅 CopilotKit 概览)。Channel 是一个使用 @copilotkit/channels 构建的独立长时运行进程:你可以为其接入一个或多个平台适配器,并将 Channel 指向你的 Agent。createChannel 接收适配器数组,因此单个进程可以同时服务多个平台。

安装包含所有适配器的完整 SDK:

npm install @copilotkit/channels
channel.ts
import { createChannel, Message, Section } from '@copilotkit/channels'
import { slack } from '@copilotkit/channels/slack'
import { mastraAgent } from './agent' // your AG-UI Mastra agent

const channel = createChannel({
// Point the channel at your Mastra agent (an AbstractAgent, or a per-thread factory).
agent: mastraAgent,
adapters: [
slack({
botToken: process.env.SLACK_BOT_TOKEN!,
appToken: process.env.SLACK_APP_TOKEN!,
}),
],
})

channel.onMention(async ({ thread }) => {
await thread.runAgent()
})

await channel.start()

Agent 接收标准 AG-UI 输入并发出标准 AG-UI 事件;平台机制由适配器封装,因此同一个 Mastra Agent 无需修改即可在各个 Channel 中运行。富消息使用 JSX 编写,并渲染为各平台的原生格式(例如 Slack 上的 Block Kit);如果平台没有对应功能,交互式卡片也能优雅降级。

Slack
Slack的直接链接

Slack 快速入门会带你从零开始构建一个可以在频道中通过 @ 提及的机器人,然后添加交互式按钮卡片。Slack 通过 Socket Mode 运行,它会向 Slack 建立出站 WebSocket 连接,因此开发期间不需要公共 URL 或隧道。

在环境中设置 Slack 凭证:

  • SLACK_BOT_TOKEN:Bot User OAuth token(xoxb-...
  • SLACK_APP_TOKEN:具有 connections:write scope 的应用级 token(xapp-...

其他平台
其他平台的直接链接

Channels SDK 并不局限于 Slack。Microsoft Teams 等其他平台也通过同一个 @copilotkit/channels API 运行:将相应适配器添加到 adapters 数组即可,其余 Agent 代码保持不变。当前支持的平台列表及各平台设置方法,请参阅 CopilotKit Channels 文档

消息管道与架构
消息管道与架构的直接链接

托管 Channel 有意将凭证分开管理;当 Mastra Agent 使用独立的模型 Key 和 Tool 时,这一点尤为重要:

  • 由你保管 Agent 逻辑、模型凭证、Tool 和 Channel 进程。
  • 由 CopilotKit Intelligence 管理平台凭证、消息投递、注册、运行状况和重连。

当用户向应用发送消息时,一个交互轮次就此开始。Intelligence 接收平台事件,再由网关将该轮次交给正在运行的 Channel 进程。Mastra Agent 运行并渲染回复,随后 Intelligence 将回复作为平台原生内容返回。平台凭证始终不会进入 Agent 进程;为满足数据驻留要求,企业版 Intelligence 还可自行托管。

备注

默认情况下,交互操作保存在内存中,重启后会被重置。请为 Channel 配置持久化的操作和状态存储(Redis 或 Postgres),使按钮和各线程状态在重启后仍能保留,并可跨多个实例使用。