힉스
경력근거: LLM 기반 추천 및 상담 Agent를 개발합니다
※ 실제 산출물이 아닌 AI 예측 시안입니다.
이 Agent 가 보여주는 것은 멀티모달 조건 추출과 tool calling, 구조화 출력, 카탈로그 근거 검증 기술이며, 신발 제조나 3D 라스트·패턴 설계 전문성을 주장하지 않습니다. 다만 이 사슬이 말이 되려면 힉스 CUSME SHOES 라는 맥락, 즉 발 데이터·상품 정보로 신발을 추천하는 커머스라는 문제가 있어야 의미가 있습니다. ‘카탈로그에 없는 상품을 지어내지 않는다’ 는 각도는 다른 도메인 데이터로는 그대로 옮기기 어렵습니다. 제조 Knowledge Graph 나 3D 편집의 실제 깊이는 제조 도메인 전문가와의 협업이 있어야 하고, 면접에서 모르는 부분은 모른다고 말하는 편이 낫습니다.
‘LLM과 멀티모달 AI를 실제 제품 기능으로 구현’ 이 이 포지션의 핵심입니다. 모델 연구가 아니라 말·이미지에서 조건을 구조화해 추천으로 잇는 동작하는 기능이 보여줄 대상입니다.
‘AI Agent의 대화 흐름, Tool Calling 및 상태 관리’ 와 ‘상품 검색·필터링·랭킹, 사이즈·착화 추천 로직’ 이 주요업무입니다. 도구를 호출해 카탈로그에서 근거로 추천하는 구조가 필요합니다.
‘평가 데이터 및 테스트 시나리오 구축’ 과 ‘정확도·응답 속도·비용·안정성 개선’ 이 업무입니다. 추천이 지어낸 게 아닌지 자동 대조하는 평가 세트가 제품에 붙습니다.
사용자가 ‘발볼 넓고 비 와도 되는 검은 운동화’ 처럼 말하거나 신발 사진을 올리면, 조건을 구조화(색·용도·발볼·방수·예산)해 상품 검색·필터·사이즈 추천 도구를 호출하고, 실제 카탈로그에 있는 상품만 근거(어떤 조건이 어떻게 맞았는지)를 붙여 추천합니다. 맞는 상품이 없으면 지어내지 않고 ‘조건 완화 제안’ 을 붙여 없음을 알립니다. 1주차만으로 완성품이고, 추천 타당성 검토(2주차)·조건을 좁혀가는 대화(3주차)로 키웁니다. (근거는 채용공고 정렬입니다.)
힉스 CUSME SHOES PE. 사용자의 두루뭉술한 말이나 사진을 받아 상품을 골라줄 때, 카탈로그에 없는 신발을 지어내거나 조건을 무시한 추천을 하지 않고, 실제 상품 안에서 근거 있는 추천만 내보내고 싶은 사람입니다.
조건을 구조화해 카탈로그 검색·사이즈 추천을 도구로 노출하면, LLM 이 (a) 말·이미지에서 필요한 조건을 뽑아 도구 인자로 넘기고, (b) 물어온 상품 안에서만 근거를 붙여 추천하며, (c) 맞는 상품이 없으면 지어내지 않고 조건 완화를 제안해, 카탈로그에 매인 신뢰할 추천을 낸다는 걸 보여줄 수 있습니다.
자연어·이미지에서 신발 조건을 뽑아 상품 검색·사이즈 추천 도구를 호출하고, 카탈로그에 실제로 있는 상품만 근거를 붙여 추천하며, 맞는 게 없으면 없음으로 답하는 동작하는 Agent. 이미지는 색·유형 태그를 뽑는 메타 가정으로 시작합니다(정밀 비전은 3주차).
커머스 MD 페르소나 2명이 추천이 조건에 맞는지, 근거가 타당한지 라벨링하고, 카탈로그에 없는 상품을 지어낸 비율을 대조하는 대시보드입니다.
‘좀 더 가벼운 걸로’ 처럼 이전 추천을 이어 조건을 좁히는 다중 턴 상태 관리와, 이미지에서 색·굽·유형을 더 정밀하게 뽑는 멀티모달 단계입니다.
신발 요청 30종(말·사진)을 넣으면, 조건을 뽑아 도구를 호출해 카탈로그 안에서 근거를 붙여 추천하는 걸 시연합니다
추천한 상품이 전부 카탈로그에 실제로 있는지 자동 대조합니다. 카탈로그에 없는 상품을 추천하면 차단되는 걸 보여줍니다
일부러 심은 불가능 조건(예산 1만원에 방수 등산화) 20종을 넣으면 억지 추천 대신 조건 완화를 제안하는 걸 보여줍니다
내가 만든 정답 30개 중 조건 추출·추천이 일치한 게 25개(83%). 단, 정답과 카탈로그를 모두 내가 만든 합성 기준이라 ‘성능 검증’ 이 아니라 ‘데모 조건 동작’ 임을 밝힙니다
위 수치는 전부 작성자가 만든 더미데이터 자가채점이며, 실제 추천 만족도·이미지 인식 정확도는 힉스 실 카탈로그와 실 사용자, 발 데이터가 있어야 측정 가능합니다. 이 도구는 그 검증을 바로 돌릴 수 있는 상태로 만듭니다.
이건 사용자·실데이터 없이 혼자 만든 포트폴리오라, 수치는 합성 데이터 자가채점이라 성능 증명이 아닙니다. 면접에서 ‘데모 동작 + 실검증 준비 상태’ 로 솔직히 설명합니다
정답을 작성자가 만들었으니 잘 맞는 것이 당연합니다. 모순 조건·불가능 조건·경계값을 더미에 일부러 섞어, 쉬운 요청만 푸는 게 아님을 보여줍니다
이 포트폴리오가 보여주는 것은 멀티모달 조건 추출·tool calling·카탈로그 근거 검증 기술이지 신발 제조나 3D 라스트·패턴 설계 전문성이 아닙니다. 제조 Knowledge Graph 의 깊이는 제조 전문가 협업이 있어야 하고, 면접에서 모르는 부분은 모른다고 말하는 편이 낫습니다
이미지 인식은 1주차엔 색·유형 태그 메타 가정으로 시작합니다. 정밀 비전(굽·소재)은 3주차 과제로 분리해, 못 하는 걸 하는 척하지 않습니다
실제 도입 시 달라지는 것 명시합니다. 실 카탈로그 규모·발 데이터 분포는 더미와 다르므로 랭킹 가중치·확신도 기준을 다시 맞춰야 하고, 검토자도 실 MD 로 교체해야 합니다(도입 단계 과제로 분리)
① 인라인 샘플 · ② seed.json 다운로드 · ③ 증강 프롬프트. 세 층 모두 동일한 schema 에서 파생.
추천 대상 신발 카탈로그. 검색 도구가 물어오는 표이자 추천 근거입니다. 품절·속성 결측·경계 예산·별칭 색상(먹색=블랙)을 일부러 섞어, 조건을 무시하거나 없는 상품을 지어내지 않는지 보여줍니다.
| sku | name | color | use | waterproof | width | price_krw | weight_g | in_stock |
|---|---|---|---|---|---|---|---|---|
| S-101 | 데일리 러너 블랙 | 블랙 | running | false | regular | 89,000 | 240 | true |
| S-102 | 올웨더 트레일 GTX | 차콜 | hiking | true | wide | 168,000 | 420 | true |
| S-103 | 라이트 워크 화이트 | 화이트 | casual | false | regular | 72,000 | 210 | false |
| S-104 | 와이드핏 데일리 먹색 | 먹색 | casual | false | wide | 95,000 | — | true |
| S-105 | 레인프루프 어반 | 블랙 | casual | true | regular | 129,000 | 300 | true |
아래 JSON Schema 에 맞는 신발 카탈로그 30행 JSON 배열로 생성합니다. 용도·색·발볼·방수·가격대를 고루 섞습니다.
{"type":"object","properties":{"sku":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"},"use":{"type":"string","enum":["running","casual","hiking","dress"]},"waterproof":{"type":"boolean"},"width":{"type":"string","enum":["narrow","regular","wide"]},"price_krw":{"type":"integer"},"weight_g":{"type":["integer","null"]},"in_stock":{"type":"boolean"}},"required":["sku","name","color","use","waterproof","width","price_krw","in_stock"]}
쉬운 데이터만 만들지 말 것. 하드 케이스 의도적 혼입: (1) 품절(in_stock=false) 2~3건, (2) weight_g 가 null 인 결측 1~2건, (3) 별칭 색상 표기(먹색·먹빛=블랙 계열) 1~2건, (4) 특정 조건 조합(방수 러닝 wide 저가)이 카탈로그에 아예 없도록 비워, 불가능 조건 폴백을 테스트할 수 있게 함. JSON 배열만.{"type":"object","properties":{"sku":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"},"use":{"type":"string","enum":["running","casual","hiking","dress"]},"waterproof":{"type":"boolean"},"width":{"type":"string","enum":["narrow","regular","wide"]},"price_krw":{"type":"integer"},"weight_g":{"type":["integer","null"]},"in_stock":{"type":"boolean"}},"required":["sku","name","color","use","waterproof","width","price_krw","in_stock"]}사용자 발 데이터와 사이즈 매핑 규칙. 사이즈·착화 추천 도구가 참조합니다. 결측 발볼·경계 사이즈(반 사이즈)·모순 입력(발볼 넓다면서 narrow 선호)을 섞어, 규칙으로 결정되는 부분과 사용자 확인이 필요한 부분을 구분하는지 보여줍니다.
| user_id | foot_length_mm | foot_width | pref_size | note |
|---|---|---|---|---|
| u_1 | 265 | wide | 270 | 발볼 넓어 편한 착화 선호 |
| u_2 | 250 | regular | 250 | 평소 정사이즈 |
| u_3 | 258 | — | — | 발볼 정보 없음, 반 사이즈 애매 |
| u_4 | 272 | wide | 275 | 러닝은 반 사이즈 크게 |
| u_5 | 245 | narrow | 240 | 발볼 좁아 딱 맞는 것 선호 |
아래 JSON Schema 에 맞는 발 데이터 20행 JSON 배열로 생성합니다.
{"type":"object","properties":{"user_id":{"type":"string"},"foot_length_mm":{"type":"integer"},"foot_width":{"type":["string","null"],"enum":["narrow","regular","wide",null]},"pref_size":{"type":["number","null"]},"note":{"type":"string"}},"required":["user_id","foot_length_mm","note"]}
쉬운 데이터만 만들지 말 것. 하드 케이스 의도적 혼입: (1) foot_width 가 null 인 결측 2~3건, (2) 반 사이즈 경계(250/255 애매) 2건, (3) 발볼과 선호가 모순되는 입력(wide 인데 narrow 선호) 1~2건, (4) pref_size 가 null 인 미입력 1~2건. JSON 배열만.{"type":"object","properties":{"user_id":{"type":"string"},"foot_length_mm":{"type":"integer"},"foot_width":{"type":["string","null"],"enum":["narrow","regular","wide",null]},"pref_size":{"type":["number","null"]},"note":{"type":"string"}},"required":["user_id","foot_length_mm","note"]}| Python | FastAPI 도구 서버(상품 검색·필터·사이즈 추천 함수) + Agent 오케스트레이션 |
| FastAPI | 추천 엔드포인트(`POST /recommend`)와 도구 호출 계약(우대의 FastAPI 반영) |
| LLM API | 조건 추출·tool calling·근거 문장 생성(자격요건의 LLM 활용) |
| 멀티모달 | 신발 이미지에서 색·유형 태그 추출(우대의 이미지·언어 멀티모달) |
| Structured Output | 조건·추천을 스키마로 강제해 지어낸 상품·필드 누락 차단(우대의 Structured Output) |
| PostgreSQL | shoe_catalog / fit_profile 단일 진실원과 검색 뷰 |
✓ pass → 그대로 멈춰도 완결입니다. 더 키우려면 2주차(추천 타당성 검토)로 진행합니다.
✓ pass → 여기서 멈춰도 완결입니다. 더 키우면 3주차(조건 좁히기 대화·이미지 정밀화)로 진행합니다.
신발 요청에 대한 추천. 뽑아낸 조건(parsed), 호출한 도구(tool_calls), 추천 상품과 근거(items), 조건 미충족 시 완화 제안(fallback)을 한 스키마에 담아, 카탈로그에 없는 상품을 지어내지 않고 조건을 근거로 매칭했는지 객관 검증합니다.
{"type":"object","properties":{"request":{"type":"string"},"parsed":{"type":"object","properties":{"color":{"type":["string","null"]},"use":{"type":["string","null"]},"waterproof":{"type":["boolean","null"]},"width":{"type":["string","null"]},"budget_krw":{"type":["integer","null"]}}},"tool_calls":{"type":"array","items":{"type":"object","properties":{"tool":{"type":"string","enum":["search_catalog","suggest_size"]},"args":{"type":"object"},"status":{"type":"string","enum":["ok","empty","error"]}},"required":["tool","args","status"]},"minItems":1},"items":{"type":"array","items":{"type":"object","properties":{"sku":{"type":"string"},"why":{"type":"string"},"matched":{"type":"array","items":{"type":"string"}}},"required":["sku","why","matched"]}},"fallback":{"type":["string","null"]}},"required":["request","parsed","tool_calls","items","fallback"]}[
{
"input_ref": "요청: ‘발볼 넓고 비 와도 되는 검은 운동화 15만원 안쪽’ (u_1)",
"output": {
"request": "발볼 넓고 비 와도 되는 검은 운동화 15만원 안쪽",
"parsed": {
"color": "블랙",
"use": "running",
"waterproof": true,
"width": "wide",
"budget_krw": 150000
},
"tool_calls": [
{
"tool": "search_catalog",
"args": {
"color": "블랙",
"use": "running",
"waterproof": true,
"width": "wide",
"max_price": 150000
},
"status": "ok"
},
{
"tool": "suggest_size",
"args": {
"user_id": "u_1"
},
"status": "ok"
}
],
"items": [
{
"sku": "S-108",
"why": "블랙·러닝·방수·와이드에 13.9만원으로 모든 조건을 만족합니다. 발 길이 265mm·와이드로 270 사이즈를 권합니다.",
"matched": [
"color=블랙",
"use=running",
"waterproof=true",
"width=wide",
"price<=150000"
]
}
],
"fallback": null
}
},
{
"input_ref": "요청: ‘1만원짜리 방수 등산화’ (불가능 조건 → 완화 제안)",
"output": {
"request": "1만원짜리 방수 등산화",
"parsed": {
"color": null,
"use": "hiking",
"waterproof": true,
"width": null,
"budget_krw": 10000
},
"tool_calls": [
{
"tool": "search_catalog",
"args": {
"use": "hiking",
"waterproof": true,
"max_price": 10000
},
"status": "empty"
}
],
"items": [],
"fallback": "1만원 예산에 맞는 방수 등산화는 카탈로그에 없습니다. 예산을 17만원까지 열면 ‘올웨더 트레일 GTX’(방수·와이드) 를 추천할 수 있습니다."
}
},
{
"input_ref": "요청: 흰 캐주얼화 사진 업로드 (품절 상품 → 지어내지 않음)",
"output": {
"request": "[이미지] 화이트 캐주얼 스니커즈",
"parsed": {
"color": "화이트",
"use": "casual",
"waterproof": null,
"width": null,
"budget_krw": null
},
"tool_calls": [
{
"tool": "search_catalog",
"args": {
"color": "화이트",
"use": "casual"
},
"status": "ok"
}
],
"items": [],
"fallback": "사진과 비슷한 ‘라이트 워크 화이트’ 가 있으나 현재 품절입니다. 재입고 알림을 걸거나, 그레이 캐주얼(‘캠퍼스 캐주얼 그레이’) 로 넓혀 보시겠어요? 없는 상품을 있는 것처럼 추천하지는 않습니다."
}
}
][자동 검증] 1. 출력이 스키마를 통과하는가(형식·필수 필드). 2. items 의 각 sku 가 shoe_catalog 에 실재하고 in_stock=true 인가(지어낸·품절 상품 차단). 3. matched 에 적힌 조건이 그 상품의 실제 속성과 일치하는가(근거 조작 검출). 4. search_catalog status 가 empty 인데 items 가 비어 있지 않으면 실패. 반대로 조건 미충족이면 fallback 이 채워졌는가. [수동 검증] 1. 커머스 MD 페르소나 2명이 추천 타당성·근거 라벨링 → bootstrap Cohen’s κ 하한 ≥ 0.6. 2. 지어낸 상품 5% 사람 점검.