DeerFlow
Costes en DeerFlow: trabajo útil frente a tráfico repetido de herramientas
Diseña una prueba con tokens, ráfagas, motivos de parada y archivos aceptados sin atribuir mejoras de rendimiento que no se han medido.
Qué aprenderás
- Dos ventanas cuentan objetos diferentes
- Advertir y detener tienen efectos contables distintos
- Incluye los fallos en el coste por archivo aceptado
Antes de empezar
- Conceptos básicos de Python, HTTP y contenedores
- Una tarea propia con criterios de aceptación
Explica el límite de implementación y aplica la lista o el ejercicio aislado del capítulo.
Conclusiones clave
- Repetición de conjuntos y frecuencia usan ventanas distintas.
- El límite debe ser alcanzable dentro de su ventana.
- El coste útil incluye intentos fallidos y limitados.
Dos ventanas cuentan objetos diferentes
El constructor advierte por defecto tras tres conjuntos de llamadas coincidentes y detiene tras cinco dentro de una ventana de veinte. Otra capa cuenta nombres de herramientas aunque varíen los argumentos, con valores iniciales de treinta para advertir y cincuenta para detener. La configuración efectiva puede cambiarlos, incluso por herramienta; no son límites universales del servicio.
La ventana de frecuencia alcanza como mínimo el mayor límite de parada configurado. Una cola de veinte elementos nunca podría alcanzar un umbral de cincuenta, haciendo inalcanzable la protección. Una deque y un Counter sincronizado permiten aumentar y reducir contadores sin recorrer toda la ventana en cada llamada; una excepción por herramienta también puede ampliar la ventana compartida.
Advertir y detener tienen efectos contables distintos
Una advertencia de repetición queda como candidata mientras se examina el resto del lote. La contabilidad de frecuencia continúa y un límite posterior puede sustituir la advertencia por una parada. Así se evita que una advertencia temprana oculte una ráfaga más grave dentro de la misma respuesta del modelo. Una respuesta y una invocación de herramienta no son unidades equivalentes.
La parada suprime las llamadas propuestas y registra un motivo; la advertencia espera a la siguiente petición al modelo. El presupuesto de tokens se instala mediante otra rama del constructor. Mide por separado tokens, ejecución de herramientas, duración del entorno y aceptación del archivo: menos llamadas pueden ser peores si la tarea no se resuelve.
Incluye los fallos en el coste por archivo aceptado
Prepara tareas propias fijas con salidas esperadas y registra modelo, configuración, concurrencia y revisión. Incluye intentos fallidos y limitados en el gasto total y divídelo por archivos aceptados. Publica distribuciones de latencia solo cuando existan muestras; si no hubo carga, conserva valores desconocidos en lugar de tomar cifras promocionales del proyecto.
El registro ilustrativo usa null deliberadamente. Compara una base y un solo cambio cada vez, conservando el motivo de cada rechazo. Aumentar límites puede rescatar investigaciones largas legítimas, pero también eleva la exposición máxima y oculta una descomposición deficiente. Revisa falsos positivos concretos antes de subir umbrales.
Pasos de implementación
- 1
Fija tareas, commit y configuración del modelo.
- 2
Registra tokens, llamadas, duración y motivo por intento.
- 3
Revisa todos los archivos con la misma rúbrica.
- 4
Cambia un límite después de estudiar falsos positivos.
Ejemplo para copiar
{"attempts":0,"acceptedArtifacts":0,"totalModelCost":null,"sandboxSeconds":null,"p95LatencyMs":null,"costPerAcceptedArtifact":null,"stopReasons":{},"benchmarkExecuted":false}Preguntas frecuentes
¿Mi instancia siempre usa 3/5 y 30/50?
No. Son valores iniciales del constructor inspeccionado; la configuración y las excepciones por herramienta determinan los efectivos.
¿Menos llamadas significa menor coste total?
No necesariamente. También cuentan rechazos, reintentos, elección de modelo y tiempo del entorno.
Fuentes
- README.mdFuente verificada 2026-09-08
- LICENSEFuente verificada 2026-09-08
- backend/README.mdFuente verificada 2026-09-08
- backend/pyproject.tomlFuente verificada 2026-09-08
- backend/docs/middleware-execution-flow.mdFuente verificada 2026-09-08
- backend/packages/harness/deerflow/agents/lead_agent/agent.pyFuente verificada 2026-09-08
- backend/packages/harness/deerflow/agents/middlewares/loop_detection_middleware.pyFuente verificada 2026-09-08
- backend/packages/harness/deerflow/agents/middlewares/_bounded_dict.pyFuente verificada 2026-09-08
- backend/packages/harness/deerflow/config/loop_detection_config.pyFuente verificada 2026-09-08
- backend/packages/harness/deerflow/sandbox/local/local_sandbox_provider.pyFuente verificada 2026-09-08
- backend/app/gateway/auth_middleware.pyFuente verificada 2026-09-08
- backend/app/gateway/csrf_middleware.pyFuente verificada 2026-09-08
- docker/docker-compose.yamlFuente verificada 2026-09-08