칼라비
경력근거: 주요업무 Next.js + Supabase + Vercel 기반 개발 WordPress /
※ 실제 산출물이 아닌 AI 예측 시안입니다.
칼라비의 이 자리는 주문과 상품과 재고와 배송 데이터 흐름을 정리해 채널 사이를 잇는 일을 주요업무 첫 줄에 두고, 그 위에 운영 데이터 기반 에이전틱 워크플로를 설계하고 구현하라고 적었습니다. 채널마다 필드명과 상태값과 날짜 표기가 다른 추출본을 공통 표로 적재하는 층과, 운영자의 문장을 조회 조건으로 바꾸는 층을 한 화면 안에서 이어 붙여 그 두 업무가 실제로 맞물리는 모습을 보입니다. 공고가 Next.js 와 Supabase 와 Vercel 을 기반으로 못박았기 때문에 1주차 완결품을 그 조합으로 배포까지 끝내고, 서비스나 기능 하나를 끝까지 구현한 경험과 CLAUDE.md 와 커맨드와 훅 커스텀을 캡쳐와 설명으로 함께 내라는 필수 제출 요건에 맞춰 조건 변환 채점 커맨드와 커밋 전 스키마 검사 훅을 저장소에 남깁니다. 우대사항의 워드프레스와 PHP 는 채널 어댑터 하나를 워드프레스 쇼핑몰의 주문 내보내기 형식으로 두어 테마로만 닿게 하고, 플러그인 자체 개발은 범위에 넣지 않습니다. 이 포트폴리오가 보여주는 것은 자연어를 검증 가능한 조회 조건으로 바꾸고 사람 확정 관문을 사이에 낀 워크플로를 웹 화면으로 완결하는 기술이며 커머스 물류와 정산 도메인 전문성은 주장하지 않습니다. 모르는 깊이는 면접에서 모른다고 말하는 편이 낫습니다.
주문과 상품과 재고와 배송 데이터를 채널 사이에서 정리하고 잇는 일이 주요업무라서, 채널마다 다른 추출본을 공통 표로 적재하는 층을 화면의 첫 관문으로 둡니다.
LLM API 를 붙여 운영 데이터 위에서 도는 워크플로를 설계하고 구현하는 자리라서, 문장을 조건 후보와 확인 질문으로 바꾸는 일만 LLM 에 맡기고 조회 실행은 규칙이 맡는 경계를 제품 구조로 보입니다.
서비스나 기능 하나를 끝까지 구현한 경험과 CLAUDE.md 와 커맨드와 훅 같은 커스텀 설정을 캡쳐와 설명으로 함께 내라고 못박은 공고라서, 화면 하나를 배포까지 끌고 가면서 그 설정과 채점 커맨드를 저장소에 남깁니다.
스마트스토어와 쿠팡과 자사 워드프레스 쇼핑몰처럼 채널마다 따로 내려받은 주문과 배송 추출본을 공통 표 하나로 적재해 두고, 운영 담당자가 '지난주 스토어 주문 중 사흘 넘게 출고 안 된 건'처럼 한 문장을 쓰면 그 문장이 기간과 채널과 상태와 기준 일수의 조회 조건 카드로 펼쳐지는 웹 화면입니다. 상대 기간이나 두 채널에 걸리는 별칭이나 채널마다 다른 상태 표현처럼 값이 하나로 정해지지 않는 조건에는 확인 질문과 선택지가 붙어, 사람이 고르거나 고쳐 모든 조건을 확정하기 전에는 조회 버튼이 열리지 않습니다. 확정한 뒤 나오는 결과는 각 값이 어느 채널의 어느 원본 항목에서 온 것인지 함께 보여 담당자가 채널 관리자 화면을 다시 열지 않고 그대로 처리합니다.
판매 채널마다 관리자 화면이 따로 있어 출고가 밀린 주문을 찾을 때마다 채널별 엑셀을 내려받아 같은 필터를 다시 걸고 상태값 표기가 달라 한 번 더 확인하던 칼라비 커머스 운영 담당자가, 찾고 싶은 것을 한 문장으로 쓰면 조회 조건이 눈앞에 펼쳐지고 자기가 고쳐 확정한 대로 조회가 도는 화면을 쓰고 싶은 사람입니다.
문장을 곧바로 실행하지 않고 조회 조건 카드로 펼쳐 사람이 확정하게 하면, 담당자가 기간과 채널과 상태 해석이 어긋난 것을 조회 전에 알아채 잘못된 목록으로 출고를 재촉하거나 재고를 옮기는 일이 줄어든다는 가정입니다.
채널별 주문과 배송 추출본을 공통 표로 적재해 두고, 운영자가 쓴 한 문장이 기간과 채널과 상태와 기준 일수의 조건 카드로 펼쳐지며, 값이 하나로 정해지지 않는 조건에는 확인 질문과 선택지가 붙어 사람이 전부 확정하기 전에는 조회가 열리지 않고, 확정 뒤 결과의 각 값에 채널과 원본 항목 근거가 붙는 웹 화면이 Vercel 배포까지 끝난 완결품입니다. 만드는 덩어리는 조건 확정 관문과 근거가 붙은 결과 목록 둘이며 평일 5일에 혼자 끝나는 범위입니다.
요청 문장 60건 골드셋으로 조건 변환과 확인 질문 발생을 채점하는 하네스와 저장소 커맨드를 만들고, 자주 쓰는 확정 조건을 저장해 다시 부르는 기능을 붙입니다. 이 주차부터 채널 추출본 적재 배치를 AWS 에 올려 정해진 시각에 돌립니다.
출고가 밀린 주문을 찾은 결과에서 상품 코드만 뽑아 재고 표를 다시 조회하는 식으로 단계를 이어 붙이고, 각 단계마다 조건 확정 관문을 다시 세워 사람이 중간 결과를 보고 방향을 고치는 에이전틱 워크플로 화면입니다.
채널마다 형식이 다른 주문 추출본을 적재하고 한 문장으로 물어 조건 카드가 펼쳐지고 확인 질문에 답해 확정한 뒤 근거가 붙은 결과 목록이 나오는 흐름을 처음부터 끝까지 시연합니다.
확정하지 않은 조건이 하나라도 남으면 조회 버튼이 열리지 않고, 근거 구절이 요청 문장에 없는 조건은 카드 단계에서 버려지며, 적재된 적 없는 채널 이름을 넣으면 결과가 아니라 확인 질문이 뜨는 것을 하드 케이스 30종으로 보입니다.
상대 기간과 모호한 채널 별칭과 흔들리는 상태 표현을 심어 둔 요청 문장 60건을 골드셋과 대조해 조건 변환 일치율과 확인 질문이 떠야 할 자리에서 실제로 뜬 비율을 2주차에 측정합니다. 다만 골드셋과 데이터를 작성자가 만든 합성 기준이라 성능 검증이 아니라 데모 조건 동작입니다.
위 수치는 더미데이터 자가채점이며, 실제 조회 정확도와 운영 시간 단축은 칼라비의 실제 채널 추출본과 담당자의 실제 사용이 있어야 측정 가능합니다. 이 포트폴리오는 그 검증을 바로 돌릴 수 있는 상태로 만듭니다.
수치는 합성 데이터 자가채점이라 성능 증명이 아닙니다. 면접에서는 데모가 도는 상태와 실검증 준비 상태로 솔직히 설명합니다.
골드셋 정답을 작성자가 만들었으니 잘 맞는 것이 당연합니다. 상대 기간과 두 채널에 걸리는 별칭과 채널마다 다른 상태 표현과 적재된 적 없는 채널 이름과 오타 섞인 상품 코드를 요청 문장에 일부러 섞어 두었습니다.
채널 관리자 API 를 직접 붙이는 일은 판매자 계정과 채널별 심사가 있어야 열리므로 범위에서 뺐습니다. 이 제품은 채널에서 내려받은 추출본 파일을 입력으로 받고, 실시간 API 연동은 회사 계정이 있을 때의 도입 과제로 둡니다.
이 포트폴리오가 보여주는 것은 자연어를 검증 가능한 조회 조건으로 바꾸고 사람 확정 관문을 사이에 낀 워크플로를 화면으로 완결하는 기술이며, 커머스 물류와 정산 도메인 전문성은 주장하지 않습니다. 실제 채널의 상태 코드 체계와 정산 규칙은 실데이터를 봐야 맞출 수 있고, 모르는 깊이는 면접에서 모른다고 말하는 편이 낫습니다.
① 인라인 샘플 · ② seed.json 다운로드 · ③ 증강 프롬프트. 세 층 모두 동일한 schema 에서 파생.
판매 채널마다 따로 내려받은 주문과 배송 추출본을 흉내 낸 더미입니다. 필드 표기와 상태값과 날짜 형식이 채널마다 달라 공통 표 적재와 조건 실행을 가르기 위한 입력입니다.
| row_id | channel_raw | order_no_raw | sku_raw | qty_raw | amount_raw | ordered_at_raw | status_raw | shipped_at_raw | tracking_no | memo |
|---|---|---|---|---|---|---|---|---|---|---|
| E-1001 | 스마트스토어 | 2026072800112 | CLB-CH-01 | 1 | 39,000 | 2026-07-24 14:03 | 배송준비중 | — | — | — |
| E-1002 | 스마트스토어 | 2026072800118 | clb-ch-01 | 2개 | 78000원 | 2026-07-24 16:41 | 결제완료 | — | — | 상품 코드 대소문자와 뒤 공백이 흔들리는 행입니다 |
| E-1003 | 쿠팡 | CP-88120034 | CLB-DK-02 | 1 | 129000.00 | 2026/07/23 | 3 | — | — | 상태를 숫자 코드로 주고 날짜에 시각이 없는 채널입니다 |
| E-1004 | 쿠팡 | CP-88120067 | CLB-DK-02 | 1 | 129000.00 | 2026/07/26 | 5 | 2026/07/27 | 6512340001 | — |
| E-1005 | 톡스토어 | TS20260725-004 | CLB-LP-07 | 3 | 57,000 | 2026-07-25T09:12:00+09:00 | 출고완료 | 2026-07-25T18:40:00+09:00 | 3390021177 | 스토어라는 별칭이 스마트스토어와 겹치는 채널입니다 |
아래 JSON Schema에 맞는 판매 채널 주문 추출본 행을 40건 더 만들어 주세요. {"type":"object","properties":{"row_id":{"type":"string"},"channel_raw":{"type":"string"},"order_no_raw":{"type":"string"},"sku_raw":{"type":"string"},"qty_raw":{"type":"string"},"amount_raw":{"type":"string"},"ordered_at_raw":{"type":"string"},"status_raw":{"type":"string"},"shipped_at_raw":{"type":["string","null"]},"tracking_no":{"type":["string","null"]},"memo":{"type":["string","null"]}},"required":["row_id","channel_raw","order_no_raw","sku_raw","qty_raw","ordered_at_raw","status_raw"]} 쉬운 데이터만 만들지 말 것. 다음 하드 케이스를 의도적으로 섞어라. 첫째 채널마다 status_raw 표기가 한글과 영문과 숫자 코드로 갈리고 매핑표에 없는 값이 섞인 행, 둘째 ordered_at_raw 가 일월년 순이거나 시각이 없거나 시간대 표기가 붙은 행, 셋째 qty_raw 가 개 단위 한글이나 앞자리 영이 붙은 문자열이고 amount_raw 에 콤마와 원과 소수점이 섞인 행, 넷째 sku_raw 의 대소문자와 앞뒤 공백이 흔들리거나 재고 표에 없는 코드인 행, 다섯째 같은 order_no_raw 가 두 번 내려온 중복 행과 상태는 배송중인데 tracking_no 가 null 인 행. 형식을 깨뜨리는 시도는 3건까지 별도로 만들어 주세요.{"type":"object","properties":{"row_id":{"type":"string"},"channel_raw":{"type":"string"},"order_no_raw":{"type":"string"},"sku_raw":{"type":"string"},"qty_raw":{"type":"string"},"amount_raw":{"type":"string"},"ordered_at_raw":{"type":"string"},"status_raw":{"type":"string"},"shipped_at_raw":{"type":["string","null"]},"tracking_no":{"type":["string","null"]},"memo":{"type":["string","null"]}},"required":["row_id","channel_raw","order_no_raw","sku_raw","qty_raw","ordered_at_raw","status_raw"]}운영 담당자가 실제로 쓸 법한 요청 문장과 거기서 나와야 할 조건과 확인 질문이 떠야 할 자리를 짝지은 더미입니다. 문장을 조건으로 바꾸는 변환을 규칙으로 채점하기 위한 정답 집합입니다.
| request_id | request_text | expected_conditions | expected_confirm_fields | note |
|---|---|---|---|---|
| Q-01 | 스마트스토어에서 7월 20일부터 7월 26일까지 들어온 주문 보여줘 | [{"field":"channel","op":"eq","value":"스마트스토어"},{"field":"ordered_at","op":"between","value":"2026-07-20..2026-07-26"}] | [] | 기간과 채널이 모두 명확해 확인 질문 없이 확정되는 기준 문장입니다 |
| Q-02 | 지난주 스토어 주문 중 사흘 넘게 출고 안 된 건 뽑아줘 | [{"field":"ordered_at","op":"between","value":"상대 기간 확정 필요"},{"field":"channel","op":"eq","value":"별칭 확정 필요"},{"field":"days_since_order_unshipped","op":"gt","value":"3"}] | ["ordered_at","channel"] | 지난주의 시작 요일과 스토어가 스마트스토어인지 톡스토어인지 둘 다 물… |
| Q-03 | 쿠팡에서 아직 배송 안 된 주문 | [{"field":"channel","op":"eq","value":"쿠팡"},{"field":"status","op":"in","value":"상태 매핑 확정 필요"}] | ["status"] | 배송 안 된 상태가 결제완료와 배송준비중과 배송중 중 어디까지인지 물… |
| Q-04 | 요즘 오래 묵은 주문 좀 정리하자 | [{"field":"ordered_at","op":"lt","value":"기준일 확정 필요"}] | ["ordered_at"] | 오래 묵었다는 기준이 없어 며칠을 넘긴 주문인지 물어야 합니다 |
| Q-05 | 11번가 이번 달 주문 다 보여줘 | [{"field":"channel","op":"eq","value":"적재되지 않은 채널"},{"field":"ordered_at","op":"between","value":"2026-08-01..2026-08-31"}] | ["channel"] | 공통 표에 적재된 적 없는 채널이라 빈 결과 대신 확인 질문이 떠야 … |
아래 JSON Schema에 맞는 커머스 운영 요청 문장과 정답 조건 쌍을 40건 더 만들어 주세요. {"type":"object","properties":{"request_id":{"type":"string"},"request_text":{"type":"string"},"expected_conditions":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"op":{"type":"string"},"value":{"type":"string"}},"required":["field","op","value"]}},"expected_confirm_fields":{"type":"array","items":{"type":"string"}},"note":{"type":["string","null"]}},"required":["request_id","request_text","expected_conditions","expected_confirm_fields"]} 쉬운 데이터만 만들지 말 것. 다음 하드 케이스를 의도적으로 섞어라. 첫째 지난주와 이번 달과 요즘처럼 경계가 정해지지 않은 상대 기간이 들어가 expected_confirm_fields 에 ordered_at 이 들어가는 문장, 둘째 스토어처럼 두 채널에 걸리는 별칭이나 적재된 적 없는 채널 이름이 들어간 문장, 셋째 아직 배송 안 된처럼 상태 매핑이 여러 값에 걸려 물어야 하는 문장, 넷째 빼고와 제외처럼 부정 조건으로 바뀌어야 하는 문장, 다섯째 결측 자체나 중복 자체를 찾는 문장과 띄어쓰기와 대소문자가 흔들리는 상품 코드가 들어간 문장. expected_confirm_fields 가 비어 있는 명확한 문장도 3분의 1은 넣어 주세요.{"type":"object","properties":{"request_id":{"type":"string"},"request_text":{"type":"string"},"expected_conditions":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"op":{"type":"string"},"value":{"type":"string"}},"required":["field","op","value"]}},"expected_confirm_fields":{"type":"array","items":{"type":"string"}},"note":{"type":["string","null"]}},"required":["request_id","request_text","expected_conditions","expected_confirm_fields"]}상품별 창고 재고를 흉내 낸 더미입니다. 3주차에서 출고가 밀린 주문의 상품 코드를 다음 단계 조건으로 넘겨 재고를 다시 조회하기 위한 입력입니다.
| sku_raw | sku_id | warehouse | on_hand | reserved | updated_at_raw | memo |
|---|---|---|---|---|---|---|
| CLB-CH-01 | S-001 | 본창고 | 42 | 12 | 2026-07-28 07:00 | — |
| CLB-CH-01 | S-001 | 3자물류 | 8 | 8 | 2026-07-28 07:00 | 가용 수량이 영이라 출고가 막히는 행입니다 |
| clb-dk-02 | S-002 | 본창고 | 3 | 5 | 2026-07-27 19:20 | 예약 수량이 실물보다 많아 가용이 음수가 되는 행입니다 |
| CLB-DK-02 | S-002 | 3자물류 | 0 | 0 | 2026-07-27 19:20 | 뒤 공백이 붙은 표기라 정규화해야 같은 상품으로 묶입니다 |
| CLB-LP-07 | S-003 | 본창고 | 15 | 4 | 2026-07-28 07:00 | — |
아래 JSON Schema에 맞는 상품별 창고 재고 행을 30건 더 만들어 주세요. {"type":"object","properties":{"sku_raw":{"type":"string"},"sku_id":{"type":["string","null"]},"warehouse":{"type":"string"},"on_hand":{"type":["integer","null"]},"reserved":{"type":["integer","null"]},"updated_at_raw":{"type":"string"},"memo":{"type":["string","null"]}},"required":["sku_raw","warehouse","updated_at_raw"]} 쉬운 데이터만 만들지 말 것. 다음 하드 케이스를 의도적으로 섞어라. 첫째 sku_raw 의 대소문자와 앞뒤 공백과 세트 접미사가 흔들려 sku_id 가 null 인 행, 둘째 reserved 가 on_hand 보다 커서 가용 수량이 음수가 되는 행, 셋째 on_hand 와 reserved 가 null 이고 updated_at_raw 가 한 달 이상 멈춘 행, 넷째 같은 상품이 본창고와 3자물류와 반품창고에 나뉘어 창고를 합쳐야 답이 나오는 행, 다섯째 같은 상품과 같은 창고가 두 번 내려온 중복 행. 형식을 깨뜨리는 시도는 3건까지 별도로 만들어 주세요.{"type":"object","properties":{"sku_raw":{"type":"string"},"sku_id":{"type":["string","null"]},"warehouse":{"type":"string"},"on_hand":{"type":["integer","null"]},"reserved":{"type":["integer","null"]},"updated_at_raw":{"type":"string"},"memo":{"type":["string","null"]}},"required":["sku_raw","warehouse","updated_at_raw"]}| Next.js | 조건 카드 확정 화면과 근거가 붙은 결과 목록을 렌더하고 조회 실행 라우트를 같은 앱 안에 둡니다. |
| Supabase | 채널별 추출본을 공통 주문과 재고와 배송 표로 적재하고 확정된 조건을 그대로 옮긴 질의를 실행합니다. |
| Vercel | 1주차 완결품을 Vercel 에 올려 실제 주소에서 돌리고 이후 주차도 같은 배포 위에 얹습니다. |
| Python | 채널마다 다른 필드명과 상태값과 날짜와 수량 표기를 공통 표 형태로 바꾸는 정규화 유틸리티를 만듭니다. |
| WordPress / PHP | 채널 어댑터 하나를 워드프레스 쇼핑몰의 주문 내보내기 형식으로 두고 그 파일을 읽어 공통 표로 옮기는 변환기를 만듭니다. 플러그인 자체 개발은 범위 밖으로 둡니다. |
| LLM API · 에이전틱 워크플로 | 문장을 조건 후보와 확인 질문으로 바꾸는 단계에만 LLM 을 쓰고, 3주차에서 확정 관문을 사이에 낀 여러 단계 워크플로로 이어 붙입니다. |
| AWS | 2주차부터 채널 추출본 적재 배치를 AWS 에 올려 정해진 시각에 돌리고 실행 로그를 남깁니다. |
| AI 개발 도구 커스텀(CLAUDE.md·커맨드·훅) | 저장소에 CLAUDE.md 와 조건 골드셋 채점 커맨드와 커밋 전 스키마 검사 훅을 두고 그 설정과 실행 화면을 캡쳐와 설명으로 함께 제출합니다. |
✓ pass → 그대로 멈춰도 완결입니다. 더 키우려면 2주차에서 골드셋 채점 하네스와 저장된 조회와 적재 배치를 붙입니다.
✓ pass → 여기까지도 완결입니다. 더 키우려면 3주차에서 조회 결과를 다음 조건의 입력으로 넘기는 여러 단계 워크플로를 만듭니다.
요청 문장 한 건에 대한 조회 계획입니다. 문장에서 뽑은 조건과 그 근거 구절과 사람이 확정해야 할 자리를 담아, 확정 전에는 조회가 열리지 않고 확정 뒤에는 결과와 원본 근거가 함께 붙게 합니다.
{"type":"object","properties":{"request_id":{"type":"string"},"request_text":{"type":"string"},"status":{"type":"string","enum":["blocked","confirmed"]},"conditions":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"op":{"type":"string"},"value":{"type":["string","null"]},"source_phrase":{"type":"string"},"needs_confirm":{"type":"boolean"},"confirm_question":{"type":["string","null"]},"options":{"type":"array","items":{"type":"string"}}},"required":["field","op","source_phrase","needs_confirm"]}},"result_count":{"type":["integer","null"]},"evidence":{"type":"array","items":{"type":"string"}},"hedge":{"type":["string","null"]}},"required":["request_id","request_text","status","conditions"]}[
{
"request_id": "Q-02",
"request_text": "지난주 스토어 주문 중 사흘 넘게 출고 안 된 건 뽑아줘",
"status": "blocked",
"conditions": [
{
"field": "ordered_at",
"op": "between",
"value": null,
"source_phrase": "지난주",
"needs_confirm": true,
"confirm_question": "지난주를 어느 구간으로 볼까요?",
"options": [
"2026-07-20..2026-07-26",
"2026-07-19..2026-07-25"
]
},
{
"field": "channel",
"op": "eq",
"value": null,
"source_phrase": "스토어",
"needs_confirm": true,
"confirm_question": "스토어가 어느 채널인가요?",
"options": [
"스마트스토어",
"톡스토어"
]
},
{
"field": "days_since_order_unshipped",
"op": "gt",
"value": "3",
"source_phrase": "사흘 넘게 출고 안 된",
"needs_confirm": false,
"confirm_question": null,
"options": []
}
],
"result_count": null,
"evidence": [],
"hedge": "확정되지 않은 조건이 둘 남아 조회가 잠겨 있습니다."
},
{
"request_id": "Q-02",
"request_text": "지난주 스토어 주문 중 사흘 넘게 출고 안 된 건 뽑아줘",
"status": "confirmed",
"conditions": [
{
"field": "ordered_at",
"op": "between",
"value": "2026-07-20..2026-07-26",
"source_phrase": "지난주",
"needs_confirm": false,
"confirm_question": null,
"options": []
},
{
"field": "channel",
"op": "eq",
"value": "스마트스토어",
"source_phrase": "스토어",
"needs_confirm": false,
"confirm_question": null,
"options": []
},
{
"field": "days_since_order_unshipped",
"op": "gt",
"value": "3",
"source_phrase": "사흘 넘게 출고 안 된",
"needs_confirm": false,
"confirm_question": null,
"options": []
}
],
"result_count": 2,
"evidence": [
"E-1001 · 스마트스토어 · status_raw=배송준비중 · ordered_at_raw=2026-07-24 14:03",
"E-1002 · 스마트스토어 · status_raw=결제완료 · ordered_at_raw=2026-07-24 16:41"
],
"hedge": "출고 지연 일수는 합성 추출본의 주문 시각 기준이라 실제 물류 기준일과 다를 수 있습니다."
},
{
"request_id": "Q-05",
"request_text": "11번가 이번 달 주문 다 보여줘",
"status": "blocked",
"conditions": [
{
"field": "channel",
"op": "eq",
"value": null,
"source_phrase": "11번가",
"needs_confirm": true,
"confirm_question": "11번가 추출본은 아직 적재되지 않았습니다. 적재된 채널 중에서 고르시겠어요?",
"options": [
"스마트스토어",
"쿠팡",
"톡스토어",
"자사몰(WordPress)",
"카페24"
]
},
{
"field": "ordered_at",
"op": "between",
"value": "2026-08-01..2026-08-31",
"source_phrase": "이번 달",
"needs_confirm": false,
"confirm_question": null,
"options": []
}
],
"result_count": null,
"evidence": [],
"hedge": "적재되지 않은 채널은 빈 결과가 아니라 확인 질문으로 되돌립니다."
}
][자동 검증] 1. 계획 JSON 이 위 스키마를 통과하는지 확인합니다. status 가 두 값 밖이면 그 계획을 버립니다. 2. 모든 조건의 source_phrase 가 request_text 의 부분 문자열인지 확인합니다. 지어낸 근거가 붙은 조건을 카드 단계에서 거르기 위해서입니다. 3. status 가 blocked 면 needs_confirm 이 참인 조건이 하나 이상 있어야 하고 result_count 와 evidence 는 비어 있어야 합니다. 확정 전 조회를 막기 위해서입니다. 4. status 가 confirmed 면 모든 조건의 needs_confirm 이 거짓이고 value 가 채워져 있어야 하며 result_count 는 정수여야 합니다. 5. needs_confirm 이 참인 조건에는 confirm_question 이 있어야 하고 options 가 둘 이상이거나 자유 입력임이 표시되어야 합니다. 6. evidence 의 각 항목이 실제 적재 행의 row_id 와 채널과 원본 항목 이름을 가리키는지 확인합니다. 7. 확정된 조건으로 다시 실행했을 때 result_count 와 결과 행 집합이 같은지 확인합니다. 실행이 규칙으로만 결정되는지 보기 위해서입니다. [수동 검증] 1. 골드셋 60건 중 확인 질문이 떠야 할 문장 20건을 뽑아 질문 문구와 선택지가 담당자가 고르기에 충분한지 읽어 봅니다. 2. 확정 결과 20건을 채널 원본 추출본과 나란히 놓고 근거가 가리키는 값이 실제로 그 행의 값인지 확인합니다.
근거: 주요업무 Next.js + Supabase + Vercel 기반 개발 WordPress /