In diesem Video-Tutorial erklärt Brien Posey ein PowerShell-Skript, das Ihnen die Interaktion mit chatgpt ermöglicht. Die Funktionen und die Struktur des Skripts erleichtern die Integration von ChatGPT-Funktionen in Ihre eigenen PowerShell-Skripte.

YouTube Video

Das folgende Transkript wurde aus Gründen der Klarheit und Länge leicht bearbeitet.

Transkript:

Brien Posey: Hallo, Grüße und willkommen. Ich bin Brien Posey. In diesem Video möchte ich Ihnen zeigen, wie Sie PowerShell für die Interaktion mit ChatGPT verwenden.

Ich habe also auf GitHub ein Skript gefunden, mit dem Sie eine ChatGPT-Konversation über PowerShell führen können. Ich habe dieses Skript genommen und es in seine grundlegendsten Komponenten zerlegt. Ich möchte Ihnen zeigen, was diese Komponenten sind. Wenn Sie wissen, um welche Komponenten es sich handelt, können Sie ChatGPT-Funktionen viel einfacher in Ihre eigenen Skripte integrieren.

Schauen wir uns zunächst einmal an, was mein Skript tut.

$Key = "Get-Content C:\Scripts\GPTKey.txt"
$ApiEndpoint = "https://api.openai.com/v1/chat/completions"
$AiSystemMessage = "You are a helpful assistant"
[System.Collections.Generic.List[Hashtable]]$MessageHistory = @()

 
Function Initialize-MessageHistory ($message){
    $script:MessageHistory.Clear()
    $script:MessageHistory.Add(@{"role" = "system"; "content" = $message}) | Out-Null
}

 
function Invoke-ChatGPT ($MessageHistory) {
    # Set the request headers
    $headers = @{
    "Content-Type" = "application/json"
    "Authorization" = "Bearer $ApiKey"
    }  
# Form the Request
    $requestBody = @{
        "model" = "gpt-3.5-turbo"
        "messages" = $MessageHistory
        "max_tokens" = 1000 # Max amount of tokens the AI will respond with
        "temperature" = 0.7 # Lower is more coherent and conservative, higher is more creative and diverse.
    }

 
    # Send the request
    $response = Invoke-RestMethod -Method POST -Uri $ApiEndpoint -Headers $headers -Body (ConvertTo-Json $requestBody)
    # Return the message content
    return $response.choices[0].message.content
}

 
#Main Body
Initialize-MessageHistory $AiSystemMessage
    $userMessage = Read-Host "`Enter your query: "
    $MessageHistory.Add(@{"role"="user"; "content"=$userMessage})
    $aiResponse = Invoke-ChatGPT $MessageHistory
    Write-Host "AI: $aiResponse" -ForegroundColor Yellow
    $MessageHistory.Add(@{"role"="assistant"; "content"=$aiResponse})

Wenn ich das Skript lese, werde ich aufgefordert, meine Abfrage einzugeben. Ich gebe einfach „Hallo“ ein und drücke die Eingabetaste. Meine Anfrage geht an ChatGPT und dann wird eine Antwort zurückgegeben. Dann werde ich wieder zur PowerShell-Eingabeaufforderung weitergeleitet. Das ist die ganze Sache. Genau das macht dieses Skript.

Nachdem ich Ihnen nun gezeigt habe, was das bewirkt, schauen wir uns nun den Code hinter dem Skript an.

Und wie ich bereits erwähnt habe, ist dies eine Adaption eines Codes, den ich auf GitHub gefunden habe.

Erster Codeblock

Um ChatGPT programmgesteuert nutzen zu können, benötigen Sie einen API-Schlüssel. Den API-Schlüssel können Sie von ChatGPT erhalten. Für die Verwendung eines API-Schlüssels fällt eine geringe Gebühr an.

Die allererste Codezeile liest einfach meinen Schlüssel aus einer Textdatei:

$Key = Get-Content C:\Scripts\GPTKey.txt

Aus offensichtlichen Gründen wollte ich den Schlüssel nicht im Klartext in das Skript einfügen.

Wir lesen also den Schlüssel und speichern ihn in einer Variablen namens $Key.

Als nächstes müssen wir den ChatGPT-Endpunkt definieren. Das ist einfach der URI, der zum Senden von Anfragen an ChatGPT verwendet wird. Das sieht man in der zweiten Codezeile:

$APIEndpoint = “https://api.openai.com/v1/chat/completions”

Als nächstes haben wir dann eine Deklaration von $AISystemMessage. Das sieht man in der dritten Zeile:

$AISystemMessage = “You are a helpful assistant”

