Acorn | Introducing GPTScript ...Officially

07.08.2024Ricky Elfner
News Artificial Intelligence Developer Experience Framework Machine Learning Neural Networks scripting

Banner

GPTScript bietet eine innovative Methode zur Arbeit mit großen Sprachmodellen (LLMs). Die erste öffentliche Vorstellung erfolgte am 24. Februar 2024 durch Darren Shepherd auf X (ehemals Twitter). Bereits fünf Tage zuvor wurde die initiale Version v0.0.1 auf GitHub veröffentlicht. Einen Monat später folgte die offizielle Ankündigung auf der Website von acorn.io, wodurch ich selbst darauf aufmerksam wurde und es als mein nächstes Tech-Up-Thema gewählt habe.

Hintergrund

In seinem Blogpost erklärte Shepherd, dass GPTScript ursprünglich als Experiment begann, um Programmierung mittels natürlicher Sprache zu ermöglichen. Die Idee bestand darin, natürliche Sprache mit der Funktionalität traditioneller Skripte zu vereinen. Dabei entdeckte das Team ein elegantes und einfaches Modell, das KI mit traditionellen Systemen, Daten und Code verbindet. GPTScript verwendet Tools, die entweder reine Prompts sein können oder mit Code umgesetzt werden. ChatGPT ermöglicht es dann, diese einzelnen Tools miteinander zu verknüpfen und so komplexe Aufgaben effizient zu bewältigen.

Hauptmerkmale von GPTScript

Eines der Hauptmerkmale von GPTScript ist auf jeden Fall die Benutzerfreundlichkeit. Die Syntax basiert nämlich hauptsächlich auf natürlicher Sprache, was es somit einer breiten Benutzergruppe zugänglich macht. Darüber hinaus besticht GPTScript durch seine Vielseitigkeit, da es eine Vielzahl von Anwendungsfällen abdecken kann, wie die Automatisierung von Aufgaben, die Durchführung von Datenanalysen und die Integration mit externen Diensten. Ein weiteres wichtiges Merkmal ist die nahtlose Integration von GPTScript mit traditionellen Skripten, wie Bash oder Python, sowie externen HTTP-Diensten. Diese Integration erweitert die Fähigkeiten und Anwendungsmöglichkeiten von GPTScript erheblich.

Anwendungsmöglichkeiten

GPTScript bietet somit unterschiedlichste Anwendungsmöglichkeiten. Beispielsweise die Automatisierung komplexer Aufgaben, wie die Urlaubsplanung oder die Verwaltung von Datenbanken. Zusätzlich können intelligente Tools entwickelt werden, die eine Vielzahl von Funktionen abdecken. Auch anspruchsvolle Datenanalysen und deren Visualisierungen lassen sich mit GPTScript effizient durchführen, was die Verarbeitung komplexer Datensätze erleichtert. Des Weiteren bietet GPTScript Möglichkeiten zur Entwicklung von Anwendungen in der Bild-, Video- und Audioverarbeitung, wodurch leistungsstarke Multimedia-Anwendungen realisiert werden können.

Praxisbeispiele

  • Chat with Local CLI:
    • Ermöglicht das Erstellen von AI-Integrationen mit CLIs oder anderen ausführbaren Dateien auf dem lokalen Rechner.
    • Beispiel: GitHub CLI (gh) oder Kubernetes CLI (kubectl).
  • Chat with an API:
    • DevOps Engineers interagieren oft über Dashboards, APIs und CLIs mit den Cloud-Providern. Hiermit kann man nun eine gewünschte Aufgabe definieren, und ChatGPT generiert und führt die notwendigen API-Aufrufe aus.
    • Beispiel: Mit der OpenAPI-Spezifikation von Digital Ocean kann man einen Chatbot erstellen, der Droplets und Datenbanken starten kann.
  • Chat with Local Files:
    • Ebenfalls kann man mit lokalen Dateien arbeiten.
    • Beispiel: Excel-Dateien, CSVs und PDFs abfragen, um die Daten zu lesen, zu transformieren und dann zu nutzen.

Aufbau eines GPTScript

