from simpleaichat import AIChat
ai = AIChat ( system = "Write a fancy GitHub README based on the user-provided project name." )
ai ( "simpleaichat" )SimpleAIChat adalah paket Python untuk dengan mudah berinteraksi dengan aplikasi obrolan seperti ChatGPT dan GPT-4 dengan fitur yang kuat dan kompleksitas kode minimal. Alat ini memiliki banyak fitur yang dioptimalkan untuk bekerja dengan chatgpt secepat dan semurah mungkin, tetapi masih jauh lebih mampu melakukan trik AI modern daripada kebanyakan implementasi:
Berikut beberapa contoh yang menyenangkan dan dapat diretas tentang cara kerja SimpleAichat:
SimpleAichat dapat diinstal dari PYPI:
pip3 install simpleaichatAnda dapat demo obrolan-apps dengan sangat cepat dengan SimpleAichat! Pertama, Anda perlu mendapatkan kunci API OpenAI, dan kemudian dengan satu baris kode:
from simpleaichat import AIChat
AIChat ( api_key = "sk-..." )Dan dengan itu, Anda akan didorong langsung ke obrolan interaktif!

Obrolan AI ini akan meniru perilaku Webapp Openai, tetapi di komputer lokal Anda!
Anda juga dapat melewati kunci API dengan menyimpannya di file .env dengan bidang OPENAI_API_KEY di direktori kerja (disarankan), atau dengan mengatur variabel lingkungan OPENAI_API_KEY langsung ke kunci API.
Tapi bagaimana dengan membuat percakapan khusus Anda sendiri? Di situlah keadaan menjadi menyenangkan. Masukkan saja orang, tempat atau benda apa pun, fiksi atau nonfiksi, yang ingin Anda ajak mengobrol!
AIChat ( "GLaDOS" ) # assuming API key loaded via methods above 
Tapi bukan itu saja! Anda dapat menyesuaikan dengan tepat bagaimana mereka berperilaku juga dengan perintah tambahan!
AIChat ( "GLaDOS" , "Speak in the style of a Seinfeld monologue" )
AIChat ( "Ronald McDonald" , "Speak using only emoji" )
Butuh sosialisasi segera? Setelah SimpleAIChat diinstal, Anda juga dapat memulai obrolan ini langsung dari baris perintah!
simpleaichat
simpleaichat " GlaDOS "
simpleaichat " GLaDOS " " Speak in the style of a Seinfeld monologue " Trik dengan bekerja dengan aplikasi berbasis obrolan baru yang tidak tersedia dengan iterasi awal GPT-3 adalah penambahan prompt sistem: kelas prompt yang berbeda yang memandu perilaku AI di seluruh percakapan. Bahkan, demo obrolan di atas sebenarnya menggunakan trik cepat sistem di belakang layar! Openai juga telah merilis panduan resmi untuk praktik terbaik sistem yang cepat untuk membangun aplikasi AI.
Untuk pengembang, Anda dapat membuat instantiasi instance terprogram AIChat dengan secara eksplisit menentukan prompt sistem, atau dengan menonaktifkan konsol.
ai = AIChat ( system = "You are a helpful assistant." )
ai = AIChat ( console = False ) # same as above Anda juga dapat meneruskan parameter model , seperti model="gpt-4" jika Anda memiliki akses ke GPT-4, atau model="gpt-3.5-turbo-16k" untuk chatgpt yang lebih besar konteks-window.
Anda kemudian dapat memberi makan kelas ai baru dengan input pengguna, dan itu akan mengembalikan dan menyimpan respons dari chatgpt:
response = ai ( "What is the capital of California?" )
print ( response ) The capital of California is Sacramento.
Atau, Anda dapat mengalirkan respons dengan token dengan generator jika generasi teks itu sendiri terlalu lambat:
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
Panggilan lebih lanjut ke objek ai akan melanjutkan obrolan, secara otomatis memasukkan informasi sebelumnya dari percakapan.
response = ai ( "When was it founded?" )
print ( response ) Sacramento was founded on February 27, 1850.
Anda juga dapat menyimpan sesi obrolan (sebagai CSV atau JSON) dan memuatnya nanti. Kunci API tidak disimpan sehingga Anda harus menyediakannya saat memuat.
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" )Sejumlah besar aplikasi ChatGPT yang didanai modal-ventura yang populer tidak benar-benar menggunakan bagian "obrolan" dari model. Sebaliknya, mereka hanya menggunakan prompt sistem/prompt pengguna pertama sebagai bentuk pemrograman bahasa alami. Anda dapat meniru perilaku ini dengan melewati prompt sistem baru saat menghasilkan teks, dan tidak menyimpan pesan yang dihasilkan.
Kelas AIChat adalah manajer sesi obrolan, yang berarti Anda dapat memiliki beberapa obrolan atau fungsi independen yang terjadi! Contoh -contoh di atas menggunakan sesi default, tetapi Anda dapat membuat yang baru dengan menentukan id saat memanggil ai .
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]} Versi yang lebih baru dari chatgpt juga mendukung "panggilan fungsi", tetapi manfaat nyata dari fitur itu adalah kemampuan chatgpt untuk mendukung input dan/atau output terstruktur, yang sekarang membuka berbagai macam aplikasi! SimpleAichat merampingkan alur kerja untuk memungkinkan Anda melewati input_schema dan/atau output_schema .
Anda dapat membangun skema menggunakan basemodel pydantic.
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'}Lihat buku catatan generator TTRPG untuk demonstrasi kemampuan skema yang lebih rumit.
Salah satu aspek terbaru dari berinteraksi dengan chatgpt adalah kemampuan untuk model untuk menggunakan "alat." Seperti yang dipopulerkan oleh Langchain, alat memungkinkan model untuk memutuskan kapan harus menggunakan fungsi khusus, yang dapat melampaui hanya obrolan AI itu sendiri, misalnya mengambil informasi terbaru dari internet yang tidak ada dalam data pelatihan obrolan AI. Alur kerja ini analog dengan plugin chatgpt.
Parsing output model untuk memohon alat biasanya membutuhkan sejumlah shennanigans, tetapi SimpleAIChat menggunakan trik yang rapi untuk membuatnya cepat dan andal! Selain itu, alat yang ditentukan mengembalikan context untuk chatgpt untuk menarik dari tanggapan akhir, dan alat yang Anda tentukan dapat mengembalikan kamus yang juga dapat Anda isi dengan metadata sewenang -wenang untuk debugging dan postprocessing. Setiap generasi mengembalikan kamus dengan response dan fungsi tool yang digunakan, yang dapat digunakan untuk mengatur alur kerja yang mirip dengan agen gaya Langchain, misalnya input umpan rekursif ke model sampai menentukan tidak perlu menggunakan alat lagi.
Anda perlu menentukan fungsi dengan DocStrings yang memberikan petunjuk bagi AI untuk memilihnya:
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 tanpa banyak kode tambahan, ditambah dengan manfaat tambahan dari fleksibilitas yang jauh lebih banyak seperti debugging.Max Woolf (@Minimaxir)
Proyek open-source Max didukung oleh sponsor Patreon dan Github-nya. Jika Anda menemukan proyek ini bermanfaat, setiap kontribusi moneter untuk Patreon dihargai dan akan digunakan secara kreatif.
Mit