Blog | Desarrollador | | 9 minutos de lectura

Cómo Rewire creó un asistente de voz que se reescribe a sí mismo tras cada respuesta incorrecta

Cómo Rewire creó un asistente de voz que se reescribe a sí mismo tras cada respuesta incorrecta

Principales conclusiones

  • Rewire identifica los fallos de los agentes, genera soluciones alternativas y las valida comparándolas con las llamadas anteriores antes de actualizar el flujo de trabajo en tiempo real.
  • La base de datos Actian VectorAI almacena las soluciones validadas como patrones de fallo persistentes que pueden recuperarse y reutilizarse en diferentes sesiones y dominios.
  • Rewire clasifica los fallos por estructura en lugar de por vocabulario de dominio, recopilando detalles como el tipo de fallo, la función del nodo, las herramientas y el comportamiento de verificación.
  • Posteriormente, un agente sanitario recuperó una solución de fijación de precios de frenos y la utilizó para corregir un copago de seguro inventado, a pesar de que no existía ningún vocabulario compartido entre ambos ámbitos.
  • La autoevolución entre dominios depende del almacenamiento de firmas de fallos reutilizables y de la validación de cada solución recuperada antes de que pueda modificar un flujo de trabajo en funcionamiento.

Este proyecto se presentó inicialmente en el Hackatón de Agentes Autoevolutivos.

El agente de voz de Rewiresimuló un precio de frenos, localizó el fallo en el nodo responsable, generó 33 soluciones alternativas, descartó 27 durante la validación y aplicó el parche restante a la memoria de la base de datos Actian VectorAI. Posteriormente, un agente sanitario creado por Rewire recuperó ese parche, lo asoció a un copago de seguro simulado y corrigió el error a la primera, sin que hubiera ningún vocabulario compartido entre ambos ámbitos.

Esa transferencia funciona porque Rewire indexa los patrones de fallo por estructura, en lugar de por el lenguaje de la llamada que los generó. La representación capta el tipo de fallo, la función del nodo, las herramientas disponibles y si el agente asignó un valor que nunca había verificado.

Lo que queda tras ese proceso es un patrón de error lo suficientemente preciso como para que la búsqueda dé resultados incluso cuando el ámbito, quien realiza la consulta y la pregunta sean diferentes. Tal y como lo describió Aayush Gupta, creador de Rewire: «Nosotros escribimos la función de aptitud. Ella escribió las reglas».

Si estás desarrollando un agente que evoluciona por sí mismo, este caso práctico explica qué tipo de representación de fallos debes almacenar y cómo validar una solución recuperada antes de que se aplique a un flujo de trabajo en producción.

TL;DR

  • Rewire identifica y soluciona los fallos de los agentes de forma autónoma. Localiza el fallo en el nodo del flujo de trabajo responsable, genera soluciones alternativas y las valida comparándolas con llamadas anteriores.
  • VectorAI DB proporciona a esas correcciones memoria persistente. Rewire almacena las correcciones validadas como patrones de fallo reutilizables.
  • La memoria se transfiere entre dominios. Un agente sanitario recuperó una corrección generada originalmente a raíz de un fallo en la fijación de precios de los frenos y la utilizó para corregir un copago ficticio.

Por qué la ingeniería de prompts no es la solución adecuada

Un parche manual en la indicación puede solucionar un fallo conocido, pero solo se aplica a una instancia. Si el mismo error aparece en otro flujo de trabajo, hay que localizarlo, reescribir la indicación y esperar que la siguiente llamada no falle de otra forma. Una actualización de la indicación que indique a Rewire que recupere el precio aprobado antes de responder no garantiza que el agente recurra a la herramienta de consulta la próxima vez.

Las indicaciones modifican el comportamiento de un modelo de forma probabilística. Sin un mecanismo que relacione dos fallos, la memoria del agente nunca aprende que el mismo error se aplica a otro ámbito, como el copago sanitario o la franquicia del seguro. Una conversación diferente pondrá de manifiesto el mismo caso de fallo.

La «Generación Aumentada por Recuperación» (RAG) mejora lo que recupera un agente, pero Rewire modifica la instrucción o el comportamiento del flujo de trabajo que no logró activar la recuperación en la primera llamada. El agente de voz modifica su entorno de ejecución tras cada incidencia, mientras que la memoria semántica almacena los patrones de fallo recurrentes como contexto reutilizable. Aayush describe así el enfoque de Rewire ante los fallos de los agentes: «Nuestro agente de voz detecta sus propios errores y reescribe su propio grafo de conversación. Nadie tiene que modificar las indicaciones».

Cómo funciona el bucle de reescritura automática