Möchte man ein gptscript erstellen, muss man hierfür eine Datei mit der Dateiendung .gpt anlegen. Diese Datei kann mehrere Tools enthalten, indem man die einzelnen Bereiche mit drei Strichen (---) auf einer Zeile voneinander trennt.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
Name: tool1
Description: This is tool1

Do sample tool stuff.

---

Name: tool2
Description: This is tool2

Do more sample tool stuff.

Jedes Tool dabei startet mit einer Beschreibung bevor der eigentliche Teil des Scripts mit dem eigentlichen Inhalt kommt. Natürlich gibt es auch die Möglichkeit Kommenatre hinzuzufügen.

1
2
3
4
5
6
7
8
Name: tool-name
# This is a comment in the preamble.
Description: Tool description
# This tool can invoke tool1 or tool2 if needed
Tools: tool1, tool2
Args: arg1: The description of arg1

Tool instructions go here.

Parameter im Überblick

Am Anfang des Scripts gibt es unterschiedliche Parameter, die verwendet werden können und teilweise auch müssen. Besonders wichtig sind die Beschreibung und der Name, damit ChatGPT die notwendigen Tools aus dem Kontext nutzen kann.

  • Name:
    • Der Name des Tools.
  • Model Name & Global Model Name:
    • Der LLM-Modellname, der verwendet werden soll. Zurzeit wird standardmäßig “gpt-4” verwendet.
  • Description:
    • Hiermit wird der spezifische Zweck und die Funktionalität des Tools beschrieben, sodass das Modell aus dem Kontext das entsprechende Tool verwenden kann.
  • Internal Prompt:
    • Wenn auf false gesetzt, wird der eingebaute System-Prompt für dieses Werkzeug deaktiviert.
  • Tools & Global Tools:
    • Definiert alle Tools, die zur Verfügung stehen.
  • Credentials:
    • Da es die Möglichkeit gibt, Credential-Tools zu erstellen, können diese separat hier verlinkt werden.
  • Args:
    • Argumente, die das Tool entgegennimmt. Dabei muss das Format arg-name: Beschreibung genutzt werden.
  • Max Tokens:
    • Begrenzt die maximale Anzahl an Tokens, die vom LLM generiert werden können.
  • JSON Response:
    • Wenn auf true gesetzt, antwortet das LLM im JSON-Format. In diesem Fall müssen auch Anweisungen im Tool enthalten sein.
  • Temperature:
    • Eine Gleitkommazahl, die den Kreativitätsgrad des Modells bestimmt. Standardmäßig ist die Temperatur auf 0 gesetzt, was eine deterministischere und weniger kreative Antwort erzeugt.
  • Chat:
    • Wenn auf true gesetzt, wird eine interaktive Chat-Sitzung für das Tool aktiviert.
  • Context:
    • Definiert den Kontext für die Prompts. Es ist möglich, auf eine Textdatei zu verweisen, wodurch verschiedene Tools denselben Kontext teilen können.

Interpreter definieren

Der Interpreter muss mit #! starten, beispielsweise:

  • #!/bin/bash
  • #!/python3

Tools in GPTScript

In GPTScript helfen Tools dabei, die Fähigkeiten eines Skripts zu erweitern. Der Gedanke dahinter ist, dass KI besser arbeitet, wenn sie sehr spezifische Anweisungen für eine Aufgabe bekommt. Tools ermöglichen es, ein Problem in kleinere, fokussierte Teile zu zerlegen, wobei jedes Tool eine bestimmte Aufgabe übernimmt.

Es gibt bereits eine Auswahl an GPTScript Tools, die man verwenden kann: GPTScript Tools.

Zudem werden aus verschiedene Arten unterschieden:

  • System Tools:
    • Beispielsweise sys.read oder sys.write (siehe: System Tools)
  • Custom Tools:
    • Wenn man eigene Scripts und Tools schreibt, hat man die Möglichkeit, mehrere einzelne Tools innerhalb des Scripts zu definieren.
  • External Tools:
    • Bereits vorhandene Tools können direkt innerhalb des Scripts verlinkt und genutzt werden.

Hands-On Beispiel

