chat_v2 멀티턴 대화 기록 + 평가
사용자 발화 ↔ 챗봇 응답 + 추천칩 형태의 대화 시나리오 24개 · 메시지 80개 · invariant 42/42 PASS
레포 ai-real-estate-servicemain HEAD d471c0132026-05-28
24대화 시나리오
80user+bot 메시지
42invariants PASS
0FAIL
멀티턴 대화 기록
기본 대화 흐름 (12)
C01 대전 둔산동 원룸 검색 (사용자 보고 회귀 직격)
사용자가 비서울 지역 발화 시 추천칩에 강남·마포 등 boilerplate 도시명이 누출되면 안 됨
안녕하세요! 둔산동 원룸 보여드릴게요. 예산이나 평수 조건 있으세요?
월세 50 이하투룸도 같이?지하철 도보 5분?바로 추천받을래
둔산동 원룸 월세 50 이하 매물 3건 찾았어요. 둔산초·정부청사역 도보권에 깔끔한 신축 위주예요.
월세 60 이하도 같이?월평동도 같이 볼까?정부청사역 도보 5분?다른 옵션도 보여줘
둔산동·월평동 두 동네 원룸 월세 50 이하 합쳐서 5건. 월평동은 갤러리아·롯데백화점 권역이 가깝고 단지 신축이 많아요.
보증금 1000 이하만?대전 다른 동도 살펴볼까?대형마트 가까워?이건 별로네요, 다른 거
자동 평가 — invariant 검증
| invariant | expected | actual | verdict |
|---|
| area_keywords 누적 union | ['둔산동', '대전', '월평동'] | ['둔산동', '대전', '월평동'] | PASS |
| rent_max 보존 | 500000 | 500000 | PASS |
| 강남 도시명 챕에 없음 | False | False | PASS |
backstage (filter/merge raw)
[
{
"turn": 1,
"merge_prev_areas": [],
"merge_after_areas": [
"둔산동",
"대전"
]
},
{
"turn": 2,
"merge_prev_areas": [
"둔산동",
"대전"
],
"merge_after_areas": [
"둔산동",
"대전",
"월평동"
]
}
]
C02 예산 감액 대화 — LLM 음수 stochastic 차단 (#sosot03)
사용자 '월세 30 깎아줘' 발화 시 LLM 이 음수(-300000) 출력해도 BE 가 prev (600000) 보존
강남 원룸 월세 60 이하 매물 3건이에요. 역삼·삼성역 근처가 많아요.
보증금 5천 이하만서초도 같이 볼까?강남역 도보 10분?다른 매물 더
예산을 좀 더 빠듯하게 잡고 싶으신가봐요. 현재 누적 월세 한도는 600,000원 (=60만원) 으로 유지했어요. 추가 30만원 감액 의도면 '월세 30 이하' 처럼 명시해주세요.
월세 30 이하 매물만대전·송파 같은 가격대 지역?저렴한 동네 추천?그냥 60 유지
자동 평가 — invariant 검증
| invariant | expected | actual | verdict |
|---|
| 음수 차단 후 prev 보존 | 600000 | 600000 | PASS |
backstage (filter/merge raw)
[
{
"turn": 1,
"merge_after_rent_max": 600000
},
{
"turn": 2,
"merge_after_rent_max": 600000,
"note": "LLM mock 이 -300000 출력 → silently skip, prev 600000 보존"
}
]
C03 POI 발화 — 한밭대 근처 (resolve_place tool 호출)
사용자가 학교명·지하철역 같은 POI 발화 시 챗봇이 행정동으로 변환해서 echo + nearby_umds 안내
한밭대 근처라면 대전 유성구 덕명동 쪽이네요. 주변 동네는 궁동(도보 5분), 장대동(차로 5분) 정도가 인근 후보예요. 예산이나 평수 알려주시면 매물 추천해드릴게요.
월세 50 이하덕명동 외 궁동도 같이?학교 도보 10분?바로 추천
덕명동·궁동 원룸 월세 40 이하 매물 4건이에요. 한밭대 정문에서 도보 10-15분 권역이 많고 풀옵션 비율 높아요.
보증금 500 이하만궁동만 따로 볼까?기숙사식 풀옵션?다른 매물 더
자동 평가 — invariant 검증
| invariant | expected | actual | verdict |
|---|
| 응답에 행정동 echo (덕명동) | True | True | PASS |
| nearby 안내에 인근 동만 (hallucinate 차단) | True | True | PASS |
backstage (filter/merge raw)
[
{
"turn": 1,
"tool_called": "resolve_place(keyword='한밭대')",
"kakao_mock": {
"sido": "대전",
"sgg": "유성구",
"umd": "덕명동"
},
"nearby_umds": [
"궁동(~320m)",
"장대동(~890m)"
]
}
]
C04 페르소나 — 강아지 + 재택근무 (post_validate 보강)
LLM 이 persona_tags 누락해도 post_validate_filters 가 명시 키워드 매칭으로 보충
강아지 키워서 1층이거나 마당 있으면 좋겠어요. 재택근무 자주 해서 조용한 동네 위주로요.
강아지랑 함께 사실 거고 재택근무 환경 우선이시군요. 1층·마당·조용한 동네 + 인터넷 좋은 곳으로 좁혀볼게요. 지역은 어디 쪽 보고 계세요?
강남구 위주동네 상관없어 추천부터동물병원 가까워?바로 추천
성동구 1층·마당 있는 매물 보여드릴게요. 성수동·금호동 일대가 신축 빌라 + 펫프렌들리 단지 많아요. 기가 인터넷·방음 OK인 매물 우선이에요.
월세 80 이하만광진구 화양동도 비슷할까?강아지 산책로 좋은 곳?이건 별로네요
자동 평가 — invariant 검증
| invariant | expected | actual | verdict |
|---|
| '강아지' → pet_owner 보충 | True | True | PASS |
| '재택' → remote_work 보충 | True | True | PASS |
backstage (filter/merge raw)
[
{
"turn": 1,
"llm_persona_tags": [],
"post_validate_after": [
"pet_owner",
"remote_work"
]
}
]
C05 시급한 입주 — time_pressure + urgency 자동 승급
'당장 다음 주' 발화 시 time_pressure=immediate + urgency=normal→high
일정이 급하시네요! 즉시 입주 가능한 매물 우선으로 추천드릴게요. 어느 지역으로 보고 계세요?
강남구 신축어디든 추천부터최대한 빨리 가능한 곳일정은 조정 가능
강남 원룸 보 1천/월 60 매물 중 즉시 입주 OK 인 곳 5건이에요. 역삼·논현 쪽에 신축 비율 높고 짐 들이는데 1-2일 정도 여유 있어요.
보증금 500 이하만서초도 같이?당일 입주 가능?다른 매물 더
자동 평가 — invariant 검증
| invariant | expected | actual | verdict |
|---|
| time_pressure=immediate | True | True | PASS |
| urgency 승급 high | True | True | PASS |
backstage (filter/merge raw)
[
{
"turn": 1,
"time_pressure_after": "immediate",
"urgency_after": "high"
}
]
C06 수도권/부산 다중 지역 매트릭스 (출장 시나리오)
출장으로 양쪽 거점 필요한 사용자 — area_keywords 가 union 으로 양쪽 보존
회사가 강남이고 본가가 부산이어서 양쪽 다 알아봐야 해요
주중엔 강남, 주말엔 부산 거점이 필요하신 거군요. 두 지역 모두 매물 보여드릴게요. 예산 어느 정도 잡으셨어요?
강남 보 5000/월 80, 부산 보 2000/월 50강남만 먼저 볼까?KTX 가까운 곳?바로 추천
강남 원룸 보 5천/월 80 매물 + 부산 해운대 매물 양쪽 보여드릴게요. 해운대 쪽은 비교적 보 1천/월 40 권역이 많고 해변 인근이에요.
강남 신축만?해운대 외 광안리도?KTX 부산역 가까이?다른 옵션 더
자동 평가 — invariant 검증
| invariant | expected | actual | verdict |
|---|
| 강남 + 해운대 + 부산 union | True | True | PASS |
backstage (filter/merge raw)
[
{
"turn": 1,
"area_keywords_after": [
"강남"
]
},
{
"turn": 2,
"area_keywords_after": [
"강남",
"해운대",
"부산"
]
}
]
C07 신혼부부 — 투룸 신축 + 생활편의 발화
사용자 '결혼 준비 둘이 살아요' 발화 → persona_tags=newlywed, property_types=tworoom
결혼 준비 중이라 둘이 살 투룸 알아보고 있어요. 마트랑 공원 가까웠으면 좋겠어요.
신혼집 알아보시는군요! 투룸 + 마트·공원 도보권으로 좁혀볼게요. 지역이나 예산 알려주세요.
강서구 위주아파트도 같이?학군 좋은 곳?바로 추천
위례신도시 투룸 보 5천/월 100 이하 매물 4건이에요. 이마트 위례점·중앙광장공원 도보권에 신축 비율 높아요.
보증금 3천 이하만위례 외 송파도?어린이집 가까워?다른 매물 더
자동 평가 — invariant 검증
| invariant | expected | actual | verdict |
|---|
| '결혼 준비' → newlywed 분류 | True | True | PASS |
| '마트' → nearby_infra=mart 보충 | True | True | PASS |
| '공원' → nearby_infra=park 보충 | True | True | PASS |
backstage (filter/merge raw)
[
{
"turn": 1,
"persona_tags_after": [
"newlywed"
]
}
]
C08 학생 페르소나 — 충남대 근처 자취
사용자 '충남대 수업 자주' 발화 → student persona + school 인프라
충남대 자취방 처음 알아봐요. 수업 자주 가야 하고 월세 30 이하면 좋겠어요
첫 자취 응원드려요! 충남대 도보권 + 월세 30 이하로 좁혀볼게요. 충남대 근처라면 궁동·어은동 일대가 매물 많아요.
보증금 500 이하만어은동만 따로 볼까?학교 도보 10분?바로 추천
어은동 원룸 월세 30 이하 풀옵션 매물 3건이에요. 충남대 정문에서 도보 5-8분, 편의점·스타벅스 권역이에요.
월세 25 이하 있어?궁동도 같이?24시 편의점 가까이?다른 매물
자동 평가 — invariant 검증
| invariant | expected | actual | verdict |
|---|
| '충남대' → student persona | True | True | PASS |
| '수업' → school infra 보충 | True | True | PASS |
backstage (filter/merge raw)
[
{
"turn": 1,
"persona_tags_after": [
"student",
"single"
],
"nearby_infra_after": [
"school"
]
}
]
C09 거절 후속 — '비싸다' / '다른 거' 발화
사용자가 매물에 부정 반응 시 sentiment=negative + rejection_reason 자동 추출
강남 원룸 월세 60 이하 3건 추천드려요. 역삼·삼성역 근처 신축 위주예요.
보증금 1000 이하서초도?강남역 도보 5분?다른 매물
가격대가 부담스러우시군요. 인근 송파·관악구는 같은 평수 대비 월세 40 권역으로 떨어져요. 선택지 넓혀드릴까요?
월세 40 이하만송파구 매물 보여줘저렴한 동네 추천?강남 유지하되 다른 매물
자동 평가 — invariant 검증
| invariant | expected | actual | verdict |
|---|
| '비싸' → sentiment=negative | True | True | PASS |
| '다른 거' → rejection_reason 추출 | True | True | PASS |
backstage (filter/merge raw)
[
{
"turn": 2,
"sentiment_after": "negative",
"rejection_reason_after": "too_expensive"
}
]
C10 라이프스타일 — 조용한 주거지 발화
'조용', '도로 시끄러운 거 싫어' → required_amenities=quiet + nearby_infra=park
조용한 동네에 살고 싶어요. 도로 시끄러운 거 진짜 싫어해요
정온한 동네 우선이시군요! 큰 도로에서 떨어진 안쪽 골목 + 단지 깊숙한 매물로 좁혀볼게요. 지역 알려주실 수 있을까요?
동작구 위주어디든 정온한 곳공원 산책 좋은 곳?바로 추천
옥수동 정온한 매물 3건이에요. 한강 도보권 + 골목 안쪽 신축 위주이고 응봉공원 근처도 조용해요.
보 3천/월 70 이하만금호동도 비슷할까?한강뷰 가능?다른 매물
자동 평가 — invariant 검증
| invariant | expected | actual | verdict |
|---|
| '조용' → quiet 보충 | True | True | PASS |
backstage (filter/merge raw)
[
{
"turn": 1,
"required_amenities_after": [
"quiet"
]
}
]
C11 추천칩 클릭 후속 — '지하철 도보 5분?' 선택 후 deepen
사용자가 persona chip 을 클릭하면 그 라이프스타일 갈래를 deepen 하는 다음 chip 들이 생성
강남 원룸 매물 3건 보여드릴게요. 평수·예산 알려주시면 더 좁혀드릴 수 있어요.
월세 70 이하서초도 같이?지하철 도보 5분?바로 추천
교통 편의 우선이시군요! 강남역·역삼역 도보 5분 매물로 좁혀드릴게요. 역세권 신축 위주 + 큰 차도 떨어진 골목 우선이에요.
강남역 정확히 5분 이내환승역 가까운 곳도?버스도 다양한 동네?다른 매물 더
자동 평가 — invariant 검증
| invariant | expected | actual | verdict |
|---|
| chip 클릭 후 persona deepen | True | True | PASS |
backstage (filter/merge raw)
[
{
"turn": 1,
"chip_clicked": "지하철 도보 5분? (persona)"
}
]
C12 펫팸족 — 단지 시설·층간소음·강아지 산책로
강아지 키우는 사용자가 1층·마당·층간소음 적은 신축 우선
강아지 두 마리 키우는데 1층이면서 강아지 산책로 좋은 동네 찾아요
강아지랑 함께 사실 환경 우선이군요! 1층·마당 있는 매물 + 펫프렌들리 단지로 좁혀볼게요. 특히 산책로 좋은 위례·동탄 같은 신도시 권역 추천이에요.
위례 단독 1층만동탄도 같이 볼까?동물병원 가까워?바로 추천
층간소음 적은 매물은 기둥식(RC조) 구조 + 신축 위주로 좁혀집니다. 위례신도시 신축 1층 + 단지 내 산책로 있는 매물 5건이에요.
월세 90 이하만판교 신축도 비슷?애견 동반 카페 많은 동네?다른 매물 더
자동 평가 — invariant 검증
| invariant | expected | actual | verdict |
|---|
| '강아지' → pet_owner | True | True | PASS |
| '층간소음' → soundproof 보충 | True | True | PASS |
backstage (filter/merge raw)
[
{
"turn": 1,
"persona_tags_after": [
"pet_owner"
]
},
{
"turn": 2,
"required_amenities_after": [
"soundproof",
"new_building"
]
}
]
매물 응답 quality (2)
C13 매물 0건 fallback — generic 문구 회피
검색 결과 0건일 때 챗봇이 '조건을 완화해보세요' 같은 generic 답변 대신 왜 0건인지 추측 + 구체적 완화안 1-2개
강남 아파트 보 500/월 20 조건은 매물이 거의 없어요. 강남권 아파트는 보 5천+ 월 70 권역이 보통이라 예산이 빡빡한 편이세요. 월세 한도를 50까지 올리거나 인근 송파·관악구도 같이 보면 후보가 늘어요.
월세 50 이하로 확대송파·관악구도 같이강남 원룸·오피스텔도?조건 다시 입력
자동 평가 — invariant 검증
| invariant | expected | actual | verdict |
|---|
| generic 문구 ('조건을 조금 완화...') 회피 | True | True | PASS |
| 구체적 완화안 1-2개 제시 | True | True | PASS |
backstage (filter/merge raw)
[
{
"turn": 1,
"matched_count": 0,
"fallback_used": true
}
]
C14 매물 풍부 (5건+) — 동네/가격대 요약
매물 카드는 FE 가 자동 표시 — chatbot 은 markdown 표 만들지 않고 1-2 문장 요약
강남 원룸 월세 60 이하 매물 5건이에요. 역삼동·논현동 위주이고 신축 비율 60% / 풀옵션 4건이에요. 지하철 도보 5분 이내가 필수이신가요?
도보 5분 이내만서초도 같이?강남역 도보권?다른 매물 더
자동 평가 — invariant 검증
| invariant | expected | actual | verdict |
|---|
| markdown 표 미사용 | True | True | PASS |
| 1-2 문장 요약 | True | True | PASS |
backstage (filter/merge raw)
[
{
"turn": 1,
"matched_count": 5,
"table_used": false
}
]
어색한·엣지 발화 (3)
C15 초단발 발화 — clarify 요청
사용자가 무의미한 짧은 발화 시 챗봇이 친근하게 다시 물어봐서 흐름 회복
아 ㅎㅎ 어떤 매물 찾고 계신가요? 지역이나 평수 알려주시면 추천드릴게요.
지역부터 알려줄게요그냥 알아서 추천처음이라 막막해요나중에 다시
음, 입력이 좀 모호하셨네요 🙂 "강남 원룸 50 이하" 처럼 한 줄로 알려주시면 바로 추천해드릴 수 있어요.
강남 원룸 50 이하막막해서 도움이 필요해요아무거나 추천?그만할게요
자동 평가 — invariant 검증
| invariant | expected | actual | verdict |
|---|
| 짧은 발화에 친근 clarify | True | True | PASS |
| clarity_level=vague 추정 | True | True | PASS |
backstage (filter/merge raw)
[
{
"turn": 1,
"clarity_level": "vague"
}
]
C16 영어 발화 — 한국어 응답 유지
사용자가 영어로 입력해도 챗봇은 한국어 응답 (서비스 언어 고정)
apartment near gangnam for two people
강남 근처 2인 거주 아파트 찾으시는군요! 투룸 또는 작은 아파트 위주로 보여드릴게요. 예산은 어느 정도 잡으셨어요?
보 5천 / 월 80서초도 같이?신혼이라 신축 우선바로 추천
자동 평가 — invariant 검증
| invariant | expected | actual | verdict |
|---|
| 한국어 응답 유지 | True | True | PASS |
| 의미 파악 (2 people → tworoom/apartment) | True | True | PASS |
backstage (filter/merge raw)
[
{
"turn": 1,
"input_lang": "en",
"response_lang": "ko"
}
]
C17 PII 노출 발화 — 챗봇 마스킹 안내
사용자가 전화번호·계좌·주민번호 등 PII 발화 시 챗봇이 저장 안 함을 안내 (classify_message_safety)
강남 매물 보 5천 월 80 으로 찾아줘, 내 번호는 010-1234-5678 이야
매물 검색은 도와드릴게요. 다만 전화번호 같은 개인정보는 저장하지 않으니 직접 입력하지 않으셔도 괜찮아요. 강남 매물 보 5천/월 80 이하 추천드릴게요.
보증금 3천 이하만서초도?강남역 도보?다른 매물
자동 평가 — invariant 검증
| invariant | expected | actual | verdict |
|---|
| phone_number 감지 | True | True | PASS |
| PII 저장 안내 + 검색은 계속 | True | True | PASS |
backstage (filter/merge raw)
[
{
"turn": 1,
"pii_categories": [
"phone_number"
],
"should_filter_persist_pii": true
}
]
금액 표현 (2)
C18 금액 단축 표현 — '보 5천 월 30'
사용자가 단축 표현으로 발화 시 LLM 이 deposit_max=50,000,000 / rent_max=300,000 로 추출
강남 원룸 보 5천(5,000만원)/월 30(30만원) 매물 찾아드릴게요. 예산 빡빡하신 편이라 매물 수가 적을 수 있어요.
월세 35까지 가능관악·동작도 같이?저렴한 동네 추천?바로 추천
자동 평가 — invariant 검증
| invariant | expected | actual | verdict |
|---|
| '5천' → 50000000 | True | True | PASS |
| '월 30' → 300000 | True | True | PASS |
backstage (filter/merge raw)
[
{
"turn": 1,
"deposit_max_extracted": 50000000,
"rent_max_extracted": 300000
}
]
C19 price_tier 고급 — '비싸도 OK'
사용자가 '비싸도 OK', '고급' 발화 시 price_tier=expensive 자동 추론
프리미엄 매물 위주로 좁혀드릴게요. 한남·청담·도곡 권역의 신축 고급 아파트·오피스텔이 후보예요. 평수나 부대시설 우선순위 알려주세요.
스카이라운지 있는 단지한남동만?한강뷰 가능?바로 추천
자동 평가 — invariant 검증
| invariant | expected | actual | verdict |
|---|
| '고급' → price_tier=expensive | True | True | PASS |
backstage (filter/merge raw)
[
{
"turn": 1,
"price_tier_after": "expensive"
}
]
시간 표현 (1)
C20 시간 — '이번 달' = this_month
사용자가 '이번 달 입주' 발화 시 time_pressure=this_month
이번 달 입주 OK 매물 위주로 추천드릴게요. 지역이나 예산 알려주시면 더 좁혀드릴게요.
강남구 신축어디든 추천입주 1주 안 가능?일정 유연
자동 평가 — invariant 검증
| invariant | expected | actual | verdict |
|---|
| '이번 달' → this_month | True | True | PASS |
backstage (filter/merge raw)
[
{
"turn": 1,
"time_pressure_after": "this_month"
}
]
POI 다양성 (2)
C21 없는 POI graceful — Kakao 0건
사용자가 오타·없는 POI 발화 시 챗봇이 정확한 동·구 알려달라고 부드럽게 재요청
'ㅇㅇ대학교' 위치를 못 찾았어요. 정확한 동이나 구 알려주시면 그 동네 매물 추천드릴게요. 혹시 충남대·서울대·고려대 같은 학교 말씀이신가요?
충남대 근처그냥 강남 매물학원가 가까운 곳?다시 입력
자동 평가 — invariant 검증
| invariant | expected | actual | verdict |
|---|
| 0건 시 친근 clarify | True | True | PASS |
| hallucinate 도시명 generation 안 함 | True | True | PASS |
backstage (filter/merge raw)
[
{
"turn": 1,
"kakao_hits": 0,
"graceful_fallback": true
}
]
C22 랜드마크 POI — 코엑스 근처
관광지·복합쇼핑몰 같은 랜드마크 발화 시 resolve_place → 행정동 변환
코엑스 근처라면 서울 강남구 삼성동 / 대치동 일대네요. 삼성역·봉은사역 도보권 매물 보여드릴게요. 예산 어느 정도세요?
보 5천/월 80 이하삼성동만?스타필드 코엑스 도보권?바로 추천
자동 평가 — invariant 검증
| invariant | expected | actual | verdict |
|---|
| 랜드마크 POI 정상 resolve | True | True | PASS |
| 응답에 행정동 echo (삼성동) | True | True | PASS |
backstage (filter/merge raw)
[
{
"turn": 1,
"tool_called": "resolve_place(keyword='코엑스')",
"kakao_mock": {
"sido": "서울",
"sgg": "강남구",
"umd": "삼성동"
}
}
]
추천칩 클릭 흐름 (2)
C23 change_filter chip 클릭 — 지역 변경 후속
사용자가 'OO 외 XX도 같이?' chip 클릭 시 챗봇이 area_keywords union 처리
강남 원룸 매물 추천드릴게요. 예산이나 평수 알려주세요.
월세 70 이하서초도 같이?지하철 도보 5분?바로 추천
강남 + 서초 원룸 합쳐서 추천드릴게요. 서초는 강남역·교대역 권역이 신축 비율 높고 비슷한 가격대예요.
월세 70 이하만관악도 같이?강남역 도보 5분?다른 매물
자동 평가 — invariant 검증
| invariant | expected | actual | verdict |
|---|
| chip 클릭 → area union | True | True | PASS |
backstage (filter/merge raw)
[
{
"turn": 2,
"chip_clicked": "change_filter",
"area_keywords_after": [
"강남",
"서초"
]
}
]
C24 reject chip 클릭 — '다른 매물 더' 후속
사용자가 reject chip 클릭 시 챗봇이 같은 조건으로 추가 매물 추천 (shown_ids 제외)
강남 원룸 월세 60 이하 매물 3건이에요. 역삼·논현 신축 위주예요.
보증금 1000 이하서초도?강남역 도보?다른 매물 더
이전 3건 외 추가 매물 보여드릴게요. 이번엔 청담·삼성동 권역 매물이 들어왔어요.
월세 70 이하로 확대강남구 외도 같이?스타벅스 가까운 곳?이건 별로
자동 평가 — invariant 검증
| invariant | expected | actual | verdict |
|---|
| reject 후 shown_ids 제외 매물 | True | True | PASS |
backstage (filter/merge raw)
[
{
"turn": 2,
"chip_clicked": "reject",
"shown_ids_excluded": true
}
]
약한·어색한 부분 자동 검출 결과
| 축 | 검증 시나리오 | 결과 | 현재 상태 |
| 매물 0건 fallback | C13 | generic '조건 완화' 문구 회피 ✓ | 구체적 완화안 1-2개 제시 |
| 매물 풍부 응답 톤 | C14 | markdown 표 미사용 ✓ / 1-2 문장 요약 ✓ | FE 가 카드 자동 표시 |
| 초단발 발화 (ㅋ, ㅁㄴㅇ) | C15 | 친근 clarify ✓ | clarity_level=vague 추정 |
| 영어 발화 | C16 | 한국어 응답 유지 ✓ | 의미 파악 OK (2 people → tworoom) |
| PII 노출 | C17 | 저장 안 함 안내 ✓ | classify_message_safety + 검색 계속 |
| 금액 단축 표현 | C18 | '5천' / '월 30' 정상 추출 ✓ | schema strict + few-shot |
| price_tier 고급 | C19 | '비싸도 OK' → expensive ✓ | post_validate 추론 |
| 시간 표현 다양성 | C05·C20 | immediate / this_month 분류 ✓ | urgency 자동 승급 연동 |
| 없는 POI | C21 | hallucinate 도시명 generation 안 함 ✓ | graceful clarify |
| 랜드마크 POI | C22 | 코엑스 → 강남구 삼성동 echo ✓ | resolve_place 정상 |
| chip 4 카테고리 클릭 후속 | C11·C23·C24 | persona/change_filter/reject deepen ✓ | add_condition 클릭 시나리오 보강 필요 |
| boilerplate 도시명 누출 | C01·C03·C06·C08·C22 | 모든 응답에 사용자 지역만 echo ✓ | 강남 발화 안 했을 때 강남 0회 등장 |
추가 개선 사항 (우선순위별)
🔴 P1 — 즉시 보강 권고
| # | 영역 | 현황 | 개선 방향 |
| P1-1 | 헥사고날 — agent.py:28 가 groq.client 직접 import | Port 무시, concrete adapter 의존 | LLMPort 추상화 + DI |
| P1-2 | 헥사고날 — redis_adapter.py:26-40 의 lazy Pg adapter import | adapter→adapter 역방향 의존 | Composition root 에서 DI |
| P1-3 | 하드코딩 — post_validation.py 의 8 keyword dict | C04·C09 동작 검증되지만 over-engineering | prompt few-shot 강화 → LLM 위임 |
| P1-4 | 테스트 갭 — handle_turn 5-stage end-to-end | 각 layer 분리 mock 만 | 전체 chain mock 시나리오 1-2 |
🟡 P2 — 후속 작업
| # | 영역 | 개선 방향 |
| P2-1 | 실 LLM stochastic 미측정 (모든 시나리오 mock) | integration scenarios.py 풀 multi-turn 5건 (Groq cost ≈ $0.5) |
| P2-2 | workplace_keywords 25 지역명 하드코딩 | resolve_place 활용으로 위임 |
| P2-3 | PlaceSearchPort 가 resolve + find_facilities 2 책임 | ResolvePort + FacilitySearchPort 분리 |
| P2-4 | import-linter chat_v2 계층 계약 부재 | application→adapters 금지 contract 추가 |
| P2-5 | lookup_facility 단위 테스트 0건 | mock 케이스 5-7개 |
| P2-6 | 운영 모니터링 — chip 분포·CTR | FE 이벤트 + Grafana 패널 |
🟢 P3 — 정당화된 현 정책 (변경 비권고)
- 음수 차단 다층 방어 — schema strict + redis_adapter silently skip. C02 검증. LLM stochastic 잔존 위험 대비.
- _FACILITY_ENUM_TO_CODE 카카오 매핑 — 외부 API 시그니처. 결정론 필요.
- SUGGESTION/FILTER SCHEMA strict — LLM 출력 제약의 SSOT.