验收原则:能自己验的事,才写进清单。清单里每一条都由贵方在本机执行、由贵方自己看到结果,我方不出具任何预置结论。
清单不含:安全评级、合规结论、法律意见。这些不属于本产品能力范围,也不在本清单的验收项内。
| 项 | 要求 |
|---|---|
| 操作系统 | Linux(x86_64 / ARM64),有 root 或 sudo |
| 运行时 | python3 ≥ 3.8;openssl、tar、curl 可用 |
| 端口 | 8420 起自动探测空闲端口,被占用会自动顺延 |
| 资产路径 | 登记在 /data、/opt 等稳定目录;不要用 /tmp |
curl -fsSL https://www.huodouai.com/axiomgate-deploy/install.sh | bash
预期输出
[1/6] 前置检查 OK python3 / openssl / tar / curl
[2/6] 验签 OK manifest.sig / Ed25519
[3/6] 验包 OK sha256 与清单一致
[4/6] 解包 OK <安装目录>
[5/6] 服务 OK systemd enabled + started(端口 8420)
[6/6] 健康 OK http 200,first_run
first_run。curl -s http://127.0.0.1:8420/api/axiomgate/health
curl -s http://127.0.0.1:8420/api/axiomgate/license
预期输出(关键字段)
health: ok=true, version="AXG-SIDECAR V1.5", mode="read_only"
license: mode="trial", valid=true, days_left=30
(激活后 mode="licensed", license_id="AXG-LIC-…", days_left=…)
ok=true;mode 为 trial(试用)或 licensed(已授权);天数能正常递减。mode=trial_expired 或 invalid,核对 license.json 是否放对目录;改过文件内容的授权会验签失败,必须使用我方签发的原件。python3 m9_tenant.py init --tenant acme --name "本公司" --did DID-BR-000123
python3 m9_tenant.py add --tenant acme --path /data/models/base.bin --label 基座模型
python3 m9_tenant.py add --tenant acme --path /data/prompts/v2.jsonl --label 提示词集
python3 m9_tenant.py seal --tenant acme
预期输出
tenant acme(本公司)
规则版本 M9-ROOT-RULE-V2
资产源 2 个,哈希匹配 2 个
复算根 BC3985F0…(45 位十六进制)
判定 ASSETS_INTACT / ROOT_VERIFIED
python3 m9_report.py --tenant acme --org "本公司" --auditor "内控审计部"
echo $? # 全部一致返回 0,有差异返回 1
预期输出
报告编号 M9-RPT-<复算根前 8 位>-<日期>
判定 ASSETS_INTACT / ROOT_VERIFIED
资产源 2 个,哈希一致 2 个,差异 0 项
结构 reports/M9-RPT-….html
报告 SHA256 E5A5FF21…(页脚同值)
ASSET_DRIFT 时不要手工改报告让它「通过」。先查差异项对应的文件,改资产再重新封账出报告。安装后自动注册每日巡检(调度明细不对外列示)
执行(手动跑一次,并做一次篡改自测)
python3 m9_patrol.py
# 输出:巡检 2 个账本,异常 0 个|ALL_CLEAN|
echo "test" >> /data/prompts/v2.jsonl # 故意改一个资产
python3 m9_patrol.py; echo $? # 期望 1,并自动生成一份报告
git checkout /data/prompts/v2.jsonl # 复原(按你的版本管理方式)
执行(状态在健康检查里可见)
curl -s http://127.0.0.1:8420/api/axiomgate/health | grep patrol
# status: ALL_CLEAN / DRIFT_DETECTED / STALE / not_run
patrol.status 转为 DRIFT_DETECTED;复原后回到 ALL_CLEAN。ALL_CLEAN 说明登记路径与实际文件不一致;状态长期 STALE 说明定时任务没在跑,查 cron 与 /var/log/axg-patrol.log。# 1) 提交申请(试用到期后仍可提交)
curl -s -X POST https://<你的实例>/api/axiomgate/apply \
-H 'Content-Type: application/json' \
-d '{"company":"本公司","contact":"张三","value":"zhangsan@example.com","edition":"cluster","nodes":5,"note":"审计包"}'
# 2) 收到 license.json 后放进安装目录并重启
cp license.json <安装目录>/license.json && systemctl restart axg-sidecar
# 3) 复核
curl -s http://127.0.0.1:8420/api/axiomgate/license
预期输出
mode="licensed", valid=true, license_id="AXG-LIC-…", days_left=…
mode 变为 licensed,裁决 / 配额 / 审计端点恢复可用;试用期内已登记的账本无需重建。invalid 且公钥指纹与合同附件不一致,说明授权不是本环境签发,联系重新签发。curl -s -X POST https://<你的实例>/api/axiomgate/rulepack \
-H 'Content-Type: application/json' -H 'X-DID: DID-BR-000123' \
-d @rulepack_request.json # {pack: 规则包, ticket: 被判定对象}
# 本地判定同样可用
python3 axg_rulepack.py --pack packs/agent_action.json --ticket t.json --report rp.html
预期输出
ok=true, run_sha256=…, pass=6, fail=0, skip=0
逐条 A-01…A-06 全部 PASS
# 故意去掉高风险动作的审批号(条件规则)
→ ok=false, fail=1, 失败项 ["A-06 高风险动作必须附审批号"]
→ 进程退出码 1,可直接挡住流水线
run_sha256 完全相同;--report 出单页 A4。# 1) 私改规则包但不入账 → 巡检必须报出来
python3 m9_patrol.py --no-alert; echo $? # 期望 1,DRIFT_DETECTED,规则包异常 1 个
curl -s .../api/axiomgate/health | grep -o '"rulepack_bad":[0-9]' # 期望 1
# 2) 人工批准后回滚到已入账的历史版本
python3 axg_rulepack.py --rollback-pack --pack-id AXG-RP-DATA-BOUNDARY \
--version 1.1.0 --approved-by "治理委员会(人工批准)" --ledger AXG_ASSET_LEDGER.jsonl
# 回滚后文件哈希必须等于账本里该版本的 sha256,且巡检回到 ALL_CLEAN
# 3) 判定记录按租户分区统计(判定时带 tenant,统计时按租户切片)
curl -s .../api/axiomgate/rulepack-stats -H "X-DID: <你的 DID>"
# 返回按租户的执行次数 / 失败率 / 跳过率 / Top 失败规则
--seal --approved-by)。