Im folgenden Abschnitt werden wir die praktische Anwendung von GPTScript anhand eines detaillierten Beispielskripts genauer betrachten. Dabei zeigen wir, wie verschiedene Tools innerhalb des Skripts definiert und genutzt werden, um die beschriebenen Funktionen umfassend zu demonstrieren und die vielfältigen Einsatzmöglichkeiten von GPTScript aufzuzeigen.

Installation

Zunächst muss GPTScript auf dem System installiert werden. In unserem Fall verwenden wir Homebrew, ein beliebtes Paketverwaltungssystem für macOS und Linux, um den Installationsprozess zu vereinfachen. Dies kann man in dem Fall mit diesem Befehl über das Terminal ausführen, um GPTScript zu installieren:

1
brew install gptscript-ai/tap/gptscript

OpenAI API-Schlüssel erstellen

Um die Funktionen von GPTScript nutzen zu können, benötigt man einen API-Schlüssel von OpenAI. Hierzu muss man folgendes machen:

  1. Die OpenAI-Plattform unter OpenAI API-Schlüssel besuchen.
  2. Bei einem bestehenden Konto anmelden oder ein neues Konto erstellen.
  3. Einen neuen API-Schlüssel erstellen und kopieren.

Nachdem der API-Schlüssel erstellt wurde, muss er als Umgebungsvariable gesetzt werden, damit GPTScript darauf zugreifen kann. Hiermit kann man über das Terminal den Key setzen:

1
export OPENAI_API_KEY="[API-KEY]"

Preise

Die Nutzung der OpenAI API ist kostenpflichtig. Die genauen Kosten hängen von der Menge der Nutzung und dem gewählten Modell ab. OpenAI bietet verschiedene Preismodelle an, die je nach Bedarf ausgewählt werden können. Eine detaillierte Preisliste finden man auf der OpenAI-Website unter OpenAI API Preise. Es ist wichtig, sich über die Kosten im Klaren zu sein, um Überraschungen zu vermeiden und die Nutzung entsprechend zu planen.

Erste GPTScript-Datei definieren - Schritt 1

Nach der Installation und der Einrichtung des API-Schlüssels kann die erste GPTScript-Datei erstellt werden. In diesem Beispiel wird ein Skript namens techhub-generator_01.gpt definiert. In den folgenden Schritten werde ich immer wieder eine neue Datei erstellen, damit man sehen kann, wie oft man den Prompt anpassen muss.

Das erste Skript dient dazu, einen passenden Titel und eine Beschreibung für einen Techhub-Blogartikel basierend auf einem angegebenen Link zu erstellen. Dies wird durch den folgenden Code erreicht:

1
2
3
4
5
6
description: Creates a Techhub thumbnail and title using a script.
args: link: The web link for which the title and thumbnail will be created.

Do the following steps in ascending order:
1. Develop a suitable title for the Techhub based on the link. Also create a description for a blog article based on the link.
2. Print the title and the description on the screen

Durch die Ausführung des Skripts mit dem Befehl:

1
 gptscript techhub-generator_01.gpt --link https://docs.gptscript.ai/

wird ein Titel und eine Beschreibung für den angegebenen Link generiert.

