6.6 KiB
HEL-835 独立部署与回退(R3 审核实例 8350)
部署时间:2026-10-24 14:03 北京时间(首版 fc5e294);14:33 升级 d7e5c00(guard v1);14:47 升级 0b24fef+(guard v2,release hel835-20261024-0b24fef)并恢复运行。guard 源码 SHA256 f365741bc335123224607762a2a4f356a3bc94cfa525e2d69eb642d156e5a973(服务器与仓库 9039311..96cdf07 逐字节一致)。
实例
- 服务:
cybergril-hel835.service(systemd,User=cybergril,ProtectSystem=strict,ReadWritePaths 仅数据目录) - 入口:
/opt/cybergril-hel835/current/.venv/bin/python -m deploy.hel835_guard(部署层包装,产品入口cybergril.api不变;恢复原样=改回 ExecStart 即可) - 地址:
http://192.168.200.12:8350(内网,停止期间不可访问;启动后 health/api/health应返回R3-backend、capabilities.memory=true) - 代码:分支
hel-835-unified-review;当前 releasehel835-20261024-d7e5c00(=89d53b6 后台 +2288471HEL-834 前端 +fc5e294审核证据 +d7e5c00guard);上一 releasehel835-20261024-fc5e294保留可回切 - 数据:
/opt/cybergril-hel835-data/cybergril.db全新合成档案(小满),与 8300/8310/8320/8340 及真实用户库完全隔离 - 模型路由:复制自 hel829 隔离实例的
config/models.yaml(内网 halogen 服务),未改全局路由/模型/温度/预算 - Python 3.12.3 / SQLite 3.45.1;trigram 中文短语/三元组实测命中,短词基表 LIKE 回退
- 日志:venv
sitecustomize.py开 INFO(部署层),guard 每次调用打hel835 guard call category=…,检索命中 JSON 日志进 journal
部署层调用硬阀 v2(2026-10-24 总管二轮复核修正)
deploy/hel835_guard.py v2(部署层,零产品代码改动):
- 场景绑定分类:类别在
route()时按路由 Scene 绑定(产品自身场景表:DIALOGUE_MAIN/MEMORY_GIST/DIALOGUE_FOLLOWUP=人格/FACT_EXTRACT=成长/LIFE_EVENT/OUTPUT_GUARD),不再看 prompt 文本——关系边界/人格/候选文本含 feature 串无法重路由(总管复现的绕过路径已关闭);未知 Scene 一律hel835_guard_unknown_scene:<name>拒绝并留诊断,绝不落入无上限外发类别。 - 唯一 call_id 精准结算:每次预占持久化唯一
call_id(time_ns+pid+随机),结算精准匹配,同秒并发/乱序/重复结算各得其所(重复结算拒绝);取消/提前关闭显式aclose()上游并结算 cancelled。 - 账本有效性:三个 capped 键必须存在且非负整数;空
{}、损坏、缺键、负值一律拒绝启动与调用,绝不静默回零。 - 硬上限跨运行/重启/失败/重试/自动后台累计:
memory_gist ≤ 8、dialogue_main ≤ 6、persona_generation ≤ 1;到限 RuntimeError、上游零调用;无上限类别逐笔记账不拦截。 - 隔离证明
docs/r3/guard-test-HEL-835.py34/34(v1 全部回归 + R1 同秒乱序结算 + R2 毒化边界/人格/未知场景 + R3 空账/坏账/缺键/负值/耗尽拒绝 + R4 提前关闭结算并关上游 + echo 完整 create_app 毒化边界组装回归);全部 ControlledLLM/echo 零真实调用。
恢复状态(2026-10-24 14:47)
按总管批复条件恢复:缺陷已修、34/34 证明、账本核对通过、guard hash 一致、启动前无未知待发调用。启动后只读验证:health ok / R3-backend / capabilities.memory=true / life_runtime=running;权威账零变化(counts 4/2/1/2/0/0、calls=0)——启动、health、LLM 连通探测(/v1/models 列表 GET,非生成调用)不消耗计数。零主动新增真实模型调用。R2 循环 running,任何自动调用逐笔记账。
合成检索 probe(已批复方案,2026-10-24 完成准备零调用)
docs/r3/PROBE-runbook-HEL-835.md + probe-seed-HEL-835.py:隔离库 /opt/cybergril-hel835-data/probe/seed.db 已 seed(1 条目标记忆=巷口旧书店蓝灰色诗集,~26h 前,手写 gist,message_id 回源 + 20 轮近窗填充;seed-info.json 存 ID)。零调用检索验证:20 近窗轮排除生效、目标轮在窗口外、mode=trigram 命中目标 id=1。明日与隔天提问同批执行(顺序、余量检查、8351 临时进程、断言见 runbook);不另开类别,真实调用全部计入同一权威账。
唯一权威账
/opt/cybergril-hel835-data/guard-ledger.json(guard 读取同文件)。初始值由 8350 DB 只读审计得出:
| 类别 | 首日次数 | 凭据 |
|---|---|---|
| memory_gist | 4/8 | mem_job×4 done attempts=1(零重试) |
| dialogue_main | 2/6 | chat_message companion sent×2 |
| persona_generation | 1/1(已用尽) | persona_job ready(created-R2);token_usage dialogue_followup 2907 即该次 |
| growth_extract(FACT_EXTRACT) | 2,无上限 | growth_job×2 done(ref chat 消息 2/4);fact_extract 1451 为成长两次 |
| sharing_judge(OUTPUT_GUARD) | 0 | sharing_attempt×2 judged 且 candidates=[](无候选短路,未调模型) |
| life_event | 0 | life_event 0 行 |
token_usage(day 2026-10-24):dialogue_main 6341 / dialogue_followup 2907(=人格1次)/ memory_gist 2728 / fact_extract 1451(=成长2次)——token 为预占量,次数一律以上表作业/消息行为准,未知项无。
历史账文件保全:evidence/history/ledger-initial-20261024.json(未更新的初始账,总管复核发现的错误)、evidence/history/ledger-root-20261024.json(首日收尾误建的副本)。两份均不再更新。
恢复条件(交总管确认)
- 总管确认 guard 证据与权威账可接受后,
systemctl start cybergril-hel835;启动后先journalctl -u cybergril-hel835 | grep hel835.guard确认 guard 生效 - 恢复后剩余授权:对话 4 轮、MEMORY_GIST 4 次;人格生成已用尽不可再试;每轮对话仍会自动产生 1 次成长提取(R2 原正常后台,逐笔记账)与(有生活候选时)判定调用
- 隔天提问方案照旧(近20轮内预期不注入长期记忆,如实记录)
停止与回退
systemctl stop cybergril-hel835 # 当前即停止状态
journalctl -u cybergril-hel835 -f # 日志
ln -sfn /opt/cybergril-hel835/releases/hel835-20261024-fc5e294 /opt/cybergril-hel835/current # 回切首版(无 guard)
回切首版须同时把 ExecStart 改回 python -m cybergril.api(guard 是停止后新增的保护)。schema 全增量,回退不删数据;guard-ledger.json、evidence/、journal 永不删。
保护范围
不动 8300/8310/8320/8340、HEL-831 三天观察、共享语音口型与 4080;不并入 8310(须白栖知另行确认);不合并任何 PR(PR#10 禁止合并)。