Ajuste fino e invocación de herramientas

Modelos que utilizan la API de finalizaciones de chat admiten llamadas a herramientas. Las funciones definidas en las llamadas de finalización del chat no siempre funcionan según lo previsto. Ajustar el modelo con ejemplos de llamadas de herramientas puede mejorar la salida del modelo:

Beneficio Descripción
Reducción de los tokens de solicitud Obtenga respuestas con formato similar incluso cuando la definición de función completa no esté presente.
Mejora de la precisión Obtenga salidas más precisas y coherentes.

Nota

function_call y functions han quedado en desuso en favor de tools. Use el tools parámetro en su lugar.

Construcción de un archivo de entrenamiento

Al construir un archivo de entrenamiento de ejemplos de llamadas a herramientas, tome una definición de función como esta:

{
    "messages": [
        { "role": "user", "content": "What is the weather in San Francisco?" },
        {
            "role": "assistant",
            "tool_calls": [
                {
                    "id": "call_id",
                    "type": "function",
                    "function": {
                        "name": "get_current_weather",
                        "arguments": "{\"location\": \"San Francisco, USA\", \"format\": \"celsius\"}"
                    }
                }
            ]
        }
    ],
    "tools": [
        {
            "type": "function",
            "function": {
                "name": "get_current_weather",
                "description": "Get the current weather",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "location": {
                            "type": "string",
                            "description": "The city and country/region, eg. San Francisco, USA"
                        },
                        "format": { "type": "string", "enum": ["celsius", "fahrenheit"] }
                    },
                    "required": ["location", "format"]
                }
            }
        }
    ]
}

Y exprese la información como una sola línea dentro del .jsonl archivo de entrenamiento como se indica a continuación:

{"messages":[{"role":"user","content":"What is the weather in San Francisco?"},{"role":"assistant","tool_calls":[{"id":"call_id","type":"function","function":{"name":"get_current_weather","arguments":"{\"location\": \"San Francisco, USA\", \"format\": \"celsius\"}"}}]}],"tools":[{"type":"function","function":{"name":"get_current_weather","description":"Get the current weather","parameters":{"type":"object","properties":{"location":{"type":"string","description":"The city and country/region, eg. San Francisco, USA"},"format":{"type":"string","enum":["celsius","fahrenheit"]}},"required":["location","format"]}}}]}

Al igual que con todo el entrenamiento de ajuste preciso, el archivo de ejemplo requiere al menos 10 ejemplos.

Optimización del costo

Para utilizar menos tokens de solicitud después del ajuste fino de las definiciones completas de funciones, pruebe las siguientes estrategias:

Estrategia Descripción
Omitir descripciones Quite el description campo de la función y los parámetros.
Omitir parámetros Quite todo el campo del objeto properties.
Omitir la función por completo Quite todo el objeto de función de la matriz de funciones.

Optimización para la calidad

Para mejorar la calidad del resultado de las llamadas a herramientas, mantenga las definiciones de función en su conjunto de datos de entrenamiento de ajuste fino y en las posteriores llamadas de finalización de chat idénticas.

Personalización de las respuestas del modelo a las salidas de función

También puede ajustar los ejemplos de llamadas a herramientas para mejorar la respuesta del modelo a las salidas de función. Incluya ejemplos que constan de mensajes de respuesta de función y mensajes de respuesta del asistente en los que la respuesta de la función se interpreta y coloca en contexto por el asistente.

{
    "messages": [
        {"role": "user", "content": "What is the weather in San Francisco?"},
        {"role": "assistant", "tool_calls": [{"id": "call_id", "type": "function", "function": {"name": "get_current_weather", "arguments": "{\"location\": \"San Francisco, USA\", \"format\": \"celsius\"}"}}]}
        {"role": "tool", "tool_call_id": "call_id", "content": "21.0"},
        {"role": "assistant", "content": "It is 21 degrees celsius in San Francisco, CA"}
    ],
    "tools": [] // same as before
}

Al igual que con el ejemplo anterior, este ejemplo se expande artificialmente para mejorar la legibilidad. La entrada real en el .jsonl archivo de entrenamiento sería una sola línea:

