Skip to content

프롬프트 크기 사전 검증 없이 API 호출 → 'Prompt too long' 실패 및 불필요한 과금 #113

Description

@dohapark81

증상

  • CTO 에이전트(@cto, Opus 모델) execute 모드(Slack 스레드)에서 Claude CLI가 "Prompt is too long" 에러로 exit code 1 반환
  • 실패한 요청인데도 $1.01 과금 발생 (cache_creation + cache_read 토큰 소비)

재현 경로

  • 에이전트: @cto (Opus, 200K context window)
  • 실행 모드: execute (Slack 스레드에서 호출)
  • CrewX 버전: 0.8.0-rc.28
  • 로그: crewx-sowonlabs/.crewx/logs/task_1770701369935_bth301ow1.log

원인 분석

항목
시스템 프롬프트 크기 132,440 chars (~35K+ tokens)
Slack 스레드 메시지 14개
cache_creation_input_tokens 144,280
cache_read_input_tokens 184,370
추정 합계 ~328K tokens
Opus 컨텍스트 윈도우 200K tokens
결과 초과 → 실패

근본 원인

CrewX CLI가 에이전트 프롬프트를 조립한 후, Claude CLI에 보내기 전에 최종 토큰 수가 모델의 컨텍스트 윈도우를 초과하는지 사전 검증하지 않음.

요청사항 (우선순위순)

P1: 프롬프트 크기 사전 검증

  • 프롬프트 조립 후, CLI에 보내기 전에 대략적 토큰 수 추정 (chars / 4 정도)
  • 모델별 컨텍스트 윈도우 한도와 비교
  • 초과 시 경고 메시지 출력 + 실행 중단 (또는 자동 트리밍 옵션)
  • 최소한 "프롬프트가 ~X tokens로 추정되며 모델 한도 Y를 초과합니다" 경고

P2: Slack 스레드 컨텍스트 제한

  • Slack 모드에서 스레드 메시지를 프롬프트에 포함할 때 최대 메시지 수 또는 최대 글자 수 제한 옵션
  • 예: max_thread_messages: 10 또는 max_thread_chars: 50000 (crewx.yaml 설정)

P3: 실패 비용 방어

  • prompt too long 에러 시 재시도하지 않도록 에러 타입 분류
  • 가능하면 API 호출 전에 차단하여 불필요한 과금 방지

참고

  • 동일 이슈가 프롬프트가 큰 다른 에이전트(CMO 등)에서도 발생 가능
  • CTO 프롬프트 다이어트도 별도로 진행 예정이지만, CLI 레벨 가드레일이 필요

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions