바잉스퀘어
경력근거: 매일 반복되는 업무를 기술로 구조화하는 현장형 AI 구현 엔지니어
※ 실제 산출물이 아닌 AI 예측 시안입니다.
'매일 반복되는 업무를 기술로 구조화하는 현장형 AI 구현 엔지니어' 라는 공고 문장이 이 콘솔의 역할(자유형식 발주를 구조·검증으로 바꾸는 것)을 그대로 정의합니다. 바잉스퀘어의 B2B 홀세일 흐름(상품·거래처·주문·발주·재고·정산)에서 발주 처리가 가장 반복적이라 이 도구가 그 병목에 정확히 붙습니다. 이 포트폴리오는 LLM 추출에 원문 인용을 강제하고 마스터 대조를 규칙으로 분리하는 구현을 보여주며, 럭셔리 유통·홀세일 도메인 전문성은 주장하지 않습니다. 거래 관행의 깊이는 면접에서 모른다고 말하는 편이 낫습니다.
공고가 상품·거래처·주문·발주·재고·정산 등 매일 반복되는 업무를 기술로 구조화하는 현장형 AI 구현 엔지니어를 찾습니다. 자유형식 발주를 구조화·대조하는 이 콘솔이 그 반복 업무 자동화의 축소판입니다.
거래처 문의·발주 상태 확인 같은 반복 커뮤니케이션 자동화와 내부 데이터 구조에 맞춘 입력·출력 스키마·검증 로직을 주요 업무로 둡니다. 추출과 마스터 대조 검증이 그 요구 그대로입니다.
TypeScript·Next.js·React·PostgreSQL 기반 개발과 Claude Code 활용, OpenAI/Anthropic API·RAG 경험을 요구합니다. 이 콘솔의 프런트·DB·추출 파이프라인이 그 스택 그대로입니다.
거래처가 Slack·이메일로 보낸 자유형식 발주 요청을 받아, LLM 이 상품명·수량·거래처를 원문 인용 근거와 함께 뽑고, 상품 마스터·재고 테이블과 규칙으로 대조해 바로 처리할 발주와 사람이 봐야 할 예외(미등록 상품·재고 부족·수량 누락·거래처 불명)로 나눠주는 관리자 페이지입니다. 추출한 항목마다 원문의 어느 문장에서 나왔는지 추적됩니다.
거래처가 저마다 다른 형식으로 보낸 발주 메시지를 매일 엑셀로 옮겨 적고 재고·상품 코드를 손으로 대조하던 운영 담당자입니다. 반복 취합은 콘솔이 먼저 해두고, 예외 건만 골라 판단에 집중하고 싶은 사람입니다.
발주 항목 추출은 LLM 에 맡기되 원문 인용을 강제하고, 처리 가능·예외 판정은 마스터·재고 대조 규칙으로 분리하면, 자유형식 발주를 자동 구조화하면서도 오처리가 규칙에 걸려 사람은 예외에만 개입합니다.
발주 추출 파이프라인(원문 인용 강제)과 마스터·재고 대조 규칙, 관리자 콘솔까지 Next.js 로 묶어 Vercel 에 배포한 완결품입니다. Slack·ERP 실연동 대신 발주 메시지·마스터 더미를 입력으로 시작합니다(실연동은 2·3주차).
사람이 라벨링한 발주 정답표 대비 항목 추출 정확도와 처리·예외 판정 일치율 리포트, 미등록·수량 누락 경계 케이스 회귀 테스트가 남은 상태입니다.
Slack·Google Workspace 로 발주 메시지를 실제로 받아오고, 예외 건을 담당자가 보정·승인해 재고를 차감하는 흐름이 붙은 상태입니다.
발주 메시지를 넣으면 상품·수량·거래처 구조화와 처리·예외 판정이 원문 인용과 함께 나오는 흐름을 시연합니다(미등록·수량 누락 포함).
항목 추출과 처리·예외 판정을 사람 라벨 정답표와 대조한 정확도·일치율을 보여줍니다(표본: 발주 60건, 자가 라벨, 항목 정확도는 추출 항목 중 맞은 비율).
일부러 만든 미등록 상품·수량 누락·거래처 불명 발주 30종을 넣어도 출력 형식이 깨지지 않고 예외로 정확히 분류됨을 보여줍니다.
위 수치는 작성자가 만든 더미 발주와 자가 라벨 기준이라 성능 증명이 아니라 데모 조건 동작이며, 실제 거래처 발주 분포에서의 정확도는 바잉스퀘어 실데이터와 담당자 검수가 있어야 측정됩니다. 이 포트폴리오는 그 검증을 바로 돌릴 수 있는 상태까지 만듭니다.
정확도·일치율은 작성자가 만든 더미 발주와 자가 라벨 기준의 자가채점이라 성능 증명이 아닙니다. 면접에서는 데모 동작과 검증 구조로 솔직하게 설명합니다.
정답을 내가 만들었으니 잘 맞는 게 당연해지는 함정이 있어, 거래처 별칭·오탈자·수량 누락·미등록 상품을 발주 더미에 일부러 섞습니다.
자유형식 추출은 거래처 표기 관행에 크게 흔들리므로 상품 별칭 사전 없이는 정확도가 떨어져, 사전 정비를 도입 단계 과제로 분리합니다.
실서비스 전환 시 ERP·재고 실시간 연동과 권한·승인 흐름이 필요하며, 이는 더미 대조와 달라지는 부분으로 분리해 둡니다.
① 인라인 샘플 · ② seed.json 다운로드 · ③ 증강 프롬프트. 세 층 모두 동일한 schema 에서 파생.
추출 파이프라인의 입력이 되는 거래처 발주 메시지입니다. 형식 흔들림·별칭·결측·미등록을 일부러 담아 추출·대조 분기를 시험합니다.
| msg_id | channel | partner_raw | body | received_at |
|---|---|---|---|---|
| M-001 | slack | 루이비통코리아 | 안녕하세요, 스카프 A라인 30개랑 벨트(BLT-2) 10개 발주 부… | 2026-07-01T09:12:00 |
| M-002 | LV Korea | SCARF-ALINE 3박스(박스당 12) 요청드립니다 | 2026-07-01T10:00:00 | |
| M-003 | kakao | 구찌 | 지난번 그 가방 재고 있나요? 있으면 5개요 | 2026-07-01T11:30:00 |
| M-004 | slack | 미확인거래처 | 핸드백 BAG-9 20개 발주 | 2026-07-01T12:00:00 |
| M-005 | 프라다 | 벨트 주문할게요 (수량은 내일 다시 알려드림) | 2026-07-01T13:10:00 |
다음 JSON Schema 를 그대로 만족하는 거래처 발주 메시지 행을 40개 더 만들어 주세요: {"type":"object","properties":{"msg_id":{"type":"string"},"channel":{"type":"string","enum":["slack","email","kakao","notion"]},"partner_raw":{"type":"string"},"body":{"type":"string"},"received_at":{"type":"string"}},"required":["msg_id","channel","partner_raw","body"]} body 는 실제 사람이 보낸 듯한 자유형식이어야 합니다. 쉬운 데이터만 만들지 말 것. 다음 하드 케이스를 의도적으로 섞어라: (1) 수량이 없거나 '내일 알려줌' 처럼 결측 5건, (2) 상품명이 별칭·오탈자·한영 혼용(SCARF-ALINE/스카프 알라인/스카프 A라인) 6건, (3) 마스터에 없는 미등록 상품 4건, (4) '그거 보내주세요' 처럼 상품 특정 불가 3건, (5) 취소(-5개)·품절 문의(0개) 등 특수 의도 3건.{"type":"object","properties":{"msg_id":{"type":"string"},"channel":{"type":"string","enum":["slack","email","kakao","notion"]},"partner_raw":{"type":"string"},"body":{"type":"string"},"received_at":{"type":"string"}},"required":["msg_id","channel","partner_raw","body"]}상품 코드 매핑과 재고 대조의 기준 마스터입니다. 미등록 상품을 알려주고 재고 부족을 규칙으로 판정하는 근거가 됩니다.
| sku | name | partner_id | stock | unit |
|---|---|---|---|---|
| SCARF-ALINE | 스카프 A라인 | P-LV | 120 | 개 |
| BLT-2 | 벨트 2 | P-LV | 8 | 개 |
| BAG-9 | 핸드백 9 | P-GUCCI | 40 | 개 |
| WALLET-3 | 지갑 3 | P-PRADA | 0 | 개 |
| SCARF-BLINE | 스카프 B라인 | P-LV | 15 | 개 |
다음 JSON Schema 를 그대로 만족하는 상품 마스터 행을 25개 더 만들어 주세요: {"type":"object","properties":{"sku":{"type":"string"},"name":{"type":"string"},"partner_id":{"type":["string","null"]},"stock":{"type":"integer"},"unit":{"type":"string"}},"required":["sku","name","stock","unit"]} sku 는 대문자-숫자, name 은 한글 상품명이어야 합니다. 쉬운 데이터만 만들지 말 것. 다음 하드 케이스를 의도적으로 섞어라: (1) stock 0(품절) 3건, (2) partner_id 가 null 인 공용 상품 3건, (3) order_messages 의 미등록 상품(미등록상품ZZ 등)은 일부러 마스터에 넣지 말 것.{"type":"object","properties":{"sku":{"type":"string"},"name":{"type":"string"},"partner_id":{"type":["string","null"]},"stock":{"type":"integer"},"unit":{"type":"string"}},"required":["sku","name","stock","unit"]}| TypeScript | 발주 추출·대조 규칙 엔진과 콘솔의 구현 언어입니다. 대조 로직의 단위 테스트를 여기서 돌립니다 |
| Next.js | 발주 콘솔 앱 프레임워크이며 1주차 완성품을 Vercel 로 바로 배포합니다 |
| React | 발주 항목·예외 사유·원문 인용을 펼쳐보는 관리자 화면을 만듭니다 |
| PostgreSQL | 상품 마스터·재고·발주 원장을 담는 데이터베이스입니다 |
| LLM | 자유형식 발주 메시지에서 상품·수량·거래처를 원문 인용과 함께 추출합니다 |
| RAG | 거래처별 상품 별칭·약어 사전을 검색해 추출 정확도를 높이는 데 씁니다 |
| OpenAI | 추출 보조 모델의 대안으로 두고 비용·정확도를 비교합니다 |
| Claude | 추출·예외 사유 문구 생성에 쓰며 개발도 Claude Code 로 진행해 공고의 에이전트 활용 문화와 같은 방식을 씁니다 |
✓ pass → 여기서 멈춰도 완결입니다. 더 키우려면 정답 라벨 대조와 실제 메신저·ERP 연동으로 넘어갑니다.
✓ pass → Slack·Workspace 실연동과 예외 보정·승인 화면으로 넘어갑니다.
발주 메시지에서 뽑은 구조화 항목과 마스터·재고 대조 판정입니다. 항목마다 원문 인용을 달고 처리·예외를 규칙으로 가릅니다.
{"type":"object","properties":{"msg_id":{"type":"string"},"partner_id":{"type":["string","null"]},"items":{"type":"array","items":{"type":"object","properties":{"sku":{"type":["string","null"]},"name_raw":{"type":"string"},"qty":{"type":["integer","null"]},"evidence":{"type":"string"}},"required":["name_raw","evidence"]}},"verdict":{"type":"string","enum":["auto_ok","needs_review"]},"reasons":{"type":"array","items":{"type":"string"}},"hedge":{"type":"string"}},"required":["msg_id","items","verdict","reasons","hedge"]}[
{
"msg_id": "M-001",
"partner_id": "P-LV",
"items": [
{
"sku": "SCARF-ALINE",
"name_raw": "스카프 A라인",
"qty": 30,
"evidence": "스카프 A라인 30개"
},
{
"sku": "BLT-2",
"name_raw": "벨트(BLT-2)",
"qty": 10,
"evidence": "벨트(BLT-2) 10개"
}
],
"verdict": "needs_review",
"reasons": [
"BLT-2 재고 8개로 요청 10개보다 부족합니다"
],
"hedge": "판정은 더미 마스터·재고 기준이며 실제 재고와 다를 수 있습니다."
},
{
"msg_id": "M-004",
"partner_id": null,
"items": [
{
"sku": "BAG-9",
"name_raw": "핸드백 BAG-9",
"qty": 20,
"evidence": "핸드백 BAG-9 20개"
}
],
"verdict": "needs_review",
"reasons": [
"거래처 '미확인거래처' 가 마스터에 없어 매핑이 필요합니다"
],
"hedge": "거래처 미매핑은 지어내지 않고 예외로 표시했습니다. 합성 마스터 기준입니다."
},
{
"msg_id": "M-009",
"partner_id": "P-BURBERRY",
"items": [
{
"sku": null,
"name_raw": "그거",
"qty": null,
"evidence": "그거 좀 보내주세요"
}
],
"verdict": "needs_review",
"reasons": [
"상품과 수량을 특정할 수 없어 담당자 확인이 필요합니다"
],
"hedge": "특정 불가 항목은 값을 지어내지 않고 예외로 남겼습니다."
}
][자동 검증 · 스크립트가 전수 수행] 1. 출력이 JSON Schema 형식을 통과하는지 확인합니다(형식 깨진 발주가 처리되는 것을 차단). 2. verdict 가 규칙 대조 재실행 결과(미등록·재고 부족·결측 존재 여부)와 100% 일치하는지 확인합니다(정답은 LLM 이 아니라 대조 규칙이 결정). 3. items 의 모든 evidence 가 원문 body 에 실재하는 문장인지 확인합니다(지어낸 항목 차단). [수동 검증 · 사람이 표본 확인] 1. 추출 항목이 원문 의도를 넘어 과대 해석하지 않는지 발주 30건을 표본 검토합니다. 2. 특정 불가·미등록 건이 값을 지어내지 않고 예외로 남는지 확인합니다.