Hashline frente a Replace: ¿importa el formato de edición?

Traducción automática Artículo original.


contenido

El artículo El problema del harness de Can Bölük mostró que las ediciones de tipo hashline (ancladas a números de línea, como 4#WB) superaban a las ediciones tradicionales en modo replace (basadas en coincidencias de old_string/new_string) para los agentes de programación. He estado experimentando con la creación de mi propio harness (tau), y quería verificar este resultado y ver si debía plantearme usar hashline como estrategia de edición predeterminada en él. Así que creé edit-bench para comprobarlo por mi cuenta con varios lenguajes y modelos.

Configuración

edit-bench genera pruebas basadas en mutaciones a partir de bases de código existentes. Le indicas un directorio a un script y este genera mutaciones como eliminar una instrucción, invertir un booleano, intercambiar argumentos, etc.

  • Lenguajes: Python (de hive), TypeScript (de oh-my-pi), Rust (de irradiate)
  • Modelos: gpt-4.1-mini, google/gemini-3-flash-preview, qwen/qwen3.5-397b-a17b
  • Modos de edición: replace (old_string/new_string) frente a hashline (anclado a números de línea)
  • 20 tareas por lenguaje, ejecuciones de un único intento, en modo one-shot
  • También añadí hace poco la búsqueda de coincidencias aproximadas a tau (recorte en cascada: trim_end → trim_both → unicode normalization) y quería ver si esto ayuda

Resultados

Modo replace:

Modelo Python TypeScript Rust
gemini-3-flash 95% 80% 95%
qwen3.5-397b 90% 85% 85%
gpt-4.1-mini 65% 75% 45%

Modo hashline (de ejecuciones anteriores):

Modelo Python TypeScript Rust
gemini-3-flash 70% 85% 90%
qwen3.5-397b 85% 85% 90%
gpt-4.1-mini 50% 70% 55%

Hashline perjudica notablemente a Python y parece tener un efecto aproximadamente neutro en TypeScript y Rust. La dependencia del lenguaje es interesante: la relevancia sintáctica de los espacios en blanco en Python podría hacer que las ediciones ancladas a líneas fueran más propensas a errores.

¿Ayuda la búsqueda de coincidencias aproximadas?

Por lo visto, no.

Añadí la recopilación de trazas para ver si el recorte aproximado en cascada de tau llega a activarse durante las ejecuciones en modo replace. En 114 ediciones realizadas con éxito y 20 ediciones fallidas (3 modelos × 3 lenguajes), la búsqueda de coincidencias aproximadas se activó cero veces.

De las 20 ediciones fallidas:

  • 1 tenía espacios en blanco al final (teóricamente corregible)
  • ~8 incluían números de línea en old_string (error del modelo)
  • ~11 tenían contenido completamente inventado

Cuando los modelos aciertan con old_string, también aciertan con los espacios en blanco. Cuando se equivocan, se equivocan por completo: el recorte en cascada no ayuda.

(Detalles del análisis de trazas)

Conclusiones

  1. No hay un ganador claro entre hashline y replace. El efecto depende del lenguaje y del modelo. Python penaliza a hashline; TypeScript es neutro; en Rust no hay un ganador claro.

  2. Los resultados de Can son difíciles de generalizar. El react-edit-benchmark solo usa JavaScript y emplea un LSP para obtener información de validación. Nuestro entorno de pruebas (sin LSP, con varios lenguajes) muestra un panorama diferente. El ciclo de retroalimentación del LSP, en particular, probablemente actúe como factor de confusión. Dar al modelo errores de tipos para que vuelva a intentarlo supone una mejora considerable que interactúa con el formato de edición.

  3. Con los modelos actuales, la búsqueda de coincidencias aproximadas no hace falta. Los LLM o bien reproducen el texto fuente con exactitud, o bien se inventan algo completamente distinto. Los casos de coincidencias casi exactas con diferencias en los espacios en blanco que la búsqueda de coincidencias aproximadas pretende resolver apenas se dan en la práctica.

  4. Para los modelos de la generación actual en los harnesses actuales, el formato de edición no es el cuello de botella. La diferencia entre modelos (gemini-3-flash con un 90 % o más frente a gpt-4.1-mini con un 55-65 %) es mucho mayor que la diferencia entre formatos de edición. Invierte en la selección del modelo y en la ingeniería de prompts antes de preocuparte por el formato de edición.

Advertencia obligada: muestra pequeña, sin rigor estadístico; interprétalo en consecuencia.

Todos los datos: nwyin/edit-bench, incidencias #13 y #14.