El bucle de agentes autoevolutivo de Rewire transforma los fallos de los agentes en cambios validados en el grafo de conversación a través de cinco componentes.

Dograh dirige y adapta el desarrollo de la conversación, Pioneer apoya la inferencia del agente, y Senso evalúa cada respuesta comparándola con el conocimiento verificado y almacena la política de escalado. El validador del sistema rastrea los fallos hasta el nodo raíz, genera parches alternativos, los compara localmente con llamadas históricas y actualiza el gráfico en tiempo real. Actian VectorAI DB almacena las firmas de fallos independientes del dominio y los datos de los parches correspondientes a las correcciones que han sobrevivido.

Este diagrama muestra cómo Rewire gestiona un fallo a lo largo de las fases de diagnóstico, generación de soluciones, validación y almacenamiento en memoria.

reestructurar la arquitectura autoevolutiva

Pioneer y Senso

Pioneer genera el comportamiento del agente, y Senso proporciona el conocimiento verificado que se utiliza para evaluar dicho comportamiento.

El punto final de Pioneer, compatible con OpenAI, aloja el modelo gpt-5.4-mini que genera las respuestas del agente. Cada llamada genera datos de ejecución para el flujo de trabajo, incluyendo el nodo, las instrucciones, las herramientas disponibles, las llamadas a herramientas y las transiciones. Rewire utiliza estos registros para determinar cómo generó el agente una respuesta y dónde se produjo un fallo.

Senso proporciona la señal de evaluación. Su punto final de búsqueda recupera la respuesta verificada y la referencia que la respalda para la pregunta del usuario. SensoOracle compara la respuesta del agente con esa evidencia y devuelve un veredicto estructurado que incluye la puntuación de corrección, la fundamentación, el valor de referencia, el tipo de fallo, el razonamiento diagnóstico y el resultado de la escalación. Cada solución candidata se evalúa en función de este veredicto antes de que Rewire pueda aprobarla.

Esta separación permite que el bucle abarque ambos aspectos del error. Pioneer muestra lo que hizo el agente, mientras que Senso establece lo que el agente debería haber hecho basándose en conocimientos verificados. En el error de fijación de precios, el agente tenía acceso a la herramienta de la base de conocimientos, pero no la utilizó. Senso proporcionó el precio verificado, de modo que Rewire pudo identificar la respuesta incorrecta e incorporarla al bucle de evolución.

Identificación de nodos y generación de posiciones alternativas

Rewire identifica primero qué nodo ha provocado el fallo y, a continuación, genera tres soluciones alternativas para ese nodo, en lugar de optar por una única solución.

El nodo que generó la respuesta incorrecta puede no ser el mismo que el que provocó el problema subyacente. Rewire utiliza Dograh’s node_transition los eventos y el historial de ejecución para rastrear el fallo hasta su nodo raíz. A continuación, crea una firma de fallo a partir de la estructura del fallo y la utiliza para determinar cuál de los cuatro operadores de mutación que se indican a continuación es el adecuado:

  • append_constraint añade una restricción de comportamiento a la instrucción existente del nodo.
  • add_tool_requirement requiere que el nodo ejecute una herramienta específica en una condición definida.
  • rewrite_instruction sustituye las instrucciones existentes de un nodo.
  • change_transition modifica el trazado del gráfico.

«Rewire» seleccionado add_tool_requirement por el fallo en la fijación de precios de los frenos. El parche actualizó pricing_lookup exigir una consulta en la base de conocimientos antes de facilitar información específica sobre precios.

Antes de que Rewire pueda aplicar ese cambio al gráfico en producción, el validador alojado en Guild debe probarlo. El validador aplica cada parche a una copia local del flujo de trabajo y lo reproduce comparándolo con las llamadas históricas. Rewire solo mantiene una propuesta cuando esta corrige el fallo que la ha desencadenado sin alterar el comportamiento que antes era correcto. El sistema promociona al gráfico en producción la corrección que haya superado la prueba y que presente la puntuación de confianza de validación más alta.

La asignación de memoria de Actian

La base de datos Actian VectorAI almacena las soluciones validadas por tipo de fallo, de modo que Rewire pueda recuperarlas en todos los dominios.

Rewire construye el vector a partir de la firma del fallo. La firma recoge el tipo de fallo, la función del nodo, las herramientas disponibles, la invocación de la herramienta y si el agente ha indicado un valor concreto. Excluye la pregunta del usuario y los términos específicos del ámbito, de modo que la recuperación se centra únicamente en la estructura del fallo.

Este bloque de código muestra el momento exacto en el que un parche validado se introduce en la base de datos de VectorAI:

