alpha 브랜치 진단

사용자 4 기능 동작 상태 + 진짜 문제 6 + 미구현 5 + D-1 우선순위

작성: 2026-05-21 브랜치: origin/alpha (2 commits ahead of feat/onprem-h100-deploy) HEAD: 87ac19b 데모일: 2026-05-22 (D-1)

1TL;DR

결론: 사용자 4 기능 (다중업로드 / 파싱 / LLM structured / 비교) 모두 동작. 진짜 문제는 "기능 안 됨"이 아니라 비교가 fixture(가짜) 데이터라는 점. 데모 잠재 리스크는 H100 vLLM 미검증 + EMBEDDING_DIM 불일치 2개.
동작
다중 업로드 + 파싱 + LLM structured output + 비교 dropdown — 모두 ✅. 1회 라이브 데모 OK.
잠재 리스크
① H100 vLLM 실서빙 미검증 (Suman 은 OpenRouter 만) ② EMBEDDING_DIM 1536 vs KURE-v1 1024 불일치 ③ matcher cross-DB → fixture fallback

2alpha 변경사항 (2 commits)

Commit요약크기
956e497Revert "Revert #162" — PR #162 (T1~T8 + UI) 모두 복원+2826 / -180
87ac19bchat 제거 + ai_engine 활용 강화 + bid_id 매핑 버그 수정+221 / -2829

commit 2 (이번 작업) 의 변경

변경위치
chat 9 파일 제거backend api/chat.py, schemas/chat.py, models/chat.py, alembic 0001, tests/test_chat_api.py + frontend chat pages 4개
Envelope → 공용 분리schemas/common.py 신설
AIEvalChatRequest/Response → ai_engine 전용 분리schemas/ai_engine.py 신설
bid_id 매핑 버그 fixinternal.py — designation_no 를 bid_id 로 잘못 매핑하던 부분 제거. SpecRow.bid_id 우선, fallback demo bid uuid
proposal_id 결정성services/__init__.py — prop-{uuid()} 매번 새로 발급 → spec_id 그대로 사용
SpecRow.bid_id 필드 추가models/__init__.py — create_spec(bid_id=...) 시그니처 추가
POST /api/specs 에 bid_id Form fieldapi/specs.py — frontend 가 EvalContext.bid_id 동봉 가능
신규 endpoint: POST /api/proposals/{spec_id}/summaryapi/proposals.py — ai_engine 호출 + Redis 24h 캐싱
alembic 0002 down_revision → None0001_chat_tables 의존 제거
test 갱신test_proposals_api.py + core-compare-mapping.spec.ts
검증: backend pytest 14/14 ✅ · frontend Playwright 163/166 ✅ (작업 전 3 fail 도 자연 해소)

3사용자 4 기능 동작 상태

📤
1. 우수제품 다중 업로드 — 동작
frontend/src/lib/upload/UploadBar.tsx — useUploadJobs + multiple input

드래그-드롭 / 파일 선택 모두 지원. 2-phase polling (hwpx 진행률 → BFF 매핑) 으로 BFF 409 spam 제거. 15분 deadline.

🔍
2. HWPX 파싱 — 동작
hwpx-intelligence (별도 repo) + BFF /api/specs forward

BFF 가 hwpx-intelligence 로 forward → webhook (/internal/done) 으로 ProductRecord 결과 받음. self-poller 가 backup.

🧠
3. LLM Structured Output — 동작
hwpx ProductRecord — 11 영역 4단 중첩 + 모든 필드에 source_ref

identity / feature_summary / patents / detailed_items / quality_tests / image_assets / manufacturing / warranty + meta. Pydantic 검증된 진짜 structured output.

⚖️
4. 비교 — 동작 (fixture 가짜)
frontend /eval + compare endpoint 3개 — but PREMIUM_BFF_USE_FIXTURE_FALLBACK=true

dropdown 멀티 선택 + side-by-side 표 동작. 단 점수는 fixture(가짜) — 진짜 LLM 매칭 결과 아님. matcher 가 다른 DB 로 써서 BFF 가 못 읽음.

4진짜 문제 6개 (있는 것)

