fix(intent): Knowledge A.X 프롬프트와 PLAN 재사용 계약 통합 - #33
Conversation
krestar
left a comment
There was a problem hiding this comment.
1.1.0인거랑 OUT_OF_SCOPE 가 AI쪽에서만 준비된거 #138에서도 수정하신거 확인했습니다.
Server #131 연동 후속 보완AI #33을 Server #131의 Renewal Task 계약과 다시 비교하면서, 체크리스트 갱신 외에 실제 보완이 필요한 지점을 확인해 반영했습니다. 확인된 문제
예를 들어 Server Task가 반영 내용
Server canonical pair
검증
추가 테스트에서는 다음을 직접 검증했습니다.
반영 커밋: 아직 남은 통합 확인코드와 단위·계약 테스트는 완료됐습니다. 병합 전 또는 배포 환경에서는 다음 두 요청을 Server #131과 실제로 연결해 smoke test하면 됩니다.
이번 보완의 기준은 간단합니다. PLAN은 새 업무를 선택하지만, Renewal run은 이미 선택된 Server Task를 실행하므로 Workflow를 다시 선택하지 않습니다. |
저장소 관리 후속PR #33의 로컬 검증은 완료됐지만 GitHub 현재 AI 저장소에는
따라서 현재 “checks 없음”은 #33의 CI 실패가 아니라 PR CI 자체가 아직 없는 상태입니다. |
한 줄 요약
Knowledge 담당자의 A.X Intent 프롬프트를 실제 추론 경로에 연결하고, PLAN에서 한 번 결정한 대표 Intent/Workflow를 ANALYZE에서 재분류 없이 재사용하도록 계약을 정리했습니다.
리뷰 중 확인된 다음 문제도 함께 보완했습니다.
OUT_OF_SCOPE가 빈workflowId를 가진CONTEXT_REQUIRED로 반환됨task.workflowId를 AI가 다시 분류해 덮어쓸 수 있음용어와 책임
detectedIntentworkflowIdrequiredFieldKeysplannedIntent,plannedWorkflowId현재 catalog에서는 대표 Intent 하나에 여러 세부 Workflow가 있을 수 있습니다.
최종 호출 흐름
Renewal 실행 API는 PLAN을 새로 수행하는 경로가 아니라, 이미 생성된 Task를 실행하는 경로입니다.
주요 변경 사항
1. Knowledge A.X 프롬프트 연결
app/agents/intent/prompts/ax_intent_v1.txt리소스로 적용knowledge-25e778ad적용 규칙:
DOCUMENT_REQUEST경계 규칙OUT_OF_SCOPE단독 규칙2. A.X 출력 검증과 fallback
다음 결과는 A.X 검증 실패로 처리하고 BERT로 fallback합니다.
OUT_OF_SCOPE와 다른 Intent의 동시 반환Fallback 결과는
modelVersion=BERT_FALLBACK으로 구분합니다.3. PLAN 응답과 confidence 계약
MVP에서는 대표 Intent/Workflow 한 건을 반환합니다.
{ "detectedIntent": "EXPIRY_RENEWAL", "workflowId": "WF-STY-001", "evidence": "체류연장 준비해줘", "confidence": null, "confidenceSource": "UNAVAILABLE", "bertRoutingScore": 0.3088, "requiredFieldKeys": ["worker_id", "stay_expiry_date", "passport_status", "arc_status"] }confidenceconfidenceSourcebertRoutingScoreBERTnullUNAVAILABLEMODELnullA.X는 확률을 반환하지 않으므로 BERT 점수를 A.X confidence로 사용하지 않습니다.
4. ANALYZE에서 PLAN 결정 재사용
ANALYZE는 다음 값을 받습니다.
{ "plannedIntent": "EXPIRY_RENEWAL", "plannedWorkflowId": "WF-STY-001" }해당 값이 있으면:
workflowId=plannedWorkflowIdconfidence=nullproviderAttemptCount=0evidence:EXPIRY_RENEWAL같은 가짜 Slot으로 만들지 않음5. Workflow 선택 및 Renewal Task 보존
PLAN에서는 발화/evidence의 업무 신호를 사용해 같은 Intent 안의 canonical Workflow를 선택합니다.
WF-STY-001WF-CON-001WF-CON-001WF-CON-001Renewal 실행에서는 Server #131의
task.workflowId를 우선합니다.task.workflowId를 classifier constraint로 전달OUT_OF_SCOPE일 때는 Task Workflow를 유지하지 않고 빈 값으로 정규화6. OUT_OF_SCOPE terminal outcome
OUT_OF_SCOPE에는 실행할 Workflow와 context가 없습니다.{ "outcome": "OUT_OF_SCOPE", "contextRequirement": null, "questions": [], "candidates": [], "validationErrors": [], "providerAttemptCount": 1 }Server는 이를 정상 business outcome으로 처리하고 Workflow 검증, DB 조회, ANALYZE 호출을 생략합니다. 이 변경에 따라 Analyses
contractVersion은1.1.0입니다.7. Startup warmup과 readiness
모델 기능이 활성화되면 FastAPI lifespan에서 BERT/A.X 로딩과 첫 추론을 완료한 뒤 readiness를 활성화합니다. 동시 첫 요청의 중복 로딩을 막는 load lock도 포함합니다.
/intent/readiness는 warmup 완료, BERT 사용 가능, A.X 활성화 시 A.X 사용 가능, degraded 상태 아님을 모두 만족해야 200을 반환합니다.Server 연동 상태
Server #138 — PLAN/ANALYZE 및 OUT_OF_SCOPE
Server PR #138, head
1347e87에서 계약 반영과 CI 통과를 확인했습니다.1.1.0AiAnalysisOutcome.OUT_OF_SCOPE추가OUT_OF_SCOPE에서contextRequirement=null허용CONTEXT_REQUIREDcanonical Workflow 검증 유지plannedWorkflowId동일성 검증 유지Server #131 — Renewal Task Workflow 재사용
Server PR #131, head
16e2afb의 Task/Workflow canonical pair와 맞췄습니다.RECONTRACT → WF-CON-001EMPLOYMENT_PERIOD_EXTENSION → WF-CON-001STAY_PERIOD_EXTENSION → WF-STY-001task.workflowId를 classifier constraint로 전달OUT_OF_SCOPE예외에서는 빈 Workflow 허용WF-CON-001로 라우팅운영 설정
FOWOCO_INTENT_DEVICE는 실제 배포 장치에 맞춰 설정/internal/v1/intent/readiness확인intent-axextra dependency를 설치검증 결과
실제 모델 smoke 결과:
EXPIRY_RENEWAL / WF-STY-001EXPIRY_RENEWAL / WF-CON-001OUT_OF_SCOPE, context 없음추가 회귀 테스트로 다음을 확인했습니다.
WF-CON-001이면 발화가 체류연장처럼 보여도 Renewal 결과는WF-CON-001WF-STY-001을 반환해도 Task의WF-CON-001보존OUT_OF_SCOPE이면 Task Workflow를 비움macOS에
powershell/pwsh가 없어 Windows 전용 OCR smoke는 전체 실행에서 제외했습니다. 이번 변경과 무관한 환경 의존 테스트입니다.병합 체크리스트
OUT_OF_SCOPEterminal outcome 적용axAvailable=true확인RECONTRACT/WF-CON-001,STAY_PERIOD_EXTENSION/WF-STY-001Renewal 통합 smokeRefs #32