Skip to main content
All posts
AI 에이전트

Grok Bot도 중간에 멈추는 이유 — 오픈소스 MausBot + bf16.ai로 24시간 무중단 AI 직원 구축하기

단계당 3%의 오탐 거절률도 30단계 자율 워크플로에서는 완주율을 40%로 떨어뜨립니다. 로컬 MausBot과 bf16.ai 저거절 모델을 조합하는 실전 아키텍처와, 정가로 계산한 30단계 실행 비용.

TL;DR · 핵심 엔지니어링 요약

  • 복합 실패 확률의 함정: 개별 프롬프트 거절률이 3%에 불과해도 30단계 연속 자동화 생존율은 (0.97)^30 = 40.1%로 급락합니다. Grok Bot이 단발 채팅에선 쾌적하지만 야간 배치에서 멈추는 이유입니다.
  • 로컬 오케스트레이션 + 가중치 수준 저거절 추론: 오픈소스 MausBot(OpenMausBot, Apache-2.0)으로 세션·파일 주권을 로컬에 두고, 추론 엔드포인트를 https://api.bf16.ai/v1(deepseek/deepseek-v4.1-flash-abliterated)로 연결합니다.
  • 공식 벤더 단가 동등성 + 1M 캐시 할인: 입력 $0.30 / 캐시 $0.05 / 출력 $1.20(1M 토큰당) 요금으로 계산하면, 아래 예시와 같은 30단계 에이전트 작업 비용은 $0.0094 정도입니다.

1. 새벽 3시 14분의 중단 로그: "훈계가 적은" 챗봇도 왜 실무 루프에서 멈출까?

소규모 개발팀이나 1인 기업이라면 Claude나 GPT보다 도덕적 훈계가 적은 Grok Bot을 디지털 직원으로 투입해 본 경험이 있을 것입니다. 하지만 단발성 문답이 아니라 30단계 이상의 무인 운영 파이프라인(스테이징 포털 로그인, 테스트 사업자 번호 입력, 이용약관 동의 체크, 민감 키워드가 포함된 경쟁사 표 수집 및 정산)을 맡기면 상황은 완전히 달라집니다.

에이전트는 직렬로 도구를 호출하므로 단계당 3%의 오탐 거절만 발생해도 30단계 완주 확률은 (1 - 0.03)^30 = 40.1%로 추락합니다. 14번째 단계에서 안전 필터가 발동하면 JSON tool_calls 대신 설교 문장이 반환되어 전체 파이프라인이 즉시 중단됩니다:

[03:14:08] [mausbot:ops-worker] Step 13/30 OK -> Navigated to https://staging-partner.internal/onboarding/step-4
[03:14:09] [mausbot:ops-worker] Step 14/30 -> Action: check("#accept-msa-checkbox") + fill("#tax-id", env.STAGING_EIN)
[03:14:11] [upstream:cloud-wrapper] STOP_REASON=refusal
  "I cannot click legal binding agreements, submit tax identification numbers, or complete automated account verification steps on your behalf. Please review and submit the form manually."
[03:14:11] [mausbot:supervisor] ERROR: ToolCallExpectedError (received text lecture instead of JSON tool_calls)
[03:14:11] [mausbot:supervisor] Workflow aborted at step 14/30. Downstream Slack report & CSV reconciliation skipped.

2. 아키텍처: 로컬 MausBot 제어 플레인 + bf16.ai 직교 Abliterated 추론 엔진

해결의 핵심은 보안 권한 제어는 로컬 샌드박스 코드에 맡기고, 추론 모델에서는 과도한 거절 방향 벡터를 가중치 수준에서 직교 제거하는 것입니다.

  1. MausBot 로컬 제어: 영구 메모리, 브라우저 쿠키, 로컬 파일 접근 권한을 내 머신 안에 격리하여 역할별 봇을 병렬 구동합니다.
  2. bf16.ai 가중치 수준 저거절 추론: 추론은 deepseek/deepseek-v4.1-flash-abliterated와 멀티모달 zai-org/glm-5.3-flash-abliterated(Vision + Text)가 담당하며, bf16.ai의 모든 엔드포인트는 JSON 도구 호출 스키마, 수학 논리, 1M 컨텍스트 회상을 점검하는 6벡터 행동 검증 게이트를 통과해야 합니다.

3. 실전 설정 파일 및 결정론적 도구 호출(Tool Choice) 코드

**api.bf16.ai/v1**은 OpenAI 및 Anthropic 프로토콜과 완벽히 호환됩니다. 파일 경로와 도메인 화이트리스트는 [sandbox] 블록에 명시적으로 선언합니다:

