사용자 4 기능 동작 상태 + 진짜 문제 6 + 미구현 5 + D-1 우선순위
| Commit | 요약 | 크기 |
|---|---|---|
956e497 | Revert "Revert #162" — PR #162 (T1~T8 + UI) 모두 복원 | +2826 / -180 |
87ac19b | chat 제거 + ai_engine 활용 강화 + bid_id 매핑 버그 수정 | +221 / -2829 |
| 변경 | 위치 |
|---|---|
| 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 매핑 버그 fix | internal.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 field | api/specs.py — frontend 가 EvalContext.bid_id 동봉 가능 |
신규 endpoint: POST /api/proposals/{spec_id}/summary | api/proposals.py — ai_engine 호출 + Redis 24h 캐싱 |
| alembic 0002 down_revision → None | 0001_chat_tables 의존 제거 |
| test 갱신 | test_proposals_api.py + core-compare-mapping.spec.ts |
드래그-드롭 / 파일 선택 모두 지원. 2-phase polling (hwpx 진행률 → BFF 매핑) 으로 BFF 409 spam 제거. 15분 deadline.
BFF 가 hwpx-intelligence 로 forward → webhook (/internal/done) 으로 ProductRecord 결과 받음. self-poller 가 backup.
identity / feature_summary / patents / detailed_items / quality_tests / image_assets / manufacturing / warranty + meta. Pydantic 검증된 진짜 structured output.
dropdown 멀티 선택 + side-by-side 표 동작. 단 점수는 fixture(가짜) — 진짜 LLM 매칭 결과 아님. matcher 가 다른 DB 로 써서 BFF 가 못 읽음.
| # | 문제 | 심각도 | 설명 |
|---|---|---|---|
| A | matcher cross-DB write | HIGH | analysis_pipeline/result_saver.py 가 knowledge_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) 와 무관. |
| # | 미구현 | 가치 |
|---|---|---|
| G | POST /api/compare/{bid_id}/insight | LLM 이 비교 표 직접 생성 (EvalChatResponse.tabular_data). 데모 임팩트 큼 |
| H | EvalChatResponse 의 ui_actions / tabular_data / citations / suggested_actions 표시 | summary endpoint 는 받고 있으나 frontend 가 표시 안 함. 단순 텍스트 → 인터랙티브 |
| I | Offline RFP 자동 구조화 (/offline/rfp/extract-*) | 현재 requirement_items 가 mock seed → 실제 RFP 파싱 결과로 교체 |
| J | Vision (Qwen3-VL) — 시험성적서 이미지 분석 | ProductRecord.image_assets 자동 분석 → 신뢰도 점수 |
| K | Embedding RAG — KURE-v1 + Qdrant | 의미 검색 — "○○ 기능 있는 업체" 자연어 쿼리 |
| 평가 | 답 |
|---|---|
| 사용자 4 기능 동작? | YES — 다중 업로드 / 파싱 / LLM structured / 비교 모두 동작 |
| "동작하면 된다" 기준 통과? | YES — Suman 의 demo 영상도 같은 fixture 상태 |
| 데모 자체 실패 가능성 | 중간 — H100 vLLM 부팅 실패 시 fixture 만 보임 (chat·summary 가 답 없음) |
| 평가위원이 깊이 파고 들면? | 노출 가능 — fixture 의 가짜 점수 패턴 (70 + idx*5 + iidx) 가 드러날 수 있음 |
| # | 작업 | 시간 | 가치 |
|---|---|---|---|
| 1 | on-prem H100 vLLM 부팅 확인 — docker compose logs ai-engine | grep "Active Models" | 30분 | 필수 |
| 2 | EMBEDDING_DIM 실제 served dim 검증 — curl :8306/embed 응답 벡터 길이 측정 | 10분 | 필수 |
| 3 | matcher cross-DB write 임시 보강 — webhook 패턴 (matcher → /internal/match-done → BFF DB upsert) | 2시간 | 중요 |
| 4 | Frontend UploadBar 에 bid_id Form field 동봉 (EvalContext 의 bid) | 30분 | 선택 |
| 5 | POST /api/compare/{bid_id}/insight 추가 — LLM 이 비교 표 자동 생성 | 1시간 | 선택 (임팩트 큼) |
| 6 | EvalChatResponse 의 citations / suggested_actions Frontend 표시 | 1시간 | 선택 (임팩트 큼) |
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번).