学习笔记 · Obsidian

Fleet:Channels、Slack、Teams、Schedules 与 Webhooks

LangChainLangSmith

Channels 接收外部事件,Schedules 接收时间事件,Fleet Webhooks 则把 Agent 配置发布给外部系统。三者方向不同:channel/schedule 是“触发 Agent 运行”,webhook 是“由人在 Fleet 里触发配置包外发”,不能混称触发器。

Channels 的共同语义

Channel 连接在 Agent 的 Channels drawer,可暂停/恢复全部 channels 而无需删除。Chat-only Agent 的新响应通常把 thread 标为 unread;channel-based Agent 的响应默认保持 read。手动 read/unread 只是 inbox 状态,不表示业务事件已处理。

Gmail channel 只监控 primary inbox,忽略 alias、mailing list、被 filter 跳过 inbox 的邮件以及 spam/trash。Slack 由 mention、DM 或 group DM 触发;Teams channel 内必须 @mention,DM/group chat 则对所有消息响应。

外部事件可能重复、乱序或重试。Agent 对发送、标签、工单和发布工具要使用外部 event ID/业务 key 做幂等,不能仅依赖 thread 看起来“只收到一次”。

Slack Cloud:每个 Agent 一个独立 app

Fleet Slack manager 首次连接后提供两类 scope:Agent 发消息/读历史的工具权限,以及代表 Fleet 创建专属 Slack app 的管理权限。随后从 Agent Channels 一键 Add to Slack;Fleet 以 Agent 的 name、description 和 icon 建立 app。

约束:一个 Agent 恰好最多关联一个 Slack app,一个 Slack app 也只能关联一个 Agent。若 workspace 要求每个 app 单独管理员审批,第一次 Finish setup 只生成 draft 并发起请求;管理员通过后必须回 Fleet 再次 Finish setup 才真正安装。

Agent 可:

  • 在 channel mention、DM、group DM 启动 run;
  • 在线程内回复并读取 thread/channel history;
  • 读取接收到的附件;
  • 在 Slack thread 内显示工具审批按钮;
  • 运行出错时在原 thread 返回错误信息。

Allow bot triggers 会允许其他 bot 的消息触发,可能形成 bot-to-bot 循环或放大成本,默认关闭,开启时要限定 channel、事件类型和去重。

Slack Self-hosted:两层 OAuth 配置

自托管没有 Fleet Slack manager,需要:

  1. Helm fleet.oauth.providerOrgId 与 fleet.oauth.slackOAuthProvider 指向统一的 Slack OAuth provider;
  2. 在 Slack 建 provider app,配置文档列出的 history/read/write/team/users scopes;
  3. 在对应 LangSmith organization 注册 client ID/secret、authorize/token URL;
  4. Slack redirect URL 为 https://<hostname>/host-oauth-callback/<provider-id>;
  5. 每个 Agent 再从 Fleet 生成 manifest,建立其独立 custom Slack app,并录入 App ID、client ID/secret、signing secret。

必须从 Fleet 生成 manifest,手工建立 app 会缺 event subscription、interactivity、redirect 与 scopes,导致收不到事件。Draft 不保存 client/signing secret,管理员批准后恢复设置时要重新输入。

自托管 Add Slack App 置灰时先查 slackOAuthProvider,unknown provider 先查 provider 是否注册在 providerOrgId 指定的 organization。Secret 只显示/复制到受管 secret store,不记录到笔记、工单或日志。

Slack tools 和 Slack channel 是两回事。Tools 可从 Fleet UI、schedule、webhook 等任意来源发送/读 Slack;channel 只定义 Slack 消息如何启动 Agent。工具逐项设 Auto/Ask。

Teams:Bring Your Own Azure Bot

Teams 需要在 Azure 建 Multi Tenant Azure Bot 与 Microsoft App ID,立即保存只显示一次的 client secret。把 App ID/password(可选 tenant ID)注册到 Fleet 后,Fleet 返回 webhook URL;再回 Azure Bot Configuration 设置 Messaging endpoint,启用 Microsoft Teams channel,并安装引用 App ID 的 Teams manifest。

