# Formato JSON para Herramientas LLM

## Introducción

Compartir una herramienta de una manera que se pueda agregar rápidamente a un programa o editor de herramientas se mejoraría enormemente con una forma estándar de representar una herramienta y cómo usarla. Queremos habilitar características como las siguientes:

* Un icono para representar visualmente la herramienta
* Metadatos para el aviso:
  * Un nombre para la herramienta
  * Una descripción de la herramienta
  * Notas de uso para la herramienta
* Parámetros de marcador de posición que se incluyen en la cadena de la herramienta
* Salida esperada
* Versiones y marcas de tiempo.

## Especificación de Formato JSON

```json
{
  "version": "cadena de texto o número entero",
  "model_prompt": "cadena de texto con marcadores de posición {{nombre_de_variable}}",
  "metadata": {
    "prompt_name": "cadena de texto",
    "description": "cadena de texto",
    "usage_notes": "cadena de texto",
    "model_version": ["cadena de texto", "cadena de texto", …],
    "creator": {
      "name": "cadena de texto",
      "email": "cadena de texto",
      "organization": "cadena de texto"
    },
    "parameters": {
      "temperature": "número fraccionado",
      "max_tokens": "número entero",
      "top_p": "número fraccionado",
      "frequency_penalty": "número fraccionado",
      "presence_penalty": "número fraccionado"
    },
    "variables": [
      {
        "name": "nombre de la variable 1",
        "type": "texto",
        "description": "cadena de texto",
        "default": "cadena de texto",
      },
      {
        "name": "nombre de la variable 2",
        "type": "selección-única",
        "description": "cadena de texto",
        "default": "valor1",
        "allowed_values": ["valor1", "valor2", "valor3"]
      },
      {
        "name": "nombre de la variable 3",
        "type": "selección-múltiple",
        "description": "cadena de texto",
        "default": ["valor1", "valor2"]
        "allowed_values": ["valor1", "valor2", "valor3"]
      },
      ...
    ],
    "expected_output": {
      "type": "cadena de texto (p. ej., texto, código, limitado)",
      "format": "cadena de texto (opcional, p. ej., JSON, XML, CSV)",
      "language": "cadena de texto (opcional, p. ej., Python, JavaScript)",
      "allowed_values": ["cadena de texto1", "cadena de texto2", ...] (opcional)
    },
    "avatar_type": "cadena de texto (p. ej., url, base64)",
    "avatar": "cadena de texto (URL o imagen codificada en base64), se recomienda 256x256 pixels",
    "timestamp": "cadena de texto (formato ISO 8601)"
  }
}
```

Puedes descargar nuestra muestra JSON [aquí](https://skydeck-public-assets.s3.amazonaws.com/sample_tool.json).

## Descripción de los Campos

* **model\_prompt**: Una cadena que contiene el prompt del modelo GPT.
* **metadata**: Un objeto que contiene información adicional sobre el prompt del modelo GPT, que incluye los siguientes subcampos:
  * **model\_version**: Una cadena que indica la versión del modelo GPT utilizado.
  * **creator**: Un objeto que contiene información sobre el creador del prompt del modelo GPT, con los siguientes subcampos:
    * **name**: Una cadena que representa el nombre del creador.
    * **email**: Una cadena que representa el correo electrónico del creador.
    * **organization**: Una cadena que representa la organización a la que está afiliado el creador.
  * **parameters**: Un objeto que contiene información sobre los parámetros del modelo GPT, con los siguientes subcampos:
    * **temperature**: Un flotante que indica la temperatura utilizada para controlar la aleatoriedad de la salida.
    * **max\_tokens**: Un entero que indica el número máximo de tokens en la respuesta generada.
    * **top\_p**: Un flotante que representa el umbral de probabilidad de muestreo del núcleo.
    * **frequency\_penalty**: Un flotante que representa la penalización aplicada a los tokens en función de su frecuencia en el conjunto de datos.
    * **presence\_penalty**: Un flotante que representa la penalización aplicada a los nuevos tokens basada en su presencia en el prompt.
  * **timestamp**: Una cadena en formato ISO 8601 que representa la fecha y la hora en que se creó o modificó por última vez el prompt del modelo GPT.
  * **expected\_output (Opcional)**: Un objeto que contiene campos relacionados con la salida esperada del model\_prompt, incluyendo los siguientes subcampos:
    * **type**: Una cadena que indica el tipo de salida esperada del model\_prompt.
    * **format (Opcional)**: Una cadena que representa el formato de la salida esperada si es aplicable.
    * **language (Opcional)**: Una cadena que representa el lenguaje de programación de la salida esperada si el tipo es `code`.
    * **allowed\_values (Opcional)**: Un array de cadenas que contiene una lista de valores de salida permitidos si el tipo es `limited`.
  * **variables (Opcional)**: Una lista que contiene variables que podrían insertarse en la cadena `model_prompt` en un estilo de f-string. Cada variable contiene los siguientes subcampos:
    * **name**: Una cadena que representa el nombre de la variable.
    * **type**: Una cadena que muestra el tipo de variable. Actualmente los valores posibles de `type` son `text` para la variable por defecto, y `single-select` o `multi-select` para las variables de selección.
    * **description**: Una cadena que muestra la descripción de la variable, incluyendo usos y ejemplos.
    * **default**: Un valor que muestra el valor por defecto de la variable. Este valor es una cadena si `type` es `text` o `single-select`, y un array de cadenas para `multi-select`.
    * **allowed\_values**: Un array de cadenas que contiene una lista de valores permitidos si el tipo de variable es `single-select` o `multi-select`.
  * **avatar (Opcional)**: Un objeto que contiene campos relacionados con la imagen gráfica que actúa como avatar o icono para el prompt, que incluye los siguientes subcampos:
    * **avatar\_type**: Una cadena que especifica el tipo de datos del avatar incluido.
    * **avatar**: Una cadena que contiene el URL que apunta a la imagen si el avatar\_type es `url`, o una cadena codificada en base64 que representa la imagen si el avatar\_type es `base64`.
  * **prompt\_name (Opcional)**: Una cadena que representa el nombre del prompt.
  * **description (Opcional)**: Una cadena que proporciona una breve descripción de la herramienta y su propósito.
  * **usage\_notes (Opcional)**: Una cadena que contiene notas de formato libre del creador sobre el uso o cualquier consideración específica relacionada con la herramienta.

Para especificar el formato de la salida esperada del model\_prompt, puedes agregar un objeto `expected_output` dentro del objeto `metadata`. Dependiendo del tipo de salida esperada, puedes incluir los subcampos relevantes en el objeto `expected_output`.

Para incluir campos para variables que podrían insertarse en la cadena `model_prompt` en un estilo de f-string, puedes agregar una lista `variables` separada dentro del objeto `metadata`.

Para incluir una imagen gráfica que actúa como avatar o icono para el prompt, puedes agregar un campo `avatar` dentro del objeto `metadata`.

Incluir los campos `expected_output`, `variables`, `avatar`, `prompt_name`, `description`, y `usage_notes` dentro del objeto `metadata` ayuda a mantener toda la información contextual sobre el prompt en un solo lugar, lo que facilita su gestión y comprensión.

Puedes usar el campo `version` en el nivel superior del objeto JSON para rastrear explícitamente la versión de todo el archivo JSON.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.skydeck.ai/es/developers/develop-your-own-tools/json-format-for-llm-tools.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
