리서치 전담 AI 에이전트를 OpenClaw로 만들기


📌 소개

저는 현재 Mac Mini(HomeClaw) 위에서 OpenClaw 기반의 멀티 에이전트 시스템을 운영하고 있습니다. 각각 역할이 다른 세 명의 AI 동료가 있어요.

세 에이전트를 운영하면서 한 가지 공통된 갈증이 생겼습니다. "외부 세계의 정보를 가져오는 일"이 자꾸 각 에이전트의 정체성을 흐리게 만든다는 점이었어요. H에게 학술 논문 검색을 시키면 따뜻한 돌봄 톤이 무너지고, D에게 뉴스 집계를 맡기면 코칭 윤리에 집중해야 할 SOUL.md가 비대해졌습니다.

오늘 수업에서 RivalSearchMCP라는 리서치 도구를 디디님을 통해 알게 되었습니다. 웹 검색, 학술 논문(Semantic Scholar/arXiv/PubMed), 소셜 검색(Reddit/HN/Medium), GitHub, 뉴스 집계, 문서 OCR까지 — 한 도구 안에 리서치에 필요한 거의 모든 것이 들어있다고 해요.

그래서 리서치만 전담하는 네 번째 에이전트를 만들게 되었습니다.

목표는 세 가지였어요:

  1. 다른 에이전트를 보호하기 (리서치 부담 분리)

  2. 리서치 비용을 절감하기 (싼 모델로 리서치 → 비싼 모델은 정제된 결과만 받기)

  3. 단일 LLM 공급사 의존도를 낮춰 시스템 회복탄력성 확보하기

🛠️ 진행 방법

1단계 — 의사결정 트리

코드를 짜기 전에 아키텍처 결정부터 했습니다. Claude와 대화하면서 다음을 차례로 확정했어요.

결정 1: 세 에이전트에 RivalSearchMCP를 분산할까, 전담 에이전트를 만들까? → 전담 에이전트. 이유: 관심사 분리, 토큰 효율, SOUL.md 비대화 방지.

결정 2: 기존 인스턴스에 추가할까, 새 인스턴스를 만들까? → 처음엔 "하콩 옆에 두자"였지만, 다음 결정 때문에 뒤집혔습니다.

결정 3: LLM은 Claude로 갈까, OpenAI로 갈까? → OpenAI(GPT-5 mini 디폴트 + GPT-5 deep/academic 모드). 이유:

  • 4월 Anthropic 정책 변화로 Claude 구독 third-party 사용 제약이 생긴 상황

  • 리서치는 "창의성"보다 "정확한 요약·구조화"가 핵심 → GPT-5와 Claude 품질 차이 미미

  • GPT-5 mini는 Claude Sonnet 대비 입력 토큰 비용이 저렴 → 리서치를 2~3배 더 돌릴 수 있음

  • 단일 공급사 리스크 분산 (회복탄력성)

결정 4: 24GB RAM Mac Mini로 인스턴스 4개를 돌릴 수 있을까? → 가능. 인스턴스당 평균 500MB~1.5GB이라, 4개 돌려도 6~7GB. 17GB 여유. 그리고 LLM 공급사가 다르면 같은 인스턴스에 두는 것보다 분리하는 게 환경변수·키 관리·디버깅 모두 단순해짐.

최종 아키텍처

인스턴스

포트

에이전트

LLM 공급사

하콩

3001

하콩

Anthropic (Opus)

호두

3002

호두

Anthropic

도티

3003

도티

Anthropic

두리

3004

두리

OpenAI (GPT-5 mini/full)

2단계 — S의 정체성 설계 (SOUL.md)

H·D 에이전트를 만들 때 썼던 7-file 체계(IDENTITY, SOUL, AGENTS, MEMORY, HEARTBEAT, examples, openclaw.json)를 그대로 차용했습니다. 핵심은 S가 "사서(librarian) 같은 캐릭터"여야 한다는 점이었어요. 따뜻하지만 사실에 충실하고, 결과를 길게 늘어놓지 않고 핵심만 정제하는 톤.

S SOUL.md 핵심 프롬프트

# S의 영혼

## 너는 누구인가
너는 S. 허밍의 리서치 전담 동료다.
K, H, S가 각자의 자리에서 사람을 돌보는 동안,
너는 세상을 두루 살피고 그들에게 정제된 지혜를 가져다준다.

## 너의 원칙
1. **출처 없는 정보는 말하지 않는다.** 모든 주장에는 링크를 단다.
2. **길게 말하지 않는다.** 핵심 3가지 + 출처가 기본 형식이다.
3. **한국어 사용자에겐 한국어로 요약한다.** 영어 원문은 별도 섹션.
4. **추측하지 않는다.** 검색 결과가 약하면 "근거가 부족하다"고 솔직히 말한다.
5. **다른 에이전트의 톤을 침범하지 않는다.** 너는 정보를 전달할 뿐,
   해석과 적용은 하콩·호두·도티에게 맡긴다.

## 너의 5가지 모드
- /quick    : 빠른 팩트체크 (web_search + content_operations)
- /deep     : 심층 리서치 (research_agent)
- /academic : 학술 논문·데이터셋 (scientific_research)
- /pulse    : 뉴스·소셜 여론 (news_aggregation + social_search)
- /doc      : 문서 분석 (document_analysis, OCR 포함)

## 응답 형식 (필수)
### 핵심 발견
1. [한 줄 요약] — [출처]
2. [한 줄 요약] — [출처]
3. [한 줄 요약] — [출처]

### 추가 맥락
(필요할 때만, 3문장 이내)

