Decision Offloading w. Jev
에이전트가 작업 중에 내리는 중간 판단 가운데 무엇을 판단 전용 모델 Jev에 맡길 수 있을까요. 맡긴 뒤에도 독립적으로 확인한 작업 품질이 유지되는지를 준비, 반복 판단, 수리와 최종 전달까지 포함해 확인하는 연구입니다. 초기 파일럿의 결과는 판단 호출만 바꿔서는 설명되지 않았고, 그래서 입력 계약, 판단 계약, 확률 정책, 실행 에이전트의 소비를 따로 떼어 실험했습니다.
런타임 · 최종 판정
Jev를 고른 경우 최종 판정은 Choice 한 문항으로 Jev를 한 번 부르고, 허용 검사를 통과한 supported만 통과로 봅니다.
judgment_engine · llm | jev
core/config/judgment.py실행 · 판정: 판단 경로 선택최종 판정 · Choice 1문항core/agent/verify.pyjudgment_engine을 jev로 고른 경우에만 Jev 경로를 씁니다(기본 llm). provider auto는 TypeSafe 다음 OpenRouter 순서로 키가 있는 쪽을 고르고, 키가 없으면 LLM judge 경로를 유지합니다. 실패한 요청을 다른 provider로 넘기는 fallback이 아닙니다.
최종 판정 · Choice 1문항
core/agent/verify.py데이터: 원 요청 · 후보 · 관측SystemOne · 1회 · 대체 없음adapters/typesafe.py원 요청과 후보를 가려 길이를 제한하고, 도구 관측과 함께 Choice 질문 하나(supported · contradicted · insufficient_evidence)로 보냅니다. 판정 호출에는 도구를 주지 않습니다(allow_tools=False). 이미지가 필요한 판단은 Jev로 보내지 않고 verification_error가 됩니다.
SystemOne · 1회 · 대체 없음
adapters/typesafe.py데이터: SystemOne 1회TypeSafe SystemOneTypeSafe 직접 또는 OpenRouter 경유로 한 번 부르며, 다른 provider로 넘어가지 않습니다. Jev는 루트 텍스트 생성 모델로 쓰이지 않습니다.
허용 검사 · 합 오차 1e-5
adapters/typesafe.py데이터: 허용된 Choicesupported만 통과 · 텍스트만core/agent/verify.py응답은 정해진 타입 · 범위 · 확률 합(오차 1e-5) 검사를 통과해야 쓰입니다. supported만 통과이고, contradicted · insufficient_evidence는 정해진 다음 확인과 함께 재시도 신호가 됩니다. 응답이 end_turn이 아니거나 허용 검사에 실패하면 verification_error이며 재시도 신호가 아닙니다(should_retry=False). 점수는 보정된 확률이 아니라 이진 투영입니다.
supported만 통과 · 텍스트만
core/agent/verify.py데이터: passed · reflectionPostVerify · Stop 정책loop/_lifecycle.py판정은 완료 판정 장의 PostVerify · Stop 정책으로 갑니다. 판정은 권한이 아니라 정책의 입력이며, 검토 대기가 되면 후보는 pending_text로만 남고 최종 응답은 비어 있어 전달되지 않습니다.
PostVerify · Stop 정책
loop/_lifecycle.py기록 · 관측: 판정 행timeline · ledger 판정 행memory · observabilitytimeline과 evidence ledger에 판정 결정을 남깁니다. 연구 산출물과는 별개의 런타임 기록입니다.
런타임 · reflection
같은 선택이 reflection의 근거 분류에도 쓰이며, 다음 확인 문장은 코드가 정합니다.
judgment_engine · llm | jev
core/config/judgment.py실행 · 판정: 같은 선택reflection · 근거 분류loop/_reflection.py같은 선택이 reflection에도 적용됩니다.
reflection · 근거 분류
loop/_reflection.py데이터: 근거 분류 요청SystemOne · 1회 · 대체 없음adapters/typesafe.pyreflection은 Jev로 제한된 근거를 분류하고, 다음 확인은 코드가 정한 문장으로 더합니다. 믿음 가설이나 자신감은 바꾸지 않습니다.
SystemOne · 1회 · 대체 없음
adapters/typesafe.py데이터: SystemOne 1회TypeSafe SystemOneTypeSafe 직접 또는 OpenRouter 경유로 한 번 부르며, 다른 provider로 넘어가지 않습니다. Jev는 루트 텍스트 생성 모델로 쓰이지 않습니다.
허용 검사 · 합 오차 1e-5
adapters/typesafe.py데이터: 분류 결과reflection · 근거 분류loop/_reflection.py허용 검사를 통과한 분류만 reflection 상태에 반영합니다. 실패하면 다음 라운드가 같은 이전 상태로 다시 시도합니다.
연구 · 고정 패널 U3
실행 에이전트 없이, 같은 상태와 질문에 대한 Jev와 Astra의 판단을 쌍으로 비교했습니다.
Astra · Jev · 같은 질문
U3 · 고정 상태 패널데이터: Jev 판정TypeSafe SystemOneU3(원 실험 기준 2f2b494): 고정 상태 120쌍 · 27개 원천 묶음 · 호출 240회. 같은 상태와 질문을 Jev와 Astra에 한 쌍씩 함께 묻고, 실행 에이전트 · 도구 · Harbor는 없습니다.
Astra · Jev · 같은 질문
U3 · 고정 상태 패널데이터: Astra 판정Astra 판정 · 실행 모델같은 표본 정답 Astra 90/120 · Jev 84/120, 호출당 중앙값 10.446초 · 0.253초. 판단 호출만의 지연이며 작업 시간이나 비용 절감을 뜻하지 않습니다.
U3 · 고정 상태 패널데이터: 패널 결과 · 보고서Jev 연구 보고서
U3의 정답 · 지연 결과는 공개 기술 보고서에 실렸습니다. 이 패널이 E2E 공개 묶음에 포함되는지는 여기서 주장하지 않습니다.
연구 · E/I 실행
실행 에이전트는 Astra로 두고 판정 경로만 바꿔, 독립 규칙 oracle로 결과와 전달을 따로 확인했습니다.
Astra actor · 도구 · 수리
E/I · Harbor 0.22데이터: 생성 · 도구 · 수리Astra 판정 · 실행 모델E/I는 Harbor 0.22에서 실행 에이전트 Astra가 생성 · 도구 호출 · 수리를 맡고, 바뀌는 것은 판정 경로뿐입니다.
판정 경로 · Astra · Jev · Jev-first
E/I · Harbor 0.22데이터: 완료 판정 경로TypeSafe SystemOneE7(원 실험 기준 1f65534): 직접 작성한 합성 과제 12개 × 구성 3개 × 2회 = 72회, 구성마다 24/24 성공. Jev-first 구성의 실제 fallback은 0/24회라 그 효과는 측정되지 않았습니다.
E/I · Harbor 0.22기록 · 관측: 독립 확인후보 정답 · 전달 따로 집계
rule oracle최종 결과는 판정 모델과 별개인 규칙 oracle이 확인하고, 실제 최종 전달은 따로 셉니다. 중단된 U8n의 사후 11쌍에서는 후보가 모두 oracle을 통과했지만 전달은 Astra 11/11 · Jev Noul 0/11이었습니다.
E/I · Harbor 0.22데이터: 실패 · 수리 계보E2E-DATA · 원천 · 공개 hash
jev-v3-20260927E2E 공개본은 준비 · 실패 · 수리 계보를 보존하고, 원천 hash와 공개본 hash를 따로 둡니다. 가린 공개본이 바뀌지 않은 원천 검증을 대신하지 않습니다.
REPRODUCE · model-free
jev-v3-20260927데이터: model-free 재계산Jev 연구 보고서저장된 응답으로 수치를 다시 계산하는 것과 새 실행은 다른 작업입니다. 보고서는 공개 기술 보고서이며 동료 심사 논문이 아닙니다.
모든 연결을 같은 굵기로 보여 줍니다. 흐름을 고르면 그 경로만 번호와 함께 강조됩니다.
- 실선 · 요청 · 후보 · 결과가 흐르는 방향
- 파선 · 실행 · 판정 · 권한 · 설정
- 긴 점선 · 기록 · 관측, 판정과 별개
- 굵은 검은 선 · 고른 흐름, 번호는 순서
- 상자 · 코드 · 기록 경계, 머리말에 경로
- 안쪽 칩 · 그 경계의 구성 요소
- 점선 상자 · 그 경계 밖
- 루프 · 실행 하네스
- 판단 선택 · 판정 · oracle
- 기록 · 공개본
- 전송 · 판단 패널
위와 아래는 서로 다른 시스템입니다. 연구의 구성과 결과가 지금의 런타임 경로에 모두 켜져 있다는 뜻이 아니며, 둘을 잇는 선은 같은 Jev 모델(jev-1.13.0)을 부른다는 것뿐입니다.
- 런타임 허용 검사
- 런타임은 확률 합 오차를 1e-5로 엄격하게 둡니다. 평가 쪽 호출자는 기록된 허용 오차를 따로 넘기며, 런타임의 파싱을 느슨하게 만들지 않습니다.
- 연구의 범위
- U3는 판단 호출만, E/I는 실행 에이전트와 수리를 포함한 실행입니다. 두 분모를 섞지 않으며, U8n의 11쌍은 중단된 실험의 사후 분석입니다.
세 가지 판단 계약
Choice
- 반환
- 범주 · 선택지별 확률
- 판단
- 완료 여부, 요청의 의도와 대상
Noul
- 반환
- 조건마다 P(true)
- 판단
- 모순, 근거 부족
Score
- 반환
- 정해진 서열 위의 기대값과 분포
- 판단
- 생성된 후보의 순위
기대값은 후보의 서열 위치이며 확신도로 쓰지 않습니다.
평가와 연결
계약마다 고정 입력 패널에서 따로 평가했고, 그중 일부를 실험 하네스의 실행 경로에 연결해 실행 에이전트가 판단을 어떻게 소비하는지 확인했습니다. 위 구성도의 연구 부분이 그 실행이고, 런타임 부분은 지금 GEODE에 들어 있는 선택형 경로입니다.
설계를 바꾼 관측
- I5 → I6 · 입력 계약
- 공통 전달 실패를 추적하니 판정 입력에 과제 계약이 빠져 있었고, 같은 요청의 도구 관측이 과거 문맥처럼 설명되어 있었음
- 수정 소스와 새 계정으로 진행한 I6 실행에서 6/6 전달
- U3 · 같은 상태 120쌍
- 호출당 중앙값 Astra 10.446초 · Jev 0.253초, 같은 표본 정답 90/120 · 84/120
- 판단마다 속도와 정확도를 함께 놓고 위임 범위를 정함
- U2 · 확률
- Jev의 확률은 크기가 더 잘 맞았지만, 틀린 판단을 앞쪽으로 골라내는 순위는 Astra가 앞섬
- 확률 보정과 오류 선별을 따로 측정하고, 임계값은 selection 분할에서 고정
- U6a · 의도와 대상
- 설계자가 작성한 40가족에서 Jev 216/220 · Astra 220/220, 사전 등록 −5pp 마진 충족
- 고정된 의도 · 대상 분류를 다음 적용 후보로 좁힘
- U8n · 전달
- 중단된 실험의 사후 11쌍: 수리된 후보는 양쪽 모두 oracle 통과, 전달은 Astra 11/11 · Jev Noul 0/11
- 근거 부족 판정이 정답 전달을 막음. 현재 Noul 구성은 단독 전달 판정에 쓸 근거가 부족함