Im Moment lautet die Systemmeldung: „Sie sind ein hilfreicher Assistent.“ Technisch gesehen brauchen wir diese Zeile nicht. Aber was wir hier tun, ist, die ChatGPT-Persönlichkeit festzulegen. Wenn ich Ihnen später zeige, wie wir ChatGPT initialisieren, möchten wir dort eine Art Text haben. Für den Initialisierungsprozess verwenden wir in diesem Fall: „Sie sind ein hilfreicher Assistent.“ Jetzt werden Sie den Variablennamen bemerken – $AISystemMessage. Wir werden die Variable $AISystemMessage im gesamten Skript verwenden, wenn wir etwas an ChatGPT senden möchten. Wenn Sie also die Variable $AISystemMessage sehen, ist das der Fall. Es stellt die vom Benutzer eingegebene Abfrage dar, die an ChatGPT gesendet wird.

Siehe auch  Der AI App Store von OpenAI: Revolutionierung des Marktplatzes mit ChatGPT

Dann erstellen wir hier in der vierten Zeile eine Hash-Tabelle:

[System.Collections.Generic.List[Hashtable]]$MessageHistory = @()

Diese Hash-Tabelle wurde aufgerufen Nachrichtenverlauf. Der Nachrichtenverlauf ist im Wesentlichen nur eine Liste aller Anfragen, die wir an ChatGPT gesendet haben, und der Antworten, die wir von ChatGPT erhalten haben. In diesem speziellen Fall ist der Nachrichtenverlauf nicht so wichtig, da wir nur eine einzige Anfrage senden und eine einzige Antwort erhalten. Aufgrund der Funktionsweise der ChatGPT-API müssen wir diese Nachrichtenverlaufs-Hash-Tabelle jedoch jedes Mal senden, wenn wir ChatGPT abfragen. Das ist also unsere grundlegende Initialisierung.

Initialize-MessageHistory-Funktion

Von da an haben wir ein paar Funktionen.

Wir haben eine Funktion namens Initialize-MessageHistory:

Function Initialize-MessageHistory ($message){
    $script:MessageHistory.Clear()
    $script:MessageHistory.Add(@{"role" = "system"; "content" = $message}) | Out-Null
}

Dann haben wir eine weitere Funktion namens Invoke-ChatGPT:

