aia
ist ein Befehlszeilendienstprogramm, das die Interaktion mit KI-Modellen erleichtert. Es automatisiert die Verwaltung vorkompositioneller Eingabeaufforderungen und führt generative KI-Befehle (Gen-AI) für diese Eingabeaufforderungen aus, wobei es sich die größere Kontextfenstergröße moderner LLMs zunutze macht.
Es nutzt das prompt_manager
Gem, um Eingabeaufforderungen für die mods
und sgpt
-CLI-Dienstprogramme zu verwalten. Es verwendet „ripgrep“ für die Suche nach Eingabeaufforderungsdateien. Es verwendet fzf
für die Eingabeaufforderungsauswahl basierend auf einem Suchbegriff und Fuzzy-Matching.
Letzte Änderung : Siehe Änderungsprotokoll
Nur zur Information ... Ich arbeite im
develop
daran , die Abhängigkeit von Backend-LLM-Prozessoren wie Mods und LLM zu beseitigen. Ich refaktoriere aia, um mein eigenes universelles Client-Gem namens ai_client zu verwenden, das Zugriff auf alle Modelle und alle Anbieter ermöglicht.
aia
spezifische Richtlinienbefehlellm
sgpt
plz
Installieren Sie das Gem, indem Sie Folgendes ausführen:
gem install aia
Installieren Sie die Befehlszeilen-Dienstprogramme, indem Sie Folgendes ausführen:
brew install mods fzf ripgrep
Sie müssen außerdem ein Verzeichnis in Ihrem Dateisystem einrichten, in dem Ihre Eingabeaufforderungstextdateien, zuletzt verwendeten Parameter und Nutzungsprotokolldateien gespeichert werden.
Richten Sie eine Systemumgebungsvariable (envar) mit dem Namen „AIA_PROMPTS_DIR“ ein, die auf Ihr Eingabeaufforderungsverzeichnis verweist. Die Standardeinstellung befindet sich in Ihrem HOME-Verzeichnis mit dem Namen „.prompts“. Die Envar „AIA_ROLES_DIR“ verweist auf Ihr Rollenverzeichnis, in dem Sie Eingabeaufforderungen haben, die die verschiedenen Rollen definieren, die das LLM bei der Ausführung seiner Arbeit übernehmen soll. Das Standardrollenverzeichnis befindet sich im Eingabeaufforderungsverzeichnis. Sein Name ist „Rollen“.
Möglicherweise möchten Sie auch das Abschlussskript für Ihre Shell installieren. Um eine Kopie des Abschlussskripts zu erhalten, gehen Sie wie folgt vor:
aia --completion bash
fish
und zsh
sind ebenfalls erhältlich.
Der mit -h
oder --help
abgerufene Nutzungsbericht wird als Standard man
implementiert. Sie können sowohl --help --verbose
als auch -h -v
zusammen verwenden, um nicht nur die aia
Manpage, sondern auch den Nutzungsbericht vom backend
-LLM-Verarbeitungstool abzurufen.
$ aia --help
Die Standardeinstellungen der aia
-Konfiguration können durch Systemumgebungsvariablen (Envars) mit dem Präfix „AIA_“, gefolgt vom Namen des Konfigurationselements, ebenfalls in Großbuchstaben, überschrieben werden. Alle Konfigurationselemente können auf diese Weise durch eine Envar überschrieben werden. Die folgende Tabelle zeigt einige Beispiele.
Konfigurationselement | Standardwert | Envar-Schlüssel |
---|---|---|
Backend | Mods | AIA_BACKEND |
config_file | Null | AIA_CONFIG_FILE |
debuggen | FALSCH | AIA_DEBUG |
bearbeiten | FALSCH | AIA_EDIT |
Extra | '' | AIA_EXTRA |
verschwommen | FALSCH | AIA_FUZZY |
log_file | ~/.prompts/_prompts.log | AIA_LOG_FILE |
Abschlag | WAHR | AIA_MARKDOWN |
Modell | gpt-4-1106-Vorschau | AIA_MODEL |
out_file | STDOUT | AIA_OUT_FILE |
prompts_dir | ~/.prompts | AIA_PROMPTS_DIR |
Sprachmodell. | tts-1 | AIA_SPEECH_MODEL |
ausführlich | FALSCH | AIA_VERBOSE |
Stimme | Legierung | AIA_VOICE |
Eine vollständige Liste finden Sie im @options
Hash in der Datei cli.rb
Es gibt einige Konfigurationselemente, deren Verwendung als Envar-Überschreibung nicht unbedingt sinnvoll ist. Wenn Sie beispielsweise export AIA_DUMP_FILE=config.yaml
festlegen, speichert aia
die aktuelle Konfiguration config.yaml und wird bei jeder Ausführung beendet, bis Sie unset AIA_DUMP_FILE
Zusätzlich zu diesen Konfigurationselementen für aia
können die optionalen Befehlszeilenparameter für die Backend-Eingabeaufforderungsverarbeitungsdienstprogramme (Mods und SGPT) auch mithilfe von Envars mit dem Präfix „AIA_“ festgelegt werden. Beispielsweise legt „export AIA_TOPP=1.0“ die Befehlszeilenoption „--topp 1.0“ für das mods
Dienstprogramm fest, wenn es als Backend-Prozessor verwendet wird.
Mit der Option --shell
ermöglicht aia
den Zugriff auf die Shell-Umgebung Ihres Terminals aus dem Eingabeaufforderungstext heraus.
aia
kann alle Verweise auf Systemumgebungsvariablen (Envar) im Eingabeaufforderungstext durch den Wert der Envar ersetzen. Muster wie
Mithilfe des Musters können dynamische Inhalte in die Eingabeaufforderung eingefügt werden
Bedenken Sie die Möglichkeiten, eine Eingabeaufforderung an Ihr spezifisches Betriebssystem anzupassen:
As a system administration on a $(uname -v) platform what is the best way to [DO_SOMETHING]
oder fügen Sie Inhalte aus einer Datei in Ihrem Home-Verzeichnis ein:
Given the following constraints $(cat ~/3_laws_of_robotics.txt) determine the best way to instruct my roomba to clean my kids room.
Wenn Sie die Option --shell
verwenden, um eine Chat-Sitzung zu starten, ist die Shell-Integration in Ihren Folgeaufforderungen verfügbar. Angenommen, Sie haben eine Chat-Sitzung mit einer Rolle „Ruby Expert“ gestartet und erwarteten, über Änderungen zu chatten, die an einer bestimmten Klasse vorgenommen werden könnten, ABER Sie haben zu Beginn vergessen, die Klassenquelldatei als Teil des Kontexts einzubeziehen. Sie können dies als Folgeaufforderung eingeben, um fortzufahren:
The class I want to chat about refactoring is this one: $(cat my_class.rb)
Dadurch wird die gesamte Klassenquelldatei in Ihre Folgeaufforderung eingefügt. Sie können weiterhin mit Ihrem AI Assistant über Änderungen an der Klasse chatten.
Die Einbindung dynamischer Inhalte durch die Shell-Integration durch die Option --shell
ist von Bedeutung. aia
bietet außerdem die volle Leistungsfähigkeit der eingebetteten Ruby-Codeverarbeitung im Eingabeaufforderungstext.
Die Option --erb
verwandelt die Eingabeaufforderungstextdatei in eine voll funktionsfähige ERB-Vorlage. Die Embedded Ruby (ERB)-Vorlagensyntax (2024) bietet einen guten Überblick über die Syntax und Leistungsfähigkeit von ERB.
Die meisten Websites mit Informationen zu ERB bieten Beispiele für die Verwendung von ERB zur Generierung dynamischer HTML-Inhalte für webbasierte Anwendungen. Das ist ein häufiger Anwendungsfall für ERB. aia
hingegen verwendet ERB, um dynamischen Eingabeaufforderungstext zu generieren.
In einer Chat-Sitzung, unabhängig davon, ob sie mit der Option --chat
oder ihrem Äquivalent mit einer Direktive in einer Eingabeaufforderungstextdatei gestartet wird, verhält sich die Sitzung etwas anders, was ihre Bindung und Zuweisungen lokaler Variablen betrifft. Da eine Chat-Sitzung per Definition über mehrere Eingabeaufforderungen verfügt, funktioniert es nicht, eine lokale Variable in einer Eingabeaufforderung festzulegen und zu erwarten, dass sie in einer nachfolgenden Eingabeaufforderung verfügbar ist. Sie müssen Instanzvariablen verwenden, um diese Aufforderung zu erfüllen und die Übertragung von Informationen zu veranlassen.
Da außerdem davon ausgegangen wird, dass Folgeaufforderungen aus einem einzigen Satz oder Absatz bestehen und durch eine einzelne Rückgabe beendet werden, ist es wahrscheinlich, dass die ERB-Verbesserung von Vorteil sein wird. Aber vielleicht finden Sie eine Verwendung dafür.
Downstream-Verarbeitungsanweisungen wurden dem von au
in Version 0.4.1 verwendeten prompt_manager
Gem hinzugefügt. Bei diesen Anweisungen handelt es sich um Zeilen in der Eingabeaufforderungstextdatei, die mit „//“ beginnen und folgendes Muster haben:
//command parameters
Zwischen dem „//“ und dem Befehl steht kein Leerzeichen.
Wenn Sie Eingabeaufforderungsanweisungen mit Eingabeaufforderungsparametern und Shell-Envar-Ersetzungen kombinieren, können Sie leistungsstarke Eingabeaufforderungen für die Komposition erhalten.
Hier ist ein Beispiel für eine reine generische Direktive.
//[DIRECTIVE_NAME] [DIRECTIVE_PARAMS]
Wenn die Eingabeaufforderung ausgeführt wird, werden Sie aufgefordert, für jeden Parameter einen Wert anzugeben. Sie könnten „Shell“ für den Direktivennamen und „calc 22/7“ antworten, wenn Sie eine schlechte Annäherung an PI wünschen.
Probieren Sie diese Eingabeaufforderungsdatei aus:
//shell calc [FORMULA]
What does that number mean to you?
aia
spezifische Richtlinienbefehle Derzeit verfügt aia
nur über wenige Direktiven, die im Folgenden detailliert beschrieben werden.
Die //config
Direktive in einer Eingabeaufforderungstextdatei wird verwendet, um die spezifische Konfigurationsumgebung für die Eingabeaufforderung anzupassen. Die Werte aller Konfigurationselemente können geändert werden. Die Reihenfolge der Wertezuweisung für ein Konfigurationselement beginnt mit dem Standardwert, der durch den Envar-Wert ersetzt wird, der durch den Befehlszeilenoptionswert ersetzt wird, der durch den Wert aus der Konfigurationsdatei ersetzt wird.
Die //config
ist die letzte und letzte Möglichkeit, den Wert eines Konfigurationselements für eine bestimmte Eingabeaufforderung zu ändern.
Die Schalteroptionen werden wie Boolesche Werte behandelt. Sie sind entweder true
oder false
. Ihr Name endet im Kontext einer //config
Direktive immer mit einem „?“ Charakter - Fragezeichen.
Um den Wert eines Schalters mit „//config for example
--terse“ oder „--chat“ wie folgt festzulegen:
//config chat? = true
//config terse? = true
Einem Konfigurationselement wie --out_file
oder --model
ist in der Befehlszeile ein Wert zugeordnet. Um diesen Wert mit der //config
Direktive festzulegen, gehen Sie folgendermaßen vor:
//config model = gpt-3.5-turbo
//config out_file = temp.md
//config backend = mods
Übrigens: Das „=“ ist völlig optional. Es wird tatsächlich ignoriert, ebenso wie „:=", wenn Sie dies als Zuweisungsoperator wählen würden. Auch die Anzahl der Leerzeichen zwischen dem Element und dem Wert ist völlig willkürlich. Ich mag es, Dinge in einer Reihe anzuordnen, daher ist diese Syntax genauso gültig:
//config model gpt-3.5-turbo
//config out_file temp.md
//config backend mods
//config chat? true
//config terse? true
//config model gpt-4
HINWEIS: Wenn Sie denselben Konfigurationselementnamen mehr als einmal in der Eingabeaufforderungsdatei angeben, wird dieser als letztes festgelegt, wenn die Eingabeaufforderung endgültig durch das LLM verarbeitet wird. Im obigen Beispiel wird beispielsweise gpt-4
als Modell verwendet. Der Erste zu sein zählt in diesem Fall nicht.
Beispiel:
//include path_to_file
Der path_to_file
kann entweder absolut oder relativ sein. Wenn es relativ ist, ist es am PWD verankert. Wenn die path_to_file
Envars enthält, muss die CLI-Option --shell
verwendet werden, um die Envar in der Direktive durch ihren tatsächlichen Wert zu ersetzen.
In der eingebundenen Datei werden alle Kommentare oder Anweisungen ausgeschlossen. Es wird erwartet, dass es sich bei der Datei um eine Textdatei handelt, sodass ihr Inhalt der vorhandenen Eingabeaufforderung vorangestellt werden kann. Wenn es sich bei der Datei jedoch um eine Quellcodedatei handelt (z. B. file.rb), wird der Quellcode einbezogen. JEDOCH werden alle Kommentarzeilen oder Zeilen, die mit „//“ beginnen, ausgeschlossen.
TODO: Erwägen Sie das Hinzufügen einer Befehlszeilenoption --include_dir
um den Ort anzugeben, von dem relative Dateien stammen sollen.
Beispiel:
//ruby any_code_that_returns_an_instance_of_String
Diese Richtlinie gilt zusätzlich zu ERB. Zu diesem Zeitpunkt ist die //ruby
-Direktive durch die aktuelle Bindung begrenzt, die sich innerhalb der AIA::Directives#ruby
-Methode befindet. Daher dürfte es kaum Verwendung finden.
Da es jedoch als einfacher eval(code)
implementiert ist, besteht die Möglichkeit einer Verwendung wie dieser:
//ruby load(some_ruby_file); execute_some_method
Jede Ausführung einer //ruby
Direktive ist eine neue Ausführung der AIA::Directives#ruby
-Methode, sodass Sie keine lokalen Variablen von einem Aufruf zum anderen übertragen können; Sie könnten jedoch etwas mit Instanzvariablen oder globalen Variablen machen. Sie können dem AIA.config
Objekt sogar etwas hinzufügen, das beim nächsten Aufruf der Direktive im Kontext derselben Eingabeaufforderung eingefügt wird.
Beispiel:
//shell some_shell_command
Es wird erwartet, dass der Shell-Befehl Text an STDOUT zurückgibt, der dem vorhandenen Eingabeaufforderungstext in der Eingabeaufforderungsdatei vorangestellt wird.
Es gibt keine Einschränkungen hinsichtlich des Shell-Befehls. Wenn Sie beispielsweise das Entfernen von Kommentaren und Anweisungen aus einer Datei umgehen möchten, können Sie Folgendes tun:
//shell cat path_to_file
Dies bewirkt im Grunde das Gleiche wie die //include
-Direktive, verwendet jedoch den gesamten Inhalt der Datei. Für relative Dateipfade gilt dasselbe. Der Pfad der Datei ist relativ zum PWD.
Sehen Sie sich den Quellcode für die von den Backends unterstützten Anweisungen an, die derzeit ebenfalls konfigurationsbasiert sind.
mods
verfügt beispielsweise über ein Konfigurationselement topp
, das durch eine Direktive in einer Eingabeaufforderungstextdatei direkt festgelegt werden kann.
//topp 1.5
Wenn mods
nicht das Backend ist, wird die //topp
-Anweisung ignoriert.
Wenn Sie sich in einer Chat-Sitzung befinden, können Sie eine Anweisung als Folgeaufforderung verwenden. Wenn Sie beispielsweise die Chat-Sitzung mit der Option --terse
gestartet haben und kurze Antworten vom Backend erwarten; Wenn Sie jedoch entscheiden, dass Sie umfassendere Antworten wünschen, können Sie Folgendes tun:
//config terse? false
Die Anweisung wird ausgeführt und eine neue Folgeaufforderung kann eingegeben werden, wobei eine längere Antwort vom Backend generiert wird.
Warum sollten/wollen Sie in einer Batch-Situation eine Folge von Eingabeaufforderungen verwenden? Möglicherweise haben Sie eine komplexe Eingabeaufforderung, die die Token-Einschränkungen Ihres Modells für die Eingabe überschreitet, sodass Sie sie in mehrere Teile aufteilen müssen. Oder nehmen Sie an, es handelt sich um eine einfache Eingabeaufforderung, aber die Anzahl der ausgegebenen Token ist begrenzt und Sie erhalten nicht genau die vollständige Antwort, nach der Sie gesucht haben.
Manchmal bedarf es einer Reihe von Aufforderungen, um die gewünschte Antwort zu erhalten. Die Antwort einer Eingabeaufforderung wird zum Kontext für die nächste Eingabeaufforderung. Das geht ganz einfach innerhalb einer chat
Sitzung, indem Sie Ihre Eingabeaufforderungen manuell eingeben und anpassen, bis Sie die gewünschte Antwort erhalten.
Wenn Sie dies regelmäßig oder stapelweise tun müssen, können Sie aia
und die Befehlszeilenoptionen --next
und --pipeline
verwenden.
Diese beiden Optionen geben die Reihenfolge der zu verarbeitenden Eingabeaufforderungs-IDs an. Beide Optionen können in einer Eingabeaufforderungsdatei mithilfe der //config
Direktive verwendet werden. Wie alle eingebetteten Direktiven können Sie die Parametrisierungs-Shell-Integration und Ruby nutzen. Ich fange an, mich wie TIm Tool Man zu fühlen – mehr Leistung!
Stellen Sie sich die Situation vor, in der Sie über 4 Eingabeaufforderungs-IDs verfügen, die nacheinander verarbeitet werden müssen. Die IDs und zugehörigen Eingabeaufforderungsdateinamen lauten:
Promt-ID | Eingabeaufforderungsdatei |
---|---|
eins. | one.txt |
zwei. | zwei.txt |
drei. | drei.txt |
vier. | vier.txt |
export AIA_OUT_FILE=temp.md
aia one --next two
aia three --next four temp.md
oder Sie verwenden in jeder Eingabeaufforderungsdatei die config-Direktive:
one.txt contains //config next two
two.txt contains //config next three
three.txt contains //config next four
ABER wenn Ihre Sequenz mehr als zwei Eingabeaufforderungen enthält, sollten Sie die Verwendung der Option --pipeline in Betracht ziehen.
Die Direktive //next ist die Abkürzung für //config next
aia one --pipeline two,three,four
oder verwenden Sie innerhalb der one.txt
Eingabeaufforderungsdatei diese Anweisung:
//config pipeline two,three,four
Die Direktive //pipeline ist die Abkürzung für //configpipeline
Da die Antwort einer Eingabeaufforderung in die nächste Eingabeaufforderung innerhalb der Sequenz eingespeist wird, anstatt dass alle Eingabeaufforderungen ihre Antworten in dieselbe Ausgabedatei schreiben, verwenden Sie diese Anweisungen in den zugehörigen Eingabeaufforderungsdateien:
Eingabeaufforderungsdatei | Richtlinie |
---|---|
one.txt | //config out_file one.md |
zwei.txt | //config out_file two.md |
drei.txt | //config out_file three.md |
vier.txt | //config out_file four.md |
Auf diese Weise können Sie die Antwort sehen, die für jede Eingabeaufforderung in der Sequenz generiert wurde.
TODO: Der Audio-to-Text befindet sich noch in der Entwicklung.
Angenommen, Sie haben eine Audiodatei einer Besprechung. Sie möchten eine Transkription dessen erhalten, was in dieser Besprechung gesagt wurde. Manchmal verbergen Rohtranskriptionen den wahren Wert der Aufnahme. Deshalb haben Sie einen Pompt erstellt, der die Rohtranskriptionen nimmt und eine technische Zusammenfassung mit einer Liste von Aktionspunkten erstellt.
Erstellen Sie zwei Eingabeaufforderungen mit den Namen transcribe.txt und tech_summary.txt
# transcribe.txt
# Desc: takes one audio file
# note that there is no "prompt" text only the directive
//config backend client
//config model whisper-1
//next tech_summary
Und
# tech_summary.txt
//config model gpt-4-turbo
//config out_file meeting_summary.md
Review the raw transcript of a technical meeting,
summarize the discussion and
note any action items that were generated.
Format your response in markdown.
Jetzt können Sie Folgendes tun:
aia transcribe my_tech_meeting.m4a
Ihre Zusammenfassung der Besprechung befindet sich in der Datei meeting_summary.md
Es gibt zwei Arten von Eingabeaufforderungen
Diese zweite Art von Eingabeaufforderung wird als Rolle bezeichnet. Manchmal ist die Rolle in den Unterricht integriert. Zum Beispiel: „Lass als Zauberer ein Kaninchen aus einem Hut erscheinen.“ Um dieselbe Rolle in mehreren Eingabeaufforderungen wiederzuverwenden, empfiehlt aia
Ihnen, ein spezielles roles_dir
festzulegen, in das Sie Eingabeaufforderungen einfügen, die spezifisch für Personifizierungsrollen sind.
Das Standard roles_dir
ist ein Unterverzeichnis des prompts_dir
mit dem Namen „Rollen“. Sie können Ihr roles_dir
jedoch an einer beliebigen Stelle ablegen, die für Sie sinnvoll ist.
Die Option --role
wird verwendet, um eine Personifizierungsaufforderung in Ihrem Rollenverzeichnis zu identifizieren, die den Kontext definiert, in dem das LLM seine Antwort bereitstellen soll. Der Text der Rollen-ID wird dem Text der primären Eingabeaufforderung vorangestellt, um eine vollständige Eingabeaufforderung zu bilden, die vom Backend verarbeitet werden soll.
Bedenken Sie zum Beispiel:
aia -r ruby refactor my_class.rb
Im Verzeichnis „roles“ wird der Inhalt der Textdatei ruby.txt
dem Inhalt der Datei refactor.txt
aus dem Verzeichnis „prompts“ vorangestellt, um eine vollständige Eingabeaufforderung zu erstellen. Bei dieser vollständigen Eingabeaufforderung werden alle Parameter, gefolgt von Anweisungen, verarbeitet, bevor der kombinierte Eingabeaufforderungstext an das Backend gesendet wird.
Beachten Sie, dass --role
nur eine Art ist, zu sagen, dass Sie diese Eingabeaufforderungstextdatei an den Anfang dieser anderen Eingabeaufforderungstextdatei hinzufügen möchten. Der Inhalt der „Rolle“-Eingabeaufforderung kann beliebig sein. Es muss nicht unbedingt eine tatsächliche Rolle sein.
aia
unterstützt vollständig einen Verzeichnisbaum innerhalb des prompts_dir
als Möglichkeit zur Organisation oder Klassifizierung Ihrer verschiedenen Eingabeaufforderungstextdateien.
aia -r sw_eng doc_the_methods my_class.rb
In diesem Beispiel wird die Eingabeaufforderungstextdatei $AIA_ROLES_DIR/sw_eng.txt
der Eingabeaufforderungstextdatei $AIA_PROMPTS_DIR/doc_the_methods.txt
vorangestellt
Da aia
parametrisierte Eingabeaufforderungen unterstützt, können Sie ein Schlüsselwort wie „[ROLE]“ zu einem Teil Ihrer Eingabeaufforderung machen. Betrachten Sie zum Beispiel diese Eingabeaufforderung:
As a [ROLE] tell me what you think about [SUBJECT]
Wenn diese Eingabeaufforderung verarbeitet wird, fragt aia
Sie nach einem Wert für das Schlüsselwort „ROLE“ und das Schlüsselwort „SUBJECT“, um die Eingabeaufforderung zu vervollständigen. Da aia
einen Verlauf Ihrer vorherigen Antworten verwaltet, können Sie einfach etwas auswählen, das Sie in der Vergangenheit verwendet haben, oder mit einem völlig neuen Wert antworten.
So installieren Sie die von aia verwendeten externen CLI-Programme:
brew installiere fzf mods rg glow
fzf Befehlszeilen-Fuzzy-Finder, geschrieben in Go https://github.com/junegunn/fzf
mods AI auf der Befehlszeile https://github.com/charmbracelet/mods
rg-Suchtool wie grep und The Silver Searcher https://github.com/BurntSushi/ripgrep
Glow-Render-Markdown auf der CLI https://github.com/charmbracelet/glow
Ein Texteditor, dessen ausführbare Datei in der Systemumgebungsvariablen „EDITOR“ wie folgt eingerichtet ist:
export EDITOR="subl -w"
llm
llm Access large language models from the command-line
| brew install llm
|__ https://llm.datasette.io/
Ab aia v0.5.13
ist der llm
Backend-Prozessor in einer eingeschränkten Integration verfügbar. Es handelt sich um eine sehr leistungsstarke Python-basierte Implementierung, die über ein eigenes Prompt-Templating-System verfügt. Der Grund für die Aufnahme in die aia
-Umgebung liegt in der Fähigkeit, lokale LLM-Modelle zu nutzen.
sgpt
shell-gpt
auch bekannt als sgpt
ist ebenfalls eine Python-Implementierung eines CLI-Tools, das Eingabeaufforderungen über OpenAI verarbeitet. Es verfügt über weniger Funktionen als mods
und llm
und ist weniger flexibel.
plz
plz-cli
auch bekannt als plz
, ist nicht in aia
integriert, erhält jedoch eine lobende Erwähnung für seine Fähigkeit, eine Eingabeaufforderung auszugeben, die darauf zugeschnitten ist, etwas auf der Befehlszeile auszuführen. Seine Antwort ist ein CLI-Befehl (manchmal eine Pipeline-Sequenz), der die in der Eingabeaufforderung festgelegte Aufgabe ausführt. Es werden die auszuführenden Befehle für die Datendateien zurückgegeben, die Sie mit einer Abfrage zum Ausführen des Befehls angegeben haben.
Sie können in Ihrer Shell eine Vervollständigungsfunktion einrichten, die die in Ihrem prompts_dir
gespeicherte prompt_id vervollständigt – Funktionen für bash
, fish
und zsh
sind verfügbar. Um eine Kopie dieser Funktionen zu erhalten, gehen Sie wie folgt vor:
aia --completion bash
Wenn Sie kein Fan von „Born Again“ sind, ersetzen Sie bash
durch einen der anderen.
Kopieren Sie die Funktion an einen Ort, an dem sie in der Instanz Ihrer Shell installiert werden kann. Dies kann eine .profile
oder .bashrc
Datei usw. sein.
Das ist nur eine persönliche Angelegenheit zwischen Ihnen und mir, also plappern Sie das nicht mit allen herum. Meine wichtigste Eingabeaufforderung befindet sich in einer Datei namens ad_hoc.txt
. Es sieht so aus:
[WAS JETZT MENSCHLICH]
Ja. Nur ein einzelner Parameter, für den ich einen Wert für alles angeben kann, was mir gerade durch den Kopf geht. Der Vorteil besteht darin, dass ich den Befehlsverlauf meiner Shell nicht mit viel Text verschmutze.
Was ist Ihrer Meinung nach besser in der Verlaufsdatei Ihrer Shell?
mods " As a certified public accountant specializing in forensic audit and analysis of public company financial statements, what do you think of mine? What is the best way to hide the millions dracma that I've skimmed? " < financial_statement.txt
oder
aia ad_hoc financial_statement.txt
Beide machen dasselbe; aia
fügt den Text der Eingabeaufforderung jedoch nicht in die Verlaufsdatei der Shell ein. Natürlich wird der Schlüsselwort-/Parameterwert in der JSON-Datei der Eingabeaufforderung gespeichert und die Eingabeaufforderung mit der Antwort wird protokolliert, sofern nicht --no-log
angegeben ist ; Aber es bringt den Shell-Verlauf nicht durcheinander!
Ich verwende die bash
Shell. In meiner .bashrc
Datei beziehe ich eine andere Datei mit dem Namen .bashrc__aia
, die so aussieht:
# ~/.bashic_aia
# AI Assistant
# These are the defaults:
export AIA_PROMPTS_DIR= ~ /.prompts
export AIA_OUT_FILE=./temp.md
export AIA_LOG_FILE= $AIA_PROMPTS_DIR /_prompts.log
export AIA_BACKEND=mods
export AIA_MODEL=gpt-4-1106-preview
# Not a default. Invokes spinner.
export AIA_VERBOSE=true
alias chat= ' aia chat --terse '
# rest of the file is the completion function
So sieht meine chat
Eingabeaufforderungsdatei aus:
# ~/.prompts/chat.txt
# Desc: Start a chat session
//config chat ? = true
[WHAT]
Dieses CLI-Tool begann als ein paar Ruby-Zeilen in einer Datei in meinem Skript-Repo. Ich wuchs einfach weiter, als ich beschloss, mehr Funktionen und mehr Backend-Tools hinzuzufügen. Es gab keine wirkliche Architektur, die den Entwurf leiten konnte. Was übrig blieb, ist ein großes Code-Durcheinander, das langsam in etwas wartbareres umgestaltet wird. Diese Arbeit findet im develop
statt. Ich freue mich über Ihre Hilfe. Schauen Sie sich an, was in dieser Branche vor sich geht, und senden Sie mir eine PR dagegen.
Wenn Sie im Hauptzweig etwas sehen, senden Sie mir natürlich eine PR, damit wir das Problem für alle beheben können.
Fehlerberichte und Pull-Requests sind auf GitHub unter https://github.com/MadBomber/aia willkommen.
Wenn Sie Probleme mit aia
feststellen, notieren Sie diese bitte als Problem. Dieses Ding wurde größtenteils von einem Menschen geschrieben und Sie wissen, wie fehleranfällig Menschen sind. Es sollten viele Fehler zu finden sein.
Ich bin nicht zufrieden mit der Art und Weise, wie einige Befehlszeilenoptionen für externe Befehle fest codiert sind. Ich spreche konkret über die Art und Weise, wie die rg
und fzf
Tools verwendet werden. Diese Optionen bestimmen das grundlegende Erscheinungsbild der Suchfunktion in der Befehlszeile. Vielleicht sollten sie Teil der Gesamtkonfiguration sein, damit Benutzer ihre Benutzeroberfläche nach ihren Wünschen anpassen können.
Das Juwel ist als Open Source unter den Bedingungen der MIT-Lizenz verfügbar.