AutoGPT, LlamaIndex & Boucles ReAct Personnalisées
Les agents autonomes fonctionnant en boucle ouverte (ReAct : Reasoning + Acting) présentent un risque critique d'emballement : un agent mal guidé peut exécuter des centaines d'appels d'outils redondants ou destructeurs en quelques minutes.
Le Sensor Boundry intègre un disjoncteur d'exécution (Circuit Breaker) spécialement conçu pour interrompre ces dérives.
1. Sécurisation d'une Boucle ReAct Personnalisée
Si vous développez vos propres agents sans framework tiers, vous pouvez encadrer directement votre boucle d'exécution :
custom_react_loop.py
import os
import time
from boundry.sensor import BoundryClient, PolicyViolationException
client = BoundryClient(
api_key=os.getenv("BOUNDRY_API_KEY"),
agent_id="autonomous-crawler-01",
fail_secure=True
)
def autonomous_react_loop(task: str, max_iterations: int = 10):
iteration = 0
context = {"task": task}
while iteration < max_iterations:
iteration += 1
print(f"\n--- Étape {iteration}/{max_iterations} ---")
# 1. Le LLM décide d'une action à effectuer
action = plan_next_step(context)
tool_name = action["tool"]
tool_args = action["args"]
# 2. Validation par le pare-feu Boundry AVANT exécution
try:
decision = client.inspect_tool_call(
tool_name=tool_name,
arguments=tool_args,
context={"iteration": iteration, "task": task}
)
if not decision.allowed:
print(f" Action refusée par la politique : {decision.reason}")
context["last_error"] = f"Action {tool_name} refusée: {decision.reason}"
continue
# 3. Exécution effective si autorisée
observation = execute_tool_safely(tool_name, tool_args)
context["last_observation"] = observation
except PolicyViolationException as pve:
print(f" ALERTE SÉCURITÉ : {pve.reason} (Score: {pve.risk_score})")
break
print("Fin de la boucle d'exécution.")
2. Intégration LlamaIndex
Pour les pipelines RAG et agents construits avec LlamaIndex :
llamaindex_boundry.py
import os
from llama_index.core.tools import FunctionTool
from boundry.sensor import BoundryClient, protect_tool
client = BoundryClient(api_key=os.getenv("BOUNDRY_API_KEY"))
# 1. Définir une fonction protégée par Boundry
@protect_tool(client=client, tool_name="query_knowledge_base")
def query_knowledge_base(query_str: str) -> str:
"""Interroge la base de connaissances documentaire de l'entreprise."""
# Logique d'interrogation du VectorStore
return f"Données trouvées pour la requête : {query_str}"
# 2. Envelopper la fonction dans un FunctionTool LlamaIndex
secure_tool = FunctionTool.from_defaults(fn=query_knowledge_base)
# 3. Passer l'outil sécurisé à l'agent LlamaIndex
# from llama_index.core.agent import ReActAgent
# agent = ReActAgent.from_tools([secure_tool], llm=llm, verbose=True)
3. Disjoncteur Automatique (Anti-Loop Circuit Breaker)
Pour activer la détection des boucles infinies sur les agents autonomes :
- Rendez-vous dans Garde-fous > Règles de Pare-feu dans la console Boundry.
- Activez l'option Circuit Breaker sur l'agent ciblé.
- Paramétrez les seuils de déclenchement :
- Répétition maximale du même outil : 5 appels consécutifs.
- Taux de rejet d'actions : coupure si plus de 3 actions bloquées en moins de 60 secondes.
- Action en cas de rupture : mise en pause immédiate de l'agent et émission d'un webhook d'alerte SecOps.