Propuesta IA: aflojar las restricciones que peleaban con una respuesta honesta

Medicion de 3 vueltas mas contra datos reales. El aplanado del commit anterior
NO redujo los reintentos: subieron de 3 a 10. Se mantiene porque quitar ese
nivel es correcto de todos modos, pero no cumplio su proposito.

Lo que si salio de esa medicion son dos restricciones mias que provocaban el
rechazo:

- min(5) en los textos de materiales, decisiones, menciones y red flags. Con una
  transcripcion pobre no hay nada que listar, asi que el modelo mete "N/A" o un
  guion para rellenar y falla. Ocurrio 4 veces SEGUIDAS en una vuelta. Baja a
  min(3), y el prompt ahora dice explicitamente que devolver el array vacio es la
  respuesta correcta y que no rellene.
- beneficios.etiqueta.max(40) se pasaba en 2 de 3 vueltas. Sube a 70.

Es el mismo patron que el tope de 40 partidas: el schema peleandose con la
realidad, no el modelo fallando.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
This commit is contained in:
urieljareth
2026-07-28 21:25:20 -06:00
co-authored by Claude Opus 5
parent 0c127b44c4
commit 3a1eaf6e5b
2 changed files with 8 additions and 5 deletions
+2
View File
@@ -158,6 +158,8 @@ Reglas de este paso:
ser "por_validar".
- En quienLoDijo usa el ROL ("el socio", "quien atiende el WhatsApp"), no el nombre
propio, salvo que sea el interlocutor comercial.
- Si de alguna de estas listas no hay NADA que decir, devuelvela VACIA. Un array vacio
es la respuesta correcta; no metas "N/A", "ninguno" ni un guion para rellenar.
- En redFlags anota lo que deberia preocuparle al asesor: que pidan descuento antes de
entender el alcance, que no este presente quien decide, que no haya ninguna cifra del
problema, o un "hagan todo y luego vemos".`;
+6 -5
View File
@@ -47,14 +47,14 @@ export const hechosSchema = z
)
.max(40),
materialesPendientes: z
.array(z.object({ texto: z.string().min(5), bloqueaEntrega: z.boolean() }))
.array(z.object({ texto: z.string().min(3), bloqueaEntrega: z.boolean() }))
.max(15),
decisionesPendientes: z
.array(z.object({ texto: z.string().min(5), quienDecide: z.string() }))
.array(z.object({ texto: z.string().min(3), quienDecide: z.string() }))
.max(15),
mencionesFueraDeAlcance: z.array(z.string().min(5)).max(15),
mencionesFueraDeAlcance: z.array(z.string().min(3)).max(15),
redFlags: z
.array(z.object({ senal: z.string().min(5), severidad: z.enum(["baja", "media", "alta"]) }))
.array(z.object({ senal: z.string().min(3), severidad: z.enum(["baja", "media", "alta"]) }))
.max(10),
})
.strict();
@@ -172,7 +172,8 @@ export const redaccionSchema = z
beneficios: z
.array(
z.object({
etiqueta: z.string().min(3).max(40),
// 70 y no 40: se pasaba en 2 de 3 vueltas contra datos reales.
etiqueta: z.string().min(3).max(70),
texto: z.string().min(20),
hallazgoId: z
.string()