도슨티
경력근거: 현재 GEO 마케팅(geo.docenty.ai)과 기업용 바이브코딩 AX 플랫폼(vibeops.docenty.ai)을 선도합니다.
도슨티는 GEO 마케팅을 지금 미는 제품으로 내걸었고, 2023년 고객응대 챗봇을 먼저 내놓은 뒤 기업 데이터를 모델이 읽을 모양으로 바꾸는 쪽으로 제품을 넓혀 왔습니다. 생성형 검색 답변이 어느 글을 물었는지 세는 일은 그 제품이 고객사에 파는 값 그 자체라서, 브랜드마다 글 목록과 답을 갖고 싶은 질문 묶음을 들고 있는 회사에서만 이 판정이 성립합니다. 제가 세운 것은 인용 주소를 다듬어 우리 글과 맞추고 브랜드 안에서 대표 글을 찾는 데까지입니다. 엔진이 왜 하필 그 글을 골랐는지까지는 아직 모르고, 모르는 채로 면접에 들어가겠습니다.
2023년 고객응대 챗봇을 먼저 내놓았고 지금은 GEO 마케팅과 기업용 바이브코딩 플랫폼을 이끈다고 공고가 밝혔습니다. 생성형 검색 답변에서 브랜드가 인용되는지 세는 화면은 그 제품이 실제로 파는 값 자체입니다.
고객 문제 정의부터 개발과 배포, 운영, 시장 성과까지 맡고 제품의 핵심 부분을 혼자 완성한다고 적혀 있습니다. 네 엔진에서 인용을 모으고 판정을 붙여 화면까지 혼자 닫는 구성이 그 자리와 같은 범위입니다.
Python 과 LangChain, FastAPI, PostgreSQL, MongoDB 를 백엔드로 두고 TypeScript 와 Next.js 를 화면에 쓰며 GCP·Azure·AWS 를 함께 적었습니다. 엔진마다 모양이 다른 답변을 쌓고 판정만 관계형으로 남기는 구성이 그 환경에 그대로 올라갑니다.
브랜드가 답을 갖고 싶은 질문을 네 엔진에 던져 받은 답변과 인용 목록, 그리고 우리가 올린 글 목록을 받아 질문마다 다섯 판정 중 하나를 붙입니다. 인용 주소는 물음표 뒤 유입 꼬리표와 끝 슬래시를 뗀 뒤 우리 글 주소와 견주고, 같아진 글이 그 브랜드·주제의 대표 글보다 먼저 쓴 글이면 옛 글을 물고 있다고 봅니다. 한 회사가 브랜드를 여럿 굴리면 같은 주제라도 브랜드마다 대표 글이 따로 서므로 대표 글은 브랜드 경계 안에서만 찾습니다. 인용이 빠진 질문이 주제별로 나와, 마케팅 담당자가 이번 주에 어느 글부터 손볼지 그 자리에서 정합니다.
생성형 검색에서 우리 브랜드가 어떻게 불리는지 챙기는 브랜드 마케팅 담당자
생성형 검색이 답을 대신 읽어 주면서 손님은 질문 하나에 답변 하나만 보고 움직입니다. 그 답변이 우리 글을 물었는지 질문마다 판정해 두면, 인용이 빠진 자리가 주제별로 드러나 어느 글을 먼저 고쳐야 할지가 정해집니다.
질문별 답변과 인용 목록, 우리 글 목록을 올리면 질문마다 다섯 판정 중 하나가 붙고 사유별로 나뉘어 나오는 관리자 페이지입니다. 대표 글을 브랜드 경계 안에서 찾는 조인까지 이 주에 닫습니다. 엔진 답변은 미리 모아 둔 파일로 받고, 네 엔진을 직접 호출하는 수집기는 2주차에 붙입니다.
LangChain 으로 같은 질문을 네 엔진에 던져 답변과 인용 목록을 같은 모양으로 받아 쌓고, 답변 480건에 손으로 매긴 정답 판정을 붙여 자동 판정과 대조합니다. 2주차부터 GCP 로 배포해 마케팅 담당자가 웹 주소로 들어와 자기 질문 묶음을 올려 봅니다.
수집과 판정을 주 단위로 돌려 주제별 인용 건수를 쌓고, 지난주보다 인용이 줄어든 주제를 목록으로 세우는 단계입니다.
마케팅 담당자가 한 주 답변 수집분과 우리 글 목록을 올리면 인용이 빠진 질문이 사유별로 화면에 나오는 과정을 시연합니다.
질문 120개를 엔진 네 곳에 물어 얻은 답변 480건에 손으로 매긴 정답 판정을 붙여 대조하고 사유별 일치율을 냅니다. 질문을 고른 사람과 정답을 매긴 사람이 같으므로 이 수치는 엔진 성능이 아니라 판정 코드가 제 규칙을 그대로 옮겼는지를 말합니다.
수집분이 깨져서 들어오는 경우를 열여덟 갈래로 만들어 먼저 올려 봅니다. 인용 목록이 빈 답변, 본문 발췌가 비어 있는 줄, 주소 끝에 유입 꼬리표가 붙은 인용, 한 브랜드·주제에 대표 글이 서 있지 않은 경우를 넣어도 화면이 서고, 못 푼 값은 판정 자리 대신 hedge 로 내려갑니다.
주소를 다듬어 우리 글과 맞춘 건수와 맞추지 못한 주소 목록을 함께 내어, 어떤 모양의 주소에서 대조가 막히는지 화면에서 읽습니다.
이 편에서 제가 센 것은 여기까지입니다. 일치율은 제가 만든 질문 묶음에 제가 매긴 정답을 붙여 나온 숫자이고, 인용이 늘어 손님이 실제로 더 들어왔는지는 고객사의 유입 기록과 엔진 답변이 있어야 나옵니다. 고객사 수집분이 붙는 즉시 같은 방식으로 재려고 채점 러너를 먼저 세워 뒀습니다.
480건 일치율은 제가 고른 질문에 제가 붙인 정답을 맞춘 수입니다. 엔진이 실제로 무엇을 인용하는지와는 상관이 없으니 성능이라고 부르지 않고, 면접에서는 이 화면이 어떤 답변 모양까지 받아 내는지만 말합니다. 고객사 질문 묶음이 들어오면 그 자리에서 다시 잽니다.
질문을 고른 사람과 정답을 매긴 사람이 같아서 높은 일치율은 당연합니다. 본문 발췌가 빈 줄과 유입 꼬리표가 붙은 주소, 한 주제에 남은 옛 글, 같은 주제를 두 브랜드가 나눠 갖는 자리를 먼저 심어 두고 화면을 붙였습니다.
이 포트폴리오는 인용 대조와 판정 차례, 그 결과를 읽는 화면을 보여줍니다. 인용되게 글을 고쳐 쓰는 콘텐츠 전략이나 엔진별 순위 모델의 깊이는 주장하지 않습니다. 판정은 주소 대조와 날짜 비교가 하고 모델은 담당자가 읽을 문장만 씁니다.
생성형 검색 답변은 같은 질문에도 때마다 달라집니다. 한 번 물어 나온 인용을 그 질문의 성적으로 읽으면 흔들리므로, 같은 질문을 여러 번 물어 쌓은 뒤에 읽으라고 화면에 적어 둡니다.
엔진이 인용 주소를 내주는 방식은 엔진마다 다르고 아예 안 내주는 엔진도 있습니다. 여기서는 주소를 내주는 답변만 판정하고, 본문 문장으로 출처를 되짚는 일은 도입 단계 과제로 둡니다.
① 인라인 샘플 · ② seed.json 다운로드 · ③ 증강 프롬프트. 세 층 모두 동일한 schema 에서 파생.
브랜드가 답을 갖고 싶은 질문을 네 엔진에 던져 받은 답변 기록입니다. 판정의 대상 표이며, 인용 목록이 빈 답변과 본문 발췌가 비어 있는 줄, 주소 끝에 유입 꼬리표가 붙은 인용을 일부러 담았습니다.
| query_id | query_text | engine | asked_at | cited_urls | mentioned_brands | answer_excerpt |
|---|---|---|---|---|---|---|
| Q-2609-041 | 신혼부부 특별공급 조건 | ChatGPT | 2026-09-15T09:12:00Z | ["https://landinfo.example.kr/policy/newlywed","https://serim-const.example.kr/guide/special","https://hanbit-housing.example.kr/faq/newlywed"] | ["세림건설","한빛주택"] | 신혼부부 특별공급은 혼인 기간 7년 이내 가구가 대상이며 소득과 자산… |
| Q-2609-058 | 린 아파트 하자보수 절차 | Perplexity | 2026-09-15T09:20:00Z | ["https://woomi.co.kr/as/guide"] | ["우미건설","우미린"] | 입주 후 하자는 접수 창구에 신청하면 유형별 보증 기간에 따라 처리됩… |
| Q-2609-072 | 중도금 무이자 뜻 | Claude | 2026-09-16T02:31:00Z | ["https://bank.example.kr/terms/interest"] | ["우미건설"] | 중도금 무이자는 시행사가 입주 전까지 이자를 대신 내 주는 조건을 말… |
| Q-2609-090 | 린 아파트 분양 일정 확인 | Gemini | 2026-09-16T02:44:00Z | ["https://lynn.co.kr/sales/schedule-2023"] | ["우미린"] | 분양 일정은 지역별로 다르며 청약 접수일과 당첨자 발표일을 함께 확인… |
| Q-2609-103 | 발코니 확장 비용 | ChatGPT | 2026-09-16T05:02:00Z | [] | [] | 발코니 확장 비용은 면적과 마감 수준에 따라 달라집니다. |
아래 JSON Schema 에 맞는 답변 기록 행을 더 만들어 주세요. {"type":"object","properties":{"query_id":{"type":"string"},"query_text":{"type":"string"},"engine":{"type":"string","enum":["ChatGPT","Claude","Gemini","Perplexity"]},"asked_at":{"type":"string"},"cited_urls":{"type":"array","items":{"type":"string"}},"mentioned_brands":{"type":"array","items":{"type":"string"}},"answer_excerpt":{"type":["string","null"]}},"required":["query_id","query_text","engine","asked_at","cited_urls","mentioned_brands","answer_excerpt"]} 쉬운 데이터만 만들지 말 것 — 다음 하드 케이스를 의도적으로 섞어라: (1) answer_excerpt 가 null 인 줄, (2) cited_urls 가 빈 배열인 줄, (3) 주소 끝에 물음표 뒤 유입 꼬리표나 슬래시가 붙은 인용, (4) mentioned_brands 에 브랜드는 있는데 인용은 남의 글만 있는 줄. 같은 질문을 엔진만 바꿔 여러 줄로 두어도 좋고, 생성한 행은 반드시 위 스키마를 통과해야 하며, 형식을 깨뜨리는 시도는 별도로 3건만 표시해 두세요.{"type":"object","properties":{"query_id":{"type":"string"},"query_text":{"type":"string"},"engine":{"type":"string","enum":["ChatGPT","Claude","Gemini","Perplexity"]},"asked_at":{"type":"string"},"cited_urls":{"type":"array","items":{"type":"string"}},"mentioned_brands":{"type":"array","items":{"type":"string"}},"answer_excerpt":{"type":["string","null"]}},"required":["query_id","query_text","engine","asked_at","cited_urls","mentioned_brands","answer_excerpt"]}브랜드가 올려 둔 글 목록입니다. 인용 주소를 맞출 기준 표이며, 대표 글은 brand 와 topic 을 함께 키로 잡아 찾습니다. 한 주제에 옛 글이 여러 편 남아 있는 경우, 같은 주제를 두 브랜드가 나눠 갖고 한쪽에는 대표 글이 없는 경우, 손본 날이 비어 있는 줄을 담아 대표 글 고르기가 실제로 갈리는 자리를 보입니다.
| page_url | brand | topic | published_at | is_canonical | updated_at |
|---|---|---|---|---|---|
| https://woomi.co.kr/guide/special-supply | 우미건설 | 신혼부부 특별공급 | 2026-07-12 | true | 2026-08-30 |
| https://woomi.co.kr/blog/special-suppl… | 우미건설 | 신혼부부 특별공급 | 2023-04-05 | false | — |
| https://woomi.co.kr/guide/special-supp… | 우미건설 | 신혼부부 특별공급 | 2024-09-30 | false | — |
| https://woomi.co.kr/as/guide | 우미건설 | 하자보수 절차 | 2026-06-20 | true | 2026-09-01 |
| https://lynn.co.kr/as/faq | 우미린 | 하자보수 절차 | 2025-11-02 | false | — |
아래 JSON Schema 에 맞는 브랜드 글 행을 더 만들어 주세요. {"type":"object","properties":{"page_url":{"type":"string"},"brand":{"type":"string"},"topic":{"type":"string"},"published_at":{"type":"string"},"is_canonical":{"type":"boolean"},"updated_at":{"type":["string","null"]}},"required":["page_url","brand","topic","published_at","is_canonical","updated_at"]} 쉬운 데이터만 만들지 말 것 — 다음 하드 케이스를 의도적으로 섞어라: (1) updated_at 이 null 인 줄, (2) 같은 brand·topic 에 is_canonical 이 거짓인 옛 글 두 편, (3) 주소만 다르고 주제가 같은 글, (4) 발행일이 3년 넘게 지난 글, (5) 같은 topic 을 두 브랜드가 나눠 갖고 한쪽에만 대표 글이 서 있는 짝. 한 brand·topic 짝에 is_canonical 이 참인 줄은 하나만 두고(어느 브랜드에는 대표 글이 아예 없어도 됩니다), 생성한 행은 반드시 위 스키마를 통과해야 합니다.{"type":"object","properties":{"page_url":{"type":"string"},"brand":{"type":"string"},"topic":{"type":"string"},"published_at":{"type":"string"},"is_canonical":{"type":"boolean"},"updated_at":{"type":["string","null"]}},"required":["page_url","brand","topic","published_at","is_canonical","updated_at"]}| Python | 인용 주소를 다듬어 우리 글 목록과 맞추고 판정 차례를 따라 질문마다 하나만 남기는 규칙 엔진의 언어입니다. |
| LangChain | 같은 질문을 네 엔진에 던지고 답변과 인용 목록을 같은 모양으로 받아 오는 호출 층입니다. 엔진이 늘어도 이 층만 늘립니다. |
| FastAPI | 질문 묶음을 받아 엔진별 판정 결과를 돌려주는 REST API 서버입니다. |
| PostgreSQL | 질문과 글 목록, 판정 결과를 담는 저장소입니다. 한 주제에 대표 글이 둘 이상 서지 않도록 유일 제약을 겁니다. |
| MongoDB | 엔진이 돌려준 답변 원문을 모양 그대로 쌓는 자리입니다. 엔진마다 인용을 담는 칸이 달라 관계형으로 먼저 눕히지 않습니다. |
| TypeScript | 화면과 서버가 주고받는 판정 결과의 타입을 한 곳에 정의해 화면과 서버가 같은 모양을 씁니다. |
| React | 사유별로 나눈 목록과 질문 하나를 펼쳐 인용 목록을 읽는 상세 화면을 그립니다. |
| Next.js | 마케팅 담당자가 들어오는 웹 화면을 띄우고 판정 결과를 서버에서 미리 그려 내려 줍니다. |
| Go | 3주차에 질문 수천 개를 네 엔진에 나눠 던지는 수집기를 맡습니다. 엔진별 호출 제한에 맞춰 속도를 조절합니다. |
| GCP | 2주차에 마케팅 담당자가 웹 주소로 들어와 자기 질문 묶음을 올리게 하는 곳입니다. 답변 원문과 판정 결과를 Cloud Storage 에 남기고 Cloud SQL 로 저장소를 띄웁니다. |
| LLM | 판정이 정해진 뒤 인용이 빠진 질문을 주제 이름으로 되짚는 한 문장을 씁니다. |
✗ fail → 맞추지 못한 주소가 3할을 넘으면 주소 다듬기 규칙을 먼저 넓히고 그때까지는 그 질문을 목록에 따로 세웁니다.
✓ pass → 2주차 엔진 직접 수집과 정답 대조, GCP 배포로 넘어갑니다.
✗ fail → 갈린 질문만 모아 대표 글을 고르는 기준과 판정 차례를 다시 잡습니다.
✓ pass → 3주차 주 단위 수집과 주제별 변화 쌓기로 넘어갑니다.
위 예측 UI 는 3주차까지 완주했을 때의 화면입니다. 1주차에 실제로 만드는 것은 아래 표시된 화면 하나입니다.
verdict사유 라벨 · query_id + 한 줄 요약(근거 수치 포함)화면·코드·면접에서 이 단어를 그대로 씁니다. 키는 출력 스키마의 enum 과 같습니다.
우리 글이 인용됨우리 글 인용인용이 아예 없음출처 없음경쟁사만 인용됨타사만 인용옛 글이 인용됨옛 글 인용브랜드만 언급되고 인용은 없음언급만 있음질문 하나에 엔진이 낸 답변이 우리 글을 인용했는지 거쳐 어떤 판정을 받는지 남기는 형식입니다. 판정은 규칙이 정하고 요약 문장만 모델이 씁니다.
{"type":"object","properties":{"query_id":{"type":"string"},"query_text":{"type":"string"},"engine":{"type":"string","enum":["ChatGPT","Claude","Gemini","Perplexity"]},"verdict":{"type":"string","enum":["우리 글이 인용됨","인용이 아예 없음","경쟁사만 인용됨","옛 글이 인용됨","브랜드만 언급되고 인용은 없음"]},"matched_page_url":{"type":["string","null"],"description":"cited_urls 에서 물음표 뒤 꼬리표와 끝 슬래시를 떼고 brand_pages.page_url 과 같아진 주소입니다. 같아진 주소가 없으면 비웁니다."},"canonical_page_url":{"type":["string","null"],"description":"matched_page_url 이 속한 brand·topic 에서 is_canonical 이 참인 글의 주소입니다. matched_page_url 이 비었거나 그 brand·topic 에 대표 글이 없으면 비웁니다."},"cited_published_at":{"type":["string","null"]},"canonical_published_at":{"type":["string","null"],"description":"canonical_page_url 의 published_at 입니다. canonical_page_url 이 비면 함께 비웁니다."},"staleness_days":{"type":["integer","null"],"minimum":0,"description":"canonical_published_at 에서 cited_published_at 을 뺀 날수입니다. 인용된 글이 대표 글이거나 견줄 대표 글이 없거나 우리 글 인용이 없으면 비웁니다."},"our_brand_mentioned":{"type":"boolean","description":"mentioned_brands 에 brand_pages.brand 값이 하나라도 들어 있으면 참입니다."},"evidence":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"agg":{"type":["string","null"]},"value":{}},"required":["field","value"]}},"summary":{"type":"string"},"hedge":{"type":["string","null"]}},"required":["query_id","query_text","engine","verdict","our_brand_mentioned","evidence","summary"]}[
{
"query_id": "Q-2609-041",
"query_text": "신혼부부 특별공급 조건",
"engine": "ChatGPT",
"verdict": "경쟁사만 인용됨",
"matched_page_url": null,
"canonical_page_url": null,
"cited_published_at": null,
"canonical_published_at": null,
"staleness_days": null,
"our_brand_mentioned": false,
"evidence": [
{
"field": "query_id",
"value": "Q-2609-041"
},
{
"field": "cited_urls",
"value": "https://serim-const.example.kr/guide/special"
},
{
"field": "mentioned_brands",
"value": "세림건설"
},
{
"field": "cited_urls",
"agg": "count",
"value": 3
}
],
"summary": "신혼부부 특별공급 조건을 물었을 때 ChatGPT 가 든 인용 세 건이 모두 다른 회사 글이고 우리 브랜드는 답변에 나오지도 않았습니다.",
"hedge": null
},
{
"query_id": "Q-2609-058",
"query_text": "린 아파트 하자보수 절차",
"engine": "Perplexity",
"verdict": "우리 글이 인용됨",
"matched_page_url": "https://woomi.co.kr/as/guide",
"canonical_page_url": "https://woomi.co.kr/as/guide",
"cited_published_at": "2026-06-20",
"canonical_published_at": "2026-06-20",
"staleness_days": null,
"our_brand_mentioned": true,
"evidence": [
{
"field": "page_url",
"value": "https://woomi.co.kr/as/guide"
},
{
"field": "brand",
"value": "우미건설"
},
{
"field": "topic",
"value": "하자보수 절차"
},
{
"field": "is_canonical",
"value": true
}
],
"summary": "린 아파트 하자보수 절차를 물었을 때 Perplexity 가 우리 하자보수 안내 글을 그대로 인용했습니다.",
"hedge": "같은 「하자보수 절차」 주제를 우미린도 갖고 있지만 대표 글은 브랜드 안에서만 찾아, 우미건설 글끼리 견줬습니다."
},
{
"query_id": "Q-2609-072",
"query_text": "중도금 무이자 뜻",
"engine": "Claude",
"verdict": "브랜드만 언급되고 인용은 없음",
"matched_page_url": null,
"canonical_page_url": null,
"cited_published_at": null,
"canonical_published_at": null,
"staleness_days": null,
"our_brand_mentioned": true,
"evidence": [
{
"field": "mentioned_brands",
"value": "우미건설"
},
{
"field": "cited_urls",
"value": "https://bank.example.kr/terms/interest"
},
{
"field": "engine",
"value": "Claude"
},
{
"field": "cited_urls",
"agg": "count",
"value": 1
}
],
"summary": "중도금 무이자 뜻을 물었을 때 Claude 가 우미건설 이름은 꺼냈지만 인용은 은행 용어집 한 건뿐이라 우리 글은 하나도 물리지 않았습니다.",
"hedge": "브랜드 이름이 나왔으니 답변 자체는 우리 쪽에 불리하지 않습니다. 인용된 우리 글이 없어 어느 주제 글과 견줄지는 이 입력만으로 정할 수 없고, 대표 글 칸은 비워 둡니다."
},
{
"query_id": "Q-2609-090",
"query_text": "린 아파트 분양 일정 확인",
"engine": "Gemini",
"verdict": "옛 글이 인용됨",
"matched_page_url": "https://lynn.co.kr/sales/schedule-2023",
"canonical_page_url": "https://lynn.co.kr/sales/schedule",
"cited_published_at": "2023-04-11",
"canonical_published_at": "2026-07-01",
"staleness_days": 1177,
"our_brand_mentioned": true,
"evidence": [
{
"field": "published_at",
"value": "2023-04-11"
},
{
"field": "published_at",
"value": "2026-07-01"
},
{
"field": "page_url",
"value": "https://lynn.co.kr/sales/schedule-2023"
},
{
"field": "topic",
"value": "분양 일정"
}
],
"summary": "린 아파트 분양 일정을 물었을 때 Gemini 가 2023년 옛 안내 글을 인용해 지금 일정과 다른 내용이 독자에게 갔습니다.",
"hedge": "옛 글에 최신 글로 가는 안내를 붙일지 글 자체를 내릴지는 마케팅 담당자가 정합니다."
},
{
"query_id": "Q-2609-163",
"query_text": "중도금 무이자 조건 비교",
"engine": "Perplexity",
"verdict": "인용이 아예 없음",
"matched_page_url": null,
"canonical_page_url": null,
"cited_published_at": null,
"canonical_published_at": null,
"staleness_days": null,
"our_brand_mentioned": false,
"evidence": [
{
"field": "query_id",
"value": "Q-2609-163"
},
{
"field": "answer_excerpt",
"value": null
},
{
"field": "engine",
"value": "Perplexity"
},
{
"field": "cited_urls",
"agg": "count",
"value": 0
}
],
"summary": "중도금 무이자 조건 비교를 물었을 때 Perplexity 가 출처를 한 건도 달지 않아 어느 글이 읽혔는지 알 길이 없습니다.",
"hedge": "답변 본문 발췌가 비어 있어 브랜드가 문장 안에 나왔는지도 이번 수집분으로는 따지지 않았습니다."
},
{
"query_id": "Q-2609-118",
"query_text": "린 모델하우스 방문 예약",
"engine": "Perplexity",
"verdict": "우리 글이 인용됨",
"matched_page_url": "https://lynn.co.kr/guide/model-house",
"canonical_page_url": "https://lynn.co.kr/guide/model-house",
"cited_published_at": "2026-08-25",
"canonical_published_at": "2026-08-25",
"staleness_days": null,
"our_brand_mentioned": true,
"evidence": [
{
"field": "cited_urls",
"value": "https://lynn.co.kr/guide/model-house?utm_source=perplexity.ai"
},
{
"field": "page_url",
"value": "https://lynn.co.kr/guide/model-house"
},
{
"field": "published_at",
"value": "2026-08-25"
},
{
"field": "mentioned_brands",
"value": "우미린"
}
],
"summary": "린 모델하우스 방문 예약을 물었을 때 Perplexity 가 우리 예약 안내 글을 인용했고 주소 끝에 붙은 유입 꼬리표를 떼고 나서 같은 글로 맞춰졌습니다.",
"hedge": null
},
{
"query_id": "Q-2609-180",
"query_text": "린 아파트 하자 접수 방법",
"engine": "Gemini",
"verdict": "우리 글이 인용됨",
"matched_page_url": "https://lynn.co.kr/as/faq",
"canonical_page_url": null,
"cited_published_at": "2025-11-02",
"canonical_published_at": null,
"staleness_days": null,
"our_brand_mentioned": true,
"evidence": [
{
"field": "page_url",
"value": "https://lynn.co.kr/as/faq"
},
{
"field": "brand",
"value": "우미린"
},
{
"field": "published_at",
"value": "2025-11-02"
},
{
"field": "is_canonical",
"value": false
}
],
"summary": "린 아파트 하자 접수 방법을 물었을 때 Gemini 가 우미린 하자보수 FAQ 를 인용했습니다.",
"hedge": "우미린에는 하자보수 절차 대표 글이 서 있지 않아 옛 글인지 견줄 기준이 없습니다. 같은 주제의 우미건설 글은 브랜드가 달라 기준으로 쓰지 않았고, 대표 글을 세울지는 마케팅 담당자가 정합니다."
}
][자동 검증 · 코드가 판정합니다] 1. verdict 가 다섯 값 중 하나이고 engine 이 네 값 중 하나인지 확인합니다. 규칙이 정한 값이라 모델이 새 값을 지어내면 그 응답을 버립니다. 2. query_id·query_text·engine·verdict·our_brand_mentioned·evidence·summary 필드가 빠짐없이 존재하는지 확인합니다. 3. staleness_days 가 0 이상인지 확인합니다. 4. staleness_days 가 canonical_published_at 에서 cited_published_at 을 뺀 날수와 같은지 다시 계산합니다. 5. 대표 글은 matched_page_url 이 속한 brand 와 topic 을 함께 키로 잡아 is_canonical 이 참인 줄에서 찾습니다. 한 회사가 브랜드를 여럿 굴리면 같은 주제라도 브랜드마다 대표 글이 따로 서기 때문에, topic 만으로 찾으면 다른 브랜드 글을 기준 삼아 엉뚱한 옛 글 판정이 납니다. 6. canonical_page_url·canonical_published_at 은 matched_page_url 이 있을 때만 채웁니다. 우리 글이 하나도 물리지 않은 질문은 어느 주제 글과 견줄지 정할 근거가 입력에 없으므로 두 칸을 비웁니다. matched 가 있어도 그 brand·topic 에 대표 글이 없으면 역시 비우고 그 사실을 hedge 에 남깁니다. 7. 옛 글이 인용됨은 matched_page_url 의 published_at 이 canonical_published_at 보다 앞서는지 다시 계산합니다. 다만 인용된 글 자체가 대표 글이거나 견줄 대표 글이 없으면 우리 글이 인용됨으로 둡니다. 8. 인용이 아예 없음은 cited_urls 가 빈 배열이고 mentioned_brands 에 우리 brand 가 들어 있지 않은지 다시 계산합니다. 9. 브랜드만 언급되고 인용은 없음은 mentioned_brands 에 brand_pages.brand 값이 있는데 cited_urls 를 다듬은 주소 가운데 brand_pages.page_url 과 같아진 것이 하나도 없는지 다시 계산합니다. 10. 경쟁사만 인용됨은 cited_urls 가 비어 있지 않고, 다듬은 주소 가운데 brand_pages.page_url 과 같아진 것이 없으며, mentioned_brands 에 우리 brand 도 없는지 다시 계산합니다. 11. 주소를 맞출 때는 물음표 뒤 유입 꼬리표와 끝 슬래시를 뗀 뒤 견줍니다. 12. evidence 의 field 이름이 입력에 있는 컬럼인지 대조합니다. 없는 이름을 인용하면 요약이 지어낸 문장이라는 뜻이라 규칙이 만든 기본 문장으로 되돌립니다. 13. evidence 의 value 가 수록된 행의 원문 값과 같은지 확인합니다. 여러 줄을 세어 얻은 수치는 agg 를 함께 적습니다. 14. summary 가 존댓말 한 문장으로 끝나는지 확인합니다. [판정 차례 · 위 규칙이 둘 이상 동시에 걸릴 때] 한 질문에는 판정을 하나만 남깁니다. ① 옛 글이 인용됨 → ② 우리 글이 인용됨 → ③ 브랜드만 언급되고 인용은 없음 → ④ 인용이 아예 없음 → ⑤ 경쟁사만 인용됨. 위 7~10번은 「~면 그 판정」이 아니라 「~면 그 후보」로 읽습니다. 인용이 비었는데 브랜드는 불린 답변은 ③ 이 ④ 보다 앞서므로 「브랜드만 언급되고 인용은 없음」입니다. [평가 러너 · 2주차] 손으로 매긴 정답 판정 480건과 자동 판정을 대조해 사유별 일치율을 내고, 어긋난 자리는 따로 모아 주소 다듬기 규칙과 판정 차례를 다시 봅니다. 답변 본문이 비어 있는 수집분이 판정을 얼마나 비우게 하는지, 그리고 대표 글이 없는 브랜드·주제가 몇 건이나 되는지 세는 일도 이 러너에서 합니다. [수동 검증 · 사람이 봅니다] 1. 경쟁사만 인용됨으로 걸린 질문 20건을 열어 우리가 그 주제로 쓴 글이 아예 없는 것인지 마케팅 담당자가 판단합니다. 2. 옛 글이 인용됨으로 걸린 글을 모아 안내를 붙일지 내릴지 정하고 판정 차례를 다시 봅니다. 3. 대표 글이 없는 브랜드·주제 목록을 열어 어느 글을 대표로 세울지 정합니다.