마케터 Agent는 후보 28개를 어떻게 찾아 3개로 줄일까
수집 인벤토리, 선별, 자격 검사, 편집 규칙과 주제 검증이 하루 한 번 도는 구조
마케터 Agent는 처음에 메일을 쓰는 일로 시작했어요. 부동산 상담 Agent인 복덕방 가재와 상담했던 고객의 관심 지역에서, 다시 연락할 만한 변화를 찾아 메일 초안을 만드는 일이었습니다.
그런데 메일은 이미 상담한 사람에게만 닿아요. 가재를 아직 모르는 사람에게 닿으려면 블로그와 스레드 같은 채널에 매일 낼 콘텐츠가 있어야 했습니다. 그 일을 같은 마케터 Agent에게 맡겼어요. 지금은 하루에 한 번 후보를 모아 거르고, 운영자 앞에 카드로 올립니다.

아침에 올라오는 건 완성된 글이 아니라 후보 카드입니다.
쓰는 것보다 고르는 게 어렵습니다
처음 그림은 단순했습니다. 주제를 주면 블로그 글과 카드뉴스가 나오는 글쓰기 도구였어요. 그런데 매일 돌려 보니 막히는 곳은 쓰기가 아니었어요. 어려운 건 쓰기 앞뒤의 검토였습니다. 오늘 낼 만한 주제인지, 그 주제를 말해도 되는 근거가 있는지 확인하는 일이에요.
한 번 틀린 주장은 채널마다 복사돼 퍼져요. 그래서 목표를 쓰는 속도가 아니라, 내보내도 되는 것만 사람 앞에 올리는 데 뒀습니다. 이 구조는 세 주체가 나눠 맡아요. Agent는 모델이 판단하고 쓰는 쪽이고, 코드는 규칙으로 확인하고 막는 쪽이에요. 사람은 운영자입니다.
Agent는 후보를 고르고 근거를 인용하고 문안을 쓴다. 코드는 근거를 확인하고 게시를 막는다. 사람은 내보낼지 결정한다.
후보를 매번 검색하면 결과가 흔들립니다
후보는 Agent가 검색해서 찾지 않아요. 수집기가 하루 종일 쌓아 둔 기사와 공식 발표를 아침 8시 50분에 준비해 두고, 9시에 도는 실행이 그 인벤토리를 읽으면서 BigValue 데이터 지표는 그때 DB에서 조회합니다. 기사로는 시의성을 판단하고, 정책을 단정해서 말할 때는 공식 발표를 근거로 삼아요. 이 인벤토리에는 해시를 붙여서 같은 입력은 같은 결과를 내게 했습니다.
| 출처 | 모으는 방식 |
|---|---|
| 기사 | 고정 질의 24개(주제 15, 변화 신호 9)로 질의당 최신 50건씩 모은다 |
| 공식 발표 | 기관 RSS와 브리핑룸 목록에서 최근 규정 이벤트를 모은다 |
| 청약 공고 | 시장 데이터에 올라온 공식 주소만 최대 12건, 마감일이 없거나 지난 건은 제외한다 |
| BigValue 데이터 | 거래 건수 상위 단지, 시군구 가격 순위, 같은 단지의 면적대 차액, 마감 임박 공공주택, 금리 지표를 DB에서 조회한다 |
기사는 모으는 단계에서 먼저 걸러집니다. 규칙으로 거르고, Agent의 관련도 판정(60점 이상)을 거친 뒤, 임베딩 유사도로 같은 이야기를 하루 1건으로 줄여요. 데이터 후보는 변화를 감지해서 만드는 게 아니라, 순위와 차액 같은 지표를 조회해서 가져오는 방식입니다.
같은 이슈의 기사는 제목을 비교해 사건 단위로 묶어요. 흔한 단어보다 드문 단어에 더 큰 가중치를 주는 방식(IDF)으로 유사도를 계산하고, 0.25 이상이거나 드문 단어가 2개 겹치면 같은 사건으로 봅니다.
이날 실행에서는 이 인벤토리에서 후보 28개가 나왔어요. 기사 15건, 공식 발표와 공고 8건, BigValue 데이터 5건입니다. 같은 사건을 다룬 기사는 하나로 묶고, 마감일이 없는 공고는 빼고, 데이터는 준비가 끝난 지표만 올린 결과예요.
독자 수요 22건은 상담 키워드와 블로그 검색어에서 나온 퍼스트파티 수요 신호예요. 후보가 되지는 않고, 데이터 후보에 질문을 연결하는 데 쓰입니다. 이 구간이 콘텐츠 소재 퍼널의 입구예요.
후보 28개를 3개로 줄여야 합니다
후보는 단계마다 다른 기준으로 걸러집니다. 선별은 Agent가 한 번 하고, 자격 검사는 코드가, 편집 규칙·주제 검증은 검수 Agent가 확인해요.