Bot 可从 Integrations 或 Agent sidebar 链到 Agent。连接后可添加:

  • teams_bot_send_proactive_message:使用 Bot Framework credential,无需另行 OAuth;
  • list teams/channels、post/read channel messages:使用 Microsoft Graph,可能要求用户 OAuth consent。

Channel conversation 只有 @mention 才触发;DM/group chat 全消息触发。Direct message 正常但 channel 失败时,先查 mention、bot 是否加入 team、channel 权限;完全不响应再查 Fleet approval/feed、paused 状态和 Azure messaging endpoint。Invalid credential 则查 App ID、secret value/expiry 与 Multi Tenant 类型。

Schedules:UTC 的主动运行

Schedule 用于 daily briefing、memory synthesis、weekly update、monitoring 等周期任务。配置执行时间时统一按 UTC;可添加自定义 prompt。它没有最终用户在场,因此要求 fixed Agent identity,且任何 Ask 审批或 memory-write approval 都可能让任务永久停住。

无人值守上线前要验证:时区与夏令时、重叠执行、失败重试、最大运行时、幂等、无数据分支、结果投递失败、预算限制以及人工接管。对于非幂等写操作,宁可先生成草稿或审批项,不要直接 Auto。

Fleet Webhooks:发布完整 Agent 配置

Webhook URL 必须 HTTPS;custom headers 加密存储;payload 带 publisher identity;Webhook 只对 Agent owner 可见。它发送的不只是通知,而是包含 Agent files 的完整包:

字段内容
actionWebhook 名称
input自定义表单值
publisher触发者 user ID/email
agentname/description
tool_auth_requirements每个工具的 none/api_key/oauth 需求
filesBase64 ZIP
fields自定义输入 schema

ZIP 包含 AGENTS.md、config.json、tools.json、可选 skills/*、subagents/*。tools.json 还含 MCP URL、server name 与 interrupt config。因此接收端必须把 Webhook 当高敏感供应链入口:验证来源、签名或强 bearer/mTLS、限制 body、避免 zip bomb/path traversal、恶意内容扫描、不可执行地解压、保留内容 hash 与 publisher 审计。

tool_auth_requirements 只描述部署需要的凭据,不应包含实际 secret:

  • none:无认证;
  • api_key:required_env_vars;
  • oauth:provider 与 scopes。

Custom form 支持 string、number、boolean、textarea、json、select。用于 environment、dry-run、发布说明等,但服务端必须再次做类型、枚举、权限和业务校验,不能信任 UI。

推荐事件流

flowchart TD
    A["Slack / Teams / Gmail / Schedule"] --> B["触发 Fleet Run"]
    B --> C["去重与授权"]
    C --> D["只读分析"]
    D --> E{"高风险工具?"}
    E -- 是 --> F["Ask / 中央或渠道审批"]
    E -- 否 --> G["Auto 执行"]
    F --> G
    G --> H["原渠道回执 + LangSmith Trace"]
    I["Owner 手动 Run Webhook"] --> J["外部 CI/CD 验签、校验、解包"]

生产检查

  • 事件入口与发送工具分开授权;不因能收 Slack 就默认允许发所有 channel。
  • 为 Slack/Teams/Gmail 记录 platform event ID,保证重复投递幂等。
  • Bot-to-bot、proactive message 和 schedule 设置速率/递归保护。
  • 自托管 Slack/Teams secret 放 secret manager,配置轮换和过期告警。
  • Schedule 统一 UTC 并明确业务时区,模拟夏令时与长任务重叠。
  • Webhook 接收端拒绝 HTTP、未知 publisher、超大 payload、危险 ZIP 路径和未授权 environment。
  • 所有触发、审批、拒绝、执行与回执都能通过 trace 串起来。