Day 05 / 5 · 收官
评测 · 安全 · 上线 · Portal 看见你的效果
能跑不够——要有样本、0 外网测试、涉权过评审、灰度上线、KPI 闭环。
01
评测样本 · ≥20 条
改哪些文件:
- Monorepo:
gov-agents-platform/apps/my-agent/evals/golden.jsonl或apps/my-agent/data/eval_samples.jsonl - 独立仓:
my-agent/scripts/下评测脚本 · 或自建evals/目录
{"sample_id":"t-001","input":{"text":"hello"},"ground_truth":{"category":"greeting"},"tags":["smoke"]}
覆盖:核心场景 × 边界 × 失败 case。少于 20 条 FiveDimScorer 方差大,跨周对比假阳性多。
uv run agentctl invoke my-agent --eval
uv run agentctl invoke my-agent --eval --sample t-001 -v
02
FakeLLM · 0 外网 · 5 秒跑完
改哪些文件:
- Monorepo:
apps/my-agent/tests/test_smoke.py(及同目录其它 test_*.py) - 独立仓:
my-agent/tests/test_smoke.py
from ai_trust_toolkit.testing import FakeLLM, build_agent_for_test
async def test_triage():
fake = FakeLLM({"triage": ["category: greeting"]})
app = build_agent_for_test(builder=build_router, llm=fake)
result = await app.invoke({"input": "你好"})
assert result["category"] == "greeting"
uv run pytest apps/my-agent/tests/ -q # Monorepo
uv run --extra test pytest # 独立仓
最小合并标准:≥3 个 FakeLLM 测试 · ≥1 个 L1 critic 规则 · ≥5 条评测样本。
03
安全自检 · 7 问(涉权必做)
用服务凭据调下游时:没权限的人经 agent 拿到那个权限 = 越权放大。命中写/删下游、跨团队、涉密 → 独立安全评审。
1
会放大权限吗?
2
下游带谁的身份?服务凭据怎么校验调用者有权?
3
服务凭据是最小权限吗?
4
高危操作有 dry-run / 人审 / 二次授权吗?
5
每次操作可追溯到真实用户吗?
6
越权/失败默认拒绝吗?
7
敏感数据出域 / 过 LLM 吗?
原则:经 agent 的有效权限 ≤ 调用者本人。
04
上线 · 先测试后生产
Pod:obelisk 测试环境 → 健康检查 + Portal 出 invocation → 生产 canary 0→10→50→100%
canary phase advance --agent my-agent
canary rollback --agent my-agent # 异常 p99 < 30s 回滚
CLI/MCP:uv publish → Nexus → 小范围 pipx → 稳定版广播。
BOM 升级:看 release notes → 改一行版本 → uv sync + 跑测 → 不跳 MINOR。
05
Portal KPI 闭环
改文件:my-agent/my_agent/core.py(独立仓)· Monorepo 若在 server/builder 链路里上报则改对应 telemetry 钩子。
with bind_effect():
record_effect("upgraded", 1) # 换成你的业务 key
push_invoke_metrics(result, form="cli")
Skill 默认不上报 KPI;要做效果度量闭环必须走 Agent + telemetry。
✓