# ~/.mausbot/agents/ops-worker.toml
[agent]
name = "ops-worker"
role = "Autonomous Operations, Staging QA & Vendor Onboarding Worker"
max_steps = 45
step_timeout_ms = 45000
require_json_tool_calls = true

[provider]
type = "openai-compatible"
base_url = "https://api.bf16.ai/v1"
api_key_env = "BF16_OPS_WORKER_KEY" # Dedicated per-bot sk-bf16-v1-* key
model = "deepseek/deepseek-v4.1-flash-abliterated"
vision_fallback_model = "zai-org/glm-5.3-flash-abliterated"
temperature = 0.15
max_tokens = 8192

[sandbox]
allowed_fs_roots = ["~/mausbot-workspaces/ops-worker"]
allowed_browser_domains = ["*.internal", "*.staging.example.com", "dashboard.stripe.com"]
require_human_approval_tools = ["wire_transfer", "production_db_drop", "delete_account"]

TypeScript 감독 루프에서는 **tool_choice: "required"**와 X-BF16-Max-Price-Per-M-Output 헤더를 결합하고 봇별 전용 sk-bf16-v1- 키를 부여하세요:

import OpenAI from 'openai';

const bf16 = new OpenAI({
  baseURL: 'https://api.bf16.ai/v1',
  apiKey: process.env.BF16_OPS_WORKER_KEY, // Scoped to $5.00/day in bf16.ai/dashboard/keys
  defaultHeaders: {
    // Hard unit-price ceiling: never route to an endpoint above $1.50 / 1M output tokens
    'X-BF16-Max-Price-Per-M-Output': '1.50',
  },
});

export async function dispatchMausBotStep(messages: OpenAI.ChatCompletionMessageParam[], tools: OpenAI.ChatCompletionTool[]) {
  const res = await bf16.chat.completions.create({
    model: 'deepseek/deepseek-v4.1-flash-abliterated',
    messages,
    tools,
    tool_choice: 'required', // Guarantees structured tool execution without prose filler
    temperature: 0.1,
  });

  const call = res.choices[0]?.message?.tool_calls?.[0];
  if (!call) {
    throw new Error(`Unexpected empty tool_call on request ${res.id}`);
  }
  return { call, usage: res.usage };
}

bf16.ai 대시보드 실제 화면(/dashboard/keys): mausbot-ops-worker 전용 키에 일일 $5.00 한도, 60 RPM, CIDR 허용 목록을 설정한 모습.

▲ bf16.ai 대시보드 실제 화면(/dashboard/keys): mausbot-ops-worker 전용 키에 일일 $5.00 한도, 60 RPM, CIDR 허용 목록을 설정한 모습.

4. 공식 단가 기준 30단계 실행 경제성

bf16.ai는 공식 벤더 표준 요금과 동일하거나 더 저렴한 단가를 제공하며, 프리픽스 캐시 적중 시 $0.05–$0.06 / 1M으로 할인됩니다. 누적 입력 10만 토큰(88% 캐시 적중)과 도구 호출 출력 1,200토큰을 기준으로 계산하면 30단계 실행 비용은 $0.0094, 즉 1센트 미만입니다:

bf16.ai 모델 ID모달리티컨텍스트입력 / 캐시 / 출력 (1M당)추천 에이전트 역할
deepseek/deepseek-v4.1-flash-abliteratedText + Tools1M$0.30 / $0.05 / $1.20고빈도 CLI, 웹 폼, ETL 워커 루프
zai-org/glm-5.3-flash-abliteratedVision + Text1M$0.24 / $0.06 / $1.00화면 캡처 모달 인식 및 시각 QA
zai-org/glm-5.3-abliteratedText + Tools1M$1.40 / $0.30 / $4.40복잡한 설계 계획, 코드 리팩터링, SAST

5. 상용 투입 전 반드시 지켜야 할 4가지 엔지니어링 수칙

  1. 봇당 전용 API 키 분리 및 일일 USD 상한 설정: 무한 루프 버그로 인한 과금을 막기 위해 **bf16.ai/dashboard/keys**에서 일일 $5.00 한도를 설정하세요.
  2. 위험 작업은 모델 윤리가 아닌 샌드박스 코드로 차단: 결제나 운영 DB 변경은 require_human_approval_tools에 등록해 사람의 승인을 거치도록 강제합니다.
  3. 도구 호출 루프의 temperature는 0.1~0.2 유지: 셀렉터 및 JSON 스키마 일관성을 극대화합니다.
  4. Flash와 Flagship 역할 분리: 반복 실행 90%는 deepseek-v4.1-flash-abliterated로 빠르게 처리하고 핵심 의사결정만 glm-5.3-abliterated로 라우팅하세요.