안녕하세요, 멀티 에이전트 워크플로우를 프로덕션에서 운영하는 시니어 엔지니어입니다. 이번 글에서는 바이트댄스 산하 오픈소스 프로젝트 디어플로우(DeerFlow)에 xAI의 Grok 4와 DeepSeek V4를 결합해 검색·리서치·코드 생성 파이프라인을 어떻게 설계해야 하는지, 그리고 한국·중국·일본 시장에서 자주 마주치는 결제·접속 문제를 HolySheep AI 게이트웨이로 어떻게 해결하는지 12주간 운영한 실전 데이터로 정리했습니다.
디어플로우는 본질적으로 “플래너(Planner) – 리서처(Researcher) – 코더(Coder) – 리포터(Reporter)” 4단 LLM 에이전트가 협업하는 그래프 구조입니다. 이 구조의 가장 큰 비용 드라이버는 ‘리서치 노드’입니다. Tavily/SerpAPI 같은 검색 툴이 반환한 30~80개 URL을 코더가 직접 요약하는 흐름이 일반적인데, LLM 호출이 1회 워크플로우당 평균 25~80회 발생합니다. 따라서 어떤 모델을 어디에 꽂느냐가 곧 월 단위 비용을 결정합니다.
저는 지난 분기 세 가지 스택을 비교했습니다. (A) 전부 GPT-4.1로 통일, (B) Grok 4 + DeepSeek V4 듀얼, (C) Claude Sonnet 4.5 + Gemini 2.5 Flash 듀얼. 결론부터 말하면 B안이 동일 품질 대비 비용을 약 71% 절감했습니다.
디어플로우 내부 구조 한 장으로 이해하기
- Planner: 사용자 질의를 받아 서브태스크 그래프와 의존성을 생성 — 컨텍스트 1k~2k, 정확도 요구 ↑
- Researcher: 각 서브태스크에 대해 병렬 검색과 페이지 파싱을 수행 — 호출 횟수 ↑↑
- Coder: Researcher 결과를 받아 Python 코드·표·차트 생성 — 환각 최소화 필요
- Reporter: 최종 마크다운 리포트를 통합 — 장문 컨텍스트 처리 능력 필요
각 노드의 특성에 맞춰 모델을 매핑하는 게 핵심입니다. 아래 표는 제가 실제로 A/B 테스트한 결과입니다.
| 노드 | 모델 선택 | 선택 이유 | 평균 토큰/콜 | p95 지연(ms) |
|---|---|---|---|---|
| Planner | Grok 4 | 구조화된 분해에 강함, 128k 컨텍스트 | 1,840 | 1,920 |
| Researcher | DeepSeek V4 | 저비용 대량 호출용 | 2,310 | 1,140 |
| Coder | Grok 4 | 코드 환각률 최저 | 1,520 | 2,080 |
| Reporter | DeepSeek V4 | 장문 요약 비용 최적화 | 4,210 | 1,860 |
HolySheep AI 게이트웨이를 통한 통합 이유
한국·중국·일본 개발자가 Grok 4와 DeepSeek V4를 동시에 쓰려면 두 가지 벽이 있습니다. 첫째, xAI 콘솔은 한국 신용카드와 일부 중국 발행 비자를 거절합니다. 둘째, 두 벤더의 API 엔드포인트가 달라서 디어플로우 설정이 분기 처리에 취약해집니다. HolySheep AI는 지금 가입 후 발급받은 단일 키로 두 모델을 모두 호출할 수 있고, 한국 결제 수단을 그대로 받아 외화 수수료를 0원으로 만들 수 있습니다.
# config/llm.yaml — HolySheep 게이트웨이 단일 엔드포인트
providers:
holysheep:
base_url: https://api.holysheep.ai/v1
api_key: ${HOLYSHEEP_API_KEY}
timeout: 60
max_retries: 3
models:
planner:
provider: holysheep
name: grok-4
temperature: 0.2
max_tokens: 4096
researcher:
provider: holysheep
name: deepseek-v4
temperature: 0.4
max_tokens: 4096
coder:
provider: holysheep
name: grok-4
temperature: 0.1
max_tokens: 8192
reporter:
provider: holysheep
name: deepseek-v4
temperature: 0.5
max_tokens: 8192
디어플로우는 LLM 호출을 langchain의 ChatModel 추상체로 라우팅하므로 위 YAML만 바꾸면 됩니다. 다음은 디어플로우의 LLM 등록부를 패치하는 코드입니다.
# deerflow/patch_llm.py
from langchain.chat_models import init_chat_model
from deerflow.config import load_yaml
CFG = load_yaml("config/llm.yaml")
def build_chat(role: str):
spec = CFG["models"][role]
return init_chat_model(
model=spec["name"],
model_provider="openai", # OpenAI 호환 프로토콜
base_url=CFG["providers"]["holysheep"]["base_url"],
api_key=CFG["providers"]["holysheep"]["api_key"],
temperature=spec["temperature"],
max_tokens=spec["max_tokens"],
timeout=CFG["providers"]["holysheep"]["timeout"],
max_retries=CFG["providers"]["holysheep"]["max_retries"],
)
plan_llm = build_chat("planner")
search_llm = build_chat("researcher")
code_llm = build_chat("coder")
report_llm = build_chat("reporter")
프로덕션 워크플로우 풀 코드
# workflow/run_research.py
import asyncio
from deerflow import State, ResearchGraph
from patch_llm import plan_llm, search_llm, code_llm, report_llm
graph = ResearchGraph(
planner=plan_llm,
researcher=search_llm,
coder=code_llm,
reporter=report_llm,
search_tool="tavily",
concurrency=8, # 동