Herramientas
Con tools, Jeimy puede pedirle a tu código que ejecute una función —consultar una base, llamar a otra API— y usar el resultado para responder. Es el mismo formato de OpenAI.
1. Declara la herramienta
Sección titulada «1. Declara la herramienta»tools = [{ "type": "function", "function": { "name": "consultar_stock", "description": "Devuelve cuántas unidades hay de un producto", "parameters": { "type": "object", "properties": {"producto": {"type": "string"}}, "required": ["producto"], }, },}]
mensajes = [{"role": "user", "content": "¿Cuántas cajas de mango nos quedan?"}]r = client.chat.completions.create(model="aguila", messages=mensajes, tools=tools)2. Ejecútala si el modelo la pide
Sección titulada «2. Ejecútala si el modelo la pide»import json
llamada = r.choices[0].message.tool_calls[0]args = json.loads(llamada.function.arguments) # {"producto": "mango"}resultado = {"producto": args["producto"], "cajas": 42} # tu código real va acá
mensajes.append(r.choices[0].message)mensajes.append({ "role": "tool", "tool_call_id": llamada.id, "content": json.dumps(resultado),})3. Devuélvele el resultado
Sección titulada «3. Devuélvele el resultado»final = client.chat.completions.create(model="aguila", messages=mensajes, tools=tools)print(final.choices[0].message.content) # "Quedan 42 cajas de mango."Controlar cuándo la usa
Sección titulada «Controlar cuándo la usa»tool_choice |
Qué hace |
|---|---|
"auto" |
El modelo decide (por defecto) |
"none" |
No usa ninguna |
"required" |
Tiene que usar alguna |
{"type": "function", "function": {"name": "..."}} |
Tiene que usar esa |
Cuando el modelo pide una herramienta, finish_reason es tool_calls.
En el formato Anthropic funciona igual, con tools, bloques tool_use y tool_result.
