AI PLAN 결정을 ANALYZE에 재사용 - #138
Merged
Merged
Conversation
krestar
previously approved these changes
Aug 11, 2026
krestar
left a comment
Contributor
There was a problem hiding this comment.
PLAN에서 결정한 Intent/Workflow 보존 및 ANALYZE 재사용 흐름, Candidate Workflow 검증과 nullable confidence 계약까지 확인했습니다.
CI도 정상이며 구현 방향 문제 없어 승인합니다.
실제 Server↔AI PLAN→ANALYZE smoke test만 병합 전 확인 부탁드립니다.
krestar
self-requested a review
August 11, 2026 11:19
krestar
previously approved these changes
Aug 11, 2026
krestar
left a comment
Contributor
There was a problem hiding this comment.
1.1.0인거랑 OUT_OF_SCOPE 가 AI쪽에서만 준비된거 #138에서도 수정하신거 확인했습니다.
Contributor
Author
AI #33 계약 정합성 확인 및 체크리스트 갱신AI #33 최신 head 확인 완료
Server #138은 최신 head 아직 완료하지 않은 항목
코드와 계약 테스트가 일치하는 것과 실제 배포 환경에서 두 서비스가 통신하는 것은 별개의 검증이므로, smoke 항목은 그대로 미완료로 유지했습니다. AI #33: fowoco/ai#33 |
krestar
approved these changes
Aug 11, 2026
27 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
한눈에 보기
PLAN에서 한 번 결정한 대표 Intent와 Workflow를 ANALYZE에서 그대로 재사용합니다.
지원하지 않는 발화는
OUT_OF_SCOPE로 PLAN에서 정상 종료하며, Slot 조회와 ANALYZE를 호출하지 않습니다.1.1.035d92fa,APPROVED, 병합 대기)왜 필요한가요?
기존 흐름에는 두 가지 문제가 있었습니다.
EXPIRY_RENEWAL / WF-STY-001을 결정한 뒤 ANALYZE가 같은 발화를 다시 분류했습니다.OUT_OF_SCOPE와 빈workflowId를 반환하면 Server가 이를 잘못된 Workflow로 거부했습니다.이번 PR은 PLAN을 의사결정 단계, ANALYZE를 Slot 점검 단계로 분리합니다.
변경 후 흐름
지원 업무
지원 범위 밖 발화
계약 변경
PLAN 응답
PLAN의 대표 판단에 다음 값을 수용합니다.
{ "detectedIntent": "EXPIRY_RENEWAL", "workflowId": "WF-STY-001", "evidence": "체류연장 준비해줘", "confidence": null, "confidenceSource": "UNAVAILABLE", "bertRoutingScore": 0.3088 }confidence=null,confidenceSource=UNAVAILABLE입니다.bertRoutingScore에 별도로 보존합니다.evidence는 HR 원문의 substring이거나null이어야 합니다.evidence를extractedSlots의 가짜 Slot으로 저장하지 않습니다.ANALYZE 요청
Server는 PLAN 결정을 기존
ai_attempt.analysis_input_json에 저장한 뒤 다음 필드로 전달합니다.{ "phase": "ANALYZE", "analysisInput": { "plannedIntent": "EXPIRY_RENEWAL", "plannedWorkflowId": "WF-STY-001" } }workflowId는plannedWorkflowId와 반드시 같아야 합니다.0..1범위를 검증합니다.providerAttemptCount=0을 허용합니다.OUT_OF_SCOPE 응답
계약 버전을
1.1.0으로 올리고 PLAN 전용 정상 결과를 추가했습니다.{ "outcome": "OUT_OF_SCOPE", "contextRequirement": null, "questions": [], "candidates": [], "validationErrors": [], "versions": { "contractVersion": "1.1.0" } }Server는 다음 조건을 모두 검증합니다.
OUT_OF_SCOPE는 PLAN에서만 허용contextRequirement, 질문, Candidate, validation error가 없어야 함SUCCEEDEDCOMPLETEDCONTEXT_REQUIRED가 아니므로 Slot resolution과 ANALYZE를 실행하지 않음DB 변경
V40__allow_nullable_ai_candidate_confidence.sqlai_candidate.confidence를 nullable로 변경합니다.V41__add_ai_run_out_of_scope_outcome.sqlai_run.analysis_outcome체크 제약에OUT_OF_SCOPE를 추가합니다.기존 migration을 수정하지 않고 새 migration으로 제약을 확장했습니다.
A.X cold start 제한시간
같은 브랜치의 최신 변경에서 A.X 최초 모델 로딩을 고려해 Runtime 전체 제한시간을 설정값으로 관리하고 기본값을 240초로 조정했습니다.
Server가 거부하는 주요 경우
UNEXPECTED_WORKFLOWINVALID_RESPONSE_CONTRACTconfidenceSource=UNAVAILABLE인데 confidence 존재INVALID_RESPONSE_CONTRACT0..1밖INVALID_RESPONSE_CONTRACTINVALID_REQUEST_CONTRACTINVALID_RESPONSE_CONTRACTINVALID_RESPONSE_CONTRACT1.1.0과 다름CONTRACT_VERSION_MISMATCH자동 테스트 시나리오
providerAttemptCount=0수용SUCCEEDED, SSECOMPLETED로컬 검증
./gradlew clean test5170037skip실제 연동 Smoke Test
지원 업무
체류연장 준비해줘로 AiRun 생성detectedIntent=EXPIRY_RENEWAL,workflowId=WF-STY-001저장 확인analysis_input_json에 planned Intent/Workflow 보존 확인0인지 확인workflowId=WF-STY-001,confidence=null허용 확인지원 범위 밖 업무
오늘 날씨 어때?로 AiRun 생성status=SUCCEEDED,analysisOutcome=OUT_OF_SCOPE확인ai_attempt가 PLAN 한 건뿐인지 확인COMPLETED로 종료되는지 확인병합 전 확인
contractVersion=1.1.0OUT_OF_SCOPE정상 종료V40,V41migration 추가35d92fa와 계약1.1.0·PLAN 재사용·OUT_OF_SCOPE 정합성 확인