Quiero usar salida estructurada
Para un desarrollador que renderiza la salida del agente en un widget en lugar de texto de chat · 15 min · una app mínima funcional
Terminas con una sesión que devuelve JSON conforme a un esquema que tú defines, dirigido a tu propio widget en lugar de a la transcripción.
Antes de empezar#
- Una app mínima funcional
- Un JSON Schema que describa la forma que quieres recibir. No incluyas
las claves
$schemani$id— la librería las elimina antes de pasar el esquema al SDK, pero un esquema redactado en otro lugar (por ejemplo un archivo de contrato compartido) puede seguir llevándolas.
Pasos#
- Define
output_schemaenCocoOptions:options = st_coco.CocoOptions( connection="my_connection", output_schema={ "type": "object", "properties": { "status": {"type": "string"}, "count": {"type": "integer"}, }, "required": ["status", "count"], }, ) - Gestiona el payload estructurado a medida que llega, ya sea con un
callback o leyéndolo de vuelta después del turno:
def on_structured(payload: dict, result: st_coco.CocoChatResult) -> None: st.metric("Count", payload["count"]) st_coco.panel(session, on_structured_output=on_structured)O lee
session.structured_output/session.chat_result().structured_outputdespués de que un turno se complete, sin un callback. - Opcionalmente, dale al renderizado estructurado su propio contenedor en
lugar de dejar que aparezca en línea en la transcripción:
box = st.container() st_coco.panel(session, structured_output_container=box) - Para una llamada headless puntual, pasa
output_schemadirectamente aquery()en lugar de a través deCocoOptions— ver Quiero ejecutar CoCo en modo headless.
Resultado#
Cuando el resultado final del agente lleva un payload estructurado, panel() (o tu callback on_structured_output) lo recibe como un dict de Python conforme a tu esquema, y session.chat_result().structured_output contiene el mismo valor. Si el turno no produce ningún payload estructurado, ambos permanecen None — la transcripción sigue mostrando la respuesta en texto plano.
Variaciones#
structured_output.pydemuestra el flujo completo — ejecútalo conmake structured(ver Referencia de apps de ejemplo).request_input(question, schema=...)es un mecanismo diferente:recoge una respuesta estructurada del usuario entre turnos, no del agente — ver Referencia de la API.