Skip to content

[Feature] 关于Astrbot设置里面的那些让大模型API资费猛增的"毒点" #8080

@FFFold

Description

@FFFold

Description / 描述

话不多说,以下所有的坑我都一个不落地踩过了,反馈给仓库,希望早日做出改善、补充说明

1&2. 上下文管理策略:最大最恶のtoken吞金王&缓存破坏者

首先是犯下了傲慢之罪的“压缩前最多保留对话轮数”,默认设置居然是-1,也就是完全不清理上下文,对小白极不友好,不会设置的新手常常直到发现余额猛猛掉才发觉不对,更有甚者把上下文聊爆之后才意识到不对劲。

然后是犯下了懒惰之罪的“轮次超限时一次丢弃轮数”,其默认值为1。即使小白开窍把上面说的最多保留轮数调到了一个合适的值,也会聊着聊着发现:怎么花钱这么多?不是说好了DeepSeek V4很便宜吗?——丢弃轮数设为1会导致保留的上下文窗口在到达上限之后每轮都发生一次截断,造成保留的对话数据在整个对话历史中形成一个每轮都滑动的窗口,导致系统提示词之后的所有对话历史在每次对话都完全无法命中缓存,经常总输入几万tokens,缓存只有几千token,完全无法发挥DS模型“缓存命中几乎不要钱”的优势。

Image

3&4. 群聊上下文感知:看似人畜无害实际机制下毒

第三是犯下了贪婪之罪的群聊上下文感知,虽然它的默认配置是关闭,但是它看似人畜无害,实际上却会简单粗暴地把群聊上下文注入到系统提示词的尾部,这下连系统提示词都是每轮都在变、无法命中缓存了。

第四是犯下了色欲之罪的“自动理解图片”,没人告诉我会把群里所有出现过的图片全部一个不落地发给图片转述模型,尤其是很多人配置的图片转述都是相对更为昂贵的多模态模型,回家一打开账单天塌了!

Image

5. 插件

好吧,这个其实不是Astrbot本体的问题,但是我认为应当在框架层面加以限制。例如,当发生对系统提示词的注入时(尤其是注入内容发生改变时),应当检测并明确输出一条日志告知用户。对于meme_manager这种提示词稳定不变的插件还好,对于有些不太懂的用户启用了诸如livingmemory这类插件的“system_prompt”的注入策略时,应当通过这种方式给予一定程度的警告。当然,livingmemory是有其他对缓存更友好的注入策略的,这并不是插件的问题。

Use Case / 使用场景

一个小白部署了Astrbot,这是他的钱包发生的变化

Willing to Submit PR? / 是否愿意提交PR?

  • Yes, I am willing to submit a PR. / 是的,我愿意提交 PR。

Code of Conduct

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:coreThe bug / feature is about astrbot's core, backendenhancementNew feature or requestpriority: p1

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions