Plugin

Chat 插件

Chat 插件如何将 Agent 连接到聊天渠道

Chat 插件

Chat 插件将 Agent 连接到 Telegram、飞书、QQ 等聊天渠道。它处理收到的消息,将它们路由到 Agent 会话,并将回复发送回渠道。

功能

  • 监听已配置渠道的消息
  • 为每个对话创建或复用会话
  • 将用户消息路由到 Agent
  • 将 Agent 回复发送回渠道
  • 在消息进入 Agent 前执行按 Agent 隔离的 Chat Access 准入

配置

Chat 与其他 Plugin 一样,通过 Agent Plugin Binding 配置行为,并通过 Plugin Resource 连接渠道。创建 Resource 时,CLI 根据 Schema 收集凭据,Resolver 再写入 name 等动态字段:

{
  "plugin_name": "chat",
  "config": {},
  "resource_ids": ["telegram-a1b2c3", "feishu-d4e5f6"]
}
city plugin resource create chat --interactive
city plugin config chat <agent_id> --resources '["telegram-a1b2c3"]'

Chat Resources

完整 Resource Item 加密存储在 CLI 全局 DB 中。每个 Item 都有稳定 id、类型和展示 name;Binding 只保存 Resource ID。Resource 可以被多个 Agent 复用,运行时 Plugin 接收的是 ID 解析后的完整 Item 快照。

Chat Access

外部用户第一次发送消息时,Chat Plugin 会在当前 Agent 的 .downcity/chat/access.db 中记录 Principal,并在没有 Grant 时创建 pending Request。管理员使用 Request ID 批准或拒绝:

city plugin action chat access-snapshot <agent_id> --input '{}' --token <token>
city plugin action chat access-approve <agent_id> --input '{"request_id":"<request_id>"}' --token <token>

身份由渠道、当前 Chat Resource ID 和平台用户 ID 共同确定。批准只对目标 Agent 生效,不会成为 City 全局权限,也不会传播到其他 Plugin。

支持的渠道

  • Telegram
  • 飞书 (Lark)
  • QQ

飞书依赖

@downcity/plugins 默认不再安装飞书 / Lark SDK。如果你在本地嵌入 SDK 宿主中启用飞书渠道,需要在宿主应用里安装:

npm install @larksuiteoapi/node-sdk@^1.66.0

使用 Chat plugin 的独立子路径:

import { ChatPlugin, FeishuChannel } from "@downcity/plugins/chat";

不启用飞书的应用不需要安装飞书 SDK。

继续阅读: