Éliminer les refus dans Browser-Use et OpenClaw : Agents DOM + Vision ultra-rapides sur bf16.ai
Pourquoi les LLM classiques bloquent sur les champs mot de passe et cases CGU en préproduction — et comment associer Browser-Use ou OpenClaw aux modèles abliterated texte + vision de bf16.ai.
TL;DR · Synthèse Ingénierie Browser
- Pourquoi les agents navigateur bloquent : Les LLM de chat assimilent
<input type="password">et les cases CGU (#accept-tos) en QA à de l’hameçonnage.- Double moteur sur bf16.ai :
deepseek/deepseek-v4.1-flash-abliterated($0.30 / $0.05 / $1.20) pour les boucles DOM etzai-org/glm-5.3-flash-abliterated(Vision + Texte,$0.24 / $0.06 / $1.00) pour les modales visuelles.- Pensé pour les suites de préproduction en 25 étapes : Regrouper jusqu’à quatre actions par étape (
max_actions_per_step=4) réduit les allers-retours avec le modèle, et les planificateurs abliterated de bf16.ai ne s’interrompent pas en cours d’exécution pour faire la morale à votre runner CI.
1. Pourquoi les champs password et cases CGU font échouer vos suites CI
Browser-Use et OpenClaw lisent l’arbre d’accessibilité en direct sans dépendre de sélecteurs XPath fragiles. Pourtant, lors d’une inscription automatisée en staging avec validation des CGU, un modèle grand public abandonne le schéma JSON AgentOutput pour renvoyer une leçon de morale, faisant planter le test :
[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. Architecture hybride DOM + Vision sur bf16.ai
Deux modèles abliterated à contexte 1M couvrent tous les besoins sur bf16.ai :
deepseek/deepseek-v4.1-flash-abliterated: Vitesse maximale sur DOM textuel.zai-org/glm-5.3-flash-abliterated(Vision + Texte) : Analyse captures d’écran et indices DOM à$0.24/1Men entrée (sous le tarif officiel FlashX de$0.37/1M).
3. Intégration Browser-Use et verrouillage réseau dans Playwright
Activez use_vision=True et max_actions_per_step=4 pour regrouper saisie, case CGU et envoi en un seul tour :
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())
Verrouillez les domaines autorisés directement via context.route() dans Playwright et testez vos scénarios en direct sur 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 interactif (bf16.ai/playground) : Test en direct du preset JSON Browser-Use avec rétention zéro (ZDR).
4. Latence et coût en tokens d’un parcours E2E de 25 étapes
Combiner max_actions_per_step=4 avec les réponses en streaming de bf16.ai réduit le nombre d’appels séquentiels au modèle sur un parcours E2E de 25 étapes (inscription + configuration de l’espace de travail) ; évaluez la durée et le coût de chaque run sur votre propre suite. Voici où chaque stratégie échoue le plus souvent :
| Stratégie Navigateur | Cause principale d’échec |
|---|---|
| API Chat Standard (DOM seul) | Refuse password et #accept-tos |
| Modèle local Q4 non vérifié | Schéma JSON AgentOutput invalide |
deepseek-v4.1-flash-abliterated | Ignore uniquement les Canvas sans ARIA |
glm-5.3-flash-abliterated (Vision) | Gère DOM d’auth et overlays visuels |
5. 4 règles d’ingénierie pour vos agents navigateur en production
- Utilisez uniquement des comptes de préproduction et filtrez les hôtes via
context.route(). - Regroupez les actions (
max_actions_per_step = 4) pour réduire la latence. - Bloquez toute validation de paiement réel sans approbation humaine explicite.
- Associez
max_failures=3à un plafond quotidien USD surbf16.ai/dashboard/keys.