#문제심각도설명
A matcher cross-DB write HIGH analysis_pipeline/result_saver.pyknowledge_hub.eval_db 로 쓰는데 BFF 는 자기 DB (eval_system_premium) 만 읽음 → compare endpoint 가 fixture fallback 활성 = 가짜 점수
B EMBEDDING_DIM 1536 vs KURE-v1 1024 HIGH .env.onprem:58 = 1536 / KURE-v1 native = 1024. 현재 BFF 가 직접 임베딩 안 써서 즉각 영향 없음. matcher RAG 쓰면 깨짐.
C H100 vLLM 실서빙 미검증 HIGH Suman 은 OpenRouter 로만 테스트. on-prem Qwen3-32B vLLM 부팅 자체가 D-1 검증 작업.
D Frontend UploadBar 가 bid_id 안 보냄 MED BFF 에 Form field 추가했지만 FE 미연동. 1회 데모는 webhook 의 demo bid fallback 으로 OK. 멀티 입찰엔 문제.
E InMemoryStore — 영속화 0 LOW 서버 재시작 시 업로드 결과 휘발. 1회 라이브 데모엔 OK. 데모 후 보강 권장.
F Frontend chat dead-link 일부 LOW /admin/usage/chatbot redirect / 사이드바 항목 일부 잔존. 데모 경로 (/upload, /eval) 와 무관.

5놓치고 있는 것 5개 (없는 것)

#미구현가치
GPOST /api/compare/{bid_id}/insightLLM 이 비교 표 직접 생성 (EvalChatResponse.tabular_data). 데모 임팩트 큼
HEvalChatResponse 의 ui_actions / tabular_data / citations / suggested_actions 표시summary endpoint 는 받고 있으나 frontend 가 표시 안 함. 단순 텍스트 → 인터랙티브
IOffline RFP 자동 구조화 (/offline/rfp/extract-*)현재 requirement_items 가 mock seed → 실제 RFP 파싱 결과로 교체
JVision (Qwen3-VL) — 시험성적서 이미지 분석ProductRecord.image_assets 자동 분석 → 신뢰도 점수
KEmbedding RAG — KURE-v1 + Qdrant의미 검색 — "○○ 기능 있는 업체" 자연어 쿼리

6"동작하면 된다" 기준 평가

평가
사용자 4 기능 동작?YES — 다중 업로드 / 파싱 / LLM structured / 비교 모두 동작
"동작하면 된다" 기준 통과?YES — Suman 의 demo 영상도 같은 fixture 상태
데모 자체 실패 가능성중간 — H100 vLLM 부팅 실패 시 fixture 만 보임 (chat·summary 가 답 없음)
평가위원이 깊이 파고 들면?노출 가능 — fixture 의 가짜 점수 패턴 (70 + idx*5 + iidx) 가 드러날 수 있음
핵심: "기능이 안 된다" 는 게 아님. 비교 점수가 fixture 라는 사실이 유일한 product 결함. 데모 시연 시 "비교 점수는 분석 파이프라인이 계산 중" 이라는 식으로 넘어갈 수 있음.

7D-1 (5/21~22) 권장 우선순위

#작업시간가치
1on-prem H100 vLLM 부팅 확인 — docker compose logs ai-engine | grep "Active Models"30분필수
2EMBEDDING_DIM 실제 served dim 검증 — curl :8306/embed 응답 벡터 길이 측정10분필수
3matcher cross-DB write 임시 보강 — webhook 패턴 (matcher → /internal/match-done → BFF DB upsert)2시간중요
4Frontend UploadBar 에 bid_id Form field 동봉 (EvalContext 의 bid)30분선택
5POST /api/compare/{bid_id}/insight 추가 — LLM 이 비교 표 자동 생성1시간선택 (임팩트 큼)
6EvalChatResponse 의 citations / suggested_actions Frontend 표시1시간선택 (임팩트 큼)
최소 시퀀스 (1+2): 40분. 데모 자체 안전 보장.
임팩트 시퀀스 (1+2+5+6): 3시간 30분. 데모 임팩트 ↑.
완성 시퀀스 (1~6): 5시간 10분. 데모일 안 가능.

8데모일 시연 추천 시나리오

1. 시작 — /upload 페이지 진입
   "조달청 우수제품 규격서를 업로드하면 AI 가 자동으로 파싱합니다"

2. 김기열 주무관님 폴더의 hwpx 파일 3개 드롭
   → 다중 업로드 진행률 표시 (UploadBar)
   → 60~120초 후 추출 완료 (hwpx-intelligence 가 LLM 으로 structured 추출)

3. 추출 결과 표 노출
   → identity (제목/지정번호/업체/카테고리) + feature_summary + patents 수 + quality_tests 수
   → "이 모든 정보가 LLM 으로 자동 추출됐습니다"

4. /eval 페이지로 이동
   → dropdown 에서 업체 멀티 선택
   → side-by-side 비교 표 노출

5. (선택) 특정 셀 클릭 → evidence drill-down
   → LLM 이 출처 인용과 함께 응답

6. (선택, 신규 endpoint) 비교 insight 버튼
   → LLM 이 "A 업체가 B 보다 우수한 이유" 표로 자동 생성

1~4 는 현재 동작. 5~6 은 추가 endpoint 필요 (D-1 작업 4~6번).