# JSON-Format für LLM-Werkzeuge

## Einleitung

Das Teilen eines Tools auf eine Weise, die schnell zu einem Programm oder Tool-Editor hinzugefügt werden könnte, wäre mit einer standardisierten Methode zur Repräsentation eines Tools und seiner Nutzung erheblich verbessert. Wir möchten Funktionen wie die folgenden ermöglichen:

* Ein Icon zur visuellen Darstellung des Tools
* Metadaten für die Aufforderung:
  * Ein Name für das Tool
  * Eine Beschreibung des Tools
  * Anwendungshinweise für das Tool
* Platzhalterparameter, die in die Tool-Zeichenkette aufgenommen werden
* Erwartete Ausgabe
* Versionierung und Zeitstempel.

## Spezifikation des JSON-Formats

```json
{
  "version": "String oder Integer",
  "model_prompt": "String mit {{Variablenname}} Platzhalter",
  "metadata": {
    "prompt_name": "String",
    "description": "String",
    "usage_notes": "String",
    "model_version": ["String", "String", …],
    "creator": {
      "name": "String",
      "email": "String",
      "organization": "String"
    },
    "parameters": {
      "temperature": "Float",
      "max_tokens": "Integer",
      "top_p": "Float",
      "frequency_penalty": "Float",
      "presence_penalty": "Float"
    },
    "variables": [
      {
        "name": "Variablenname 1",
        "type": "Text",
        "description": "String",
        "default": "String",
      },
      {
        "name": "Variablenname 2",
        "type": "Einzel-Auswahl",
        "description": "String",
        "default": "Wert1",
        "allowed_values": ["Wert1", "Wert2", "Wert3"]
      },
      {
        "name": "Variablenname 3",
        "type": "Mehrfach-Auswahl",
        "description": "String",
        "default": ["Wert1", "Wert2"]
        "allowed_values": ["Wert1", "Wert2", "Wert3"]
      },
      ...
    ],
    "expected_output": {
      "type": "String (z.B., Text, Code, begrenzt)",
      "format": "String (optional, z.B., JSON, XML, CSV)",
      "language": "String (optional, z.B., Python, JavaScript)",
      "allowed_values": ["String1", "String2", ...] (optional)
    },
    "avatar_type": "String (z.B., url, base64)",
    "avatar": "String (URL oder base64-kodiertes Bild), empfohlen sind 256x256 Pixel",
    "timestamp": "String (ISO 8601 Format)"
  }
}
```

