Subreach: Reddit을 위한 두 AI 에이전트 구축하기
요약
본 글은 Reddit의 유용한 질문 스레드를 활용하여 자동화 시스템 'Subreach'를 구축한 과정을 설명합니다. Subreach는 Reddit을 읽고 답글 작성 가치를 판단하며, 자동으로 게시하는 에이전트 기반 SaaS 도구입니다. 특히 에이전트 간 작업 분배 및 역할 설계를 중점적으로 다루었습니다.
핵심 포인트
- Reddit의 질문 스레드를 활용하여 제품 발견 기회를 포착할 수 있습니다.
- Subreach는 Reddit을 모니터링하고, 답글 작성 가치를 판단하며 게시하는 자동화 시스템입니다.
- 핵심은 에이전트 간 작업 분배 및 역할 정의에 초점을 맞춘 설계 과정입니다.

이것을 수동으로 하는 것은 확장성이 떨어집니다. 그래서 저는 졸업 프로젝트(capstone)로 Subreach를 만들었습니다. 이것은 Reddit을 읽고, 어떤 스레드가 답글을 달 가치가 있는지 판단하고, 답글을 작성하여 게시하는 자동화 시스템입니다. 이 제품은 asimpletool.com이라는 SaaS 도구를 홍보합니다.
흥미로운 부분은 게시 자체가 아니었습니다. 에이전트들 사이에 작업을 어떻게 분배할지, 그리고 각각 무엇을 할 수 있도록 허용할지가 문제였습니다. 이 글에서는 그 설계 과정을 설명합니다.
작동 증명 (Proof it runs)
두 에이전트가 실시간으로 작동하는 모습을 하나의 짧은 비디오로 결합했습니다.
비디오 확인은 LinkedIn Article을 참조하세요.
Subreach: Reddit을 위한 두 AI 에이전트 구축하기 (Ayush S Pangaonkar의 에이전트 설계 졸업 프로젝트)
왜 제가 이것을 만들었는가 Reddit에는 사람들이 문제를 소리 내어 설명하는 글들로 가득합니다. 창업가들은 다른 사람들이 무엇을 만들고 있는지 묻고, 사이트 소유자들은 왜 Google이 자신들의 페이지를 무시하는지 묻고, 소상공인들은 다른 곳에서는 찾을 수 없는 도움을 요청합니다.
한 장으로 보는 설계 (The design in one picture)
Subreach는 동일한 엔진을 공유하지만 서로 반대되는 임무를 가진 두 에이전트로 구성되어 있습니다.
- 에이전트 1, 마케팅 에이전트(marketing agent): 이 제품을 언급할 수 있는 유일한 에이전트입니다.
- 에이전트 2, 지식 에이전트(knowledge agent): 절대로 이를 언급해서는 안 됩니다. 오직 실제 SEO 문제에 대해 유용한 답변을 제공하는 것이 유일한 임무입니다.
각 에이전트는 자체 Chrome 인스턴스에서 실행되며, 각각 고유한 설정, 서브레딧 목록, 검색 쿼리 및 프롬프트 파일을 가집니다. 이들은 상태를 공유하지 않기 때문에 한쪽의 변경 사항이 다른 쪽을 망가뜨릴 수 없습니다.
두 에이전트 모두 따르는 파이프라인
모든 에이전트는 게시물을 동일한 단계를 거칩니다:
- 검색(Search). 서브레딧 목록과 쿼리 템플릿을 기반으로 Reddit 검색 요청을 생성하며, 최신순으로 정렬하고, 지난 하루로 제한하며, 요청당 25개의 결과와 최대 2페이지까지 처리합니다.
- 원시 저장 및 중복 확인(Raw storage and duplicate check). 가져온 내용을 저장한 후, 이미 댓글이 달린 게시물은 제외하여 동일한 스레드에 두 번 답변하는 일이 없도록 합니다.
- AI 의도 필터(AI intent filter). 언어 모델이 에이전트의 규칙과 비교하여 게시물을 읽고 'APPROVE' 또는 'REJECT'라는 단어 하나를 반환합니다.
- 큐(Queue). 승인된 게시물은 URL, 서브레딧 및 타임스탬프와 함께 선입선출 큐에 들어갑니다.
- 댓글 작성(Commenting). 큐의 다음 게시물을 위해 댓글이 생성된 후, 로그인된 브라우저 세션에서 입력되고 제출됩니다.
- 추적(Tracking). 모든 성공적인 댓글은 기록되며, 이는 다음 사이클의 중복 확인에 사용됩니다.
데이터 파일은 추가 전용(append-only)이며, 모든 모델 호출은 사용량 원장(usage ledger)에 기록되므로 아무것도 조용히 일어나지 않습니다.
에이전트 1: 마케팅 에이전트 (marketing agent)
임무: asimpletool.com을 홍보하는 것, 그리고 그 외에는 아무것도 하지 않는 것입니다.
확인하는 곳. 이 에이전트는 30개의 서브레딧을 모니터링하며, 각 서브레딧에서 다음 다섯 가지 쿼리 템플릿(
어떻게 결정하는가. 승인 단계에서는 모든 게시물을 규칙 파일과 비교합니다. 이 규칙은 의도적으로 좁습니다. 오직 사람들이 자신이 만들고 있는 것을 명시적으로 공유하도록 초대하는 게시물, 예를 들어 '무엇을 만들고 있나요?' 스레드, '공개로 구축하기' 스레드 또는 주간 점검 글만 승인합니다. 창업자 이야기, 간접적인 홍보, 단순한 조언 요청은 주제와 관련이 있어도 거부됩니다. 에이전트는 자기 홍보가 환영받는 곳에서만 발언합니다.
어떻게 작성하는가. 댓글은 프롬프트 파일로부터 gpt-4o-mini에 의해 생성됩니다. 이 프롬프트에는 제품 링크에 대한 엄격한 규칙이 포함되어 있습니다. 즉, 문장을 끝낼 수 없으며 구두점 뒤에 올 수 없고, 반드시 소문자로 시작하는 단어와 자연스럽게 이어져서 붙여넣은 광고가 아니라 문장의 일부처럼 읽혀야 합니다. 생성기는 출력물에 정확한 링크 문자열이 존재하는지 확인합니다. 만약 누락되었다면, 포기하기 전에 더 높은 온도(temperature)에서 한 번 재시도합니다.
모니터링하는 서브레딧 (30개): r/StartupAccelerators, r/startups, r/smallbusiness, r/GrowthHacking, r/microsaas, r/micro_saas, r/SaaSSolopreneurs, r/SaaS, r/indiehackers, r/buildinpublic, r/ShowMeYourSaaS, r/indie_startups, r/Entrepreneur, r/EntrepreneurRideAlong, r/SideProject, r/SideHustle, r/Startup_Ideas, r/StartupMarketing, r/GrowthMarketing, r/MarketingAutomation, r/ContentMarketing, r/SEO, r/TechStartups, r/IndieDev, r/DigitalMarketing, r/SaaSMarketing, r/Devpreneur, r/Solopreneur, r/NoCode 및 r/Automation.
에이전트 2: 지식 에이전트 (the knowledge agent)
임무: 홍보 없이 오직 SEO 문제에 직면한 사람들에게 진정으로 유용하게 도움을 주는 것.
확인하는 곳. 이 에이전트는 8개의 서브레딧을 모니터링하며, 실제 문제를 중심으로 구축된 7가지 질의 템플릿(
결정하는 방식. 이 에이전트는 동일한 파이프라인을 따르지만, 목표가 다릅니다. 구체적인 SEO 문제로 어려움을 겪고 실질적인 답변으로 도움을 받을 수 있는 사람들을 찾습니다.
작성하는 방식. 댓글 프롬프트에는 어떠한 홍보도 하지 않도록 명시적인 지침이 포함되어 있습니다. 이 트랙에서는 제품 링크나 제품 언급은 절대 없습니다. 실제 글쓰기 자체는 상세한 페르소나 파일에 의해 형성됩니다. 여기에는 16개 항목의 개인화 체크리스트, 여덟 가지 이름 붙여진 댓글 패턴(예: 짧고 직설적이거나, 여러 이유를 나열하는 방식), 하루 동안 목표 길이 배분(대략적으로 짧은 글 35%, 중간 글 40%, 긴 글 25%) 및 기계가 작성한 것처럼 보이는 것을 피하기 위한 상용 구문 목록이 포함됩니다. 목표는 프로필의 최근 댓글들이 일관된 한 사람에게서 나온 것처럼 보이게 하는 것입니다.
모니터링하는 서브레딧 (8개): r/SEO, r/TechSEO, r/Wordpress, r/blogging, r/smallbusiness, r/Entrepreneur, r/digital_marketing 및 r/webdev.
두 에이전트를 사용하는 이유
홍보와 도움은 정반대의 방향으로 작용합니다. 이 둘을 모두 수행하도록 요청받는 단일 에이전트는 하나의 프롬프트 안에서 균형을 맞춰야 하며, 그 균형은 더 강력한 지침 쪽으로 기울어지기 쉽습니다. 의도별로 분리함으로써 각 에이전트를 작성하기가 더 간단하고, 테스트하기가 더 간단하며, 논리적으로 설명하기가 더 쉬워졌습니다. 마케팅 에이전트는 하나의 좁은 권한을 가집니다. 지식 에이전트는 하나의 강력한 금지 사항을 가집니다. 어느 쪽도 조용히 상대방의 업무로 빠져들 수 없습니다.
비용 효율적인 모델 라우팅
모든 단계가 동일한 모델을 필요로 하는 것은 아닙니다. 필터링 단계는 가져온 모든 게시물에 대해 실행되며 단 하나의 단어만 출력하면 되므로, 비용 때문에 환경 변수를 통해 설정된 gpt-5-nano를 사용합니다. 댓글 생성은 훨씬 덜 자주 발생하며 더 나은 글쓰기가 필요하므로, gpt-4o-mini를 사용합니다. 작업에 모델을 맞춤으로써 댓글 품질을 저해하지 않으면서 운영 비용을 낮게 유지할 수 있었습니다.
페이싱 및 신뢰성
두 에이전트 모두 동일한 타이밍 구성을 공유합니다:
- 게시물을 가져온 후 댓글을 달기까지 60초에서 120초의 지연 시간
- 댓글 간 3분에서 5분의 간격
- 전체 사이클마다 15분의 휴식 시간
- 네 가지 티어에서 추출된 서브레딧 간 무작위 대기 시간을 두어 일정한 간격이 아님
- 서브레딧 가져오기에 실패할 경우 지수 백오프(Exponential backoff)를 적용하고, Reddit이 속도 제한 응답을 반환하면 더 긴 백오프를 적용함
댓글은 이미 로그인된 Chrome 탭에 Playwright를 사용하여 Chrome DevTools Protocol을 통해 입력되며, 키 입력마다 작은 지연 시간이 있고 Ctrl+Enter로 제출됩니다.
제가 배운 점 (What I learned)
- 작업(task)이 아닌 의도(intent)별로 에이전트를 분리해야 합니다. 규칙만 다르면 동일한 파이프라인이 두 가지 매우 다른 목표를 수행할 수 있습니다.
- '예/아니오' 결정에는 저렴한 모델이면 충분합니다. 더 강력한 모델은 사람이 읽을 출력에 아껴두세요.
- 작은 제약 조건(constraints)이 중요합니다. 링크 규칙과 좁은 승인 규칙이 어떤 일반적인 지침보다도 품질에 더 큰 영향을 미쳤습니다.
- 코드보다 설정 파일(Configuration over code). 서브레딧, 쿼리, 타이밍이 설정 파일에 존재하므로 대상 청중을 변경해도 로직을 건드릴 필요가 없습니다.
언급할 가치가 있는 한계점 (A limitation worth stating)
필터 서비스의 비용 추정치는 모든 호출에 대해 구형 모델 가격으로 표시된 단일 토큰당 요율을 적용합니다. 실제 필터는 더 저렴한 gpt-5-nano에서 실행되므로, 기록된 수치는 실제 필터링 비용을 과대평가합니다. 이는 정확한 청구서라기보다는 유용한 상한선이며, 제가 다음에 고칠 첫 번째 부분입니다.
프로젝트 탐색 (Explore the project)
두 에이전트와 해당 설정 파일이 포함된 전체 코드는 GitHub에 있습니다: github.com/bluntjudg/autopilot
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기