Repository navigation
[AI Integration] AiRuntimeClient·계약 검증·장애 격리 구현 #8
Copy link
Copy link
Closed
Labels
area:ai-integrationServer ↔ AI Runtime 내부 계약·Client·검증·trace 연동 영역; Prompt·모델·Provider 구현은 ai 저장소 소유Server ↔ AI Runtime 내부 계약·Client·검증·trace 연동 영역; Prompt·모델·Provider 구현은 ai 저장소 소유area:serverSpring Boot API·도메인·DB·tenant·Task Workflow 영역; Prompt·모델·Provider 구현 제외Spring Boot API·도메인·DB·tenant·Task Workflow 영역; Prompt·모델·Provider 구현 제외priority:P0MVP 진행을 막는 최우선 핵심 작업MVP 진행을 막는 최우선 핵심 작업security:privacy개인정보·접근권한·토큰·보안 영향이 있는 작업개인정보·접근권한·토큰·보안 영향이 있는 작업type:integration외부 LLM·DB·스토리지 등 시스템 간 연동 작업외부 LLM·DB·스토리지 등 시스템 간 연동 작업
Description
목표
Server가 Prompt·Provider를 직접 소유하지 않고, 검증한 요청을 AI Runtime에 전달한 뒤 응답을 다시 검증합니다.
AiRun (#24)
→ AiRuntimeClient (#8)
→ POST /internal/v1/analyses (fowoco/ai)
현재 요청 계약
PLAN은 사용자가 작성한 원문만 전달합니다. Client의 빠른 선택 태그나 Intent 코드를 발화문에 덧붙이지 않습니다.
{
"requestId": "10000000-0000-0000-0000-000000000001",
"phase": "PLAN",
"analysisInput": {
"instruction": "응웬반안 체류연장 준비해줘"
}
}requestId: PLAN과 ANALYZE를 같은 실행으로 연결phase:PLAN또는ANALYZEanalysisInput: 실제 분석 데이터- Intent는 Runtime 응답의
detectedIntent를 사용 - Workflow는
WF-STY-001같은 canonicalworkflowId를 사용 - ANALYZE에서는 같은
requestId와 #74가 해결한 Slot 정보만 추가
Server 책임
- Bearer service 인증과 request/trace 전달
- HTTP/1.1, timeout, bulkhead, circuit breaker, 응답 크기 제한
- strict JSON parsing과 requestId·핵심값 검증
- Runtime 호출 1회당 Server 내부 AiAttempt 1개
- Agent·OCR의 Server DB 직접 접근 금지
- API Key, JWT, 비밀번호, Worker Link 원본 token 차단
구현 현황
- Provider-neutral
AiRuntimeClient - Fake·Remote Adapter
- PLAN/ANALYZE와 정상 outcome 처리
- 인증·timeout·장애 격리·strict response 검증
- WireMock과 Server 테스트
- 원문-only 요청 계약
- HTTP/1.1 고정 — PR fix: AI Runtime 통신을 HTTP/1.1로 고정 #93
- AI PLAN/ANALYZE 계약 — fowoco/ai PR [Document] 통합 문서함·파일 업로드·문서 준비도 구현 #13
- Intent와 Workflow ID 분리 — fowoco/ai PR [Q&A] 로컬 실행·환경설정·API 연동 질문 모음 #19
- 실행 중인 AI Runtime과 실제 성공 JSON 왕복 smoke test
완료 기준
실제 Runtime을 호출해 다음을 확인하면 이 이슈를 완료합니다.
- PLAN 요청이 원문 그대로 전달됨
detectedIntent=EXPIRY_RENEWAL,workflowId=WF-STY-001형태로 수신- 필요한 Slot이 있으면 ANALYZE 재호출까지 성공
- timeout·계약 오류가 Server 공통 오류로 안전하게 변환됨
관계
- Server 구현 PR: feat: AI Runtime 연동 계약과 안전한 검증 기반 구현 #42, [AI 연동] AI Runtime HTTP 연결과 장애 격리 구현 #56, fix: AI Runtime 통신을 HTTP/1.1로 고정 #93
- 실행 이력·Candidate: [AI Run] 비동기 실행 상태·재시도·멱등성 구현 #24
- Slot Resolver: [AI Run][P0] Agent 요청 Slot 조회·재호출 오케스트레이션 구현 #74
- Agent 계약: fowoco/ai PR #13, PR #19
- OCR 후속: [OCR][P0] Server 소유 문서 OCR 실행·결과 저장 구현 #95, fowoco/ai#20
- Parent: [EPIC] FOWOCO Server Roadmap · Controlled AI Workflow MVP #2
2026-08-10 · 실제 Runtime Smoke 결과
로컬에서 실제 Hugging Face Intent 모델을 활성화한 AI Runtime과 Spring Boot Server를 연결해 성공 왕복을 확인했습니다.
POST /api/v1/ai-runs→202 + aiRunId- AI Runtime
PLAN및ANALYZE호출 모두200 detectedIntent=EXPIRY_RENEWAL- Server가 현재 사업장 DB에서
worker_id,stay_expiry_date보충 workflowId=WF-STY-001- 최종 AiRun
SUCCEEDED,analysisOutcome=REVIEW_REQUIRED - 실제 모델 confidence 확인
AI 응답의 모델 메타데이터가 stub 기본값으로 표시되는 문제는 Runtime 메타데이터 전달 후속 작업으로 분리하며, Server의 실제 모델 호출과 PLAN→ANALYZE 계약 왕복은 정상임을 확인했습니다.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
area:ai-integrationServer ↔ AI Runtime 내부 계약·Client·검증·trace 연동 영역; Prompt·모델·Provider 구현은 ai 저장소 소유Server ↔ AI Runtime 내부 계약·Client·검증·trace 연동 영역; Prompt·모델·Provider 구현은 ai 저장소 소유area:serverSpring Boot API·도메인·DB·tenant·Task Workflow 영역; Prompt·모델·Provider 구현 제외Spring Boot API·도메인·DB·tenant·Task Workflow 영역; Prompt·모델·Provider 구현 제외priority:P0MVP 진행을 막는 최우선 핵심 작업MVP 진행을 막는 최우선 핵심 작업security:privacy개인정보·접근권한·토큰·보안 영향이 있는 작업개인정보·접근권한·토큰·보안 영향이 있는 작업type:integration외부 LLM·DB·스토리지 등 시스템 간 연동 작업외부 LLM·DB·스토리지 등 시스템 간 연동 작업
Activity
[-][AI] 교체 가능한 AI Adapter와 검증·버전 로그 구현[/-][+][AI] AI Adapter·분석 후보 확정·검증·버전 로그 구현[/+][-][AI] AI Adapter·분석 후보 확정·검증·버전 로그 구현[/-][+][AI Adapter] Provider 교체·Structured Output 검증·장애 격리 구현[/+][-][AI Adapter] Provider 교체·Structured Output 검증·장애 격리 구현[/-][+][AI Integration] AiRuntimeClient·계약 검증·장애 격리 구현[/+]hywznn commentedon Jul 24, 2026
2026-07-24 · 1단계 구현 시작
Draft PR: #42
AI Runtime의 실제 HTTP API가 준비되기 전에도 독립적으로 검증할 수 있는 계약 기반을 먼저 구현했습니다.
이번 PR에서 완료한 범위
AiRuntimeClientPort와 Provider-neutral 요청·응답 모델FakeAiRuntimeClientrequestId, contract/Knowledge version 상관관계 검증아직 남은 범위
fowoco/ai가 소유하는/internal/v1/analysesOpenAPI·Structured Output Schema 확정RemoteAiRuntimeClient, S2S 인증과 request/trace propagation따라서 #8 전체를 닫지는 않고
status:in-progress로 전환합니다. PR #42는 Server가 독립적으로 소유할 수 있는 1단계이며, 실제 Remote 연동은 AI 원본 계약 release 뒤 후속 PR로 진행합니다.hywznn commentedon Aug 3, 2026
2026-08-03 계약 정리: 별도
intentHint를 제거하고"발화문, INTENT_TAG"단일instruction으로 통일했습니다. #56 코드·테스트와 fowoco/ai#6 요청도 같은 기준으로 갱신했습니다.hywznn commentedon Aug 6, 2026
2026-08-06 상태 갱신
develop에 반영됨Fake Adapter로 개발 가능한 상태이므로
status:blocked를 해제하고status:in-progress로 변경합니다. 실제 배포 검증은 #9·#10과 연결합니다.hywznn commentedon Aug 6, 2026
2026-08-06 실제 Intent 모델 검증 현황
AI
develop의HybridHfIntentAgent와 Hugging Face 모델을 직접 호출해 다음을 확인했습니다.응웬반안 체류연장 준비해줘→EXPIRY_RENEWAL, confidence 약0.849REVIEW_REQUIRED, candidateworkflowId=WF-STY-001여권 사본을 요청해줘→DOCUMENT_REQUEST, confidence 약0.775/internal/v1/analysesHTTP 계약 정상남은 blocker는 Server 코드가 아니라 AI 배포 패키징입니다.
FOWOCO_INTENT_MODEL_ENABLED=true필요uv sync --frozen --no-dev에는torch,transformers가 없어--extra intent반영 필요.env를 AI 컨테이너에 전달하도록 설정 필요modelProvider,modelName,modelVersion은 실제 모델 실행 중에도stub기본값으로 남아 있어 후속 교정 필요위 AI 배포 설정 반영 후 Server의
PLAN → DB Slot 보충 → ANALYZE → AiCandidate 저장전체 Smoke Test를 다시 실행하고 #8 완료 여부를 판단합니다.