28개 가운데 24개는 선별 한 곳에서 빠집니다. 뒤 단계는 남은 4개가 말해도 되는 후보인지를 확인합니다.
1. 선별: 후보를 한 번에 고릅니다
선별은 비용이 낮은 모델로 한 번만 돌려요. 문안을 쓰는 서술은 따로 한 번 더 호출해요. 입력은 후보마다 출처 유형(기사, 공식, 데이터), 매체, 발행일, 경과 일수, 마감까지 남은 일수, 제목, 240자 이내 발췌입니다. 출력은 후보마다 이런 모양이에요.
{
"id": "c07",
"include": true,
"confidence": 0.86,
"evidence_quote": "…원문에 실제로 있는 문장…",
"granularity": "한 지역 · 한 물건",
"archetype": "…",
"reason": "…포함하는 이유 한 줄…"
}Agent가 낸 값을 그대로 믿지 않아요. 확신도가 0.8 미만이거나 인용한 문장이 원문에 없으면 코드가 목록에서 뺍니다. 마지막 확정도 코드가 해요. 출처 유형마다 뽑을 수 있는 개수에 한도를 둬요. 기사 2개, 공식과 데이터는 각각 최대 2개까지라서 한쪽으로 쏠리지 않아요. 전체 상한은 5개이고, 이 실행에서는 4개가 남았습니다.
위 JSON의 granularity는 후보가 다루는 범위를 적는 칸이고, 선별 기준은 한 지역, 한 물건처럼 좁은 단위예요. 시군구 가격 순위는 여러 지역을 한꺼번에 비교하고, 거래 건수 상위 단지는 여러 단지를 늘어놓습니다. 이런 후보는 독자가 자기 동네나 자기 집으로 바로 옮겨 보기 어려워서, Agent가 확신도를 낮게 매겼어요.
숫자가 정확해도 독자가 지금 할 일이 생기는 단위로 좁혀져야 글감이 됩니다.
제외된 후보에는 이유가 남아요.
| 후보 유형 | 제외 이유 |
|---|---|
| 시장 진단 기사 | 신선하지만 상담에 바로 쓰기에는 구체성이 낮다 |
| 누적 현황 기사 | 수치는 오늘 나왔지만 독자가 당장 할 일이 분명하지 않다 |
| 같은 이슈의 다른 매체 기사 | 앞선 후보와 같은 이슈의 복제본이다 |
2. 자격 검사: 신선도와 근거를 봅니다
남은 후보는 코드가 자격을 검사해요. 조건은 한 줄로 이렇게 적을 수 있어요.
신선도 근거 AND 근거 게이트 AND ( 시의성 있는 기사·공식 발표 OR 유효한 독자 수요 )이 흐름은 그날 쓸 이유가 있는 시의성 콘텐츠만 다뤄요. 날짜에 묶이지 않는 에버그린 콘텐츠는 별도 백로그 경로가 맡습니다. 신선도 근거는 여섯 가지 유형 중 하나여야 하고, 공고는 오늘부터 30일 이내 마감이어야 해요.
근거 게이트가 보는 건 후보에 붙은 근거 대응표예요. 근거 문장은 Agent가 씁니다. 선별하면서 어느 문장이 이 주제를 받쳐 주는지 인용으로 남겨요. 앞의 JSON에 있던 evidence_quote가 그 기록입니다. 코드는 그 인용이 원문에 실제로 있는지, 길이와 형식이 맞는지를 규칙으로 검수하고, 통과한 인용으로 대응표를 조립해요. 문안을 쓰는 서술 Agent는 제목과 훅 같은 공개 문안만 쓰고 근거 칸은 건드리지 못합니다.

