from simpleaichat import AIChat
ai = AIChat ( system = "Write a fancy GitHub README based on the user-provided project name." )
ai ( "simpleaichat" )SimpleAichat ist ein Python-Paket, um mit Chat-Apps wie ChatGPT und GPT-4 mit robusten Funktionen und minimaler Codekomplexität einfach zu verflechten. Dieses Tool verfügt über viele Funktionen, die für die Arbeit mit ChatGPT so schnell und billig wie möglich optimiert sind, aber immer noch viel mehr für moderne KI -Tricks als die meisten Implementierungen in der Lage sind:
Hier sind einige lustige, hackbare Beispiele darüber, wie SimpleAichat funktioniert:
SimpleAichat kann von PYPI installiert werden:
pip3 install simpleaichatSie können Chat-Apps sehr schnell mit SimpleAichat Demo-Apps vorstellen! Zuerst müssen Sie eine OpenAI -API -Schlüssel und dann mit einer Codezeile erhalten:
from simpleaichat import AIChat
AIChat ( api_key = "sk-..." )Und damit werden Sie direkt in einen interaktiven Chat gestoßen!

Dieser KI -Chat wird das Verhalten von OpenAIs WebApp nachahmen, aber auf Ihrem lokalen Computer!
Sie können den API -Schlüssel auch übergeben, indem Sie sie in einer .env -Datei mit einem Feld OPENAI_API_KEY im Arbeitsverzeichnis (empfohlen) oder durch Einstellen der Umgebungsvariablen von OPENAI_API_KEY direkt an den API -Schlüssel einstellen.
Aber was ist mit dem Erstellen Ihrer eigenen benutzerdefinierten Gespräche? Hier macht es Spaß. Geben Sie einfach jede Person, Stelle oder Sache ein, fiktiv oder nicht fictional, mit denen Sie chatten möchten!
AIChat ( "GLaDOS" ) # assuming API key loaded via methods above 
Aber das ist nicht alles! Sie können genau anpassen, wie sie sich auch mit zusätzlichen Befehlen verhalten!
AIChat ( "GLaDOS" , "Speak in the style of a Seinfeld monologue" )
AIChat ( "Ronald McDonald" , "Speak using only emoji" )
Benötigen Sie sofort eine Sozialisation? Sobald SimpleAichat installiert ist, können Sie diese Chats auch direkt aus der Befehlszeile starten!
simpleaichat
simpleaichat " GlaDOS "
simpleaichat " GLaDOS " " Speak in the style of a Seinfeld monologue " Der Trick bei der Arbeit mit neuen Chat-basierten Apps, die mit früheren Iterationen von GPT-3 nicht ohne weiteres verfügbar waren, ist die Hinzufügung der Systemaufforderung: eine andere Klasse von Eingabeaufforderung, die das KI-Verhalten während des gesamten Gesprächs leitet. Tatsächlich verwenden die oben genannten Chat -Demos tatsächlich System -Eingabeaufforderungen hinter den Kulissen! OpenAI hat außerdem einen offiziellen Leitfaden für die besten Best Practices für das Erstellen von KI -Apps veröffentlicht.
Für Entwickler können Sie eine programmatische Instanz von AIChat instanziieren, indem Sie eine Systemaufforderung ausdrücklich angeben oder die Konsole deaktivieren.
ai = AIChat ( system = "You are a helpful assistant." )
ai = AIChat ( console = False ) # same as above Sie können auch einen model wie model="gpt-4" übergeben, wenn Sie Zugriff auf GPT-4 oder model="gpt-3.5-turbo-16k" für einen größeren Kontext-Window-Chatgpt haben.
Sie können dann die neue ai -Klasse mit Benutzereingaben füttern, und sie wird zurückgegeben und die Antwort von CHATGPT speichern:
response = ai ( "What is the capital of California?" )
print ( response ) The capital of California is Sacramento.
Alternativ können Sie Antworten mit Token mit einem Generator streamen, wenn die Textgenerierung selbst zu langsam ist:
for chunk in ai . stream ( "What is the capital of California?" , params = { "max_tokens" : 5 }):
response_td = chunk [ "response" ] # dict contains "delta" for the new token and "response"
print ( response_td ) The
The capital
The capital of
The capital of California
The capital of California is
Weitere Anrufe des ai -Objekts werden den Chat fortsetzen und automatisch frühere Informationen aus der Konversation einbeziehen.
response = ai ( "When was it founded?" )
print ( response ) Sacramento was founded on February 27, 1850.
Sie können auch Chat -Sitzungen (als CSV oder JSON) speichern und später laden. Der API -Schlüssel wird nicht gespeichert, sodass Sie dies beim Laden angeben müssen.
ai . save_session () # CSV, will only save messages
ai . save_session ( format = "json" , minify = True ) # JSON
ai . load_session ( "my.csv" )
ai . load_session ( "my.json" )Eine große Anzahl beliebter von Venture-Kapital finanzierter ChatGPT-Apps verwenden den Teil des Modells nicht wirklich. Stattdessen verwenden sie nur die Eingabeaufforderung für System -Eingabeaufforderung/erste Benutzer als Form der natürlichen Sprachprogrammierung. Sie können dieses Verhalten emulieren, indem Sie beim Generieren von Text eine neue Systemaufforderung übergeben und die resultierenden Nachrichten nicht speichern.
Die AIChat -Klasse ist ein Manager von Chat -Sessions , was bedeutet, dass Sie mehrere unabhängige Chats oder Funktionen aufnehmen können! Die obigen Beispiele verwenden eine Standardsitzung. Sie können jedoch neue erstellen, indem Sie eine id beim Aufrufen ai angeben.
json = '{"title": "An array of integers.", "array": [-1, 0, 1]}'
functions = [
"Format the user-provided JSON as YAML." ,
"Write a limerick based on the user-provided JSON." ,
"Translate the user-provided JSON from English to French."
]
params = { "temperature" : 0.0 , "max_tokens" : 100 } # a temperature of 0.0 is deterministic
# We namespace the function by `id` so it doesn't affect other chats.
# Settings set during session creation will apply to all generations from the session,
# but you can change them per-generation, as is the case with the `system` prompt here.
ai = AIChat ( id = "function" , params = params , save_messages = False )
for function in functions :
output = ai ( json , id = "function" , system = function )
print ( output )title: "An array of integers."
array:
- -1
- 0
- 1An array of integers so neat,
With values that can't be beat,
From negative to positive one,
It's a range that's quite fun,
This JSON is really quite sweet!{"titre": "Un tableau d'entiers.", "tableau": [-1, 0, 1]} Neuere Versionen von ChatGPT unterstützen auch "Funktionsaufruf", aber der eigentliche Vorteil dieser Funktion ist die Möglichkeit für ChatGPT, strukturierte Eingaben und/oder Ausgabe zu unterstützen, die jetzt eine Vielzahl von Anwendungen eröffnet! SimpleAichat rationalisiert den Workflow so, dass Sie nur ein input_schema und/oder ein output_schema übergeben können.
Sie können ein Schema mit einem pydantischen Basemodell erstellen.
from pydantic import BaseModel , Field
ai = AIChat (
console = False ,
save_messages = False , # with schema I/O, messages are never saved
model = "gpt-3.5-turbo-0613" ,
params = { "temperature" : 0.0 },
)
class get_event_metadata ( BaseModel ):
"""Event information"""
description : str = Field ( description = "Description of event" )
city : str = Field ( description = "City where event occured" )
year : int = Field ( description = "Year when event occured" )
month : str = Field ( description = "Month when event occured" )
# returns a dict, with keys ordered as in the schema
ai ( "First iPhone announcement" , output_schema = get_event_metadata ){'description': 'The first iPhone was announced by Apple Inc.',
'city': 'San Francisco',
'year': 2007,
'month': 'January'}Eine aufwändigere Demonstration von Schema -Funktionen finden Sie im TTRPG -Generator -Notebook.
Einer der neuesten Aspekte der Interaktion mit ChatGPT ist die Fähigkeit des Modells, "Tools" zu verwenden. Wie von Langchain populär gemacht, ermöglichen Tools das Modell, zu entscheiden, wann benutzerdefinierte Funktionen verwendet werden können, die sich über die Chat -KI selbst hinaus erstrecken können, z. B. die neuesten Informationen aus dem Internet abrufen, die nicht in den Trainingsdaten der Chat -KI vorhanden sind. Dieser Workflow ist analog zu Chatgpt -Plugins.
Das Analysieren der Modellausgabe, um Tools aufzurufen, erfordert in der Regel eine Reihe von Shennanigans, aber SimpleAichat verwendet einen ordentlichen Trick, um es schnell und zuverlässig zu machen! Darüber hinaus geben die angegebenen Tools einen context zurück, mit dem ChatGPT für seine endgültige Antwort zeichnen kann, und Tools, die Sie spezifizieren, können ein Wörterbuch zurückgeben, das Sie auch mit willkürlichen Metadaten zum Debuggen und Nachverarbeitung füllen können. Jede Generation gibt ein Wörterbuch mit der response und der verwendeten tool zurück, mit der Workflows wie Agenten im Langchain-Stil eingerichtet werden können.
Sie müssen Funktionen mit Docstrings angeben, die für die KI Hinweise zur Auswahl der KI vorlegen:
from simpleaichat . utils import wikipedia_search , wikipedia_search_lookup
# This uses the Wikipedia Search API.
# Results from it are nondeterministic, your mileage will vary.
def search ( query ):
"""Search the internet."""
wiki_matches = wikipedia_search ( query , n = 3 )
return { "context" : ", " . join ( wiki_matches ), "titles" : wiki_matches }
def lookup ( query ):
"""Lookup more information about a topic."""
page = wikipedia_search_lookup ( query , sentences = 3 )
return page
params = { "temperature" : 0.0 , "max_tokens" : 100 }
ai = AIChat ( params = params , console = False )
ai ( "San Francisco tourist attractions" , tools = [ search , lookup ]){'context': "Fisherman's Wharf, San Francisco, Tourist attractions in the United States, Lombard Street (San Francisco)",
'titles': ["Fisherman's Wharf, San Francisco",
'Tourist attractions in the United States',
'Lombard Street (San Francisco)'],
'tool': 'search',
'response': "There are many popular tourist attractions in San Francisco, including Fisherman's Wharf and Lombard Street. Fisherman's Wharf is a bustling waterfront area known for its seafood restaurants, souvenir shops, and sea lion sightings. Lombard Street, on the other hand, is a famous winding street with eight hairpin turns that attract visitors from all over the world. Both of these attractions are must-sees for anyone visiting San Francisco."} ai ( "Lombard Street?" , tools = [ search , lookup ]) {'context': 'Lombard Street is an east–west street in San Francisco, California that is famous for a steep, one-block section with eight hairpin turns. Stretching from The Presidio east to The Embarcadero (with a gap on Telegraph Hill), most of the street's western segment is a major thoroughfare designated as part of U.S. Route 101. The famous one-block section, claimed to be "the crookedest street in the world", is located along the eastern segment in the Russian Hill neighborhood.',
'tool': 'lookup',
'response': 'Lombard Street is a famous street in San Francisco, California known for its steep, one-block section with eight hairpin turns. It stretches from The Presidio to The Embarcadero, with a gap on Telegraph Hill. The western segment of the street is a major thoroughfare designated as part of U.S. Route 101, while the famous one-block section, claimed to be "the crookedest street in the world", is located along the eastern segment in the Russian Hill'}
ai ( "Thanks for your help!" , tools = [ search , lookup ]){'response': "You're welcome! If you have any more questions or need further assistance, feel free to ask.",
'tool': None}while ohne viel zusätzlichen Code nachahmen, und mit dem zusätzlichen Nutzen viel mehr Flexibilität wie Debugging.Max Woolf (@Minimaxir)
Max 'Open-Source-Projekte werden von seinen Patreon- und Github-Sponsoren unterstützt. Wenn Sie dieses Projekt hilfreich empfanden, werden alle Geldbeiträge zum Patreon geschätzt und werden gut kreativ genutzt.
MIT