Un ángulo diferente a las respuestas anteriores, porque todos hasta ahora están limitando escrituras: dinero, correos electrónicos, registros. La acción que tuve que aprender a limitar es la que no escribe nada, la IA respondiendo directamente a un cliente.
Un chatbot respondiendo a una persona real es también una acción externa irreversible. Una vez que ha dicho algo incorrecto, no puedes revertirlo. Pero ninguno de los instintos habituales se dispara, porque nada fue insertado, nada golpeó una API externa, ninguna fila cambió. No se parece a la clase peligrosa de acción, así que generalmente no obtiene ningún control.
Lo que uso en lugar de un paso de aprobación humana, ya que no puedes poner a un humano frente a una respuesta de chat en vivo sin matar el producto: una compuerta de confianza entre recuperación y respuesta. Si la evidencia recuperada es demasiado débil o la similitud es muy baja, el modelo no puede responder. Dice que no tiene esa información y la entrega a un humano. El rechazo es el predeterminado y responder es lo que tiene que ser ganado. La misma forma que una lista permitida, solo aplicada a si el modelo puede hablar en lugar de si puede actuar.
Dos cosas que hice mal que probablemente valga la pena transmitir.
En tu pregunta de auditoría: registro los fragmentos recuperados y sus puntuaciones de similitud junto a cada respuesta, no solo el texto final. Sin eso, “por qué dijo eso” es imposible de responder, porque el texto de la respuesta solo no te dice nada sobre lo que el modelo estaba realmente viendo. Es la versión del lado de lectura de lo que nathan3 dijo sobre almacenar el razonamiento del agente junto a la decisión.
Segundo, y este me atrapó hace dos días: la compuerta en sí puede fallar silenciosamente, y falla en la dirección que se ve segura. Una condición obsoleta en un nodo de filtro aguas abajo de la recuperación estaba eliminando cada fila, así que la compuerta vio cero evidencia y correctamente rechazó. Cada ejecución en verde, sin error lanzado. El bot cortésmente dijo a la gente que no sabía cosas que demostrablemente sí sabía, y habría seguido haciendo eso indefinidamente, porque un rechazo nunca se parece a un fallo. Solo lo encontré preguntando algo que ya sabía que los documentos fuente respondían.
Así que lo que agregaría al patrón “proponer y luego ejecutar” descrito anteriormente: cualquier componente que decida “no proceder”, monitorea con qué frecuencia se dispara. Una ruta de negación que tranquilamente se mueve de dispararse 5 por ciento del tiempo a 100 por ciento del tiempo es un sistema roto que se ve exactamente como uno cauteloso.