{"messages":[{"role":"user","content":"What is the weather in San Francisco?"},{"role":"assistant","tool_calls":[{"id":"call_id","type":"function","function":{"name":"get_current_weather","arguments":"{\"location\": \"San Francisco, USA\", \"format\": \"celsius\"}"}}]},{"role":"tool","tool_call_id":"call_id","content":"21.0"},{"role":"assistant","content":"It is 21 degrees celsius in San Francisco, CA"}],"tools":[]}

Construcción de un archivo de entrenamiento

Al construir un archivo de entrenamiento de ejemplos de llamadas de función, tome una definición de función como esta:

{
    "messages": [
        {"role": "user", "content": "What is the weather in San Francisco?"},
        {"role": "assistant", "function_call": {"name": "get_current_weather", "arguments": "{\"location\": \"San Francisco, USA\", \"format\": \"celsius\"}"}
    ],
    "functions": [{
        "name": "get_current_weather",
        "description": "Get the current weather",
        "parameters": {
            "type": "object",
            "properties": {
                "location": {"type": "string", "description": "The city and country, eg. San Francisco, USA"},
                "format": {"type": "string", "enum": ["celsius", "fahrenheit"]}
            },
            "required": ["location", "format"]
        }
    }]
}

Y exprese la información como una sola línea dentro del .jsonl archivo de entrenamiento como se indica a continuación:

{"messages": [{"role": "user", "content": "What is the weather in San Francisco?"}, {"role": "assistant", "function_call": {"name": "get_current_weather", "arguments": "{\"location\": \"San Francisco, USA\", \"format\": \"celsius\"}"}}], "functions": [{"name": "get_current_weather", "description": "Get the current weather", "parameters": {"type": "object", "properties": {"location": {"type": "string", "description": "The city and country/region, eg. San Francisco, USA"}, "format": {"type": "string", "enum": ["celsius", "fahrenheit"]}}, "required": ["location", "format"]}}]}

Al igual que con todo el entrenamiento de ajuste preciso, el archivo de ejemplo requiere al menos 10 ejemplos.

Optimización del costo

Para utilizar menos tokens de solicitud después del ajuste fino de las definiciones completas de funciones, pruebe las siguientes estrategias:

Estrategia Descripción
Omitir descripciones Quite el description campo de la función y los parámetros.
Omitir parámetros Quite todo el campo del objeto properties.
Omitir la función por completo Quite todo el objeto de función de la matriz de funciones.

Optimización para la calidad

Para mejorar la calidad del resultado de las llamadas de función, mantenga idénticas las definiciones de función en su conjunto de datos de entrenamiento de ajuste fino y en las llamadas posteriores de finalización del chat.

Personalización de las respuestas del modelo a las salidas de función

También puede ajustar los ejemplos de llamadas de función para mejorar la respuesta del modelo a las salidas de función. Incluya ejemplos que constan de mensajes de respuesta de función y mensajes de respuesta del asistente en los que la respuesta de la función se interpreta y coloca en contexto por el asistente.

{
    "messages": [
        {"role": "user", "content": "What is the weather in San Francisco?"},
        {"role": "assistant", "function_call": {"name": "get_current_weather", "arguments": "{\"location\": \"San Francisco, USA\", \"format\": \"celsius\"}"}}
        {"role": "function", "name": "get_current_weather", "content": "21.0"},
        {"role": "assistant", "content": "It is 21 degrees celsius in San Francisco, CA"}
    ],
    "functions": [...] // same as before
}

Al igual que con el ejemplo anterior, este ejemplo se expande artificialmente para mejorar la legibilidad. La entrada real en el .jsonl archivo de entrenamiento sería una sola línea:

{"messages": [{"role": "user", "content": "What is the weather in San Francisco?"}, {"role": "assistant", "function_call": {"name": "get_current_weather", "arguments": "{\"location\": \"San Francisco, USA\", \"format\": \"celsius\"}"}}, {"role": "function", "name": "get_current_weather", "content": "21.0"}, {"role": "assistant", "content": "It is 21 degrees celsius in San Francisco, CA"}], "functions": []}

Pasos siguientes