Unser Beispiel JSON kann [hier](https://skydeck-public-assets.s3.amazonaws.com/sample_tool.json) heruntergeladen werden.

## Feldbeschreibung

* **model\_prompt**: Ein String, der den GPT-Modellprompt enthält.
* **metadata**: Ein Objekt, das zusätzliche Informationen über den GPT-Modell-Prompt enthält, einschließlich der folgenden Unterfelder:
  * **model\_version**: Ein String, der die Version des verwendeten GPT-Modells angibt.
  * **creator**: Ein Objekt, das Informationen über den Ersteller des GPT-Modell-Prompts enthält, mit den folgenden Unterfeldern:
    * **name**: Ein String, der den Namen des Erstellers darstellt.
    * **email**: Ein String, der die E-Mail des Erstellers darstellt.
    * **organization**: Ein String, der die Organisation darstellt, mit der der Ersteller verbunden ist.
  * **parameters**: Ein Objekt, das Informationen über die Parameter des GPT-Modells enthält, mit den folgenden Unterfeldern:
    * **temperature**: Eine Gleitkommazahl, die die für die Steuerung der Zufälligkeit der Ausgabe verwendete Temperatur angibt.
    * **max\_tokens**: Eine ganze Zahl, die die maximale Anzahl von Tokens in der generierten Antwort angibt.
    * **top\_p**: Eine Gleitkommazahl, die die Nukleussampling-Wahrscheinlichkeitsschwelle darstellt.
    * **frequency\_penalty**: Eine Gleitkommazahl, die die auf Token angewendete Strafe anhand ihrer Häufigkeit im Datensatz darstellt.
    * **presence\_penalty**: Eine Gleitkommazahl, die die auf neue Token angewendete Strafe anhand ihrer Präsenz im Eingabeaufforderung darstellt.
  * **timestamp**: Ein String im ISO 8601-Format, der das Datum und die Uhrzeit darstellt, wann der GPT-Modell-Prompt erstellt oder zuletzt geändert wurde.
  * **expected\_output (Optional)**: Ein Objekt, das Felder enthält, die mit der erwarteten Ausgabe aus dem model\_prompt zusammenhängen, einschließlich der folgenden Unterfelder:
    * **type**: Ein String, der den Typ der erwarteten Ausgabe aus dem model\_prompt anzeigt.
    * **format (Optional)**: Ein String, der das Format der erwarteten Ausgabe darstellt, falls zutreffend.
    * **language (Optional)**: Ein String, der die Programmiersprache der erwarteten Ausgabe darstellt, wenn der Typ `code` ist.
    * **allowed\_values (Optional)**: Ein Array von Strings, das eine Liste der zulässigen Ausgabewerte enthält, wenn der Typ `limited` ist.
  * **variables (Optional)**: Eine Liste, die Variablen enthält, die möglicherweise im `model_prompt` String in einem f-string-Stil eingefügt werden. Jede Variable enthält die folgenden Unterfelder:
    * **name**: Ein String, der den Variablennamen darstellt.
    * **type**: Ein String, der den Variablentyp anzeigt. Derzeit sind die möglichen Werte von `type` `text` für Standardvariable und `single-select` oder `multi-select` für Auswahlvariablen.
    * **description**: Ein String, der die Beschreibung der Variable darstellt, einschließlich Verwendungen und Beispielen.
    * **default**: Ein Wert, der den Standardwert der Variable anzeigt. Dieser Wert ist ein String, wenn `type` `text` oder `single-select` ist, und ein Array von Strings für `multi-select`.
    * **allowed\_values**: Ein Array von Strings, das eine Liste der zulässigen Werte enthält, wenn der Variablentyp `single-select` oder `multi-select` ist.
  * **avatar (Optional)**: Ein Objekt, das Felder in Bezug auf das grafische Bild enthält, das als Avatar oder Icon für die Eingabeaufforderung fungiert, einschließlich der folgenden Unterfelder:
    * **avatar\_type**: Ein String, der den Typ der enthaltenen Avatar-Daten angibt.
    * **avatar**: Ein String, der die URL enthält, die auf das Bild zeigt, wenn der avatar\_type `url` ist, oder ein base64-codierter String, der das Bild darstellt, wenn der avatar\_type `base64` ist.
  * **prompt\_name (Optional)**: Ein String, der den Namen der Eingabeaufforderung darstellt.
  * **description (Optional)**: Ein String, der eine kurze Beschreibung des Tools und seines Zwecks gibt.
  * **usage\_notes (Optional)**: Ein String, der freie Anmerkungen des Erstellers über die Nutzung oder spezielle Überlegungen in Bezug auf das Tool enthält.

Um das Format der erwarteten Ausgabe aus dem model\_prompt anzugeben, können Sie ein `expected_output` Objekt innerhalb des `metadata` Objekts hinzufügen. Abhängig von der Art der erwarteten Ausgabe können Sie die relevanten Unterfelder in das `expected_output` Objekt einschließen.

Um Felder für Variablen einzuschließen, die möglicherweise im `model_prompt` String in einem f-string-Stil eingefügt werden, können Sie eine separate `variables` Liste innerhalb des `metadata` Objektes hinzufügen.

Um ein grafisches Bild einschließlich, das als Avatar oder Icon für die Eingabeaufforderung fungiert, können Sie ein `avatar` Feld innerhalb des `metadata` Objekts hinzufügen.

Das Einschließen der `expected_output`, `variables`, `avatar`, `prompt_name`, `description` und `usage_notes` Felder innerhalb des `metadata` Objektes hilft, alle kontextuellen Informationen über die Eingabeaufforderung an einem Ort zu behalten, was die Verwaltung und das Verständnis erleichtert.

Sie können das `version` Feld auf der obersten Ebene des JSON-Objekts verwenden, um explizit die Version der gesamten JSON-Datei zu verfolgen.