Agent는 어느 문장이 근거인지 고르고, 코드는 그 문장이 원문에 있는지 확인해 대응표를 짭니다. 서술 Agent는 그 표를 읽고 문안만 씁니다.
주장 칸에는 수집한 원문 발췌가 그대로 들어가요. Agent가 다시 쓴 문장이 아니라 원문이어서, 인벤토리 요약과 바로 대조할 수 있습니다.
코드가 확인하는 건 기계적으로 가려낼 수 있는 것들이에요. 발췌는 20자 이상이어야 하고, 인벤토리 요약에 실제로 있어야 합니다. Agent의 인용이 요약에 없으면 요약 앞부분을 대신 쓰고, 말줄임표로 잘린 꼬리는 떼어 내요. 그러고도 20자에 못 미치면 그 후보는 버립니다. 정책이나 공고 주장은 공식 출처가 필요해요. 기사만 있는 후보는 발췌가 요약에 실제로 있을 때 통과하고, 그때는 알림이 남습니다.
BigValue 데이터 후보는 원문 발췌 대신, 미리 게시해 둔 증거 카탈로그의 허용된 주장을 그대로 써요. 문장을 고쳐 쓰지 않습니다.
기사에서 온 후보는 기사 출처를 밝혀 쓰라고 서술 Agent에게 지시해 둬요. 코드는 확정 어투를 정규식으로 살피고 공식 출처가 없으면 알림을 남기지만, 막지는 않습니다. 막으면 정책이 확정된 날 그 주제를 아예 다룰 수 없게 되기 때문이에요.
조건의 마지막 항목인 독자 수요는 사실상 자동으로 충족돼요. 선별에는 수요 목록을 주지 않고, 코드가 데이터 후보를 가장 자주 나온 질문에 연결하기 때문입니다. 수요 목록을 선별 입력에 넣어야 이 조건이 실제로 거르는 힘을 갖는데, 아직 넣지 않아 약한 고리로 남아 있어요.
3. 편집·주제 검증: 판정을 내립니다
마지막 단계는 검수 Agent가 맡아요. 판정은 정해진 규칙으로 내리고, 문안에 빠진 항목이나 밋밋한 훅은 서술 Agent에게 다시 쓰게 합니다. 규칙은 글감으로 쓸 만한 모양인지 보는 편집 규칙과, 말해도 되는 사실이 갖춰졌는지 보는 주제 검증 두 가지예요.
편집 규칙은 둘이에요. 한 줄 주장이 있어야 하고, 여러 이슈를 묶은 후보가 아니어야 합니다. 한 줄 주장이 비어 있거나 12자보다 짧으면 막혀요. 제목, 훅, 지금 이유에 대출, 공급, 전세, 세금처럼 서로 다른 분야의 키워드가 세 갈래 이상 걸리면 이슈 묶음으로 보고 막습니다.
주제 검증은 판정을 내려요. 값은 게시 가능, 사람 검토, 보류 셋이고, 검증된 출처 없음, 출처 날짜가 창 밖, 근거 대응표 누락, 정책 판단 사실 미충족 같은 사유가 하나라도 있으면 보류로 바뀝니다. 공고형 후보는 공식 출처가 붙어 있어도 신청 기간, 대상, 소득 기준, 혜택 같은 판단 사실 여덟 종 중 세 종 이상이 기록돼 있어야 통과해요.
이 규칙은 한동안 공고형 주제를 잘못 막았어요. 보류된 후보도 지우지 않고 사유와 함께 남기는 구조라서, 기록을 모아 보니 패턴이 보였습니다. 그 기간에 보류된 후보는 전부 공식 출처가 붙은 청약 공고였고, 사유도 판단 사실 미충족 하나였어요.
원인은 근거 대응표에 있었습니다. 공고 요약에는 공급 가구 수와 접수 마감이 들어 있었지만, 대응표를 짜는 단계가 그 문장에 사실 유형을 적지 않아서 규칙이 판단 사실을 제대로 세지 못했어요. 지금은 공고 요약에서 공급 가구 수, 접수 기간, 공고일, 분양가 같은 조각을 유형이 붙은 주장으로 따로 등록합니다. 고친 뒤에는 공고 후보가 유형이 붙은 판단 사실과 함께 통과했어요. 막는 쪽으로 틀린 것이라 잘못 나간 글은 없었고, 공고 주제가 대표안에서 빠지는 기회 손실이 있었습니다.

