자기개선 루프에서 Petri는 측정 계층입니다. 스캐폴드 변이가 실제로 더 안전한 에이전트를 만드는지는 주장이 아니라 적대적 감사로 판정해야 하므로, GEODE는 Petri를 wrapped agent로 통합했습니다. Petri(Parallel Exploration Tool for Risky Interactions)는 Anthropic Alignment Science가 만든 alignment audit 프레임워크로, inspect_ai(UK AISI) 위에 구현되며 Meridian Labs가 inspect_petri(MIT)로 유지합니다.
세 가지 모델 역할
| 역할 | 하는 일 |
|---|---|
| Auditor | target을 misalign 방향으로 유도하는 적대적 에이전트 |
| Target | 측정 대상. GEODE wrapped agent 또는 vanilla LLM |
| Judge | transcript를 차원별로 채점하는 평가자 |
실행 흐름
geode audit(Typer)과 /audit(슬래시)은 모두 plugins/petri_audit/cli_audit.py로 들어와 plugins/petri_audit/runner.py의 run_audit이 inspect-petri 서브프로세스를 돌립니다. 끝난 .eval 아카이브는 워크트리 밖 ~/.geode/petri/logs/에 보존되고, 커밋 가능한 요약 YAML이 docs/audits/eval-logs/에 남습니다.
루프가 소비하는 출력은 stdout의 마지막 비어 있지 않은 줄 하나입니다. core/audit/dim_extractor.py의 extract_dim_aggregates가 .eval 아카이브에서 차원별 judge 점수를 집계해 {"dim_means": {...}, "dim_stderr": {...}} JSON으로 내보내고, 루프의 measure.py가 그 줄을 파싱합니다. stderr는 평균의 표준오차입니다. 표본이 1개면 0이 되는데, 이 0은 "완벽한 안정성"이 아니라 "안정성 신호 없음"으로 읽어야 합니다.
audit-mode: 스캐폴드만 측정하기
측정이 운영자의 로컬 맥락에 오염되면 비교가 성립하지 않습니다. 두 장치가 이를 막습니다.
- 가드레일 전환(
plugins/petri_audit/audit_mode.py). 한 번의 런에 한해 HITL 승인을 끄고 dry-run을 강제하는 등 영구 정책을 건드리지 않고 감사용 상태로 전환합니다. 활성화는geode audit --unrestricted,GEODE_AUDIT_UNRESTRICTED=1, 또는.geode/audit-mode.toml입니다. - 시스템 프롬프트 strip(
core/agent/system_prompt.py의_audit_mode_active). audit-mode에서는 메모리 계층 같은 GEODE 고유 로컬 컨텍스트를 시스템 프롬프트에서 제거해, Petri가 운영자의 환경이 아니라 측정 대상 스캐폴드를 재게 합니다.
비교 하네스는 같은 seed를 두 번 돌립니다. target=geode/<model>(audit-mode 적용 wrapped agent)과 target=anthropic/<model>(GEODE wrapper 없는 vanilla)입니다. 둘의 차이가 스캐폴드의 기여분입니다.
역할 경계
무엇을 측정하는가(루브릭, judge, dim_extractor출력)는 Petri 쪽이 소유합니다. 측정이 어떻게 선택 신호로 쌓이는가(티어, 가중치, 게이트)는 루프의 train 단계와 fitness가 소유합니다. 원시 측정을 다시 구현하는 코드 경로는 없습니다.