Repository navigation
Releases: FoolishWiser/astrbot_plugin_hexaradar
Release list
v5.0.0 · 自动评分协议重做(关键词前置识别 + 对话中同轮在现值上小幅改分)
本次更新
口径变更版本:自动评分协议重做(改分幅度交还给对话中的模型),触发改为模型之前的关键词识别。
修复
- 修复「每次改分都顶到闸门上限」:v4.x 的目标值是"证据档位的加权平均(绝对值)"——一条「杰出」证据就让目标=95,
于是目标 − 现值永远大于闸门,每次都被削到上限(实测:未评维度一条证据直接 95;已评维度 3 条即到 95)。
现在改为:模型拿到该人完整现值,直接给出该维新值,插件不再做"档位 → 目标值"的翻译; - 修复「每次都另起一次失去上下文的模型调用」:
auto_review_engine=tool此前拦不住兜底调用;
现在inline(新默认)彻底只在对话内判定,不再有"回复之后再叫一次模型"的路径; - 修复「模型把上一次改分记成上上一次」:默认通知模式下工具只回
{"ok":true}、插件提示又不进模型上下文、
兜底路径的改动对模型完全不可见。现在:工具返回值永远带现值 → 新值(±Δ,含被闸门削过的实际值),
并在每轮注入最近改分回顾(带 #序号/时间/来源); - 退役「弱证据权重 / 同档死区 / 未评维度直接落到档位代表值 / 账本加权算分」:这几处正是虚高与"顶格"的来源。
变更(自动评分协议)
- 关键词识别前置:在模型之前扫用户本条消息——命中库内人员姓名/别名才注入「本次可能需要改分」块
(含该人六维现值+档位、现有理由、已禁止自动改的维度、改分口径、最近改分回顾);未命中则不注入、不评审; - 命中后保持 3 轮:多轮叙述里用「他/她」指代时仍能继续改分;
- 意图词分支(
auto_review_trigger=names+intent):命中「改分/评分/分数…」时追加完整名单,
并说明"用户明确要求的改动请用set_radar_scores权威写入"; - 工具参数改为
new_value:submit_radar_evidence(person, dim, new_value, behavior, quote, actor, reason)
——在现值上小幅修订(一般 ±1~5 分,最多 15 分),不再是target_band; - 幅度纪律写入三处单一真源(
rubric.calibration_block()):工具描述、注入块、兜底提示词口径一致; - 两道安全网保留并降级:单次最多 1 档(15 分)、7 天窗口 ±20 分——正常小幅修订不会触发,因此改分提示里
不再频繁出现"受单次跨档限制/受窗口累计限制"; - 指纹去重窗口 30 → 90 天:同一条依据不再反复改分;
- 未评维度首次给值不受闸门限制(与 WebUI 首次评分一致);
- 配置语义:
auto_review_engine默认inline(仅对话内);要保留「模型未调用工具时的兜底评审」请显式选
inline+hook(会多一次模型调用)。旧值auto/tool一律按inline处理——否则升级后仍会走那条
「回复之后再叫一次模型」的旧路径。auto_review_trigger改为names(默认)/names+intent/always;
退役auto_review_weak_counts。
变更(WebUI / 命令)
- 详情页「证据账本」改为「依据记录」:显示
现值 → 新值(±Δ)、档位、理由与依据原文,
未采纳(禁止自动改)的记录带「未采纳」标记; - 「移除并重算」改为「移除记录」:v5.0.0 起分数由模型在对话中给出,账本只是审计层,
删记录不改分数(要回退某次改分请用更新记录里的「撤销」); - 更新记录来源芯片区分「对话内 / 兜底评审 / 系统 / WebUI」;
/radar 评审 <名字>增加"最近一次改分来源",并输出"模型提议值 → 闸门后实际落盘值"。
新增
- 仓库内回归测试(纯 stdlib,无需安装 AstrBot):
tests/test_review_pipeline.py(解析/守卫/两道闸/端到端改分/关键词门控/引擎语义/冻结/观察模式)、
tests/test_schema_and_tools.py(设置规格一致性/AI 工具可加载性/撤销回滚)。
说明
- 数据结构不变(
scores.json无需迁移;旧账本条目仍可正常展示); - 确定性取舍:分值不再"同批事实必然同分",改分幅度由模型判断 + 守卫/闸门约束——
换来的是"模型知道现值、只做小幅修订";要完全固定某一维仍用「🔒 禁止自动改」。
安装:AstrBot 插件市场更新,或下载源码覆盖后重启。数据结构不变(scores.json 无需迁移);建议保持默认 auto_review_engine=inline(旧值 auto/tool 一律按 inline 处理,需要兜底请显式选 inline+hook)。
自检:python3 tests/test_review_pipeline.py 与 python3 tests/test_schema_and_tools.py(纯 stdlib,无需安装 AstrBot)。
v4.2.0 · 卡片视图视觉重做 + 修复「打开卡片默认最底部 / 年龄系数显示过长」
本次更新
新增
- 卡片视图视觉重做(
pages/radar):- 头像改为档位色环(按综合分档位上色,未评为灰环),一眼看出该人在哪一档
- 分数栏改为**「小字名称 + 大数字」两行标签**:胶囊/矩形都不再只有一个裸数字(「个人基准 / 社会参考 / 稀缺值」)
- 卡片维度条默认只显示 3 条(当前排序维度 + 最高分 + 最低分),其余收进「展开全部(n 项)」按钮,卡片高度更整齐
- 维度条按各自档位上色;雷达图按六档色阶上色(面积 = 综合档位、顶点 = 该维档位),每个顶点带「维度:分数(档位)」悬停提示
- 真正跟随宿主主题:插件页在 iframe 里取不到宿主 CSS 变量,改为按「查询参数 → 宿主文档(
data-theme/class/ 背景亮度)→localStorage主题项 → 系统偏好」的顺序探测,并监听宿主切换实时跟随;雷达页与独立设置页策略一致(此前[data-theme="dark"]样式实际上从未生效)
修复
- 修复「打开卡片默认滚动到最底部」:v4.1.0 引入的可访问性焦点管理会把焦点交给弹窗内 DOM 顺序上的第一个
button——在查看弹窗里就是最底部的「关闭」,浏览器随之把弹窗滚到底部。现在改为:只把焦点交给输入类控件
(密码框/姓名等),其余弹窗聚焦弹窗容器本身,并统一把弹窗与内部滚动区(滑块 / 更新记录 / 证据账本)归零,
配合preventScroll兜底 - 修复「年龄系数显示过长」:社会参考分的年龄系数是分段线性插值结果(如
1.0833333333333333),此前原样
铺满一整行。现在收敛到 2 位小数(稀缺值参数 β 3 位、U_ref 1 位),并改为紧凑网格「维度 + 系数」 - 修复查看弹窗「备注」恒为「—」:
#view-desc-text从未被写入 - 修复详情页「🕘 更新记录」按钮无响应、更新记录弹窗「关闭」按钮无响应(两个按钮的事件从未绑定)
说明
- 本次仅改动前端(
pages/),数据结构、后端 API 与评审算法均未变化。
安装:AstrBot 插件市场更新,或下载源码覆盖后重启。仅前端改动(pages/),数据结构与后端 API 不变。
v4.1.3
六边形能力雷达 v4.1.3
修复:插件加载失败 the first argument must be callable
-
根因:新增的
submit_radar_evidence工具把"指向插件实例"的字段命名成了handler,
而handler是 AstrBotFunctionTool的保留字段。AstrBot 在加载插件时会执行:if ft.handler and ft.handler.__module__ == metadata.module_path: ft.handler = functools.partial(ft.handler, metadata.star_cls)
我们把
Main实例塞进该字段后,加载阶段对它做functools.partial→ 直接抛
TypeError: the first argument must be callable,插件无法加载。 -
修复:字段改名为
plugin(不再触碰任何 AstrBot 保留字段)。 -
影响范围:该问题自 v4.1.0 引入工具时就存在;v4.1.3 一并修正,功能本身未受影响。
新增回归测试(防止同类问题再犯)
- 遍历全部 7 个工具,断言 AstrBot 保留字段(
handler/handler_module_path/active/is_background_task)
未被我们占用,且自有 dataclass 字段仅允许store/plugin; - 同时验证证据工具
run()仍能正常写入并算分。
升级后重载插件即可加载。若你此前卡在 v4.1.0~v4.1.2 的加载失败,这次直接升级到 v4.1.3。
v4.1.2
六边形能力雷达 v4.1.2
按你的判断,移除了"人工锚定 ±护栏"这个不合理的设计,换成二元开关。
为什么移除(你的批评是对的)
±护栏在逻辑上不自洽:
- 它无法定义"人工":你让 LLM 改分是你的判断,但插件只能看到"工具调用",分不清"你让改"与"模型自己改",
于是我把 AI 工具写入一刀切排除,正好违背你的意图; - 它和"允许大幅修改"直接冲突:真需要 60 → 95 时会被拦住;
- 而它想防的"措辞虚高"其实是多次小幅累积,用闸门(单次跨档 / 窗口累计 / 同档死区)比硬钳制对症。
现在的设计
- 人工写入即时生效、无任何钳制:WebUI 保存与 AI 工具
set_radar_scores都是权威写入(60 → 95 就是 95); - 防虚高交给闸门:单次跨档(默认 1 档)、窗口累计(默认 7 天 ±20 分)、同档死区(差 <3 分不动),
再加事实守门(归因 / 措辞 / 每轮上限 / 弱证据不计分); - 「🔒 禁止自动改」二元开关(编辑弹窗勾选):自动评分跳过该维——不改分、不钳制,未评维度也不会被自动填充;
期间到来的证据照常写入账本(不丢失),并提示「该维已禁止自动改,本次 N 条证据已入账、未调整评分」;
详情页可一键「允许自动改」; - 想"先看提案再决定"就用
auto_review_mode=observe。
退役与清理
- 配置
auto_review_manual_anchor_guard已退役(从 schema 与设置界面移除,旧值被忽略); - 旧版本写入的
anchors数据不再使用(读取时隐藏、写入时自动清理),不会限制任何人员; - 冻结期间证据不再被丢弃(此前实现会跳过而不入账,解冻后无法回溯)——已修。
验证
- 新增 6 组冻结测试:人工写入无钳制(60→95)、冻结维度跳过且提示、其他维度不受影响、解冻后恢复自动更新、
AI 工具写入不影响冻结状态、未评维度冻结后不会被自动填充、旧 anchors 不生效; - 既有三套(静默打分 9 组 / v4 回归 7 组 / 设置 4 组)全部通过;语法与 DOM id 交叉核对通过;schema 17 项类型合规。
升级后请重载插件:此前的"锁定基准"概念已不存在,需要固定某维时请勾选「🔒 禁止自动改」。
v4.1.1
六边形能力雷达 v4.1.1
修复"人工基准"的语义缺陷:新建人物不再被锁死。
问题(已复现)
v4.1.0 里任何非 AI 来源的写入都会建立人工基准,而 WebUI 保存与 AI 工具写入都走默认来源标记,于是:
| 场景 | 旧行为 | 现在 |
|---|---|---|
| WebUI 新建并填 60 分 | 六维全部落成基准 → 证据目标「杰出(95)」只能到 70,连 4 轮仍卡 70 | 不落基准,可自由成长 |
AI 工具 set_radar_scores 写入 |
被误判成人工基准 | 不落基准(它不是人工判断) |
| 前端展示 | 完全看不到被锁(grep anchors = 0) |
详情页显示 🔒 基准 值 并可一键解除 |
变更
- 人工基准必须显式锁定:编辑弹窗每维新增「🔒 基准」勾选,只有勾选并保存的维度才建立基准并受护栏约束
(勾选「未评」时自动禁用并取消该维锁定); - 其他写法不落基准:AI 工具写入、自动评分、以及「移除证据并重算」都不再产生基准;
- 旧锚点自动失效:锚点结构增加
locked标记,你现有数据里此前被写入的锚点缺少该标记 → 不生效,
无需迁移、不会限制任何现有人员; - 设置项
auto_review_manual_anchor_guard说明改为"仅对手动锁定的维度生效"; - README / 标尺文档同步更新(此前"详情页会显示人工基准"的声明,现在真正实现了)。
验证
- 新增 7 组锚定测试:未锁不受限、锁定后 ±10 生效并提示「受人工基准约束」、解除后恢复自由、
AI 工具不落锚、证据重算不落锚、旧锚点失效、未评维度即使勾选也不落锚; - 既有三套测试(静默打分 9 组 / v4 回归 7 组 / 设置 4 组)全部保持通过;语法与 DOM id 交叉核对通过。
升级后请重载插件。若你想让某个维度长期稳定,在编辑弹窗勾选「🔒 基准」即可;想放开就点「解除」。
v4.1.0
六边形能力雷达 v4.1.0
本次聚焦三件事:让打分带上真实上下文、堵住"措辞=分数/归因虚高"、UI 美化与可用性。
新增
- 对话内静默打分(主路径):新增 LLM 工具
submit_radar_evidence+ 请求前注入的静默指令——由和你对话的那个模型在同一次对话里、带着完整上下文判断并静默记录证据。
主路径不产生额外 LLM 调用;模型不会向用户宣告评分,改分信息由插件发送。 - 历史感知兜底:模型不支持工具或未调用时,兜底抽取会注入真实会话历史(最近 12 条,替代此前 800 字切片);本轮已被工具记录则跳过,避免重复计分。
引擎可选:auto(默认,工具优先+兜底)/tool/hook。 - 改分信息规范化:固定包含 变化(维度/档位/分数)+ 改分理由(模型提供)+ 原来的理由 + 证据原文与来源 + 综合分变化,并标注受哪种闸门限制(单次跨档 / 窗口累计 / 人工基准)。此前 v4.0.0 提示中丢失的理由与证据已补回。
- 改分信息由谁输出(
auto_review_notice):plugin=插件模板(必达,且数值必然等于落库值,默认);llm=由模型自己在回复里说明(工具返回权威数值与指令)。 - 人工锚定护栏(
auto_review_manual_anchor_guard,默认 10 分):WebUI/工具里显式写入的评分成为「人工基准」,自动证据不得把该维拉离超过该值;详情页展示「人工基准」与自动证据,可逐条移除并重算。 - 设置字段规格单一真源(
settings_schema.py):字段/分组/类型/范围由后端统一下发与校验,页内弹窗与独立设置页共用同一套渲染与收集逻辑——彻底消除两处同步维护的漂移(本仓库此前已因它漏改过)。 - UI:六档色阶、档位刻度条、三分数并列卡片、已评覆盖度进度条、设置分组折叠、骨架屏。
变更(防虚高)
actor必须是当事人本人:第三方或环境事件(如"公司裁员")一律拒收,避免把外部事件算成个人加分。behavior必须含具体行为词且长度足够:纯评价措辞("他很优秀/很厉害")与过短描述拒收——不因措辞好听而加分。- 每轮每人最多采纳 N 条证据(默认 1),弱证据默认不计分(仅入账本审计),同档且差 <3 分不动,再加人工锚定护栏。
- 详情页/只读弹窗不再用同一个大数字在三态(个人基准/社会参考/稀缺)间切换,改为三张卡片并列展示。
修复
- 可访问性:弹窗补
role="dialog"/aria-modal、Esc 关闭、Tab 焦点陷阱、关闭后焦点归还;补:focus-visible与prefers-reduced-motion。 - 响应式:新增 1100px / 560px 断点(详情单列、分数卡两列、工具栏折行)。
- 历史面板按维度分组、from→to 高亮;列表加载使用骨架屏。
升级后请重载插件。若你的人格配置了工具白名单,请把
submit_radar_evidence加入,否则主路径不生效(会自动回落历史感知兜底)。排查用/radar 评审 <名字>。
v4.0.0
六边形能力雷达 v4.0.0
评分机制重做版本(口径变更)。核心变化:不再让模型直接给数字,而是让模型抽事实、判档位,分值由规则引擎按证据账本算出。
新增
- 六档评分标尺(
rubric.py唯一真源):杰出 90-100 / 优秀 75-89 / 良好 60-74 / 普通 45-59 / 较弱 30-44 / 弱 0-29;50=同龄平均、60=良好基线;含 6×6 逐维行为锚点,前端编辑时实时显示档位与描述 - 自动评分机制重做:事实 → 档位 → 证据账本 → 规则算分
- LLM 只输出事实与目标档位,不输出分值 → 同一批事实必然得到同一个分
- 证据来源由服务端定位:只有用户消息中的事实算强证据;仅来自 AI 回复的默认拒绝(可配置放开),杜绝模型自证循环
- 事实指纹去重(30 天)+ 时间衰减(半衰期 60 天)+ 账本保留 180 天
- 两道防漂移闸:单次跨档(默认 1 档)与窗口累计(默认 7 天 ±20 分)
- 未评维度首次评分直接落到目标档位代表值(不受单步限制)
- 观察模式:只生成提案,详情页可应用/丢弃
- 证据账本面板(详情页):逐条查看评分依据并支持「移除并重算」
- 更新记录可撤销:撤销会回滚分数并移除该次引入的证据;理由变更记录真实 diff;跨年加龄留痕
- 未评维度:可只评部分维度;综合分/社会参考分只按已评维度归一(六项齐全时与旧口径一致);稀缺值需六项齐全;界面显示「已评 x/6」
变更
- 新建/写入不再把缺失维度静默填 60(避免默认分污染统计);WebUI 新建默认全部「未评」
- 编辑弹窗新增「未评」开关、档位标签与描述、一位小数输入;自动评分会回写该维最新事实依据
- 退役
auto_review_require_evidence、auto_review_max_delta(证据改为强制可验证;单次上限改为按档计)
修复
- 独立设置页「保存别名」按钮此前未绑定事件
- 空值在详情/弹窗显示「—」,排序空值置末
升级后请重载插件。首次使用建议先看
/radar 评审 <名字>的输出,确认事实抽取与证据来源符合预期。
v3.3.1
六边形能力雷达 v3.3.1
本次修复两处"静默失效/崩溃",并让自动评分真正可用。
修复
- 修复自动评审从未触发(根因):AstrBot ≥4.11 的
LLMResponse已没有result字段(正文在completion_text属性 /result_chain),插件读取resp.result与provider_result.result两处都抛AttributeError,又被钩子最外层except静默吞掉 → 评审调用次数为 0、无改分、无提示。现统一按completion_text→result_chain.get_plain_text()→ 旧版result顺序取文本,新旧版本兼容 - 修复稀缺值崩溃:六项分数全等且 <50(如全 45)时浮点误差使
cosθ略小于 -1 →φ成极小负数 →φ**β返回复数 →min()抛TypeError;该异常会让写入/列表/排行整体失败(开启稀缺值时 WebUI 整页打不开)。现夹紧cosθ∈[-1,1]、φ∈[0,1],φ≤0直接返回 0,并消除-0.0 - 综合分/社会参考分/稀缺值三者各自兜底,单个人员数据异常不再拖垮列表/排行/写入
- 前端无数据时显示「—」而非
0/null;徽章与排序对空值统一处理(空值排末尾);确认弹窗按钮文案不再写死「确认删除」
变更
- 自动评审改为后台任务:
on_llm_response只做命中判断与调度后立即返回,正常回复的投递不再被评分耗时阻塞 - 新增诊断指令
/radar 评审 <名字>:只读跑一次评审管线并逐段回报(配置/命中/提供商/模型原始输出/校验结论/拟改分),10 秒自助排查 - 评审日志统一前缀
hexaradar:review:
升级后请重载插件;若仍未见改分,先执行
/radar 评审 <名字>查看管线停在哪一步。
v3.3.0
六边形能力雷达 v3.3.0
新增
- 评审提供商可自定义(
auto_review_provider):自动评审使用的 LLM 可从 AstrBot 已配置的提供商/模型中选择(设置页下拉),不再强制跟随当前会话;留空则保持原有「跟随当前会话」行为。 - 配置的评审提供商不可用时自动回退到当前会话提供商,并记录日志。
- 设置页(独立 Page 与页内弹窗)新增「评审提供商」下拉,实时从 AstrBot 提供商管理器枚举(兼容 AstrBot 4.17-4.27 的 Context API:
get_all_providers/get_provider_by_id/provider_manager)。
v3.2.1
六边形能力雷达 v3.2.1
修复
- 修复插件无法加载:「不受支持的配置类型 number」——AstrBot 配置 schema 仅支持
int/float/bool/string等类型,auto_review_max_delta改为float、auto_review_cooldown改为int。 - v3.2.0 因该问题无法加载,请更新至 v3.2.1。
v3.2.0 的全部功能(对话后自动评审升级:上下文+证据+冷却+多人+历史审计)在 v3.2.1 中完整保留。