Der Output in der Konsole sah dabei wie folgt aus:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
18:05:10 started  [main] [input=--link https://docs.gptscript.ai/]
18:05:11 sent     [main]
18:05:14 ended    [main] [output=**Title:** Exploring GPTScript: The Future of AI-Powered Scripting\n\n**Description:** Dive into the w...]
18:05:14 usage    [total=237] [prompt=146] [completion=91]

INPUT:

--link https://docs.gptscript.ai/

OUTPUT:

**Title:** Exploring GPTScript: The Future of AI-Powered Scripting

**Description:** Dive into the world of GPTScript, an innovative scripting language designed to harness the power of AI. This blog article explores the features, benefits, and potential applications of GPTScript, providing insights into how it can revolutionize the way developers and businesses approach automation and intelligent scripting. Discover how GPTScript can streamline your workflows and enhance productivity with its advanced AI capabilities.

Der Output ist oft recht hilfreich, da man die einzelnen Calls sieht und was der Input und Output war. Dies wird man später besonders sehen, wenn man mehrere Tools verwendet.

Schritt 2

Nach der Erstellung der ersten GPTScript-Datei im vorherigen Schritt wird der Prozess in Schritt 2 fortgeführt, indem ein erweiterter Teil mit dem Tool mkdir hinzugefügt wird. Dieses Skript erstellt nicht nur einen passenden Titel und eine Beschreibung für einen Techhub-Blogartikel, sondern generiert auch einen Ordner basierend auf dem Slug, falls dieser noch nicht existiert. Zudem wird eine Textdatei mit der Beschreibung in diesem Ordner gespeichert.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
tools: mkdir, sys.write
description: Creates a Techhub thumbnail and title using a script.
args: link: The web link for which the title and thumbnail will be created.

Do the following steps in ascending order:
1. Develop a suitable title for the Techhub based on the link. Also create a description for a blog article based on the link.
2. Create a slug based on the '$(techup-title) and then create a folder with the slug name if it foes not already

---

name: mkdir 
tools: sys.write
description: Creates a folder in our system. 
args: slug: Path to the folder to be created.

#!bash

mkdir -p "${slug}"

Der Befehl zur Ausführung des Skripts lautet wie folgt:

1
 gptscript techhub-generator_02.gpt --link https://docs.gptscript.ai/

Wer weiterhin auch am Output aus dem Terminal interessiert ist kann dies in dem TechHub-Repo anschauen.

Somit erhält man mit diesem Schritt, einen automatisiertern Prozess der folgende Ordner Struktur anlegt:

1
2
3
4
5
6
.
├── exploring-gptscript-a-comprehensive-guide
│   └── description.txt
├── techhub-generator.gpt
├── techhub-generator_01.gpt
└── techhub-generator_02.gpt

Schritt 3

In diesem Schritt wird das Script so erweitert, dass nun auch ein Thumbnail generiert wird. Dies wird dabei innerhalb des Tools thumb-generator gemacht. Dabei habe ich ein vorhandenes Tool von GptScript selbst genommen.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
tools: thumb-generator, mkdir, sys.write, sys.download
description: Generates a Blog Article title and thumbnail based on a link.
args: link: The web link for which the title and thumbnail will be created.

Do the following steps in acsending order:
1. Develop a suitable title for the Techhub based on the link. Also create a description for a blog article based on the link.
2. Create a slug based on the '$(techup-title) and then create a folder with the slug name if it foes not already
3. Call thumb-generator to illustrate it.
4. Download the illustration to a file at `${slug}/thumb.png`.

---
name: mkdir
tools: sys.write
description: Creates a folder in your system
args: slug: Path to the folder to be created.

#!bash

mkdir -p "${slug}"

---
name: thumb-generator
tools: github.com/gptscript-ai/image-generation
description: Generates a YouTube thumbnail.
args: link: The link to generate thumbnail from.

Do the following steps in acsending order:

1. Come up with a background color to represent the $link which can be used as the background color for the thumbnail.
2. Think of a good prompt to generate an image to represent the content of '$(techup-description). Make sure to to include the '${techup-title} in one sentence inside a colored box somewhere in the thumbnail. Only return the URL of the illustration. The thumbnail should be 1792x1024.
3. Use the ${background-color} to make sure the edges of the thumbnails fades out.

Auch hier wieder das Ausführen des Scripts.

1
 gptscript techhub-generator_03.gpt --link https://docs.gptscript.ai/

Auch hier befindet sich der Output in unseren TechHub-Repo.

Schritt 4

Nun kommen wir zum letzten Schritt unseres Beispiel-Skripts. Es fehlt nur noch die Möglichkeit, ein Markdown-File zu erstellen, das bereits eine Gliederung mit den wichtigsten Themen enthält. Dafür habe ich den article-generator geschrieben.

Es soll eine index.md-Datei im selben Ordner erstellt werden, in dem auch das Thumbnail erzeugt wurde. In dieser Datei soll der Titel des Blogartikels hinzugefügt werden. Mit den erstellten Beschreibungen wird eine Gliederung für den Artikel erstellt. Diese Gliederung kann dann als roter Faden genutzt werden, wenn man den Artikel schreibt.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
tools: article-generator, thumb-generator, mkdir, sys.write, sys.download
description: Generates a Blog Article title and thumbnail based on a link.
args: link: The web link for which the title and thumbnail will be created.

Do the following steps in acsending order:
1. Develop a suitable title for the Techhub based on the link. Also create a description for a blog article based on the link.
2. Create a slug based on the '$(techup-title) and then create a folder with the slug name if it foes not already
3. Call thumb-generator to illustrate it.
4. Download the illustration to a file at `${slug}/thumb.png`.
5. Call the article-generator to generate the index.md file

---
name: mkdir
tools: sys.write
description: Creates a folder in your system
args: slug: Path to the folder to be created.

#!bash

mkdir -p "${slug}"

---
name: thumb-generator
tools: github.com/gptscript-ai/image-generation
description: Generates a YouTube thumbnail.
args: link: The link to generate thumbnail from.

Do the following steps in acsending order: 

1. Come up with a background color to represent the $link which can be used as the background color for the thumbnail.
2. Think of a good prompt to generate an image to represent the content of '$(techup-description). Make sure to to include the '${techup-title} in one sentence inside a colored box somewhere in the thumbnail. Only return the URL of the illustration. The thumbnail should be 1792x1024.
3. Use the ${background-color} to make sure the edges of the thumbnails fades out.

---
name: article-generator
tools: sys.write
description: Create an index.md file with the basic information.

Do the following steps in acsending order: 
1. create an '${slug}/index.md file 
2. add at the beginning of the file the basic infromation '$(slug). 
3. Create with the correct markdown syntax the '$(techup-title) as heading of this article
4. use the'$(techup-description) to write a outline with most important information for the technical blog article

Nun führen wir das Script ein letztes Mal aus:

1
gptscript techhub-generator.gpt --link https://docs.gptscript.ai/                                           

Besonders bei der Länge des Console Outputs befindet auch der sich unserem Repo.

In der Ordner Struktur kann man sehen, dass eine index.md-Datei und eine thumb.png erstellt wurde. In diesem Fall handelt es sich nicht nur um eine Gliederung, sondern es wurden bereits einige Sätze ergänzt. Hier wird deutlich, dass der Prompt in diesem Fall viel genauer sein müsste, um das gewüscnhte Ergebnis zu erhalten.

Und das hier ist das Ergebnis des Thumb-Generators:

Fazit

GPTScript bietet eigentlich eine sehr beeindruckende Art und Weise, wie leicht man traditionelle Skripte mit LLMs verknüpfen kann. Dadurch wird natürlich die grundlegende Funktionalität enorm erweitert. Somit kann man sich einfach die unterschiedlichsten Ideen überlegen.

Aber natürlich muss man wie bei jeder Technik mit einigen Herausforderungen klarkommen. Was ich hier vor allem hervorheben würde, wäre das Schreiben von Prompts. Jeder, der selbst schon mal Prompt Engineering betrieben hat, weiß, was dies für eine Umstellung bedeutet. Und das merkt man schon bei solchen kleinen Tools, die man mit GPTScript erstellt.

Bisher habe ich noch nicht alle Funktionalitäten ausprobiert, jedoch ergeben sich einige nützliche Funktionen, die man auf jeden Fall mal ausprobieren kann. Hierzu gehören beispielsweise das Analysieren von lokalen Daten.

Abschließend kann man aber auf jeden Fall sagen, dass dies eine sehr einfache und gute Art bietet, unterschiedliche Dinge zu automatisieren und mit den Möglichkeiten von LLMs zu verknüpfen. Man muss sich jedoch am Anfang an diese Art der Entwicklung erst gewöhnen und ein wenig Zeit investieren, um die gewünschten Ziele zu erreichen.

[!TIP]

Die gesamten Beispiele sind auch in unserem Techhub Repository verfügbar

Ricky Elfner

Ricky Elfner – Denker, Überlebenskünstler, Gadget-Sammler. Dabei ist er immer auf der Suche nach neuen Innovationen, sowie Tech News, um immer über aktuelle Themen schreiben zu können.