Skip to content

fix(agent): gpt-5.2 등 OpenAI reasoning 모델 effort=minimal 분기 + CoT 누출 제거#63

Merged
TaskerJang merged 1 commit into
devfrom
fix/gpt5-reasoning-agent
May 29, 2026
Merged

fix(agent): gpt-5.2 등 OpenAI reasoning 모델 effort=minimal 분기 + CoT 누출 제거#63
TaskerJang merged 1 commit into
devfrom
fix/gpt5-reasoning-agent

Conversation

@TaskerJang

Copy link
Copy Markdown
Owner

배경

doc-graph를 openai/gpt-5.2 + Claude judge로 측정하기 전 필요한 fix. PR #54는 Kimi/DeepSeek 기준이라 is_openrouter면 무조건 _REASONING_OFF_BODY(enabled:false, max_tokens:1, exclude:true)를 적용했음.

그러나 OpenRouter reasoning 문서 기준 GPT-5 시리즈/o-series는 reasoning.effort로 제어해야 함 (xhigh/high/medium/low/minimal/none). OpenAI 모델에 Kimi용 바디(enabled:false+max_tokens:1)를 적용하면 동작이 불확실해, gpt-5.2로 돌릴 때 빈 응답 / CoT 누출 위험이 있었음 — doc-summary에서 잡았던 버그(PR #134)와 동형.

변경

agent/llm_client.py:

  • _is_openai_native_model() 추가gpt-*, o1/o3/o4, openai/* 판별
  • reasoning 분기 (doc-summary llm.py와 정합):
    • OpenAI-native + OpenRouter → extra_body={"reasoning":{"effort":"minimal"}}
    • OpenAI-native + 직결 → reasoning_effort="minimal"
    • Kimi/DeepSeek 등 OpenRouter → 기존 _REASONING_OFF_BODY 유지
  • CoT 누출 제거 — 빈 content 시 reasoning/reasoning_content 반환하던 fallback 삭제 → "[답변 불가]"로 정규화 (judge JSON 파싱 깨짐 + 영어 CoT 누출 차단, doc-summary PR #134와 동일 정책)
  • 기본 max_tokens 1024 → 2048 (minimal reasoning + 답변 여유)

호환성

환경 영향
Kimi/DeepSeek OpenRouter 측정 동일 (_REASONING_OFF_BODY 유지)
Kimi 직결 / prod (KIMI_*) 영향 0 (is_openrouter=False, openai-native=False)
openai/gpt-5.2 OpenRouter 측정 ✅ effort=minimal 적용 → 빈 응답/CoT 누출 차단

검증

  • py_compile OK
  • 빈 응답 시 CoT 대신 [답변 불가] 반환 확인 (코드 경로)

영향

이 fix + PR #62(judge 프롬프트 동기화) 머지 후, doc-graph를 gpt-5.2 + Claude judge로 측정하면 doc-summary와 동일한 답변/판정 정책으로 동작 → cross-system 비교 정합.

Refs PR #54, doc-summary PR #134

… + CoT 누출 제거

PR #54는 Kimi/DeepSeek 기준이라 OpenRouter면 무조건 _REASONING_OFF_BODY
(enabled:false, max_tokens:1)를 적용했음. 그러나 OpenRouter 문서상 GPT-5
시리즈/o-series는 reasoning.effort로 제어해야 해서, OpenAI 모델에 그 바디를
쓰면 동작이 불확실(빈 응답/CoT 누출)했음.

- _is_openai_native_model() 추가 (gpt-*, o1/o3/o4, openai/*)
- OpenAI-native → extra_body의 reasoning.effort="minimal" (OpenRouter) /
  reasoning_effort="minimal" (직결). Kimi/DeepSeek는 기존 _REASONING_OFF_BODY 유지
- 빈 content 시 reasoning(CoT) 반환 제거 → '[답변 불가]'로 정규화
  (doc-summary PR #134와 동일 정책 — judge JSON 파싱 깨짐/CoT 누출 차단)
- 기본 max_tokens 1024 → 2048 (minimal reasoning + 답변 여유)

이후 doc-graph를 gpt-5.2 + Claude judge로 측정해도 빈 응답/CoT 누출 없이
doc-summary와 동일한 답변 처리 정책으로 동작 → cross-system 비교 정합.
@TaskerJang TaskerJang merged commit b0f0fdf into dev May 29, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant