Kelola prompt parameterisasi (teks) yang digunakan dalam AI generatif (alias chatgpt, openai, et.al. ) Menggunakan adaptor penyimpanan seperti fileSystemadaPter, sqliteadapter dan activerecordapter.
Memecahkan perubahan dalam versi 0.3.0 - nilai hash parameter untuk kata kunci sekarang menjadi array, bukan nilai tunggal. Nilai terakhir dalam array selalu merupakan nilai terbaru yang digunakan untuk kata kunci yang diberikan. Ini dilakukan untuk mendukung penggunaan pengeditan objek readline :: History di alat AIA CLI
Instal permata dan tambahkan ke permata aplikasi dengan mengeksekusi:
bundle add prompt_manager
Jika Bundler tidak digunakan untuk mengelola dependensi, instal permata dengan mengeksekusi:
gem install prompt_manager
Lihat Contoh/Simple.rb
Lihat juga Contoh/Using_search_proc.rb
Permata prompt_manager menyediakan fungsionalitas untuk mengelola prompt yang memiliki kata kunci dan arahan untuk digunakan dengan proses AI generatif.
Gen-Ai berurusan dengan konversi (beberapa orang akan mengatakan eksekusi) dari teks bahasa alami manusia ("prompt") menjadi sesuatu yang lain menggunakan apa yang dikenal sebagai model bahasa besar (LLM) seperti yang tersedia dari openai. Prompt parameterisasi adalah salah satu di mana ada kata kunci tertanam (parameter) yang merupakan pemegang tempat untuk teks lain untuk dimasukkan ke dalam prompt.
Prompt_Manager menggunakan ekspresi reguler untuk mengidentifikasi kata kunci ini dalam prompt. Ini menggunakan kata kunci sebagai kunci dalam hash parameters yang disimpan dengan teks prompt dalam bentuk serial - misalnya sebagai JSON.
Secara default, teks apa pun yang cocok dengan [UPPERCASE_TEXT] terlampir dalam tanda kurung persegi diperlakukan sebagai kata kunci. [Kata kunci juga dapat memiliki spasi] serta karakter garis bawah.
Anda dapat menyesuaikan pola kata kunci dengan mengatur ekspresi reguler yang berbeda:
# Use {{param}} style instead of [PARAM]
PromptManager :: Prompt . parameter_regex = /( { { [A-Za-z_]+ } } )/ Regex harus termasuk menangkap tanda kurung () untuk mengekstrak kata kunci. Regex default adalah /([[AZ _|]+])/ .
Arahan adalah baris dalam teks prompt yang dimulai dengan dua karakter '//' - Slash Slash - seperti di masa lalu IBM JCL - bahasa kontrol pekerjaan. Prompt dapat memiliki nol atau lebih arahan. Arahan dapat memiliki parameter dan dapat menggunakan kata kunci.
prompt_manager hanya mengumpulkan arahan. Ini mengekstrak kata kunci dari garis arahan dan memberikan substitusi kata kunci tersebut dengan teks lain seperti halnya untuk prompt.
Berikut adalah contoh file teks prompt dengan komentar, arahan, dan kata kunci:
# prompts/sing_a_song.txt
# Desc: Has the computer sing a song
//TextToSpeech [LANGUAGE] [VOICE NAME]
Say the lyrics to the song [SONG NAME]. Please provide only the lyrics without commentary.
__END__
Computers will never replace Frank Sinatra
Mendapatkan arahan dari prompt semudah mendapatkan Kewyord:
prompt = PromptManager :: Prompt . new ( ... )
prompt . keywords #=> an Array
prompt . directives #=> an Array of entries like: ['directive', 'parameters']
# to_s builds the prompt by substituting
# values for keywords amd removing comments.
# The resulting text contains directives and
# prompt text ready for the LLM process.
puts prompt . to_s Entri dalam array yang dikembalikan dengan prompt.directives Metode Direktif adalah dalam urutan bahwa arahan didefinisikan dalam prompt. Setiap entri memiliki dua elemen:
Karena Directies dikumpulkan setelah kata kunci dalam prompt telah diganti dengan nilainya, dimungkinkan untuk memiliki arahan yang dihasilkan secara dinamis sebagai bagian dari prompt. Misalnya:
//[COMMAND] [OPTIONS]
# or
[SOMETHING]
... di mana [perintah] diganti dengan beberapa nama arahan. [Sesuatu] dapat diganti dengan "// opsi arahan"
Permata prompt_manager hanya mengumpulkan arahan. Melaksanakan arahan -arahan tersebut ditinggalkan untuk beberapa proses aliran down. Berikut adalah beberapa ide tentang bagaimana arahan dapat digunakan dalam proses hilir yang cepat:
mods .Semuanya tergantung pada bagaimana aplikasi Anda ingin mendukung arahan atau tidak.
Permata prompt_manager mengabaikan komentar. Garis yang dimulai dengan karakter '#' - pound (alias hash) - adalah komentar baris. Setiap baris yang mengikuti baris yang ' berakhir di akhir file dianggap sebagai komentar. Pada dasarnya ' akhir ' akhir file. Tidak ada proses mengikuti garis itu.
Permata juga mengabaikan garis kosong.
Adaptor penyimpanan adalah contoh kelas yang mengikat PromptManager::Prompt ke fasilitas penyimpanan yang memegang prompt yang sebenarnya. Saat ini ada 3 adaptor penyimpanan yang direncanakan untuk implementasi.
PromptManager::Prompt untuk mendukung serangkaian metode kecil. Adaptor penyimpanan dapat menyediakan metode "tambahan" atau metode instance yang dapat digunakan melalui kelas prompt. Lihat test/prompt_manager/prompt_test.rb untuk panduan membuat adaptor penyimpanan baru.
Ini adalah adaptor penyimpanan pertama yang dikembangkan. Ini menyimpan prompt sebagai file teks dalam sistem file di dalam prompts_dir (direktori) yang ditunjuk seperti ~/.prompts atau di mana itu paling masuk akal bagi Anda. Contoh lain adalah memiliki direktori Anda pada sistem file bersama sehingga orang lain dapat menggunakan petunjuk yang sama.
prompt ID adalah nama dasar file teks. Misalnya todo.txt adalah file untuk identitas prompt todo (lihat Direktori Contoh.)
Parameter untuk todo Prompt ID disimpan di direktori yang sama dengan todo.txt dalam file JSON bernama todo.json (juga di Direktori Contoh.)
Gunakan blok config untuk membuat konfigurasi untuk kelas.
PromptManager :: Storage :: FileSystemAdapter . config do | o |
o . prompts_dir = "path/to/prompts_directory"
o . search_proc = nil # default
o . prompt_extension = '.txt' # default
o . params_extension = '.json' # default
end Blok config mengembalikan self sehingga berarti Anda dapat melakukan ini untuk mengatur adaptor penyimpanan dengan kelas prompt:
PromptManager :: Prompt
. storage_adapter =
PromptManager :: Storage :: FileSystemAdapter
. config do | config |
config . prompts_dir = 'path/to/prompts_dir'
end . new Ini adalah objek String atau Pathname . Semua jalur file dipertahankan di kelas sebagai objek Pathname . Jika Anda memberikan String itu akan dikonversi. Jalur relatif akan dikonversi ke jalur absolut.
ArgumentError akan dinaikkan ketika prompts_dir tidak ada atau jika itu bukan direktori.
Default untuk search_proc adalah nil yang berarti bahwa pencarian akan dibentuk sebelumnya dengan metode search default yang pada dasarnya membaca semua file prompt untuk melihat mana yang berisi istilah pencarian. Ini akan mengembalikan array id prompt untuk setiap file prompt yang ditemukan yang berisi istilah pencarian. Terserah aplikasi untuk memilih ID prompt yang dikembalikan mana yang akan digunakan.
Ada cara yang lebih cepat untuk mencari dan memilih file. Misalnya ada utilitas pencarian dan seleksi khusus yang tersedia untuk baris perintah. Direktori examples berisi skrip bash bernama rgfzf yang menggunakan rg (alias ripgrep ) untuk melakukan pencarian dan fzf untuk melakukan pemilihan.
Lihat Contoh/Using_search_proc.rb
Dua opsi konfigurasi ini adalah objek String yang harus dimulai dengan periode "." Utherwise ArgumentError akan diangkat.
Saat ini FileSystemAdapter hanya mendukung serializer JSON untuk hash parameternya. Menggunakan nilai lain untuk ekstensi ini akan menyebabkan masalah.
Mereka ada sehingga ada platform di mana adaptor penyimpanan lain dapat dibangun atau lebih banyak serial. Ini tidak ada di peta jalan.
# ~/.prompts/joke.txt
# Desc: Tell some jokes
Tell me a few [KIND] jokes about [SUBJECT]
Perhatikan baris perintah di bagian atas. Ini adalah konvensi yang saya gunakan. Itu bukan bagian dari perangkat lunak. Saya merasa terbantu dalam mendokumentasikan prompt.
{
"[KIND]" : [
" pun " ,
" family friendly "
],
"[SUBJECT]" : [
" parrot " ,
" garbage man " ,
" snowman " ,
" weather girl "
]
}Nilai terakhir dalam array kata kunci adalah nilai terbaru yang digunakan untuk kata kunci itu. Ini adalah fungsi yang ditetapkan sejak v0.3.0. Tujuannya adalah untuk memberikan riwayat nilai dari mana pengguna dapat memilih untuk mengulangi nilai sebelumnya atau untuk memilih nilai TA sebelumnya dan mengeditnya menjadi sesuatu yang baru.
FileSystemAdapter menambahkan dua metode baru untuk digunakan oleh kelas Prompt :
Pathname ke file prompt Gunakan Formulir path(prompt_id) terhadap kelas Prompt use prompt.path saat Anda memiliki instance Prompt
ActiveRecordAdapter mengasumsikan bahwa ada database yang sudah dikonfigurasi oleh program aplikasi yang membutuhkan prompt_manager yang memiliki model yang berisi konten prompt. Model ini harus memiliki setidaknya tiga kolom yang berisi konten untuk:
Model dan kolom untuk ketiga elemen ini dapat memiliki nama apa pun. Nama -nama tersebut diberikan kepada ActiveRecordAdapter di blok konfigurasi.
Gunakan blok config untuk membuat konfigurasi untuk kelas.
The PromptManager::Prompt Class mengharapkan contoh kelas adaptor penyimpanan. Dengan konvensi Penyimpanan Konfigurasi Konfigurasi Kelas Konvensi akan mengembalikan self sehingga sederhana new setelah konfigurasi akan menetapkan instance.
PromptManager :: Prompt
. storage_adapter =
PromptManager :: Storage :: ActiveRecordAdapter . config do | config |
config . model = DbPromptModel # any ActiveRecord::Base model
config . id_column = :prompt_name
config . text_column = :prompt_text
config . parameters_column = :prompt_params
end . new # adapters an instances of the adapter class Parameter konfigurasi model adalah nama kelas aktual dari ActiveRecord::Base atau ApplicationRecord (jika Anda menggunakan aplikasi Rails) yang berisi konten yang digunakan untuk petunjuk.
id_column berisi nama kolom yang berisi konten "Prompt ID". Itu bisa berupa nilai String atau Symbol .
text_column berisi nama kolom yang berisi teks mentah yang sebenarnya dari prompt. Teks mentah ini dapat mencakup kata kunci yang akan diganti dengan nilai -nilai dari hash parameter. Nilai nama kolom dapat berupa String atau Symbol .
parameters_column berisi nama kolom yang berisi parameter yang digunakan untuk mengganti kata kunci dalam teks prompt. Kolom ini dalam model database diharapkan diserialisasi. ActiveRecordAdapter saat ini memiliki bit kode kludge yang mengasumsikan bahwa serialisasi dilakukan dengan JSON. Nilai parameter_column dapat berupa String atau Symbol .
TODO: Perbaiki kludge sehingga serialisasi apa pun dapat digunakan.
Ada banyak kemungkinan untuk contoh konsep plugin ini dari adaptor penyimpanan. Berikut beberapa untuk dipertimbangkan:
Mencari umpan balik dan kontributor untuk meningkatkan kemampuan prompt_manager.
Laporan bug dan permintaan tarik dipersilakan di GitHub di https://github.com/madbomber/promppt_manager.
Permata tersedia sebagai open source di bawah ketentuan lisensi MIT.