Files
CyberGril/docs/r3/DEPLOY-HEL-835.md
T

6.6 KiB
Raw Blame History

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;当前 release hel835-20261024-d7e5c00(=89d53b6 后台 + 2288471 HEL-834 前端 + fc5e294 审核证据 + d7e5c00 guard);上一 release hel835-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.py 34/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(首日收尾误建的副本)。两份均不再更新。

恢复条件(交总管确认)

  1. 总管确认 guard 证据与权威账可接受后,systemctl start cybergril-hel835;启动后先 journalctl -u cybergril-hel835 | grep hel835.guard 确认 guard 生效
  2. 恢复后剩余授权:对话 4 轮、MEMORY_GIST 4 次;人格生成已用尽不可再试;每轮对话仍会自动产生 1 次成长提取(R2 原正常后台,逐笔记账)与(有生活候选时)判定调用
  3. 隔天提问方案照旧(近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 禁止合并)。