연구 기록 사본

원 저장소 · 원본 results/EXPERIMENT_REPORT_KO.md · 수집 2026-10-16 · 커밋 2c265f7fb194627f1b39d90207e9dca03b6cee28 당시의 실험 조건·수정·철회를 보존한 문서입니다. 성능 수치를 서로 다른 실험 간에 합산하지 않습니다. 연구 안내와 해석 범위부터 읽으세요. 코드·데이터·체크포인트는 이 사이트에 포함하지 않았습니다.

Grounded Semantic Memory × Procedural Graph 재현 보고서

작성일: 2026-09-19 공통 설정: temperature 0, 단일 run

실험benchmark모델
Grounding 3조건공식 CLBench database_exploration/schema_drift 40문항deepseek/deepseek-v4.1-flash
결합 2×2 factorial같은 CLBench 40문항같음
PG 재현공개 ScaleAI/MultiChallenge train 100 / validation 100 / test 56같음 (별도로 gemini 실행도 보존)

결론 요약

  1. Grounded semantic memory는 재현됐다. baseline 30.0% → 62.5%, exact two-sided McNemar p=0.0044로 유의하다. Environment probing까지 포함한 3조건은 논문 서열 (no memory < trajectory < probed)을 그대로 재현했고, probed는 drift 이후에 더 높았다.
  2. Procedural Graph의 정확도 기여는 입증되지 않았다. 두 모델·세 차례 실행 모두 test에서 비유의했다(p=0.607, 1.000, 1.000).
  3. 결합 가설은 기각된다. PG 효과가 semantic memory 유무와 정확히 동일한 −5.0%p였고 factorial interaction은 −0.0%p다. 두 축은 독립적으로 작동하며 상보성의 증거가 없다.
  4. PG가 실제로 재현한 것은 형식 안정화다. 파싱 실패가 0.27 → 0.04/샘플로 줄었다 (논문 Appendix D.1은 45.7% 감소를 보고). 다만 우리 어댑터는 형식 실패를 재프롬프트로 복구하므로 그 이득이 점수로 환산되지 않는다.
  5. PG 진화는 validation에 과적합했다. 최종 후보가 validation 68%인데 test는 62.5%였다.

1. 결합 2×2 factorial (CLBench 40문항)

PG 없음PG 있음semantic 효과
memory 없음30.0% (12/40)25.0% (10/40)—
memory 있음62.5% (25/40)57.5% (23/40)—
PG 효과−5.0%p−5.0%pinteraction −0.0%p
  • Semantic effect: +32.5%p (논문 주장 +34%p와 근접)
  • PG effect: −5.0%p, memory 유무와 무관하게 동일
  • PG는 평균 SQL을 줄이지 못했다 (+0.43, +0.70). LLM 호출은 문항당 27회로 메모리 조건(14.7회)의 2배.

Paired 검정 (exact two-sided McNemar)

비교A만B만p판정
Baseline vs Semantic3160.0044유의
Baseline vs Combined2130.0074유의
PG vs Combined1140.0010유의
Baseline vs PG310.625비유의
Semantic vs Combined640.754비유의

semantic memory의 기여만 유의하다. PG는 어느 방향으로도 유의하지 않다.

공정성 검증

analyze_combined 기준 전부 통과했다. 결합 조건은 semantic 조건의 문항별 스냅샷과 recall을 ID 순서까지 동일하게 replay했고, 자체 write는 차단됐으며, PG 외 core edge도 일치한다. 과거 run에서 PG가 만든 memory_read 쿼리가 달라 top-k가 어긋났던 오류는 --recall-policy required가 질문 기반 고정 recall을 강제하여 재발하지 않았다.

2. Grounding 논문 3조건 (논문 계약 충실 러너)

paper_grounding_eval.py는 공식 CLBench ContinualLearningSystem 인터페이스를 직접 구현하고 강제 recall 없이 논문의 on-demand memory tool 계약을 따른다. probe는 논문 제약대로 문항당 4회로 하드 캡했다.

조건정확도drift 전/후평균 SQL논문
no_memory37.5% (15/40)35% / 40%11.2539%
trajectory_memory60.0% (24/40)75% / 45%7.1370%
environment_probing_memory87.5% (35/40)85% / 90%6.4073%

쿼리 감소폭도 유사하다 (11.25 → 6.40, −43%; 논문 8.8 → 4.7, −47%).

