Skip to main content
All posts
AI エージェント

Grok Bot でも途中で止まる理由 — オープンソース MausBot + bf16.ai で 24 時間完走する AI 社員を構築する

1 ステップあたり 3% の誤検知拒否でも 30 ステップ連続実行では完走率が 40% に低下します。ローカル稼働の MausBot と bf16.ai の Abliterated モデルの組み合わせ方と、定価で 30 ステップを実行した場合のコストを解説する設計ガイド。

TL;DR · エンジニアリング要点

  • 複合失敗確率の罠:単発チャットで 3% しか拒否しないモデルでも、30 ステップの自律ループでは (0.97)^30 = 40.1% しか完走できません。これが Grok Bot でも夜間バッチが途中停止する原因です。
  • ローカル制御 × 重みレベル低拒否推論:Apache-2.0 の MausBot(OpenMausBot)で認証情報とファイルをローカルに保持し、推論先を https://api.bf16.ai/v1(deepseek/deepseek-v4.1-flash-abliterated)へ接続します。
  • 公式 API 同等価格 + 1M キャッシュ割引:入力 $0.30 / キャッシュ $0.05 / 出力 $1.20(1M トークンあたり)で計算すると、後述の試算と同じ 30 ステップのジョブは $0.0094 です。

1. 深夜 3 時 14 分の停止ログ:なぜ「説教の少ない」ボットでも業務フローで詰まるのか

少人数チームや個人開発者の多くが、Claude や GPT より説教が少ない Grok Bot を「AI 社員」として業務投入しようと試みます。単発の質問応答では快適ですが、30 ステップ以上の無人オペレーション(ステージング環境へのログイン、テスト用税番号の入力、利用規約チェックボックスの同意、競合価格表の抽出と Slack 通知)を任せると途端に破綻します。

各ステップでわずか 3% の誤検知(False Positive) が起きるだけで、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)を使い分けます。いずれのエンドポイントも、ツール呼び出しの JSON スキーマ・数学ロジック・1M コンテキストの想起を確認する 6 ベクトル行動検証ゲートを通過しなければ稼働できません。

3. 本番用設定ファイルと決定論的ツール呼び出しの実装

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・IP CIDR 制限を設定。

▲ bf16.ai コンソール画面(/dashboard/keys):mausbot-ops-worker 専用キーに日次 $5.00 上限・60 RPM・IP CIDR 制限を設定。

4. 30 ステップ実行のコスト試算(公式標準価格ベース)

bf16.ai は公式ベンダー標準価格に準拠しており、プレフィックスキャッシュ命中時は $0.05–$0.06 / 1M まで圧縮されます。累積入力 10 万トークン(88% キャッシュ命中)とツール呼び出しの出力 1,200 トークンで計算すると、30 ステップ実行のコストは $0.0094 です:

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画像モーダル認識・ブラウザ UI 検証
zai-org/glm-5.3-abliteratedText + Tools1M$1.40 / $0.30 / $4.40複雑な計画立案・コード監査・SAST

5. 本番投入前の 4 つの運用ガードレール

  1. 1 ボット 1 キーで日次 USD 上限を必須化:無限ループバグに備え、bf16.ai/dashboard/keys で $5.00/day のキャップを設定してください。
  2. 破壊的操作はモデルの道徳心に頼らずコードで遮断:決済や本番削除は require_human_approval_tools で人間承認を必須化します。
  3. ツール実行時の temperature は 0.1〜0.2 に固定:セレクタや JSON 引数のブレを最小化します。
  4. Flash と Flagship の適材適所:反復ステップは deepseek-v4.1-flash-abliterated で高速処理し、高度な設計判断のみ glm-5.3-abliterated に委譲します。