频道
频道把一个外部平台接到同一个本地八千代实例上。消息以线程的形式进来,带着同样的人格和同样的记忆 —— 这就是同一个助手,不是一个碰巧同名的另一个机器人。
凭据存在 ~/.yachiyo/channels.toml,刻意与 config.toml 分开,机器人 token 永远不会和其他设置混在一起。
全部在 设置 → 频道 里配置。
| 平台 | 传输方式 | 需要什么 |
|---|---|---|
| Telegram | Bot API | @BotFather 给的 token |
| NapCatQQ over OneBot v11 | WebSocket 地址,可选 token | |
| QQ 官方机器人 | QQ Bot API(仅私聊) | QQ 开放平台的 App ID + 客户端密钥 |
| Discord | Bot gateway | Discord 开发者门户的 Bot token |
每个平台可以带自己的模型覆盖,所以一个话多的 Telegram 机器人可以跑在比你桌面默认更便宜的模型上。
Telegram
Section titled “Telegram”用 @BotFather 建一个机器人,把 token 粘进 设置 → 频道 → Telegram 并启用。改了 token 的话,在同一个面板重启服务。
QQ(NapCatQQ)
Section titled “QQ(NapCatQQ)”八千代不直接和 QQ 通信 —— 它通过 OneBot v11 连接一个运行中的 NapCatQQ 实例。把 wsUrl 指向 NapCat 的正向 WebSocket(通常是 ws://localhost:3001),配了 token 就填上。
QQ 官方机器人
Section titled “QQ 官方机器人”走官方 Bot API,用 QQ 开放平台的 App ID 和客户端密钥。仅支持私聊 —— 这条通道没有群支持。需要群的话用 NapCatQQ 那条路。
Discord
Section titled “Discord”开发者门户里的标准 Bot token。Discord 私聊和服务器文字频道都支持;服务器频道走群讨论模式。
没有人能靠给你的机器人发消息就用上你的助手。用户和群组在首次接触时注册,初始状态是待处理。
用户 —— pending → allowed 或 blocked,角色为 owner 或 guest。每个用户带一个 token 配额(usageLimitKTokens,null 表示无限)和累计用量。
群组 —— pending → approved 或 blocked。批准一个群组会在应用运行时立即启动它的监视器。
注意这两套词不一样:用户是 allowed,群组是 approved。
在 设置 → 频道 里批准,或者直接问 —— 它能列出谁在等,并按你的答复动手:
现在我的频道里有谁在等待处理?
要写脚本或需要确切命令的话,用命令行:
yachiyo channel users --jsonyachiyo channel groups --jsonyachiyo channel groups set-status <group-id> approvalyachiyo channel groups set-status <group-id> block访客不是你,八千代也照此对待:
- 沙箱工作区。 每个访客和群组都有自己的工作区目录。
- 过滤后的记忆。 命中你
memoryFilterKeywords的记忆结果对访客隐藏。 - 独立档案。 访客有自己的
USER.md模式,所以助手对来客的了解永远不会落进你的档案。 - token 限额。 按用户的配额,强制执行。
- 访客说明。 一段注入到访客对话系统提示词里的自定义内容 —— 访客该知道关于你的什么,以及助手该如何对待他们的规则。
让机器人对群里每条消息都回一句是不能忍的。所以群模式跑一个探针:一个便宜的模型观察对话,判断机器人有没有值得说的话。只有到那时完整模型才登场。
监视器是一个三阶段状态机:
| 阶段 | 行为 |
|---|---|
| 休眠 | 缓冲消息,不做检查。有活动时唤醒。 |
| 活跃 | 周期性检查(默认每 60 秒)自己该不该说话。 |
| 参与中 | 刚说过话;检查更频繁(默认每 30 秒)以维持对话。 |
连续几次检查都没什么可说时,它会顺着梯子退回去 —— 每一级默认是三次落空。休眠期间到达的消息进入缓冲区,配一个唤醒延迟(默认 60 秒),这样一阵密集聊天换来的是一次经过思考的回应,而不是三次条件反射。
| 设置 | 默认 | 作用 |
|---|---|---|
| 群模型 | 工具模型 | 跑探针的模型 |
| 检查间隔 | 活跃 60 秒 / 参与中 30 秒 | 探针多久评估一次 |
| 话痨度 | 0 | 0 = 正常的节流曲线,1 = 从不节流 |
| 群上下文窗口 | 64k tokens | 探针消息的滑动窗口预算 |
| 改写模型 | 未设置 | 把发出的回复改写成人格的语气;不设则按生成的原样发送 |
| 视觉 | 关 | 把群消息里的图片传给探针 |
| 图转文 | 关 | 在探针看到之前先把图片描述成替代文本 |
群探针线程还会做滚动交接:原始记录长到大约两倍上下文窗口时,较早的内容会被总结而不是丢弃,并带有迟滞,避免每一轮都重新总结一遍。
私聊线程有自己的压缩阈值(默认 64k tokens),在同一个面板里单独设置。
yachiyo send channel 直接以机器人身份把一条消息推到平台上 —— 不建线程,不做推理:
yachiyo channel users --json # 找到目标 idyachiyo send channel <id> "构建完成了。"在脚本和 CI 里很有用。应用必须在运行,且对应的频道服务必须处于活动状态。见 send 命令行参考。