Skip to main content
All posts
Agenti IA

Perché anche Grok Bot si blocca a metà flusso — Dipendenti IA 24/7 con MausBot + bf16.ai

Un tasso di rifiuto del 3% per singolo step riduce un workflow autonomo da 30 passaggi al 40% di successo. Come unire MausBot in locale ai modelli abliterated di bf16.ai, e quanto costa una run da 30 step a prezzi di listino.

TL;DR · Conclusioni Ingegneristiche

  • Matematica del guasto composto: Anche con solo il 3% di falsi positivi per turno, una catena di 30 step sopravvive solo nel (0,97)^30 = 40,1% dei casi.
  • Controllo locale + inferenza abliterated: Esegui MausBot (OpenMausBot, Apache-2.0) sulla tua macchina e punta base_url a https://api.bf16.ai/v1 (deepseek/deepseek-v4.1-flash-abliterated).
  • Parità coi listini ufficiali + cache 1M: A $0.30 / 1M input, $0.05 / 1M cached e $1.20 / 1M output, un job da 30 step come quello descritto più sotto costa $0.0094.

1. Anatomia di un blocco alle 03:14: perché i chatbot interrompono i loop autonomi

Anche assistenti meno moralisti come Grok Bot entrano in crisi quando gestiscono workflow presidiati zero da 30 step: accesso a portali di staging, compilazione di partite IVA di test, spunta di checkbox ToS e riconciliazione di tabelle estratte dal web.

Con un 3% di rifiuto per singolo step, la probabilità di completare 30 passaggi consecutivi scende a (1 - 0,03)^30 = 40,1%. Al passo 14 il modello risponde con una predica testuale invece di tool_calls JSON, facendo fallire l’intero job:

[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. Architettura: MausBot locale + modelli abliterated su bf16.ai

L’architettura corretta separa i permessi deterministici nel codice dal motore di inferenza:

  1. MausBot in locale (Apache-2.0): Mantiene memoria, profili browser e credenziali sul tuo hardware.
  2. Endpoint abliterated su bf16.ai: deepseek/deepseek-v4.1-flash-abliterated e il multimodale zai-org/glm-5.3-flash-abliterated (Visione + Testo) rimuovono ortogonalmente il vettore di rifiuto nei pesi, e ogni endpoint deve superare un gate di verifica comportamentale a 6 vettori che controlla gli schemi JSON delle chiamate ai tool, la logica matematica e il recupero di informazioni su 1M di contesto.

3. Configurazione di produzione e invocazione deterministica dei tool

L’endpoint api.bf16.ai/v1 è pienamente compatibile con OpenAI e Anthropic. I confini su file system e domini vanno dichiarati in [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"]

Nei supervisori TypeScript, abbina tool_choice: "required" all’header X-BF16-Max-Price-Per-M-Output e a una chiave sk-bf16-v1- dedicata per singolo bot:

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 };
}

Console reale di bf16.ai (/dashboard/keys): Creazione di una chiave dedicata con tetto giornaliero di $5.00 USD, limite 60 RPM e allowlist CIDR.

▲ Console reale di bf16.ai (/dashboard/keys): Creazione di una chiave dedicata con tetto giornaliero di $5.00 USD, limite 60 RPM e allowlist CIDR.

4. Economia dei token di una run da 30 step in parità coi listini ufficiali

bf16.ai allinea i prezzi ai listini ufficiali dei vendor e sconta automaticamente i prefissi in cache ($0.05–$0.06 / 1M), portando a $0.0094 il costo di un flusso MausBot da 30 step che consuma 100.000 token di input cumulativi (88% di prefisso in cache) e 1.200 token di output per le chiamate agli strumenti:

Modello su bf16.aiModalitàContestoInput / Cache / Output (1M)Ruolo ideale in MausBot
deepseek/deepseek-v4.1-flash-abliteratedTesto + Tools1M$0.30 / $0.05 / $1.20Loop veloci CLI, form ed ETL
zai-org/glm-5.3-flash-abliteratedVisione + Testo1M$0.24 / $0.06 / $1.00Modali visive, screenshot UI e QA
zai-org/glm-5.3-abliteratedTesto + Tools1M$1.40 / $0.30 / $4.40Pianificazione supervisore e audit SAST

5. 4 regole pratiche prima della messa in produzione continua

  1. Una chiave per bot con tetto giornaliero USD: Imposta $5.00/giorno su bf16.ai/dashboard/keys contro loop infiniti.
  2. Sicurezza nel codice, mai nel RLHF: Blocca pagamenti o cancellazioni con require_human_approval_tools.
  3. Temperatura bassa (0.1–0.2) nei loop di tool: Evita derive nei selettori CSS e negli schemi JSON.
  4. Alterna Flash e Flagship: Usa deepseek-v4.1-flash-abliterated per l’esecuzione iterativa e glm-5.3-abliterated per le decisioni architetturali.