跳转到内容

频道

频道把一个外部平台接到同一个本地八千代实例上。消息以线程的形式进来,带着同样的人格和同样的记忆 —— 这就是同一个助手,不是一个碰巧同名的另一个机器人。

凭据存在 ~/.yachiyo/channels.toml,刻意与 config.toml 分开,机器人 token 永远不会和其他设置混在一起。

全部在 设置 → 频道 里配置。

平台传输方式需要什么
TelegramBot API@BotFather 给的 token
QQNapCatQQ over OneBot v11WebSocket 地址,可选 token
QQ 官方机器人QQ Bot API(仅私聊)QQ 开放平台的 App ID + 客户端密钥
DiscordBot gatewayDiscord 开发者门户的 Bot token

每个平台可以带自己的模型覆盖,所以一个话多的 Telegram 机器人可以跑在比你桌面默认更便宜的模型上。

用 @BotFather 建一个机器人,把 token 粘进 设置 → 频道 → Telegram 并启用。改了 token 的话,在同一个面板重启服务。

八千代不直接和 QQ 通信 —— 它通过 OneBot v11 连接一个运行中的 NapCatQQ 实例。把 wsUrl 指向 NapCat 的正向 WebSocket(通常是 ws://localhost:3001),配了 token 就填上。

走官方 Bot API,用 QQ 开放平台的 App ID 和客户端密钥。仅支持私聊 —— 这条通道没有群支持。需要群的话用 NapCatQQ 那条路。

开发者门户里的标准 Bot token。Discord 私聊和服务器文字频道都支持;服务器频道走群讨论模式。

没有人能靠给你的机器人发消息就用上你的助手。用户和群组在首次接触时注册,初始状态是待处理。

用户 —— pendingallowedblocked,角色为 ownerguest。每个用户带一个 token 配额(usageLimitKTokensnull 表示无限)和累计用量。

群组 —— pendingapprovedblocked。批准一个群组会在应用运行时立即启动它的监视器。

注意这两套词不一样:用户是 allowed,群组是 approved

设置 → 频道 里批准,或者直接问 —— 它能列出谁在等,并按你的答复动手:

现在我的频道里有谁在等待处理?

要写脚本或需要确切命令的话,用命令行:

Terminal window
yachiyo channel users --json
yachiyo channel groups --json
yachiyo channel groups set-status <group-id> approval
yachiyo channel groups set-status <group-id> block

channel 命令行参考

访客不是你,八千代也照此对待:

  • 沙箱工作区。 每个访客和群组都有自己的工作区目录。
  • 过滤后的记忆。 命中你 memoryFilterKeywords 的记忆结果对访客隐藏。
  • 独立档案。 访客有自己的 USER.md 模式,所以助手对来客的了解永远不会落进你的档案。
  • token 限额。 按用户的配额,强制执行。
  • 访客说明。 一段注入到访客对话系统提示词里的自定义内容 —— 访客该知道关于你的什么,以及助手该如何对待他们的规则。

让机器人对群里每条消息都回一句是不能忍的。所以群模式跑一个探针:一个便宜的模型观察对话,判断机器人有没有值得说的话。只有到那时完整模型才登场。

监视器是一个三阶段状态机:

阶段行为
休眠缓冲消息,不做检查。有活动时唤醒。
活跃周期性检查(默认每 60 秒)自己该不该说话。
参与中刚说过话;检查更频繁(默认每 30 秒)以维持对话。

连续几次检查都没什么可说时,它会顺着梯子退回去 —— 每一级默认是三次落空。休眠期间到达的消息进入缓冲区,配一个唤醒延迟(默认 60 秒),这样一阵密集聊天换来的是一次经过思考的回应,而不是三次条件反射。

设置默认作用
群模型工具模型跑探针的模型
检查间隔活跃 60 秒 / 参与中 30 秒探针多久评估一次
话痨度00 = 正常的节流曲线,1 = 从不节流
群上下文窗口64k tokens探针消息的滑动窗口预算
改写模型未设置把发出的回复改写成人格的语气;不设则按生成的原样发送
视觉把群消息里的图片传给探针
图转文在探针看到之前先把图片描述成替代文本

群探针线程还会做滚动交接:原始记录长到大约两倍上下文窗口时,较早的内容会被总结而不是丢弃,并带有迟滞,避免每一轮都重新总结一遍。

私聊线程有自己的压缩阈值(默认 64k tokens),在同一个面板里单独设置。

yachiyo send channel 直接以机器人身份把一条消息推到平台上 —— 不建线程,不做推理:

Terminal window
yachiyo channel users --json # 找到目标 id
yachiyo send channel <id> "构建完成了。"

在脚本和 CI 里很有用。应用必须在运行,且对应的频道服务必须处于活动状态。见 send 命令行参考