def store(self, patch: WorkflowPatch) -> str:
        """Embed the patch's failure signature, upsert with its flat payload.

        Returns the Actian point id (a uuid5 of `patch.patch_id`, so this is a
        true upsert — storing the same patch twice after validation flips it
        from candidate to promoted in place rather than duplicating it).
        """
        self._require_ready()
        vector = embed(patch.signature.to_embedding_text())
        pid = point_id_for(patch.patch_id)
        self.client.points.upsert(
            self.collection,
            [PointStruct(id=pid, vector=vector, payload=patch.to_actian_payload())],
        )
        return pid

Patrón de fallo indexado por forma y almacenado en la base de datos de VectorAI tras superar la prueba de reproducción.

signature.to_embedding_text() genera el texto que Rewire incorpora para su recuperación. El store() El método convierte la firma del fallo en un vector de 384 dimensiones, obtiene un identificador determinista a partir del identificador del parche e inserta o actualiza tanto el vector como la carga útil del parche en la colección. Al reutilizar el mismo identificador de parche, se actualiza el punto existente en lugar de crear un duplicado.

Para la demostración entre dominios, Aayush ejecutó un agente sanitario con un caso de fallo independiente. Este inventó un copago de seguro de 40 dólares frente a un importe verificado de 47 dólares y, a continuación, recuperó el parche de «brake-pricing» de la base de datos de VectorAI. La firma del fallo no contenía términos sanitarios, pero el patrón común era que el agente afirmaba un valor específico sin utilizar ninguna herramienta de verificación disponible. Si Rewire incorporara la pregunta de la persona que llama o palabras clave específicas del ámbito, la recuperación dependería del vocabulario.

El resultado entre dominios y lo que significa para tu agente

El fallo relacionado con la sanidad funcionó porque Rewire indexó la estructura del fallo en lugar de su ámbito. La firma incluía las propiedades que ambos fallos compartían, por lo que VectorAI DB pudo recuperar la solución para la fijación de precios de los frenos, a pesar de que el fallo relacionado con la sanidad no contenía términos del sector de la automoción.

Aayush describió este resultado como una consecuencia inesperada del sistema: «Y luego está la parte para la que no lo habíamos diseñado: la regla que aprendió sobre los precios de los frenos fue recuperada de Actian por un agente del sector sanitario, de un ámbito diferente, sin vocabulario compartido, que se emparejó únicamente por la forma del fallo, y solucionó un copago de seguro ficticio a la primera».

Si deseas que tu propio agente autoevolutivo realice búsquedas entre dominios, incorpora únicamente la representación del fallo que quieras que el sistema reutilice. La indexación de la conversación completa introduce lenguaje específico del dominio en la señal de búsqueda y puede limitar los fallos que coinciden. Rewire mantiene esa representación a nivel de la firma del fallo. La recuperación proporciona una solución candidata, pero Rewire valida dicha solución antes de permitir que modifique el grafo. Un parche generado en un flujo de trabajo solo puede llegar a otro después de haber superado el mismo proceso de evaluación.

La tabla siguiente recoge tres patrones del diseño de Rewire que puedes implementar hoy mismo en la arquitectura de tu agente.

Patrón Lo que hizo Rewire Lo que implementas 
Índice por forma Codificaron las firmas de fallos utilizando propiedades estructurales y las almacenaron en la base de datos de VectorAI sin contenido específico del dominio. Define un esquema de fallo normalizado que refleje cómo se produjo el fallo del agente y, a continuación, incorpora esa representación para poder recuperarla.
Eliminar mediante repetición Se comprobaron las correcciones generadas y recuperadas en relación con el fallo que las provocó y con las llamadas históricas; Rewire solo promovió aquellas correcciones que resolvían el fallo sin introducir regresiones. Aplicar cada posible corrección al flujo de trabajo actual, reproducir casos históricos representativos y dar luz verde al cambio solo después de que haya superado la prueba de regresión.
Dejemos que el agente redacte las normas  Se permitió al agente proponer actualizaciones del grafo dentro de un conjunto acotado de operadores de mutación y, a continuación, se validó el flujo de trabajo resultante. Otorgar al agente control sobre la regla de comportamiento que propone, limitar los operadores de mutación disponibles y dejar que la validación basada en la ejecución decida qué reglas se mantienen.

La reutilización entre dominios depende de la representación del fallo almacenada en la memoria y de la validación que se aplica antes de la reutilización. VectorAI DB proporcionó a Rewire un almacenamiento persistente para los patrones de fallo validados, de modo que una solución aprendida en una sesión puede estar disponible cuando otro agente se encuentre con la misma estructura de fallo.

Prueba VectorAI DB Community Edition en tu ordenador local con el comando «docker pull».

Esta versión se presentó originalmente en el Hackatón de Agentes Autoevolutivos. Consulta el proyecto Rewire en GitHub.