DOCS/journey/troubleshooting/251023_codex_pronoun_search_fix.md
Claude-51124 22557e7132 docs: 오래된 트러블슈팅 아카이브 및 구조 정리
- 7-8월 초기 구축 문서 12개를 _archive/troubleshooting/2025_07-08_initial_setup/로 이동
- book/300_architecture/390_human_in_the_loop_intent_learning.md를 journey/research/intent_classification/로 이동 (개발 여정 문서)
- 빈 폴더 제거 (journey/assets/*)
2025-11-17 14:06:05 +09:00

3.0 KiB

251023_codex_웹검색_대명사_의도_수정

요약 (3줄)

  • 의도 매칭 누락: “대표이사 누구야?” 유형이 UNKNOWN으로 빠짐 → WEB_SEARCH 정규식 보강.
  • LangGraph 예외: 체크포인터 비동기 컨텍스트 미사용으로 get_next_version 오류 → 컨텍스트 매니저 적용.
  • 대명사 해소 오판: 휴리스틱이 최근 무관 엔티티로 치환 → LLM 우선 + 직전 명시 엔티티 우선 규칙으로 전환.

증상

  • 로그: [DecisionEngine] 의도 매칭 실패 - UNKNOWN …
  • 로그: WebSearch workflow failed… '_AsyncGeneratorContextManager' object has no attribute 'get_next_version'
  • 로그: [WebSearch] Pronoun resolved … -> '지에프솔루션 …', Thompson gate가 heur로 선택해 오답.

원인

  • 규칙 공백: 대표이사 키워드가 기업/회사 동시 출현을 전제로 되어 있어 단독 질의 누락.
  • LangGraph 체크포인터 초기화 방식 변경(0.6.x/0.1.x 조합): from_conn_string가 async 컨텍스트 매니저를 반환.
  • 대명사 해소 정책: 휴리스틱 스캐닝 가중치로 최근 대화의 무관 토큰(HE/CO 등) 영향, 게이트가 heur을 과도 선호.

조치 (코드)

  1. WEB_SEARCH 정규식 보강 (대표이사/CEO 직접 매칭)

    • 파일: rb8001/app/brain/decision_engine.py
    • 추가: .*대표이사.*(누구|알려|검색|찾|이름), (ceo|CEO).*누구
  2. LangGraph 체크포인터 안전화

    • 파일: rb8001/app/services/workflows/web_search_workflow.py
    • 변경: async with AsyncSqliteSaver.from_conn_string(uri) as checkpointer: 내부에서 컴파일·실행
  3. 대명사 해소 정책 수정 (LLM 우선, 직전 명시 엔티티 우선 규칙)

    • 파일: rb8001/app/router/message_router.py
    • 규칙: 직전 사용자 발화에서 X (검색/알려줘…) 패턴이면 heur-direct 우선, 그 외에는 LLM 우선
    • 실험적 Thompson gate는 PRONOUN_THOMPSON_GATE=true일 때만 사용 (기본 비활성)
    • 로깅: Selected pronoun resolution source: ... 추가
  4. 부수 수정

    • 파일: rb8001/app/pipelines/langgraph_document.pyimport os 누락 보완 (full text/reindex 경로)
    • 환경: rb8001/.envWEB_SEARCH_USE_GRAPH=true, PRONOUN_RESOLVE_LLM=true, PRONOUN_THOMPSON_GATE=false, RECENT_WINDOW_HOURS=24

검증

  • 배포 후 docker logs rb8001 --tail 100 | grep -E 'UNKNOWN|Thompson|Pronoun|workflow failed'
  • 실제 시나리오:
    1. “솔트룩스 검색해줘.”
    2. “이 기업 대표이사 검색해줘.” → Selected pronoun resolution source: llm 또는 heur-direct(솔트룩스) 로 안정 치환

교훈

  • 의도 패턴은 “핵심 키워드 단독” 케이스를 반드시 포함할 것(대표/대표이사/CEO 등).
  • 외부 라이브러리 초기화는 버전별 컨텍스트/팩토리 시그니처 확인(특히 LangGraph/체크포인터).
  • 대명사 해소는 “직전 명시 엔티티 > LLM > 휴리스틱 스캔”의 우선순위를 기본으로 하고, 베이지안/밴딧은 옵트인으로 적용.