probing이 drift 이후 90%로 더 높은 것이 논문 기여의 직접 증거다. 큐레이터가 현재 DB를 문항당 4회 조회해 낡은 레코드를 갱신하는 메커니즘이 schema migration에서 작동한다. 환경 접근이 없는 trajectory 조건은 drift 후 45%로 떨어진다.

3. Procedural Graph 재현 (MultiChallenge)

논문 3절대로 솔버를 텍스트 ReAct로 구현했다 (Thought: / Action: name(arg=value)). 이전 구현은 native function calling에 tool_choice="required"를 걸어 형식을 API로 강제했는데, 논문이 PG의 효과로 보고하는 “파싱 실패 45.7% 감소” 통로를 막는 설정이었다.

최종 결과 (test 56)

실행baselineexpert PGevolved PGp (base vs evolved)
gemini-3.1-flash-lite29/56 (51.8%)29/5632/56 (57.1%)0.607
deepseek v1 (q=마지막 턴)34/56 (60.7%)36/5635/56 (62.5%)1.000
deepseek v2 (q=대화 전체)34/56 (60.7%)32/5635/56 (62.5%)1.000

두 모델, 세 차례 실행 모두 비유의하다. baseline이 두 v 실행에서 34/56으로 동일한 것은 temperature 0에서의 재현성을 확인해 준다.

진화는 작동했다

라운드편집validation판정
scratch (2노드 1엣지)—63/100기준선
R1노드 +5, 엣지 +6/−168/100✅ 채택
R2–R5엣지 추가 + 속성 수정null❌ 구조 검증 탈락 (순환)

최종 그래프는 7노드 6엣지로 논문 Table 7의 MultiChallenge 7노드 7 triplet과 거의 같다. 구조도 과제 성격에 부합한다.

Start → inspect_context → identify_constraints → resolve_conflicts
      → draft_response → verify_response → submit_response

validation 과적합

validation 100test 56
R1 채택 그래프68%62.5%

진화 게이트가 validation 위에서만 개선을 확인하므로 그 집합에 맞춰진 그래프가 나온다. 5.5%p 격차가 이를 보여준다.

축별 분해 (deepseek v2, baseline → evolved)

축nbaseevolved차이
INFERENCE_MEMORY221214+2
INSTRUCTION_RETENTION141112+1
RELIABLE_VERSION_EDITING945+1
SELF_COHERENCE1174−3

세 축에서 얻고 한 축에서 잃어 상쇄된다.

rejection memory는 구조 오류를 막지 못했다

논문 ℋrejected의 네 요소(candidate graph, proposed edits, training trajectories, validation outcomes)를 모두 저장하고 refiner 프롬프트에 부정 증거로 투입한다. 그럼에도 R2–R5가 네 라운드 연속 같은 사유(“graph contains a cycle”)로 탈락했다. 거절 사유가 짧은 문자열이고 어느 엣지가 순환을 만들었는지 알려주지 않기 때문으로 보인다. validate()는 그 정보를 알고 있으나 전달하지 않는다. 개선 여지로 기록한다.

4. 실행 중 발견하여 수정한 결함

전부 라이브 아티팩트를 직접 열어서 발견했다. 단위 테스트만으로는 대부분 통과했을 것이다.

결함증상영향
Distiller 무음 잘림reasoning이 completion 예산 4096을 전부 소모, 본문 0자. finish_reason 폐기로 “할 말 없음”으로 해석40 에피소드 중 39개 메모리 파이프라인 무력화
memory_read 설명 오용큐레이터용 문구를 솔버에 재사용솔버가 도구 용도를 모름
프로토콜 미고지”턴당 도구 하나”를 강제하면서 고지하지 않음위반 6 → 2건
probe 예산 미강제문서는 “최대 4회”인데 코드에 제한 없음실측 19회 → 하드 캡
솔버 형식 강제function calling + tool_choice="required"PG 기여 통로 차단
judge 무음 잘림300토큰에서 잘려 PARSE_ERROR → 오답 집계측정 오염
guidance q 오정의논문의 “full initial instruction” 대신 마지막 턴 한 줄조언자가 “conversation history is empty”라며 눈 가린 채 조언
타임아웃 누락 (자체 회귀)pydantic-ai 전환 시 유실좀비 커넥션에 16분 무한 대기
tool_choice 형식 불일치 (자체 회귀)OpenAI dict를 그대로 전달AssertionError
스레드 안전성 (자체 회귀)AsyncOpenAI 하나를 8스레드 공유bound to a different event loop

인프라 변경

  • runtime_llm.py를 pydantic-ai OpenRouter 모델 위로 이전. finish_reason 보존, truncated/empty 명시, malformed tool args 표면화, 비용·reasoning 토큰 수집, 스레드별 클라이언트.
  • verify_paper_contract.py, scripts/check_combined_smoke.py 게이트 신설. distiller 공백, 큐레이터 무작동, 빈 스토어, 메모리 미전달, 답 미제출을 잡고 비정상 종료.
  • PG: 라운드별 그래프 체크포인트(evolved_graph.json), update_edges 편집 연산, stride 반복 진화, 문항 단위 병렬(--workers).
  • 테스트 55개 → 116개.

5. 한계

단일 run. 논문은 GPT-5.4 / Claude Sonnet 4.6급으로 다섯 paired run을 보고한다. 이 결과는 각 조건 1 run이므로 exact replication이 아니라 독립 재현이다.

모델 편차. 논문의 네 모델(Claude Sonnet 4.6, Gemini 3.1 Pro, Gemini 3.5 Flash, Grok 4.1 Fast) 중 어느 것도 쓰지 않았다. deepseek-v4.1-flash는 CLBench 베이스라인이 논문(39%)과 근접한 37.5%로 나와 대조군으로 적절했으나, MultiChallenge PG 수치 (논문 89.76% vs 우리 62.5%)의 격차 상당 부분은 모델 급 차이로 보인다.

그래프 체크포인트 미공개. 논문은 graph checkpoint를 공개하지 않는다. expert 그래프는 Table 7의 크기(7노드 7 triplet)에 맞춘 자체 제작이며 논문 것이 아니다.

파싱 실패의 집계 차이. 논문은 형식 실패를 성공률에 포함한다. 우리 어댑터는 재프롬프트로 복구하므로 56문항 중 형식 문제로 답을 못 낸 것은 1건뿐이다. PG의 형식 안정화 이득이 점수로 환산되는 경로가 구조적으로 막혀 있다.

APEX 미재현. task ordering과 adapter artifact가 비공개다.

6. Artifact

  • 결합 factorial: combined-paper/factorial-v2/clbench_latest.json, factorial_audit.{json,md}
  • Grounding 3조건: paper-contract/run-0-{no_memory,trajectory_memory,environment_probing_memory}.json
  • PG (deepseek, q 수정 후): pg-paper/react-deepseek-v2/
  • PG (deepseek, 수정 전): pg-paper/react-deepseek/
  • PG (gemini): pg-paper/react-full/
  • 게이트: src/procedural_graphs/verify_paper_contract.py, scripts/check_combined_smoke.py
  • 정답 누출 감사: scripts/audit_answer_leak.py

7. 정답 누출 감사

Semantic-only의 62.5%가 정답 누출로 폐기된 2026-09-13 run과 같은 값이라 전 레코드를 검사했다. 27개 중 2개가 ground-truth 값을 포함했으나 둘 다 절차 규칙이고 숫자는 근거로 붙어 있으며, 해당 레코드를 보유한 조건이 그 문항에서 오답을 냈다(Q20에서 레코드가 “틀렸다”고 명시한 3783을, Q31에서 “틀렸다”고 적힌 66.3을 답했다). 정답 캐시로 기능했다면 정반대여야 한다. 따라서 62.5%는 답 누출로 설명되지 않는다. 다만 논문 프롬프트가 금지한 “incidental values” 저장은 record contract 위반이므로 한계로 기록한다.

현재 판정

Grounded semantic memory: 재현 성공. 효과 크기(+32.5%p)와 방향이 논문과 일치하며 40문항 단일 run에서 유의하다(p=0.0044). Environment probing의 추가 이득과 drift 이후 우위도 관측됐다.

Procedural Graph: 메커니즘 재현 성공, 정확도 기여 미입증. 진화(2→7노드), 게이트 채택·거절, 구조 검증, rejection 기록, 파싱 안정화가 모두 관측됐으나 test 정확도 개선은 두 모델 모두에서 비유의하다.

결합 가설: 기각. PG 효과가 semantic memory 유무와 정확히 동일하고 interaction이 −0.0%p다. 두 구성요소는 독립적으로 작동하며 상보성의 증거가 없다.