### 원문 인용 (영어 자료의 경우)
(원문 그대로, 출처 링크와 함께)

3단계 — openclaw.json 설정 (모드별 모델 라우팅)

OpenAI API 키를 발급받아 환경변수에 등록하고, 두리 인스턴스의 openclaw.json모드별로 다른 모델을 라우팅하도록 설정했어요. 빠른 작업은 mini로, 무거운 추론은 full 모델로 — 비용 최적화의 핵심입니다.

{
  "agent": "doori",
  "port": 3004,
  "provider": "openai",
  "default_model": "gpt-5-mini",
  "model_routing": {
    "/quick": "gpt-5-mini",
    "/pulse": "gpt-5-mini",
    "/doc": "gpt-5-mini",
    "/deep": "gpt-5",
    "/academic": "gpt-5"
  },
  "mcp_servers": [
    {
      "name": "rival-search",
      "type": "fastmcp-gateway",
      "tools": [
        "web_search",
        "map_website",
        "content_operations",
        "research_topic",
        "research_agent",
        "scientific_research",
        "social_search",
        "news_aggregation",
        "github_search",
        "document_analysis"
      ]
    }
  ],
  "memory": {
    "path": "./memory/doori",
    "retention_days": 90
  }
}

4단계 — 인스턴스 자동 시작 (launchd)

인스턴스가 4개로 늘어나니, Mac Mini 재부팅할 때마다 일일이 켜기 번거로워졌어요. macOS의 launchd로 부팅 시 자동 시작되도록 등록했습니다. 각 인스턴스마다 .plist 파일을 하나씩 만들어 ~/Library/LaunchAgents/에 넣었어요.

5단계 — OpenAI 사용량 한도 설정

리서치 에이전트는 무한 루프 가능성이 있는 도구(특히 research_agent)를 쓰기 때문에, OpenAI 대시보드에서 월 $30 한도를 걸었습니다.

💡 결과와 배운 점

배운 점

1. "역할 분리"는 SOUL.md가 비대해지기 전에 미리 해야 한다 호두에 리서치 도구를 다 얹었다면, 호두의 정체성이 흐려지고 SOUL.md가 매번 재작성되어야 했을 거예요. 새 도구가 들어올 때 기존 에이전트에 추가할지, 새 에이전트를 만들지를 먼저 따져보는 습관이 생겼습니다.

2. LLM 공급사 다양화는 비용보다 회복탄력성이 핵심 처음엔 "GPT-5 mini가 싸니까"가 동기였는데, 막상 운영해보니 "한 공급사가 다운돼도 시스템 절반이 살아있다"는 안정감이 더 컸어요. 멀티 에이전트 시스템에선 단일 공급사 의존이 생각보다 큰 리스크입니다.

3. 인스턴스 분리는 RAM이 허락할 때 미리 해두자 24GB RAM은 4 인스턴스 돌리기에 충분하고도 남았어요. 하드웨어가 허락할 때 깔끔하게 1 인스턴스 = 1 에이전트 = 1 LLM 공급사로 분리해두면, 나중에 디버깅·빌링·장애 대응이 모두 단순해집니다.

4. 모드별 모델 라우팅은 비용 최적화의 숨은 무기 두리의 작업 80%가 /quick·/pulse·/doc로 처리되는데, 이걸 다 mini에 보내고 무거운 작업만 full 모델에 보내니 예상 비용의 약 1/3로 줄었어요.

나만의 꿀팁

  • 에이전트 만들 때는 기존 에이전트의 7-file 체계를 그대로 복제하세요. 처음부터 짜면 빠뜨리는 게 생깁니다.

  • OpenAI 한도 설정은 무조건 하세요. research_agent 같은 자동화 도구는 사고 가능성이 있어요.

  • SOUL.md에 "다른 에이전트의 톤을 침범하지 않는다" 같은 경계 원칙을 꼭 넣으세요. 멀티 에이전트 시스템에서 가장 흔한 실패가 에이전트들이 서로의 영역을 침범하는 거예요.

시행착오

  • 처음엔 두리를 H 옆 같은 인스턴스에 두려고 했어요. "비서실장과 리서치 애널리스트는 한 팀"이라는 비유 때문이었는데, LLM 공급사를 OpenAI로 결정하는 순간 같은 인스턴스에 Anthropic/OpenAI 키가 공존해야 해서 복잡해졌어요. 결국 인스턴스 분리.

도움이 필요한 부분

  • S의 결과물을 다른 에이전트에게 자동으로 넘기는 워크플로를 아직 못 만들었어요. 지금은 제가 S에게 받은 결과를 복사해서 H에게 다시 붙여넣는 구조인데, Slack 멀티 에이전트 협업 구조로 자동화하고 싶습니다.

  • S의 메모리를 H, D의 메모리와 어떻게 연결할지 아직 고민 중이에요. 통합 메모리 vs 격리 메모리 — 어느 쪽이 장기적으로 나을지 사례가 궁금합니다.

앞으로의 계획

  1. 자동 위임 워크플로 구축: H이 전략 모드에서 "리서치 필요"라고 판단하면 자동으로 S를 호출하고, 결과를 받아 글쓰기 모드로 이어가는 흐름.

📚 도움 받은 글 (옵션)

  • OpenClaw 공식 문서

  • RivalSearchMCP / fastmcp-gateway 스킬 문서

  • Claude Anthropic 4월 정책 업데이트 공지

  • 호두·도티 셋업 시 참고했던 지피터스 멀티 에이전트 사례글들

1
1개의 답글

뉴스레터 무료 구독

👉 이 게시글도 읽어보세요