공고 내용은 같았습니다. 달라진 건 대응표에 사실을 기록하는 방식입니다.
점수는 판정과 따로 매겨요. 근거 대응표가 붙은 후보는 점수를 받고, 서술 Agent는 점수가 아니라 이유를 씁니다. 독자가 멈춰 읽을 이유, 저장할 이유, 보낼 이유를 적으면 검수 Agent가 그 항목이 갖춰졌는지를 규칙으로 세어 점수로 바꿔요. 같은 입력에는 같은 점수가 나와야 이유를 분해할 수 있기 때문입니다.
점수 = 훅(25) + 저장·공유 유인(25) + 시의성(15) + 증거(20) + 정체성(15)| 축 | 점수를 받는 조건 |
|---|---|
| 훅 | 제목에 숫자, 호기심 표현, 대표 키워드가 있다 |
| 저장·공유 | 저장할 이유, 보낼 이유, 구체적인 앵글이 있다 |
| 시의성 | "왜 지금인가"와 그 문장의 시점 표현이 있다 |
| 증거 | 검증된 출처, 근거 대응표, 공식 출처가 있다 |
| 정체성 | Agent가 고른 콘텐츠 유형의 신호가 문안에 보인다 |
항목이 있는지만 세는 규칙이라 글이 얼마나 좋은지는 가려내지 못해요. 정체성 축은 실제로 거의 만점이라 거르는 힘도 약합니다. 그래서 점수는 카드의 순서를 정하는 데만 쓰고, 합이 75 이상이면 높음, 55 이상이면 보통으로 운영 화면에 아이디어 매력도로 보여 줘요.
설명용으로 구성한 후보 세 개를 채점하면 이렇습니다. 후보는 가상이지만 채점 방식은 실제 규칙 그대로예요.
| 후보 | 합 | 판정 |
|---|---|---|
| 오늘 마감하는 공공분양, 소득 기준에서 많이들 놓치는 3가지 | 96 | 보류 · 판단 사실 미충족 |
| 금리는 내렸는데 내 대출 이자는 왜 그대로인지 | 81 | 게시 가능 |
| 서울 아파트 거래 신고 건수, 3달 만에 증가 | 61 | 게시 가능 |
첫 후보는 제목에 숫자와 "N가지"가 있고 "오늘 마감"이 이유로 붙어서 높게 나와요. 마지막 후보는 보낼 이유와 시점 표현이 없어 낮게 나옵니다. 그래도 판정은 점수와 따로 움직여요. 가장 높은 후보는 판단 사실 규칙에 걸려 보류되고 61점 후보는 게시 가능입니다. 점수가 낮은 후보는 목록 아래로 밀릴 뿐 막히지는 않아요.
앞에서 말한 Agent의 다시 쓰기는 이렇게 돌아요. 서술에서 빠진 항목이나 수치도 고유명사도 없는 일반적인 훅이 있으면 한 번 다시 요청하고, 훅은 나아졌을 때만 바꿉니다. 후보가 모자라거나 비는 분야가 있으면 선별부터 한 번 더 돌려서, 하루에 최대 두 번 시도해요.
고르는 건 사람이 해야 합니다
검증을 지난 후보는 운영 채널에 후보 카드로 올라오고, 운영자는 고르기, 보류, 다시 조사, 건너뛰기 중 하나를 누릅니다.
카드에는 마케터 Agent의 추천 코멘트가 함께 달려요. 검수 Agent가 낸 점수와 판정을 읽고, 오늘은 어떤 후보를 고르는 게 좋은지, 아니면 보류하거나 다시 조사하는 게 나은지 이유를 적습니다. 최신 사실이 불확실하면 원문을 다시 찾아 확인하고, 그 출처도 코멘트에 남겨요.

10월 12일 실행의 카드와 코멘트를 옮겨 정리했습니다. 내부 운영 메모는 뺐습니다.
추천은 참고일 뿐이에요. 운영자가 고르기 전에는 아무것도 다음 단계로 넘어가지 않습니다.
운영자 선택이 기록된 날을 보면, 대체로 Agent 추천과 같은 후보를 골랐어요. 점수 1순위가 아닌 카드를 고른 날도 있었습니다. 점수는 카드의 순서를 정할 뿐이고, 무엇을 낼지는 운영자가 정해요.
규칙도 틀릴 때가 있습니다
후보가 빠지거나 보류되면 사유가 남아요. 이 사유를 모아 보면 어떤 규칙이 자주 막는지 보이고, 앞의 공고형 보류도 이렇게 찾아 고쳤습니다. 출처 대조 규칙도 같은 경로로 고쳤어요. 출처 식별자가 빈 채로 들어오는 경우가 있어 통과할 수 없는 조건이었고, 지금은 막는 대신 알림만 남깁니다.
독자 수요 조건은 아직 후보를 거르지 못해요. 다음에 고칠 곳도 남은 사유에서 찾습니다.
가재를 아직 모르는 사람에게 처음 닿는 글이라, 틀리면 첫인상도 틀린 채로 남아요. 그래서 저희는 문안보다 먼저, 무엇을 쓸지 고르고 말해도 되는지 확인하는 구조를 만들었습니다.
에이전트파트
다양한 데이터와 AI Agent 기술을 연결해 사용자의 의사결정을 돕습니다.

