설계서 3 + 절차서 1. - README.md: 기능 설계서 (15 케이스 corpus, 임계 5/15, 경로 A/B) - fn-corpus_logger.md: optional debug logger (kDebugMode + dart-define 가드) - fn-userTurn_partial_push.md: chat_providers.dart 의 break 분기 수정안 (경로 A/B) - corpus-procedure.md: 빌드/캡처/15 프롬프트/임계 판정 절차 R1-R5 모두 해소 (Architect 채택안). ADR-0006 슬롯 = 경로 B 채택 시 작성 (Developer 단계). Refs #312
3.3 KiB
3.3 KiB
Corpus 수집 절차 (#312)
부모 설계서: ./README.md · 목적: Developer 가 corpus 를 재현 가능하게 수집할 수 있도록 절차 명문화.
1. 빌드
cd app
flutter build apk --debug --dart-define=ENABLE_CORPUS_LOG=true
# 또는 단말 연결 후
flutter run --debug --dart-define=ENABLE_CORPUS_LOG=true
ENABLE_CORPUS_LOG=true 가 빠지면 DebugCorpusLogger.maybeCreate() 가 null 반환 → logging 없음.
2. 로그 캡처
# adb 연결된 단말
adb logcat | grep CorpusLogger > /tmp/corpus-raw.log
# 또는 flutter run 의 stdout
flutter run --debug --dart-define=ENABLE_CORPUS_LOG=true 2>&1 \
| grep CorpusLogger > /tmp/corpus-raw.log
각 줄은 [CorpusLogger] {"kind":"text_chunk"|"function_call",...} 형태의 JSON.
3. 프롬프트 시퀀스 (15 케이스)
ChatScreen 진입 후 아래를 순서대로 입력. 각 프롬프트 사이에 ↻ 로 세션 초기화 (turn 격리).
catalog 카테고리 (5)
- 수면 관련 습관 추천해줘
- 아침에 할 수 있는 습관 뭐 있어?
- 스트레스 관리 프로토콜 알려줘
- 운동 관련 카탈로그 보여줘
- 명상 어떤 게 있어?
add_habit 카테고리 (5)
- 아침 햇빛 보기 습관 추가해줘
- 매일 물 2L 마시기 추가해줘
- 잠들기 전 스트레칭 등록할래
- 출근 전 명상 5분 추가해줘
- 점심 후 산책 습관 만들어줘
log_tracker_entry 카테고리 (3)
- 오늘 햇빛 봤어 체크해줘
- 어제 운동한 거 기록해줘
- 오늘 명상 완료
streak 카테고리 (2)
- 내 연속 기록 어때?
- 스트릭 보여줘
4. 결과 표 작성
/tmp/corpus-raw.log 의 각 function_call 이벤트에서 accumulated_prefix 를 추출해 docs/research/312-tool-prefix-corpus.md 표에 채운다.
표 schema (README §6.2 참조):
| # | category | user_input | tool_name | accumulated_raw | meaningful | note |
|---|----------|-----------|-----------|-----------------|------------|------|
| 1 | catalog | 수면 관련 습관 추천해줘 | search_catalog | "수면 카탈로그를 보여드릴게요" | Y | 정보 전달 의도 + 14자 |
| 2 | catalog | 아침에 할 수 있는 습관 뭐 있어? | search_catalog | "" | N | 빈 prefix |
| ... |
판정 기준은 README §6.1 의 운영 정의:
- Y: 공백 제외 한국어 자연어 ≥10 자 + 정보 전달 의도.
- N: 빈/공백/boilerplate/단순 응대/echo.
5. 임계 판정
- Y 카운트 ≥5 → 경로 A (push 구현).
- Y 카운트 =4 → +5 케이스 추가 수집 (총 20, 임계 7).
- Y 카운트 ≤3 → 경로 B (폐기 + ADR-0006).
6. 후처리
- corpus 결과를 Redmine #312 의
## [AI] Developer섹션 (또는 별도 댓글) 에 요약: Y/N count + 채택 경로. - 채택 경로에 따라
fn-userTurn_partial_push.md의 경로 A 또는 B 를 구현. - 경로 B 채택 시 ADR-0006 작성 (
docs/adr/0006-tool-call-prefix-discard.md또는 적합한 제목). - corpus 수집 종료 후
--dart-define=ENABLE_CORPUS_LOG=true사용 빈도 0 → 향후 CorpusLogger 제거 follow-up 이슈 발행 검토.
7. 보너스 — ParallelFunctionCallResponse 측정
같은 raw log 에서 한 turn 안에 function_call 이 2 회 이상 emit 되는지 확인. 발생 시 AC4 의 follow-up 이슈에 빈도 데이터 포함.