- 新增渐进式上下文压缩算法:替换原来的"只保留7条"策略,改为按 Token 预算从最新消息往前保留正文(10K)和工具消息(10K),支持遗忘时间上限(默认1天)强制压缩。
- 配置 schema 重构为分组结构:采用
type: object嵌套分组(timing、leave_reply、wake_interaction、access_control、personality、context_compression、comfort、tool_decoration、debug),WebUI 展示更清晰。 - 新增配置自动迁移:升级时自动将旧的扁平配置迁移到新的分组结构,用户配置值不丢失。
- 修复离场应答开关失效:
leave_echo_reply和leave_dense_reply之前未作为开关使用,关闭后复读/密集检测仍会触发。现已修复。 - 修复混脸熟超时未生效:
familiarity_timeout参数之前从未被任何代码读取,混脸熟状态永远不会超时降级。现已接入超时检查逻辑。 - 修复上下文接管不尊重白名单:
delegate_prompt_rewriting现在会检查白名单,启用白名单时只接管白名单内的会话。
- 私聊重写 LLM 请求体时也会在上下文不足时从 AstrBot 官方 conversation history 回退补充历史,避免只看到当前一条消息。
- 非群聊补历史现在直接使用 AstrBot 官方 conversation history,不再尝试 QQ 群历史接口。
- AstrBot 官方 history 回退最多取 7 条有效正文消息,正文累计最多约 10K token,并跳过工具调用与工具结果,避免将过大的已生成上下文灌入 AngelHeart 总账。
- 新增 AstrBot history 回退转换测试,覆盖 7 条限制、工具消息跳过、多模态文本块提取与 10K 正文限制。
- 调整默认配置:安抚机制默认每 60 秒发送一次,安心词默认改为“要给”;张嘴词默认改为“张嘴”;观测中超时时间默认改为 60 秒。
- 删除未生效的“离场应答超时时间”配置项,并在配置迁移时自动清理旧配置中残留的
familiarity_timeout。 - 上下文压缩的 Token 上限现在会读取当前会话绑定模型的
max_context_tokens,并与插件侧上限取较小正数,便于直连模型使用大上下文、群聊使用较小上下文。 - 不再因离场/不在场状态强制清理上下文;上下文删减只由压缩策略和消息数量上限控制。
- 补历史时不再只保留最新一条当前消息,改为合并历史消息与当前内存消息,避免补历史阶段误清空已有上下文。
- 提示词中的消息时间默认改为系统当地绝对时间,不再默认显示“刚刚”“X 分钟前”等相对时间。
- 新增独立配置项
takeover_private_chat_context,用于单独控制是否接管私聊上下文。 - 群聊与私聊的上下文接管判断现已彻底拆分:群聊只看
group_chat_enhancement,私聊只看takeover_private_chat_context,两者互不依赖。 - 统一群聊/私聊上下文接管配置文案,明确默认行为为“默认接管群聊,不接管私聊”。
- 提高秘书 JSON 解析鲁棒性:
should_reply现在是唯一关键字段,其余字段类型错误或缺失时会自动回退默认值,不再因辅助字段异常导致整条决策失败。 - 对
entities、facts、keywords新增字符串数组归一化处理,兼容单字符串、空值、混杂脏数据等异常输出。 - 新增可直接运行的手动测试脚本
tests/manual_test_llm_analyzer_json_robustness.py,覆盖多组刁钻和弱智输出案例,用于脱离上游环境验证秘书解析稳定性。
- 新增配置项
block_unapproved_wake_non_command,可阻断未通过 AngelHeart 批准的非命令唤醒消息,禁用这类消息对上游与其他插件的后续唤醒效果。 - 上游 command/skill 事件现在会在入口层直接跳过 AngelHeart,不进入聊天记录。
- 普通唤醒非命令消息不再在
_should_process()中被误判为“指令或@他人消息”提前忽略,改为进入后续规则处理。 - 未命中上游额外聊天唤醒前缀的非命令消息现在会保留聊天记录,但跳过秘书分析;启用阻断开关时会进一步停止后续主 LLM 处理。
- 新增 AngelHeart 专用图片转述模型配置
image_caption_provider_id,与上游图转文配置解耦,避免重复转述。 - 图片转述结果现在会按统一的
<图片附件>文本块格式注入到消息中,包含图片路径与图片描述。 - 组建请求前会先补齐待回答消息的图片转述,最新消息正文也不再混入
[图片]占位。
- 新增“张嘴词”配置
speak_words,命中后可立即解除当前会话的闭嘴状态。 - 重建 LLM 请求体时,若重建出的当前提示词为空,则仅重建上文并保留原始
req.prompt,避免将当前轮输入覆盖为空。
- 白名单模式下,安抚词机制现在只对白名单内会话生效;非白名单会话不会启动或继续发送安抚消息。
- 消息过滤增强:对回复文本进行 markdown 清洗后,如果为单行且末尾是“.”或“。”,自动去掉最后一个句号,避免单行结尾多余标点。
- 重构上下文注入:未处理消息作为最新
prompt注入主模型,秘书建议改为临时上下文并标记为不持久化。
- 重建上下文时,用户消息改为追加独立时间文本块,时间值使用该消息的发送时间(
YYYY-MM-DD HH:MM (CST))。 - 不再注入
Current datetime,避免将“当前时间”误当作消息时间造成时序干扰。
- 私聊消息现在也会进入 AngelHeart 的上下文重写链路,发送给模型前会按总账历史重建聊天记录。
- 私聊保持主框架直接响应,不再误走群聊秘书判定和群聊补历史逻辑。
- 修复私聊唤醒消息可能在前置过滤阶段被跳过,导致上下文未入账的问题。
- 发布维护版本:同步主分支当前修复并更新发布号。
- 无额外行为变更,功能与
0.8.18保持一致。
- 新增图片原始引用字段
original_file_url,统一保留 file/url 来源信息。 - 重建上下文时为含图消息追加
Image Ref文本块,支持历史图片引用被 LLM 持续感知。 - 保持原有多模态内容结构不变,兼容现有图片处理链路。
- 修复混脸熟状态下触发类型固定为密集讨论的问题,现可正确识别复读触发并使用对应策略。
- 修复“必须响应呼唤”开启时,消息命中昵称却未进入“被呼唤”状态的问题。
- 新增“必须响应呼唤”配置项,可控制被呼唤时是否强制回复。
- 默认保持开启,兼容现有使用习惯。