Cuando un paso termina y arranca el siguiente, ¿qué viaja entre ellos? Hay dos pecados opuestos:
La regla: cada paso recibe el mínimo que necesita para hacer su trabajo bien. Ni más, ni menos.
fields, el siguiente paso recibe fields. No el texto crudo del que vino, a menos que lo necesite.document_id, no el documento. El paso que lo necesita lo trae con tool.Pensá el contexto compartido como la mesada de la cocina. Tenés lo que estás usando ahora, no toda la despensa. Si trabajás con TODA la despensa abierta sobre la mesada, no encontrás el cuchillo cuando lo necesitás. El modelo es igual: con demasiado contexto pierde de vista lo que importa.
En el YAML de la cadena, declarás explícitamente qué entra a cada paso. No "todo lo que esté en el contexto", sino "estas keys, de estos pasos":
- id: recommend
input:
category: from chain.steps.classify.output.category
severity: from chain.steps.severity.output.score
fields: from chain.steps.extract.output.fields
# NO: 'todo el contexto'Declarativo, auditable, debuggeable. Si un paso recibe algo, está escrito; si no lo recibe, también está escrito.
A la derecha, cuatro transiciones de tu cadena. Para cada una, arrastrá la pieza que describe el mínimo correcto que debería estar en el contexto. Una de las piezas no se pasa nunca. esa va al slot "nunca".