OC
OpenClaw 中文解释版

给五岁小朋友也能看懂的说明书

简要总结

Command Queue

这页说明书讲的是一个叫“命令队列”的小工具。你可以把它想象成小朋友们在滑梯前排队,一个接一个地滑下去,这样就不会撞在一起啦!这个工具就是让电脑里的小助手们(我们叫它“智能体”)也乖乖排队,一个一个地工作,这样它们就不会互相打扰,电脑也不会太累。

当你发现很多消息同时发过来,小助手们有点忙不过来的时候,就可以来看看这页,学习怎么让它们更好地排队工作。

五岁小孩版解释

为什么要排队?

小助手们工作的时候,有时候需要想很久(就像我们做很难的数学题),这叫做“LLM调用”,很费电脑的力气。如果很多消息差不多时间一起发过来,小助手们可能会抢着用同一个东西(比如同一个聊天记录文件),这样就会乱套。让它们排队,就是为了不抢东西,也让发消息来的地方不会嫌我们发得太快。

排队是怎么工作的?

  1. 有个排队管理员:它有一个名单,上面写着不同的“队伍”。默认情况下,主要的队伍叫 main,最多允许4个小助手同时工作;另一个给“小帮手”的队伍叫 subagent,最多允许8个。
  2. 一个聊天室,一次只服务一个:当一个新的任务(比如自动回复一条消息)来了,管理员会先看看这是哪个聊天室的。它会确保同一个聊天室里,永远只有一个小助手在工作,其他的任务就在这个聊天室的队伍里等着。
  3. 然后再去大队伍里等:等轮到聊天室里的这个任务了,它还要去一个更大的、所有聊天室共用的队伍(默认是 main 队伍)里排队。这样,所有聊天室的小助手加起来,也不会超过规定的人数一起工作。
  4. 你感觉不到在等:即使任务在排队,如果聊天软件支持,你那边还是会立刻看到“对方正在输入…”的提示,所以你不会觉得慢。
  5. 等太久会告诉你:如果你打开了详细的记录模式,一个任务如果等了超过大约2秒才开始,电脑会小声说一句“哎呀,等了一下”。

排队有哪几种方式?

当新消息来的时候,你可以告诉它怎么处理正在工作的小助手。这就像你在搭积木,新消息可以:

  • steer(立刻指挥):马上打断现在的工作,处理新消息。就像说:“先别搭了,看我这个新图纸!”(如果小助手不能立刻被打断,它就会用下一种方式)。
  • followup(跟着做):等现在的工作做完了,再处理新消息。就像说:“你先搭完手上这块,下一个就搭我的。”
  • collect(收集起来一起做):这是默认的方式。把所有等着的新消息收集起来,变成一个新任务,等现在的工作做完后一次处理。就像把好几张图纸合成一张大的。但如果消息是发给不同聊天室的,它们还是会分开处理。
  • steer-backlog(指挥并留着):立刻指挥现在的工作,并且把这条新消息也留着,等当前工作结束后再处理一次。这可能会让你看到两条很像的回复。
  • interrupt(打断,老方法):直接停止现在的工作,然后只处理最新的那条消息。
  • queue(排队,老名字):和 steer 一样。

小提醒:通常用 collectsteer 比较好,这样一条消息只回复一次,不会看起来像重复了。

怎么设置排队规则?

你可以为整个系统设置,也可以为某个聊天软件(比如 Discord)单独设置。规则写在 messages.queue 这个地方。

默认的规则是:所有地方都用 collect 方式。 你也可以在某个聊天室里,单独发一条命令来改规则,比如发 /queue collect

排队时可以调整什么?

当使用 followupcollectsteer-backlog 这些方式时,可以调整:

  1. debounceMs:等多久没有新消息了,再开始处理。默认等1000毫秒(1秒)。这是为了防止你连续发“继续,继续”,它就不停地开始新任务。
  2. cap:每个聊天室最多能存多少条等着处理的消息。默认是20条。
  3. drop:如果消息存满了,多出来的怎么办?有三种办法:丢掉最旧的(old)、丢掉最新的(new)、或者把多出来的消息总结成几句话,加进去一起处理(summarize,这是默认的)。

在聊天室里临时改规则

  1. 你可以发命令 /queue <模式> 来改,比如 /queue steer
  2. 也可以把选项组合起来用,比如 /queue collect debounce:2s cap:25 drop:summarize 意思是:用收集模式,等2秒没新消息再开始,最多存25条,多的就总结。
  3. /queue default/queue reset 就能清除你的临时设置,变回默认规则。

重要的事情要知道

  • 这个排队工具用在所有能自动回复的聊天软件上(比如 WhatsApp、Telegram、Slack、Discord 等)。
  • 默认的 main 队伍是给所有自动回复和主要任务用的,你可以设置 agents.defaults.maxConcurrent 这个数字来决定最多几个小助手能一起工作。
  • 除了 main,还有别的队伍(比如 cron 给定时任务用),这样后台的工作就不会堵住聊天的回复。
  • 它保证同一个聊天室一次只有一个小助手在干活。
  • 这个工具很简单,不需要额外的帮手,就是电脑自己用 TypeScript 语言管理的。

如果好像卡住了怎么办?

  • 打开“详细记录”模式,看看有没有“queued for …ms”(排队等了…毫秒)这样的字。如果有,说明队伍正在慢慢处理,没有卡住。
  • 如果你想知道队伍有多长,也需要打开详细记录,看那些关于排队时间的记录。