Algom Alpha: X(구 Twitter)를 통한 B2B 리드 발굴, 68%의 오탐률(False-Positive Rate), 그리고 봇이
요약
X(구 Twitter)에서 B2B 리드를 발굴하기 위해 구축한 AI 에이전트 'Algom Alpha'의 개발 과정과 시행착오를 다룹니다. 초기 95%에 달했던 높은 오탐률을 줄이기 위해 키워드 전략을 개선하고 멀티 에이전트 스코어링 시스템을 도입한 경험을 공유합니다.
핵심 포인트
- 단순 키워드 스크래핑의 한계와 높은 오탐률 문제 직면
- 채용 의도를 특정하는 'Hiring-adjacent' 키워드 전략 도입
- 오탐률을 95%에서 68%로 낮춘 멀티 에이전트 스코어링 시스템
- Oracle Cloud와 Groq API를 활용한 비용 효율적 아키텍처 구축
원문은 AIdeazz에 게시되었습니다 — 정식 링크와 함께 이곳에 교차 게시되었습니다.
나의 첫 번째 B2B 리드 생성 (Lead Generation) AI 에이전트인 Algom Alpha는 3주 동안 단 하나의 적격 (Qualified) 리드도 전달하지 못하며 실패했습니다. 이 과정에서 Groq API 호출에 17.83달러, Oracle Cloud 데이터 송신(Egress)에 4.12달러를 소모했습니다. 핵심 문제는 내가 정의한 "적격 (Qualified)"의 기준이 너무 느슨했고, X (구 Twitter)에서의 신호 대 잡음비 (Signal-to-noise ratio)가 형편없었다는 점입니다. 나는 단순히 특정 직무를 논의하는 것이 아니라, 특정 역할을 위해 적극적으로 채용 중인 기업을 찾아내야 했습니다.
나는 AIdeazz를 위한 B2B 리드를 찾기 위해 Algom Alpha를 구축했습니다. 구체적으로는 프로덕션용 AI 에이전트가 필요하지만 내부 역량이 부족한 기업들을 타겟팅합니다. 이는 "ML 엔지니어 채용 중", "AI 인재 탐색 중", 또는 "내부 AI 팀 구축 중"과 같은 신호(Signal)를 찾는 것을 의미합니다. 초기 버전은 단순히 이러한 키워드를 위해 X를 스크래핑(Scraping)했으나, 이로 인해 95%의 오탐률 (False-positive rate)이 발생했습니다. 이후 나는 채용과 인접한 (Hiring-adjacent) 키워드와 멀티 에이전트 점수 산정 시스템 (Multi-agent scoring system)에 집중하며 프로세스를 개선했습니다. 현재 나의 오탐률 (False-positive rate)은 68%로, 여전히 자랑스럽지는 않지만 상당한 개선이 이루어졌습니다.
신호 (The Signal): X에서의 채용 인접 (Hiring-Adjacent) 키워드
초기 키워드 목록은 너무 광범위했습니다: ["AI", "ML", "LLM", "agent", "hiring", "developer"]. 이는 학술적 토론부터 스팸에 이르기까지 모든 것을 끌어들였습니다. 나는 채용 의도 (Hiring intent)를 특정 AI 역할과 결합하여 더 타겟팅된 접근 방식으로 전환했습니다.
현재 키워드 목록 (예시 하위 집합):
"hiring AI engineer"(AI 엔지니어 채용 중)"seeking machine learning lead"(머신러닝 리드 탐색 중)"building internal AI team"(내부 AI 팀 구축 중)"need prompt engineer"(프롬프트 엔지니어 필요)"looking for ML ops"(ML ops 찾는 중)"AI product manager opening"(AI 제품 관리자 채용 공고)
이 방식 역시 여전히 잡음 (Noise)을 생성합니다. "우리는 내부 AI 팀을 구축하고 있지만, 직원이 아닌 파트너를 찾고 있습니다"와 같은 트윗은 직접 채용 관점에서는 오탐 (False positive)이지만, AIdeazz에게는 잠재적인 리드(Lead)가 될 수 있습니다. 이러한 미묘한 차이를 해결하기 위해 멀티 에이전트 시스템 (Multi-agent system)이 도입됩니다.
Algom Alpha의 아키텍처: Oracle Cloud, Groq, 그리고 스코어링 캐스케이드 (Scoring Cascade)
Algom Alpha는 Oracle Cloud Infrastructure (OCI) VM 위에서 실행됩니다. 제가 OCI를 사용하는 이유는 프리 티어 (Free tier)와 예측 가능한 과금 체계 때문인데, 이는 VC(벤처 캐피털) 투자 없이 부트스트래핑 (Bootstrapping)을 하는 상황에서 매우 중요합니다. 핵심 구성 요소는 다음과 같습니다:
-
X 스크레이퍼 에이전트 (X Scraper Agent, Python/Tweepy): 이 에이전트는 정제된 키워드 목록을 바탕으로 X를 지속적으로 모니터링합니다. 트윗 텍스트, 작성자, 타임스탬프, 팔로워 수를 수집합니다. 속도 제한 (Rate limits)은 끊임없는 싸움이며, 이를 관리하기 위해 여러 개발자 계정을 순환하며 사용합니다.
-
초기 필터 에이전트 (Initial Filter Agent, Groq Llama 3 8B): 이 에이전트는 가공되지 않은 트윗을 전달받습니다. 프롬프트는 간단합니다: "이 트윗이 기업이 AI 관련 직무를 채용 중이거나, AI 개발 도움을 적극적으로 찾고 있음을 나타낼 _가능성_이 있습니까? 'YES' 또는 'NO'로 답하세요." 저는 속도와 낮은 지연 시간 (Latency) 때문에 Groq를 사용하며, 이를 통해 트윗당 비용을 최소화합니다 (Llama 3 8B 기준 1k 토큰당 $0.0001). 이 에이전트는 명백한 스팸이나 무관한 논의를 걸러내는 첫 번째 방어선 역할을 합니다.
-
문맥 분석 에이전트 (Contextual Analysis Agent, Groq Llama 3 70B 또는 Claude 3 Haiku): 초기 필터 에이전트가 "YES"라고 응답하면, 해당 트윗과 (별도로 스크레이핑된) 작성자의 프로필이 이 에이전트로 전달됩니다. 여기서 "적격 리드 (Qualified lead)"의 정의가 구체화되기 시작합니다. 이곳의 프롬프트는 더 복잡합니다:
제공된 트윗과 사용자 프로필을 분석하십시오. 이 기업이 AI 에이전트 개발 서비스의 실행 가능한 B2B 리드인지 판단하십시오. '실행 가능 (Viable)'의 기준: - AI/ML 직무 채용을 명시적으로 언급함 OR
...
```
저는 현재 API 지연 시간과 비용에 따라 Groq Llama 3 70B와 Claude 3 Haiku 사이를 전환하며 라우팅합니다. Groq는 더 빠르지만 때때로 회사 이름을 환각 (Hallucinate)하기도 합니다. Claude는 복잡한 추론에 더 신뢰할 수 있지만 더 느립니다.
4. 스코어링 에이전트 (Scoring Agent, Python/Pandas): 이 에이전트는 JSON 출력을 받아들입니다.
이 에이전트는 is_qualified를 기반으로 점수를 할당하며 (true인 경우 100점, false인 경우 0점), 그 다음 contact_signal에 따라 점수를 추가합니다 (예: 이메일 +20점, DM 오픈 +10점, 채용 페이지 링크 +5점). 또한 팔로워 수에 따라 감점을 적용합니다 (예: 팔로워 100명 미만 시 -5점, 이는 규모가 작거나 아직 확립되지 않은 엔티티임을 나타냄).
- 휴먼 리뷰 큐 (Human Review Queue, Telegram Bot): 점수가 80점 이상인 리드는 텔레그램 봇(Telegram bot)으로 전송됩니다. 이 봇은 저에게 트윗 내용, 회사 이름, 그리고 적격(qualification) 판정 사유를 보냅니다. 여기서 제가 수동으로 검토하고 확인합니다.
68%의 오탐률 (False-Positive Rate): 시스템이 무너지는 지점
저의 68% 오탐률(false-positive rate)은 시스템이 "적격(qualified)"이라고 표시한 리드 100개 중 68개가 실제로는 그렇지 않음을 의미합니다. 이는 수동 검토에 소요되는 제 시간 측면에서 비용이 많이 듭니다.
흔한 오탐 사례:
- AI 서비스 제공업체 (AI Service Providers): "우리는 고객사들의 AI 솔루션을 구축할 ML 엔지니어를 채용 중입니다." 문맥 분석 에이전트(Contextual Analysis Agent)는 때때로 "고객사들의(our clients')"라는 뉘앙스를 놓치는데, 특히 표현이 명시적이지 않을 때 그렇습니다.
- 학계/연구 (Academic/Research): "우리 대학교 연구실에서 AI 연구를 위한 박사 과정 학생을 찾고 있습니다." 에이전트는 학술적 채용과 상업적 제품 개발을 구분하는 데 어려움을 겪습니다.
- 개인 구직자 (Personal Job Seekers): "저는 새로운 기회를 찾고 있는 AI 엔지니어입니다." 에이전트는 때때로 "찾고 있는(looking for)"을 개인이 아닌 회사가 인재를 찾는 것으로 오해합니다. 프로필 분석 덕분에 현재는 빈도가 줄었지만, 여전히 발생합니다.
- 모호한 의도 (Ambiguous Intent): "AI가 모든 것을 바꾸고 있습니다, 우리는 적응해야 합니다." 이는 너무 모호하지만, 때때로 에이전트는 "적응해야 한다(need to adapt)"를 "도움이 필요하다(need help)"로 해석합니다.
- 오래된 게시물 (Old Posts): X의 검색 기능은 때때로 오래되고 관련 없는 게시물을 불러올 수 있습니다. 타임스탬프 필터(timestamp filter)를 구현했지만, 일부는 여전히 걸러지지 않고 들어옵니다.
근본적인 원인은 종종 LLM(Large Language Model)이 인간 언어의 미묘한 맥락을 완전히 파악하지 못하기 때문이며, 특히 프로필 정보가 부족하거나 트윗이 의도적으로 모호할 때 더욱 그러합니다. 저는 프롬프트(prompt)를 지속적으로 개선하고, 에이전트의 학습 데이터에 더 많은 부정적 예시(negative examples)를 추가하고 있습니다 (퓨샷 프롬프팅 (few-shot prompting)을 통해).
봇이 정의하는 '적격(Qualified)'이란 무엇인가
Algom Alpha에게 "적격 리드 (qualified lead)"란 다음과 같은 기업을 의미합니다:
- AI 개발 전문성을 적극적으로 채용 중이거나 명시적으로 찾고 있는 기업. 이것이 가장 주요한 신호입니다.
- 개인이나 학술 기관이 아닌, 합법적인 비즈니스로 보이는 기업. 이는 프로필 상세 정보, 팔로워 수, 연결된 웹사이트를 통해 추론됩니다.
- 직접적인 경쟁사가 아닌 기업 (예: 다른 AI 에이전트 개발사). 이는 매우 중요한 필터입니다.
- 연락할 수 있는 명확한 경로가 있는 기업. 이는 DM, 이메일 또는 공개 채용 페이지가 될 수 있습니다.
저의 "적격"에 대한 정의는 여전히 진화하고 있습니다. 초기에는 단순히 "AI 채용 중"이었으나, 이제는 AIdeazz에 대한 _적합성 (fit)_에 관한 것입니다. 내부적으로 100명의 ML(Machine Learning) 엔지니어를 채용하는 기업은, "LLM 통합이 필요하지만 사내 팀이 없다"라고 말하는 중소기업보다 적격성이 낮습니다. 후자가 저의 스위트 스팟 (sweet spot)입니다.
68%의 오탐률 (false-positive rate)은 직접적인 비용입니다. 수동 검토를 한 번 할 때마다 30~60초가 소요됩니다. 리드 100개당 제 시간 1시간이 걸리는 셈입니다. 저의 목표는 더 정교한 프롬프트 엔지니어링 (prompt engineering), 더 나은 부정적 예시, 그리고 잠재적으로 특정 분류 작업을 위한 소규모 미세 조정 모델 (fine-tuned model)의 통합을 통해 2024년 3분기 말까지 이 수치를 30% 미만으로 낮추는 것입니다. 현재 시스템은 작동 가능한 프로토타입으로서 _어느 정도_의 리드를 생성하고 있지만, 효율성을 대폭 개선할 필요가 있습니다.
자주 묻는 질문 (FAQ)
Q: B2B 리드 발굴을 위해 LinkedIn 대신 X를 사용하는 이유는 무엇인가요?
A: LinkedIn의 API 접근은 프로그램 방식의 스크래핑 (programmatic scraping)을 하기에 매우 제한적이고 비용이 많이 듭니다. X는 속도 제한 (rate limits) 문제로 까다롭긴 하지만, 부트스트랩 (bootstrapped) 운영 방식에서는 더 접근하기 쉬운 공개 데이터를 제공합니다.
Q: X의 속도 제한(rate limits)과 계정 정지 문제를 어떻게 처리하나요?
A: 여러 개의 X 개발자 계정을 사용하고 API 키를 교체(rotate)합니다. 또한 API 호출 시 지수 백오프 (exponential backoff)를 구현하고, 요청 사이에 무작위 지연 (random delays)을 도입하여 인간의 행동을 모방합니다.
Q: 현재 설정에서 적격 리드(qualified lead)당 비용은 얼마인가요?
A: 68%의 오탐률 (false-positive rate)을 고려할 때, API 비용과 수동 검토 시간(시간당 50달러로 산정)을 포함하면 실제 적격 리드당 비용은 약 0.85달러입니다. 이 비용은 낮아져야 합니다.
Q: 왜 모든 분석에 단일한 대규모 LLM을 사용하지 않나요?
A: 비용과 지연 시간 (latency) 때문입니다. 모든 원시 트윗 (raw tweet)을 더 크고 비싼 모델로 보내는 대신, 초기 필터링을 위해 더 작고 빠른 모델 (Groq Llama 3 8B 등)로 라우팅하면 전체 API 지출과 처리 시간을 크게 줄일 수 있습니다.
Q: 에이전트들이 동일한 리드를 생성하는 것을 어떻게 방지하나요?
A: 처리된 모든 트윗 ID를 Oracle Autonomous Database에 저장합니다. 처리하기 전에 X 스크래퍼 에이전트 (X Scraper Agent)가 이 데이터베이스를 확인하여 중복된 트윗이 파이프라인으로 전달되지 않도록 보장합니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기