Skip to content

remote score 라벨 점수가 한국어 이슈에서 라벨을 거의 고르지 못한다 #561

Closed

Description

@m16khb

요약

issueops remote score --judge none은 이슈를 발행하기 전에 라벨을 고르는 결정론적 점수기입니다. 이 저장소에서 라벨이 하나만 붙은 이슈 229개로 측정하니, 기본 threshold 0.70에서 224개가 라벨을 하나도 선택받지 못했고 정답 라벨이 선택된 이슈는 4개뿐이었습니다. 그래서 issueops-create-issue 단계는 매번 라벨 판단을 사람이나 별도 에이전트에게 넘기게 됩니다.

재현 절차

  1. gh issue list --state all --limit 1000 --json number,title,body,labels로 이슈를 받고, 라벨이 정확히 하나인 이슈만 남깁니다.
  2. 제목 앞의 [bug] 같은 태그와 본문의 #번호·이슈 URL을 지워 정답이 새지 않게 합니다.
  3. 이슈마다 gh label list의 이름·설명을 label_candidates로 넣은 요청 파일을 만들고 issueops remote score --input <파일> --judge none --json을 실행합니다.
  4. selected_labels를 이슈의 실제 라벨과 비교합니다.

기대 동작과 실제 동작

  • 기대 동작: 본문에 유형 근거가 뚜렷하면 해당 라벨 하나가 threshold를 넘어 선택됩니다. 근거가 약하거나 엇갈리면 아무 라벨도 고르지 않고 semantic judge로 판단을 넘깁니다.
  • 실제 동작: 기본 threshold에서 229개 중 224개가 라벨 0개입니다. threshold를 낮춰 가장 높은 점수의 라벨을 고르게 해도 정답은 81개(35%)로, 모든 이슈를 bug로 찍는 경우(157개, 69%)보다 낮습니다. 94개 이슈는 세 라벨 점수가 같습니다.

원인은 internal/domain/issueopsremote/issueops_remote_score_tokens.go와 issueops_remote_score.go에 있는 세 가지 규칙입니다.

  1. 점수가 0.65 × 라벨 설명과 겹치는 토큰 비율 + 0.35 × 유형 키워드로 계산되어, 키워드만 맞으면 점수가 최대 0.35에 그칩니다. GitHub 기본 라벨 설명은 영어("Something isn't working")라서 한국어 본문과 겹치는 토큰이 거의 없습니다.
  2. 토큰을 띄어쓰기 단위로만 자르기 때문에 "오류가", "문서를"처럼 조사가 붙은 낱말은 키워드 "오류", "문서"와 일치하지 않습니다.
  3. 키워드가 하나만 맞아도 그 라벨에 만점을 줍니다. 그래서 skill, prompt 같은 흔한 낱말로 documentation이 켜지고, 한 이슈에서 여러 라벨이 같은 점수를 받습니다.

완료 기준

  • 번호 232부터 560까지의 단일 라벨 이슈 115개(검증 집합)에서 기본 threshold로 --judge none을 실행하면, 라벨을 고른 이슈가 50개 이상이고 고른 라벨이 정답과 같은 비율이 85% 이상입니다. 키워드와 최소 근거 규칙은 번호 232 미만 개발 집합으로 정했습니다. 검증 집합은 규칙을 확정하기 전에 한 번 측정했고, 그 뒤로 규칙을 바꾸지 않습니다.
  • 키워드 규칙이 없는 라벨(예: question, wontfix), 관련 이슈 점수, 입력에 score를 명시한 후보의 동작은 바뀌지 않습니다.
  • 실제 이슈에서 뽑은 라벨 품질 표 테스트가 선택과 기권을 고정합니다.
  • CLI/MCP 응답 필드와 기본 threshold 0.70은 그대로입니다.

범위 밖: 관련 이슈 점수 개선, 외부 모델 호출 추가, 라벨 이름·설명을 저장소별로 설정하는 기능.

검증

go test ./internal/domain/issueopsremote/... -count=1
go test ./... -count=1
go build -o bin/issueops ./cmd/issueops

재현 절차의 측정을 새 바이너리로 다시 실행해 검증 집합과 개발 집합(번호 1-231)의 선택 수와 정답 비율을 함께 기록합니다.

계획 검토

계획 검토: 1차 수정 요청(지적 2건) → 계획 수정 → 2차 통과(지적 3건)

진행 결과

issueops remote score --judge none이 한국어 이슈에서도 bug·enhancement·documentation 라벨을 고르도록 점수 규칙을 바꿨고, PR #562가 squash로 머지됐습니다. 단일 라벨 이슈 230개 기준으로 정답 라벨을 고른 경우가 4개에서 90개(선택 99개)로 늘었습니다.

  • 계획: 세 라벨의 점수를 이슈에서 찾은 유형 근거 중 그 라벨이 차지하는 비율로 바꾸고, 근거가 2개 미만이면 기권하기로 했습니다.
  • 구현: [fix] remote score 라벨 점수가 한국어 이슈에서 라벨을 고르게 한다 #562 에서 한글은 앞부분 일치, 영어는 토큰 전체 일치로 키워드를 세고, 키워드 목록을 보강했으며, 실제 이슈 발췌로 선택·기권을 고정하는 테스트를 더했습니다.
  • 재작업: 첫 완료 뒤 PR CI가 옛 main의 lint 부채로 멈춰 있었습니다. 그 부채를 #563에서 고친 뒤 새 main으로 base를 맞추고 사이클을 다시 열어 새 head에서 검증과 완료를 다시 받았습니다.
  • 확인: 개발 구간 83.7%, 검증 구간 96.4% 정답률을 측정했고, self-verify 27단계와 PR CI의 push·pull_request 두 이벤트가 모두 통과했습니다.
  • 남은 것: 개발 구간 정답률은 기준 85%에 조금 못 미치고, 영어 키워드에 조사가 붙은 경우는 근거로 세지 않습니다.

Metadata

Metadata

Assignees

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