chatgpt ist aufgrund seiner Fähigkeit, scheinbar jede Frage zu beantworten, äußerst beliebt geworden. Während die meisten Benutzer über die ChatGPT-Website auf ChatGPT zugreifen, ist es möglich, ein PowerShell-Skript zu erstellen, das Abfragen an ChatGPT sendet.

Mit dieser Technik können Sie eine Vielzahl von ChatGPT-fähigen Tools für die spezifischen Anforderungen Ihres Unternehmens erstellen. In diesem Artikel zeige ich Ihnen, wie Sie ein solches Skript erstellen.

Ein Hinweis zu den ChatGPT-API-Kosten

Bevor wir fortfahren, ist es wichtig zu beachten, dass die Nutzung von ChatGPT selbst zwar kostenlos ist, die ChatGPT-API, die PowerShell für die Interaktion mit ChatGPT verwendet, jedoch mit Kosten verbunden ist. Für jede von Ihrem Skript mithilfe der API durchgeführte Abfrage fällt eine geringe Gebühr an. Detaillierte Preisinformationen finden Sie im OpenAI-Preisseite.

Wenn Sie die Preisdetails von ChatGPT überprüfen, werden Sie feststellen, dass diese auf der Anzahl der bei jeder Interaktion verwendeten Token basieren. Später in diesem Artikel werde ich erklären, wie Sie Ihr Skript anpassen können, um die Anzahl der verwendeten Token zu optimieren und zu begrenzen.

So erstellen Sie einen geheimen Schlüssel

Der erste Schritt zum Erstellen eines ChatGPT-fähigen PowerShell-Skripts besteht darin, einen geheimen Schlüssel zu generieren.

Wenn Sie über die Weboberfläche auf ChatGPT zugreifen, melden Sie sich normalerweise mit einem Benutzernamen und einem Passwort an. Wenn Sie jedoch ein PowerShell-Skript verwenden, um auf ChatGPT zuzugreifen, benötigen Sie einen geheimen Schlüssel anstelle eines Benutzernamens und eines Passworts.

So generieren Sie am einfachsten einen geheimen Schlüssel:

  1. Melden Sie sich über die übliche Weboberfläche bei ChatGPT an.
  2. Gehen Sie zu dieser Seite „Erstellen Sie Ihre Anwendung“: https://platform.openai.com/docs/quickstart/build-your-application
  3. Scrollen Sie auf der Seite nach unten, bis Sie die Schaltfläche „Neuen Geheimschlüssel erstellen“ finden, wie unten in Abbildung 1 dargestellt.
  4. Klicken Sie auf die Schaltfläche, um Ihren einzigartigen geheimen Schlüssel zu generieren.
  5. Es ist nicht schwierig, einen geheimen Schlüssel zu erstellen. Geben Sie einfach einen Namen ein, den Sie dem Schlüssel zuordnen möchten. In Abbildung 1 können Sie beispielsweise sehen, dass ich „Example“ als Schlüsselnamen verwendet habe. Beachten Sie jedoch, dass Sie nach der Generierung des Schlüssels die Zeichen protokollieren müssen, aus denen der Schlüssel besteht. ChatGPT zeigt den Schlüssel nur einmal an und es gibt keine Möglichkeit, den Inhalt des Schlüssels später abzurufen oder nachzuschlagen.

    Brien Posey

    Abbildung 1. Klicken Sie auf die Schaltfläche „Neuen geheimen Schlüssel erstellen“.

    Wie bereits erwähnt, ist die Verwendung der ChatGPT-API mit Kosten verbunden. Wenn Sie ein ChatGPT-Konto erstellen, erhalten Sie von OpenAI ein kleines Guthaben, das es Ihnen ermöglicht, mit der API zu experimentieren. Beachten Sie, dass diese Credits irgendwann verfallen. Wenn es schon eine Weile her ist, seit Sie Ihr ChatGPT-Konto erstellt haben, besteht eine gute Chance, dass das Guthaben abgelaufen ist, auch wenn Sie die API nicht verwendet haben.

    In solchen Fällen müssen Sie Ihrem Konto eine Zahlungsmethode hinzufügen, bevor Sie die API nutzen können. Andernfalls generiert PowerShell eine Fehlermeldung wie die in Abbildung 2 dargestellte, wenn Sie versuchen, die API ohne ausreichende Guthaben- oder Zahlungsinformationen zu verwenden. Die Meldung weist darauf hin, dass Sie Ihr aktuelles Kontingent überschritten haben, und empfiehlt Ihnen, Ihren Plan und Ihre Abrechnungseinstellungen zu überprüfen .

    Brien PoseyPowershell-Fehlermeldung

    Figur 2. Sofern Sie kein kostenpflichtiges Konto oder Kontoguthaben haben, generiert PowerShell eine Meldung wie diese.

    Um Überraschungen bei der Abrechnung zu vermeiden, können Sie Nutzungsbeschränkungen für Ihr Konto einrichten. Gehen Sie dazu einfach zu Seite mit den Nutzungsbeschränkungen von OpenAI und geben Sie den maximalen Geldbetrag an, den Sie pro Monat ausgeben möchten.

    Das ChatGPT-Konversationsskript

    Sobald Sie den erforderlichen API-Schlüssel generiert und Ihren Kontostatus überprüft haben, können Sie mit der Erstellung des PowerShell-Skripts fortfahren.

    Zuvor empfehle ich einen Besuch bei GitHub Laden Sie das ChatGPT-Conversation-Skript herunter. Mit diesem PowerShell-Skript können Sie direkt über PowerShell an einer Konversation mit ChatGPT teilnehmen. Um das Skript zu verwenden, suchen Sie die Codezeile am Anfang, die die Variable $ApiKey definiert, und fügen Sie dort Ihren API-Schlüssel ein.

    Es wird dringend empfohlen, mit diesem vorgefertigten Skript zu beginnen, da es bekanntermaßen ordnungsgemäß funktioniert. Damit können Sie überprüfen, ob mit Ihrem OpenAI-Konto alles in Ordnung ist, bevor Sie Ihren Code schreiben. Abbildung 3 zeigt ein Beispiel dafür, wie das Skript aussieht, wenn es ausgeführt wird.

    Brien PoseyBeispiel Für Das Skript Chatgpt-Conversation.ps1 Bei Ausführung

    Figur 3. So sieht das Skript ChatGPT-Conversation.ps1 aus, wenn es ausgeführt wird.

    Eine weniger komplexe Version des Skripts

    Für diesen Artikel verwende ich das Skript ChatGPT-Conversation.ps1 als Ausgangspunkt. Ich werde jedoch jeglichen unnötigen Code entfernen und das Skript auf seine grundlegendsten Elemente reduzieren, sodass es lediglich eine Anfrage an ChatGPT sendet und die Antwort anzeigt. Nachdem ich meine modifizierte Version des Skripts vorgestellt habe, werde ich Sie durch das Skript führen und Ihnen die Möglichkeit geben, die Technik anzupassen Ihre eigenen PowerShell-Skripte.

    Unten ist mein abgespeckter und leicht modifizierter Code:

    # Define API key and endpoint
    
    $ApiKey = ""
    
    $ApiEndpoint = "https://api.openai.com/v1/chat/completions"
    
    $AiSystemMessage = "You are a helpful assistant"
    
    # we use this list to store the system message and will add any user prompts and ai responses as the conversation evolves.
    
    [System.Collections.Generic.List[Hashtable]]$MessageHistory = @()
    
    # Clears the message history and fills it with the system message (and allows us to reset the history and start a new conversation)
    
    Function Initialize-MessageHistory ($message){
    
        $script:MessageHistory.Clear()
    
        $script:MessageHistory.Add(@{"role" = "system"; "content" = $message}) | Out-Null
    
    }
    
    # Function to send a message to ChatGPT. (We need to pass the entire message history in each request since we're using a RESTful API)
    
    function Invoke-ChatGPT ($MessageHistory) {
    
        # Set the request headers
    
        $headers = @{
    
        "Content-Type" = "application/json"
    
        "Authorization" = "Bearer $ApiKey"
    
        }  
    
        # Set the request body
    
        $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
    
    }
    
    # Show startup text
    
    Write-Host "######################`n# ChatGPT Powershell #`n######################`n` " -ForegroundColor Yellow
    
    # Add system message to MessageHistory
    
    Initialize-MessageHistory $AiSystemMessage
    
    #    This is where you get to ask a question
    
        # Capture user input
    
        $userMessage = Read-Host "`nYou"
    
        # Add new user prompt to list of messages
    
        $MessageHistory.Add(@{"role"="user"; "content"=$userMessage})
    
        # Query ChatGPT
    
        $aiResponse = Invoke-ChatGPT $MessageHistory
    
        # Show response
    
        Write-Host "AI: $aiResponse" -ForegroundColor Yellow
    
        # Add ChatGPT response to list of messages
    
        $MessageHistory.Add(@{"role"="assistant"; "content"=$aiResponse})
    

    Zwei Schlüsselkonzepte: Rollenzuweisungen und Nachrichtenverlauf

    Bevor ich anfange, den Code Schritt für Schritt zu erklären, müssen einige wichtige Konzepte behandelt werden.

    Das erste Konzept ist das der Rollen. Bei ChatGPT dreht sich alles um Konversationen, und sowohl Sie als auch die KI-Engine spielen in dieser Konversation unterschiedliche Rollen. Daher ist es notwendig, diese Rollen explizit zu definieren.

    Ihre Rolle ist die eines Benutzers. Sie können die Benutzerrolle sehen, auf die in dieser Codezeile verwiesen wird:

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

    In der Codezeile weisen Sie Ihre Rolle als „Benutzer“ zu und fügen Ihre Eingabe (enthalten in der Variablen „$userMessage“) dem Message History-Objekt hinzu.

    Der Nachrichtenverlauf ist ein weiteres zu verstehendes Konzept. Wenn Sie über die Weboberfläche mit ChatGPT interagieren, ist Ihnen möglicherweise aufgefallen, dass ChatGPT Ihre Anfragen verfolgt. Wenn Sie ChatGPT über PowerShell aufrufen, werden Ihre Abfragen ebenfalls im $MessageHistory-Objekt gespeichert.

    Auch wenn Sie nicht beabsichtigen, die Konversation aufzuzeichnen, müssen Sie dennoch ein $MessageHistory-Objekt erstellen. Dies liegt daran, dass die Antworten von ChatGPT auch zum Nachrichtenverlauf hinzugefügt werden und für die Anzeige dieser Antworten ein Verweis auf den Nachrichtenverlauf erforderlich ist.

    Wie in der zuvor besprochenen Codezeile gezeigt, umfasst das Senden einer Anfrage an ChatGPT das Hinzufügen des Nachrichtenverlaufs durch Angabe einer Rolle (in diesem Fall Ihrer Rolle in der Konversation) und Ihrer Anfrage, die offiziell als Nachrichteninhalt bezeichnet wird.

    Wenn ChatGPT eine Antwort generiert, wird diese auch zum Nachrichtenverlauf hinzugefügt. Genau wie Ihre Eingabe ist die Antwort von ChatGPT einer Rolle zugeordnet. Der Unterschied besteht jedoch darin, dass Sie die Rolle von ChatGPT in der Konversation auswählen können, was im Wesentlichen die Persönlichkeit von ChatGPT bestimmt.

    Im bereitgestellten Skript ist die Rolle von ChatGPT auf „Sie sind ein hilfreicher Assistent“ festgelegt. Sie haben jedoch die Möglichkeit, diesen Text durch eine prägnante Formulierung Ihrer Wahl zu ersetzen. Auf diese Weise können Sie ChatGPT humorvoll, frech oder mit jedem anderen Persönlichkeitsmerkmal gestalten, das Ihnen am besten gefällt. Lassen Sie mich zeigen, wie es funktioniert.

    In Abbildung 4 können Sie sehen, dass ich ChatGPT gefragt habe: „Was ist 2+2?“ ChatGPT antwortete mit der richtigen Antwort. Als nächstes habe ich die Rollenanweisung im Code geändert und die Zeile von „Sie sind ein hilfreicher Assistent“ in „Sie sind ein humorvoller Assistent“ geändert. Nach dieser Änderung habe ich die gleiche Frage noch einmal gestellt. Diesmal lieferte ChatGPT immer noch die richtige Antwort, allerdings mit einer gewissen Einstellung, und stellte seine aktualisierte Persönlichkeit zur Schau.

    Brien PoseyBeispiel Dafür, Wie Sie Die Persönlichkeit Von Chatgpt Anpassen Können

    Figur 4. Sie können die Persönlichkeit von ChatGPT nach Ihren Wünschen anpassen.

    Initialisieren des Skripts

    Schauen wir uns nun Schritt für Schritt den Code des Skripts an.

    Der erste Abschnitt, der unten gezeigt wird, definiert den API-Schlüssel und den API-Endpunkt.

    # Define API key and endpoint
    
    $ApiKey = ""
    
    $ApiEndpoint = "https://api.openai.com/v1/chat/completions"
    

    Der API-Schlüssel bezieht sich auf den geheimen Schlüssel, den Sie zuvor erstellt haben. Um ihn im Skript zu verwenden, fügen Sie einfach Ihren geheimen Schlüssel zwischen die Anführungszeichen ein und entfernen Sie die Zeichen. Der API-Endpunkt ist die URL, an die Ihre Anfragen weitergeleitet werden, und wird von OpenAI bereitgestellt.

    Danach deklarieren wir eine Variable namens $AiSystemMessage und setzen sie auf „Sie sind ein hilfreicher Assistent“, wie bereits erläutert.

    Die nächste Codezeile (ohne Kommentare) erstellt eine Hash-Tabelle, die zum Speichern des Nachrichtenverlaufs verwendet wird:

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

    Wie Sie sehen können, wird der Nachrichtenverlauf in der Variablen mit dem Namen $MessageHistory gespeichert.

    Die Funktion „Nachrichtenverlauf initialisieren“.

    Der nächste Schritt im Code umfasst die Definition einer Funktion namens Initialize-MessageHistory.

    So sieht die Funktion aus:

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

    Es gibt eigentlich nichts Besonderes, was Sie über diese Funktion wissen müssen. Es löscht den Nachrichtenverlauf und fügt dem Nachrichtenverlauf eine erste Nachricht hinzu. Beachten Sie, dass dieser ersten Nachricht die Rolle „System“ zugeordnet ist. Darüber hinaus wird der Befehl an das Cmdlet Out-Null weitergeleitet, wodurch jegliche sichtbare Ausgabe verhindert wird.

    Die Invoke-ChatGPT-Funktion

    Das Skript richtet eine weitere Funktion namens Invoke-ChatGPT ein.

    Sie können diese Funktion unten sehen:

    # Function to send a message to ChatGPT. (We need to pass the entire message history in each request since we're using a RESTful API)
    
    function Invoke-ChatGPT ($MessageHistory) {
    
        # Set the request headers
    
        $headers = @{
    
        "Content-Type" = "application/json"
    
        "Authorization" = "Bearer $ApiKey"
    
        }  
    
    # Set the request body
    
        $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
    
    }

    Die Invoke-ChatGPT-Funktion definiert einen Anforderungsheader für die ChatGPT-Sitzung. Dieser Anforderungsheader wird in einer Variablen namens $Header gespeichert und enthält den am Anfang des Skripts definierten API-Schlüssel.

    Darüber hinaus erstellt die Funktion den Anforderungstext. Der Nachrichtenverlauf ist Teil des Anforderungstexts, aber nicht der einzige. Der Anfragetext gibt außerdem die zu verwendende GPT-Engine, die maximale Anzahl an Token und die Temperatur an. Insbesondere stehen einige verschiedene GPT-Engines (Modelle) zur Auswahl, und jedes Modell hat seinen zugehörigen Preis pro Token, der auf der zuvor erwähnten Preisseite zu finden ist.

    Der in der Funktion verwendete Parameter max_tokens steuert die maximale Länge von ChatGPT-Antworten, was sich direkt auf die Gesamtkosten auswirkt. Höhere max_tokens-Werte ermöglichen längere und kostspieligere Antworten. Die Temperatureinstellung wiederum bestimmt den Stil der Reaktion, ob sie eher „sachlich“ oder kreativer ist. Höhere Temperaturwerte führen tendenziell zu einfallsreicheren Reaktionen.

    Sobald der Anforderungsheader und der Anforderungstext gebildet sind, werden sie über das Cmdlet Invoke-RestMethod an OpenAI gesendet.

    Der Hauptteil des Drehbuchs

    Der Hauptteil des Skripts ist im Vergleich zu den Funktionen relativ einfach.

    Hier ist der Hauptteil des Skripts:

    Show startup text
    
    Write-Host “######################`n# ChatGPT Powershell #`n######################`n`n” -ForegroundColor Yellow
    
    # Add system message to MessageHistory
    
    Initialize-MessageHistory $AiSystemMessage
    
        # Capture user input
    
        $userMessage = Read-Host “`nYou”
    
        # Add new user prompt to list of messages
    
        $MessageHistory.Add(@{“role”=”user”; “content”=$userMessage})
    
        # Query ChatGPT
    
        $aiResponse = Invoke-ChatGPT $MessageHistory
    
        # Show response
    
        Write-Host “AI: $aiResponse” -ForegroundColor Yellow
    
        # Add ChatGPT response to list of messages
    
        $MessageHistory.Add(@{“role”=”assistant”; “content”=$aiResponse})
    

    Der Hauptteil beginnt mit der Anzeige eines Banners, das das Skript vorstellt. Anschließend wird der Inhalt der Variablen „$AISystemMessage“ an die Funktion „Initialize-MessageHistory“ übergeben. Wie Sie sich vielleicht erinnern, ist $AISystemMessage die Variable, die die Rolle der KI speichert.

    Als nächstes verwendet PowerShell das Cmdlet Read-Host, um die Eingaben des Benutzers zu erfassen, die in der Variablen $userMessage gespeichert werden. Diese Variable wird dann zusammen mit der Rolle des Benutzers zum Nachrichtenverlauf hinzugefügt.

    Der Nachrichtenverlauf wird dann an die zuvor besprochene Invoke-ChatGPT-Funktion übergeben. Die Invoke-ChatGPT-Funktion fragt ChatGPT ab und speichert das Ergebnis in einer Variablen namens $aiResponse. Der Befehl Write-Host zeigt den Inhalt der Variablen $aiResponse an.

    Schließlich fügt das Skript die Variable $aiResponse zum Nachrichtenverlauf hinzu.

    Abschluss

    Der Hauptunterschied zwischen dem auf GitHub gefundenen Skript und meinem modifizierten Skript besteht darin, dass das ursprüngliche GitHub-Skript eine Schleife enthält. Diese Schleife fordert Sie kontinuierlich zur Eingabe auf, bis Sie das Skript beenden, sodass Sie eine vollständige Konversation mit ChatGPT führen können.

    In dem Skript, über das wir gesprochen haben, habe ich diese Schleife entfernt, um die Komplexität zu verringern.

    Über den Autor

    Kopfschuss Von Brien PoseyBrien 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.
⬅ Bewerten Sie post
Anzeige

Kommentieren Sie den Artikel

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