Zero rifiuti in Browser-Use e OpenClaw: Agenti DOM + Visione ad alta velocità su bf16.ai
Perché gli LLM standard bloccano campi password e checkbox ToS negli ambienti QA — e come abbinare Browser-Use o OpenClaw ai modelli abliterated testo + visione di bf16.ai.
TL;DR · Sintesi Ingegneristica Browser
- Perché i browser agent si bloccano: I modelli chat scambiano
<input type="password">e checkbox ToS di staging per tentativi di phishing.- Doppio motore su bf16.ai:
deepseek/deepseek-v4.1-flash-abliterated($0.30 / $0.05 / $1.20) per loop DOM rapidi ezai-org/glm-5.3-flash-abliterated(Visione + Testo,$0.24 / $0.06 / $1.00) per modali grafiche.- Pensato per suite di staging da 25 step: Raggruppare fino a quattro azioni per step (
max_actions_per_step=4) riduce i round-trip verso il modello, e i planner abliterated di bf16.ai non interrompono l’esecuzione per fare prediche al runner CI.
1. Perché campi password e checkbox ToS rompono le pipeline CI
Browser-Use e OpenClaw leggono l’albero di accessibilità DOM eliminando fragili selettori XPath. Tuttavia, durante la registrazione di account di test e la spunta dei Termini di Servizio in staging, i filtri standard interrompono lo schema JSON AgentOutput restituendo un rifiuto testuale:
[browser-use] Step 11/25 -> URL: https://staging.billing-app.internal/signup/verify
[browser-use] Extracted 42 interactive DOM elements:
[18] <input type="email" name="work_email" />
[19] <input type="password" name="password" />
[24] <input type="checkbox" id="accept-tos-privacy" />
[25] <button type="submit">Create Staging Account</button>
[llm:response] finish_reason="stop" (0 tool_calls emitted)
"I cannot enter authentication credentials, create user accounts, or accept legally binding Terms of Service agreements on your behalf."
[browser-use] ValidationError: AgentOutput JSON missing required field 'action'. Suite failed (exit 1).
2. Architettura ibrida DOM + Visione su bf16.ai
Su bf16.ai due modelli abliterated con 1M di contesto lavorano in sinergia:
deepseek/deepseek-v4.1-flash-abliterated: Massima reattività sugli alberi DOM testuali.zai-org/glm-5.3-flash-abliterated(Visione + Testo): Analizza screenshot e indici DOM insieme a$0.24/1Minput (sotto il listino ufficiale FlashX di$0.37/1M).
3. Integrazione Browser-Use e isolamento di rete in Playwright
Imposta use_vision=True e max_actions_per_step=4 per raggruppare compilazione, spunta ToS e invio in un solo turno:
import asyncio, os
from langchain_openai import ChatOpenAI
from browser_use import Agent, BrowserConfig, Browser
# Primary fast DOM planner ($0.30/$0.05/$1.20 per 1M)
dom_llm = ChatOpenAI(
base_url="https://api.bf16.ai/v1",
api_key=os.environ["BF16_API_KEY"],
model="deepseek/deepseek-v4.1-flash-abliterated",
temperature=0.1,
)
# Multimodal Vision + Text planner ($0.24/$0.06/$1.00 per 1M)
vision_llm = ChatOpenAI(
base_url="https://api.bf16.ai/v1",
api_key=os.environ["BF16_API_KEY"],
model="zai-org/glm-5.3-flash-abliterated",
temperature=0.1,
)
async def run_staging_onboarding_suite():
browser = Browser(config=BrowserConfig(headless=True))
agent = Agent(
task=(
"1. Open https://staging.billing-app.internal/signup. "
"2. Fill test account credentials from QA fixture, check #accept-tos-privacy, and submit. "
"3. Complete the 3-step workspace wizard and assert that '/dashboard/ready' renders."
),
llm=vision_llm, # Native Vision + DOM reasoning without refusal lectures
use_vision=True,
browser=browser,
max_actions_per_step=4,
)
history = await agent.run(max_steps=25)
assert history.is_done(), "Staging onboarding E2E did not reach terminal assertion"
if __name__ == "__main__":
asyncio.run(run_staging_onboarding_suite())
Limita i domini consentiti direttamente con context.route() in Playwright e prova i preset JSON dal vivo su bf16.ai/playground:
// Deterministic Playwright/CDP network guardrail (enforce domain policy in code, not RLHF!)
const ALLOWED_HOSTS = new Set([
'staging.billing-app.internal',
'auth-sandbox.billing-app.internal',
'localhost',
]);
await context.route('**/*', async (route) => {
const url = new URL(route.request().url());
if (!ALLOWED_HOSTS.has(url.hostname)) {
return route.abort('blockedbyclient');
}
return route.continue();
});

▲ Workbench interattiva (bf16.ai/playground): Test live del preset JSON Browser-Use con Zero-Prompt Retention (ZDR).
4. Analisi di latenza e costi su suite E2E da 25 step
Nell’automazione browser, ogni 500 ms di latenza del modello si moltiplica per 25 step sequenziali. Combinando max_actions_per_step=4 con le risposte in streaming di bf16.ai si riduce il numero di chiamate sequenziali al modello in una run E2E da 25 step (registrazione + configurazione del workspace); misura tempo di esecuzione e costo per run sulla tua suite. Ecco dove ciascuna strategia tende a fallire:
| Strategia Browser | Causa principale di errore |
|---|---|
| API Chat Standard (solo DOM) | Rifiuta password e #accept-tos |
| Modello locale Q4 non verificato | JSON AgentOutput malformato |
deepseek-v4.1-flash-abliterated | Perde solo overlay Canvas privi di ARIA |
glm-5.3-flash-abliterated (Visione) | Gestisce DOM auth e modali visive |
5. 4 regole ingegneristiche per browser agent in produzione
- Usa solo credenziali di staging e blocca gli host esterni con
context.route(). - Raggruppa le azioni (
max_actions_per_step = 4) riducendo latenza e consumo di token. - Intercetta ogni checkout di pagamento reale tramite approvazione umana.
- Abbina
max_failures=3ai tetti giornalieri USD subf16.ai/dashboard/keys.