function Invoke-ChatGPT ($MessageHistory) {
    # Set the request headers
    $headers = @{
    "Content-Type" = "application/json"
    "Authorization" = "Bearer $ApiKey"
    }  

Ich werde gleich darauf zurückkommen.

Was ich jetzt tun möchte, ist, zum Hauptteil zu springen:

Initialize-MessageHistory $AiSystemMessage
    $userMessage = Read-Host “`nYou”
    $MessageHistory.Add(@{“role”=”user”; “content”=$userMessage})
    $aiResponse = Invoke-ChatGPT $MessageHistory
    Write-Host “AI: $aiResponse” -ForegroundColor Yellow
    $MessageHistory.Add(@{“role”=”assistant”; “content”=$aiResponse})

Das allererste, was wir im Hauptteil unseres Skripts tun, ist der Aufruf der Initialize-MessageHistory-Funktion, auf die ich gerade erst hingewiesen habe.

Sie werden feststellen, dass wir einen Parameter an diese Funktion übergeben, und dieser Parameter ist $AISystemMessage. Denken Sie daran, was ich zuvor über diese Variable gesagt habe: $AISystemMessage stellt alles dar, was der Benutzer eingegeben hat und das an ChatGPT gesendet wird. Nun, der Benutzer hat noch nichts eingegeben, aber wir haben diese Variable bereits früher, während des Initialisierungsteils des Skripts, mit dem Satz „Sie sind ein hilfreicher Assistent“ vorab ausgefüllt.

Wir nehmen also den Text „Sie sind ein hilfreicher Assistent“ und senden ihn an die Funktion „Initialized-MessageHistory“.

Werfen wir einen Blick auf diese Funktion. Sie können sehen, dass es einen Parameter namens $message empfängt. Die $message ist die Variable $AISystemMessage. Also, was machen wir hier? Nun, die allererste Zeile innerhalb dieser Funktion geht voran und löscht die Hash-Tabelle. Wenn Sie das Skript mehr als einmal ausführen und die Hash-Tabelle bereits etwas enthält, wird auf diese Weise alles gelöscht, um Verwirrung zu vermeiden.

Als nächstes haben wir eine Zeile, die den Nachrichtenverlauf füllt:

$script:MessageHistory.Add(@{“role” = “system”; “content” = $message}) | Out-Null

Wir verwenden „Rolle“, um zu definieren, wer eine Nachricht in den Nachrichtenverlauf aufgenommen hat. Die Rolle würde entweder „System“ sein, wenn es sich um etwas handelte, das zu diesem Zweck generiert wurde, oder es würde KI sein, wenn es etwas war, das von ChatGPT generiert wurde. Dann haben wir „Inhalt“. Der Inhalt ist in diesem Fall die Frage oder Antwort, die in den Nachrichtenverlauf aufgenommen wird. Da wir ChatGPT initialisieren, wird der Inhalt die erste Nachricht sein: „Sie sind ein hilfreicher Assistent.“ Das ist es also, was in der Variablen $message enthalten sein wird. Dann haben wir Out-Null, und das unterdrückt einfach jede Ausgabe.

Siehe auch  ASU-Experten untersuchen nationale Sicherheitsrisiken von ChatGPT

Also haben wir die Funktion aufgerufen. Wir haben ChatGPT initialisiert, indem wir unseren Nachrichtenverlauf gelöscht und dann die Nachricht „Sie sind ein hilfreicher Assistent“ zur Hash-Tabelle des Nachrichtenverlaufs hinzugefügt haben.

Hauptkörper

Dann fallen wir zurück zu unserem Hauptkörper. Die nächste Codezeile lautet:

$userMessage = Read-Host “Enter your query”: “

Dies ist also die Eingabeaufforderung, die Sie zuvor gesehen haben und die die Meldung „Geben Sie Ihre Anfrage ein“ auf dem Bildschirm anzeigt. Was auch immer der Benutzer eingibt, geht an eine Variable namens $userMessage.

Dann haben wir die nächste Zeile:

$MessageHistory.Add(@{“role” = “user”; “content” = $userMessage})

Wieder einmal fügen wir etwas zum Nachrichtenverlauf hinzu. Jedes Mal, wenn wir den Nachrichtenverlauf erweitern, müssen wir die Rolle und den Inhalt angeben. In diesem Fall lautet die Rolle also „Benutzer“, was darauf hinweist, dass dies etwas ist, das vom Endbenutzer eingegeben wurde. Der „Inhalt“ wird das sein, was in der Variablen „$userMessage“ gespeichert ist, die wir in der vorherigen Codezeile definiert haben. Wir fügen also die eingegebene Nachricht zum Nachrichtenverlauf hinzu.

Als nächstes definieren wir eine Variable $aiResponse:

$aiResponse = Invoke-ChatGPT $MessageHistory

Denken Sie jetzt daran, was ich zuvor gesagt habe: Jedes Mal, wenn wir etwas an ChatGPT senden, müssen wir den gesamten Nachrichtenverlauf einbeziehen. Was wir hier also tun, ist, eine Funktion namens Invoke-ChatGPT aufzurufen und den gesamten Nachrichtenverlauf an diese Funktion weiterzuleiten.

Invoke-ChatGPT-Funktion

Wenn wir auf die Invoke-ChatGPT-Funktion zurückblicken, ist diese Funktion für den Empfang des Nachrichtenverlaufs konzipiert. Was machen wir also wirklich in dieser Funktion? Nun ja, hier passieren ein paar Dinge.

Bilden Sie eine Kopfzeile

Als erstes müssen wir einen Header formen. Sie können sehen, dass wir eine Variable namens $header deklariert haben:

$headers = @{
    "Content-Type" = "application/json"
    "Authorization" = "Bearer $ApiKey"
    }  

Dies wird auch eine Hash-Tabelle sein. Wir definieren „Content-Type“ und dann müssen wir die „Autorisierung“ definieren. Und wir verwenden eine schlüsselbasierte Autorisierung.

Denken Sie daran, dass wir in der allerersten Codezeile des Skripts eine Variable namens $Key einrichten und diese auf unseren API-Schlüssel setzen, den wir aus einer Textdatei eingelesen haben:

$Key = Get-Content C:\Scripts\GPTKey.txt

Hier kommt diese $Key-Variable ins Spiel.

Also haben wir unseren Header gebildet.

Formulieren Sie die Anfrage

Als nächstes muss diese Funktion die Anfrage bilden. Wir richten also eine Variable namens $requestBody ein. Und wieder einmal wird es eine Hash-Tabelle sein.

$requestBody = @{
        "model" = "gpt-3.5-turbo"
        "messages" = $MessageHistory
        "max_tokens" = 1000 # Max amount of tokens the AI will respond with
        "temperature" = 0.7 # Lower is more coherent and conservative, higher is more creative and diverse.
    }

Dann definieren wir ein paar Dinge. Erstens „Modell“. Das Modell wird das KI-Modell sein, das zur Verarbeitung der Anfrage verwendet wird. In diesem Fall verwenden wir GPT-3.5-turbo.

Siehe auch  Bard vs. ChatGPT: Wir haben den KIs drei Fragen gestellt, um zwischen ihnen zu entscheiden

Das nächste, was wir in den Anfragetext aufnehmen müssen, ist die Nachricht. Die Nachricht wird in der Variablen $MessageHistory enthalten sein, über die ich vorhin gesprochen habe.

Als nächstes haben wir etwas namens „max_tokens“. Nun gibt „max_tokens“ die maximale Länge der Antwort an, die ChatGPT Ihnen geben kann.

Der Grund, warum diese „max_tokens“ wichtig sind, liegt darin, dass, wie bereits erwähnt, mit der programmgesteuerten Nutzung von ChatGPT eine geringe Gebühr verbunden ist. Die Kosten richten sich nach der Länge der Antwort. Sie möchten also keine Antwort erhalten, die länger ist als nötig, denn das kostet Sie mehr Geld. Hier kommt „max_tokens“ ins Spiel.

Und dann haben wir „Temperatur“. Die Temperatur bestimmt im Wesentlichen den Ton der Reaktion. Standardmäßig ist die Temperatur auf 0,7 eingestellt, aber wenn Sie diesen Wert reduzieren, wird die Reaktion sachlicher und sachlicher ausfallen, wohingegen ein höherer Wert tendenziell etwas kreativer ist, in manchen Fällen vielleicht sogar a ein bisschen humorvoll.

An diesem Punkt haben wir also den Anforderungsheader festgelegt und die Anforderung erstellt.

Senden Sie die Anfrage

Von dort aus müssen wir das alles an ChatGPT senden. Sie können sehen, dass wir eine Variable namens $response erstellen:

$response = Invoke-RestMethod -Method POST -Uri $ApiEndpoint -Headers $headers -Body (ConvertTo-Json $requestBody)

Alle diese Informationen im Anfragetext begannen in Form einer Hash-Tabelle. Aber wir konvertieren das in das JSON-Format und geben es dann an ChatGPT weiter.

Gibt den Nachrichteninhalt zurück

Dann haben wir also eine Return-Anweisung, gefolgt von $response.choices:

return $response.choices[0].message.content

ChatGPT generiert manchmal mehrere Antworten. Diese Zahl Null zeigt also lediglich an, dass wir die erste Antwort wünschen. Und dann haben wir .message.content, also geben wir die von ChatGPT generierte Antwort zurück. Und dann endet unsere Funktion.

Verbleibende Zeilen des Hauptteils

Wenn wir also zu unserem Hauptteil zurückkehren, können Sie sehen, dass die nächste Codezeile wie folgt lautet:

Write-Host “AI: $aiResponse” -ForegroundColor Yellow

Wir haben einfach die Vordergrundfarbe auf Gelb gesetzt. Das ist nichts, was Sie tun müssen. Aber manchmal kann es etwas einfacher sein, zu erkennen, welcher Teil der Konversation von ChatGPT generiert wurde und welche Benutzereingaben stattgefunden haben.

Wir zeigen also einfach die Variable $aiResponse an. Das ist die Antwort von ChatGPT.

Und dann fügt die allerletzte Codezeile diese Antwort zum Nachrichtenverlauf hinzu:

$MessageHistory.Add(@{“role”=”assistant”; “content”=$aiResponse})

Darüber müssen wir uns in diesem Fall wiederum nicht so viele Gedanken machen, da wir nur eine einzige Abfrage und eine einzige Antwort haben. Wenn Sie jedoch ein Skript erstellt haben, das mehrere Abfragen und mehrere Antworten vorsieht, möchten Sie die Antworten unbedingt zum Nachrichtenverlauf hinzufügen.

Das ist also nur ein wirklich kurzer Überblick darüber, wie Sie PowerShell für die Interaktion mit ChatGPT verwenden können.

Über den Autor

Brien Posey ist ein Technologie-Bestsellerautor, Redner und 21-facher Microsoft MVP. Zusätzlich zu seiner laufenden Arbeit im IT-Bereich absolvierte Posey eine Ausbildung zum kommerziellen Astronautenkandidaten, um sich auf den Flug zu einer Mission zur Untersuchung polarer mesosphärischer Wolken aus dem Weltraum vorzubereiten.em>
Anzeige
Nina Weber
Nina Weber is a renowned Journalist, who worked for many German Newspaper's Tech coloumns like Die Zukunft, Handelsblatt. She is a contributing Journalist for futuriq.de. She works as a editor also as a fact checker for futuriq.de. Her Bachelor degree in Humanties with Major in Digital Anthropology gave her a solid background for journalism. Know more about her here.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein