AstrBot插件实战:大幅降低Token消耗的高级优化方案

AstrBot插件通过上下文压缩、记忆分层与按需检索,大幅降低聊天机器人Token消耗。
文章介绍了B站UP主开发的AstrBot插件,用于解决聊天机器人Token消耗过高的问题。核心思路是:设置约一万Token的上下文窗口,超出部分自动压缩成日记;将记忆分为浅层与深层,浅层仅用于判断是否回复,深层在决定回复后才带入;用背景故事包实现按需检索,替代全量塞入设定;群聊读取支持每条读、合并读、随机间隔读等可调频率;判断环节使用非推理模式以节省开销。实测在三个群聊七千多条消息的场景下Token消耗显著下降,插件已提交市场审核,相关方法论对自研AI应用同样有借鉴意义。
为什么你的AstrBot Token消耗居高不下?
很多人在使用聊天机器人框架时,最头疼的问题就是Token消耗太快。据B站UP主在视频中的分析,核心原因往往只有一个:没有做上下文窗口管理和压缩。换句话说,你把所有历史消息一股脑塞给模型,Token自然飙升。
这位UP主最近开发了一个AstrBot插件,专门解决这个问题。根据他的实测数据,在读取三个群聊、共七千多条消息的场景下,配合回复和日记压缩功能,Token消耗经过优化后有了显著下降。这个优化幅度说明,合理的上下文策略能带来数量级层面的成本差异。
插件已提交至AstrBot插件市场审核,通常一两天内可见。UP主也在评论区提供了GitHub链接,方便用户自行部署。

核心优化思路:分层记忆与智能压缩
上下文窗口 + 自动压缩
最基础也最有效的功能是设置上下文窗口。UP主建议将窗口设为一万左右,超出部分自动压缩成日记形式。这个日记功能是很多用户希望拥有的基础能力,UP主顺带做了进去。当然,你也可以让AI帮你适配不同的日记风格。
这个机制的逻辑很简单:模型不需要记住每一句话,只需要记住关键信息。窗口内的原文保证连贯性,窗口外的内容压缩成摘要,既保留了记忆又控制了成本。
上下文窗口(Context Window)指模型在一次推理调用中能够接收并处理的 Token 总量上限,包括输入的历史消息、系统提示、当前提问以及模型生成的回复。不同模型的窗口大小差异很大,从早期的 4K 到如今常见的 128K 甚至更长。窗口越大,单次调用可携带的信息越多,但成本也随输入 Token 线性增长,且过长上下文还可能稀释关键信息、降低回复质量。所谓“自动压缩”,就是在对话累积超过设定窗口时,将较早的消息交给模型总结成简短摘要(文中称为“日记”),用摘要替换原文继续参与后续对话。这样既保留了长期记忆的轮廓,又让每次请求的 Token 数稳定在可控范围,是对话类应用成本治理的常用手段。
浅层记忆与深层记忆的分离
人设卡的设计采用了分层记忆策略。浅层记忆越少越好,它只用来判断“是否要回复你”。当决定回复时,再带入深层记忆来生成真正的内容。UP主自己设置的深层记忆比较少,建议大家按需增加。
额外还有一个“活人模板”,用于调整说话风格,这是影响交互质感的重要模块。
在 AI 角色或 Agent 设计中,“记忆”通常指被注入提示词、供模型参考的历史信息与设定资料。浅层记忆一般指轻量、高频使用的近况信息,例如最近几条对话、用户昵称、当前话题等,体量小、调用频繁;深层记忆则是更完整的人物设定、长期经历、关系网络等大块内容,信息密度高但不宜每次都全量注入。将两者分开的好处是:判断“要不要回复”这类低成本决策只需加载浅层记忆,避免为了一个简单判断而支付深层记忆的 Token 成本;只有确认要生成回复时,才按需挂载深层记忆。这种分层本质上是把“检索”和“生成”两个阶段的上下文预算解耦,是控制 Agent 运行成本的常见架构思路。
背景故事包:按需检索的深层记忆
背景故事的定位类似于日记,但更灵活。比如你想让角色拥有原神中小草神的人物关系,不可能把所有设定都塞进深层记忆里——那太费Token了。UP主将其做成背景故事包,按需检索调用,只有相关时才会带出对应内容。

需要注意的是,如果没有向量模型,这个功能的检索效果会打折扣。但向量模型太重,不适合新手,所以UP主选择了当前这个折中方案,基本够用。
向量模型(Embedding Model)是一类将文本映射为高维数值向量的模型,语义相近的文本在向量空间中距离更近。基于它构建的向量检索(RAG,检索增强生成)流程是:把背景设定切分成片段并预先向量化存入数据库,对话时把当前问题也向量化,再按相似度召回最相关的片段注入提示词。相比关键词匹配,向量检索能理解同义表达和语义关联,召回更准。其代价是需要额外部署嵌入模型与向量库,占用显存或调用额度,配置门槛较高。文中提到的“折中方案”很可能就是基于关键词或规则的轻量检索,无需向量模型即可运行,代价是语义泛化能力较弱,在设定复杂时召回精度会下降。
群聊读取策略:频率控制是关键
群聊场景是Token消耗的大头。UP主推荐使用轻量模式或高级模式,全量和分层模式在早期设计中有意义,但经过多轮优化后,很多功能已被高级模式覆盖。
重点在于读取频率的自选:每条都读、几条消息合并读、还是按随机时间间隔读,都可以自行调节。UP主测试时选择每条都读,是为了获取更多数据便于判断优化效果。普通用户完全可以根据实际需要降低频率。

另外还有分担记忆和单独记忆的开关,满足不同用户的偏好。
一个容易被忽略的细节:判断用非推理模式
UP主特别强调了一个小细节:判断是否回复时要用非推理模式,真正回复时再有选择地开启推理模式。这个说起来简单,但实现中有非常多的细节需要处理。推理模式消耗的Token远高于非推理模式,把它用在“要不要回复”这种轻量判断上,纯属浪费。
实测效果与后续计划
根据UP主的实测,优化后的Token消耗相比优化前有了明显下降,预估同样数据量下还能进一步降低。不过他也坦言,后续优化空间已经不高了,制作和优化的节奏可能会放缓,当前版本应该够大家使用。
关于社区中提到的QQBridge改造、DSHBridge转AstrBot等需求,UP主表示短期内精力有限,暂时无法支持。目前先做了一个数据导入功能,可以直接把数据导入转换,但这个功能没有经过严格测试,使用时需要自行评估风险。

总结:一套可复用的Token优化方法论
这套方案的核心可以归纳为几条:设置上下文窗口并开启自动压缩;分离浅层记忆和深层记忆,浅层只做判断、深层才做回复;用背景故事包实现按需检索的深层记忆;群聊读取采用可调节的频率策略;判断环节使用非推理模式。
这些思路不仅适用于AstrBot插件,对于自己编写AI应用或Agent的开发者同样有借鉴价值。UP主也鼓励大家让自己的AI去读一读项目代码,从中汲取设计灵感。
相关推荐

Anthropic Fable 5.2实测:一句话生成3A游戏与Excel克隆
Anthropic Fable 5.2实测:三行提示词生成可玩《战争机器》克隆、完整Excel和DaVinci Resolve克隆,解析基准测试、Ultra Code模式、token成本与定价策略,评估它是否值得替代Opus 5.5。

赛博寻书:BT社区如何「劫走」塞林格遗作
塞林格未发表的《The Ocean Full of Bowling Balls》仅存于大学图书馆且禁止复制。一个私密BT tracker悬赏六TB上传积分,社区从背诵接力到eBay买书扫描,最终成功让文本流出,却因传播过快被管理员删种。本文复盘这场赛博寻书行动及其讽刺结局。

弹劾防长赫格塞斯?五角大楼战争与中期选举风暴
五角大楼气氛紧张,伊朗战事持续八个月仍无退出方案。评论分析赫格塞斯弹劾动议的真实动机:不是罢免,而是留下政治记录,并剖析战争如何通过油价与生活成本影响中期选举选情。