Gunakan VIM sebagai alat untuk merancang dan menjalankan secara efisien, men -debug, dan simpan permintaan model bahasa besar Anda (LLM).
Prompter.vim mengubah editor VIM menjadi lingkungan rekayasa cepat yang efisien, secara efektif mengganti LLM Penyedia Taman Bermain Web seperti: Azure OpenAi Service Playground atau Openai Playground.
Dari versi 0.2, plugin menggunakan Litellm sebagai lapisan abstraksi penyedia LLM.
Litellm menyebut semua API LLM menggunakan format OpenAI: Bedrock, Azure, Openai, Cohere, Anthropic, Ollama, Sagemaker, Huggingface, Replicate (100+ LLMS). Jadi Anda dapat menggunakan prompter.vim dengan daftar luas penyedia LLM yang berbeda!
<F9> (Pintasan Kunci untuk :PrompterSetup )<F12> (Pintasan tombol untuk :PrompterGenerate ) untuk menyelesaikan LLMmyexperiment.prompt ) ![]() |
|---|
| prompter.vim beraksi: mengedit/berinteraksi dengan prompt yang mensimulasikan percakapan telepon (dengan teknik di bawah ini digambarkan sebagai "dialog sebagai bagian dari prompt teks") |
Prompter.vim tidak dirancang terutama sebagai alat penyelesaian kode, meskipun Anda dapat menggunakannya juga untuk tujuan itu.
Sebagai gantinya, plugin ini bertujuan untuk menjadi pengganti tujuan umum untuk taman bermain penyelesaian teks web, yang ditujukan untuk insinyur prompt yang ingin menguji dan men-debug petunjuk bahasa alami.
Gagasan itu muncul pada musim semi 2023 ketika saya sedang menulis permintaan LLM dan bereksperimen dengan teknik rekayasa yang cepat. Saya menggunakan pendekatan "penyelesaian teks" langsung, di mana Anda memasukkan corpus prompt teks Anda dan meminta penyelesaian dari model bahasa besar (LLM).
Pendekatan awal saya adalah memanfaatkan taman bermain web yang ditawarkan oleh penyedia LLM. Namun, saya menemukan banyak masalah terutama saat berinteraksi dengan taman bermain web Azure Openai.
Untuk alasan yang belum saya pahami, interaksi web di taman bermain web Azure melambat setelah titik tertentu. Saya menduga bug di dalam kotak penyelesaian. Selain itu, saya tidak menyukai antarmuka Web Azure untuk mode "CHAT COMPONION". Kekacauan total! Sebaliknya, taman bermain OpenAI yang asli lebih baik diimplementasikan, dan saya tidak menemukan masalah yang disebutkan di atas.
Namun demikian, kedua taman bermain web disebutkan, hanya mengizinkan satu tab prompt per browser. Oleh karena itu, ketika berhadapan dengan beberapa petunjuk aktif (mengembangkan aplikasi komposit yang terdiri dari prompt template bersarang/rantai), Anda harus mempertahankan beberapa taman bermain yang terbuka di tab yang berbeda. Saat Anda mencapai hasil yang patut diperhatikan (menengah) tertentu, Anda harus menyalin semua kotak teks dan menyimpannya dalam file versi.
Melakukan semua ini dengan taman bermain web adalah proses yang rumit dan rawan kesalahan. Pikiran terakhir adalah: Bagaimana jika saya bisa menjalankan penyelesaian langsung di dalam editor VIM saya?
text atau penyelesaian chat ?Ada dua "mode penyelesaian" umum yang diramalkan di OpenAi atau LLM saat ini yang serupa:
penyelesaian text
Mode penyelesaian yang disetel sebagai text berarti bahwa LLM selesai, teks Prompt jendela konteks yang diberikan dengan teks penyelesaian (teks di -> teks keluar). Contoh pengaturan model semacam itu adalah model OpenAI text-da-vinci-003 . Untuk menggunakan mode penyelesaian teks, model harus mendukung mode itu melalui API tertentu.
┌────────────────────────┐
┌─ │ │ ─┐
context │ │ bla bla bla │ │
window │ │ bla bla │ │
= │ │ bla bla bla bla │ │ prompt
prompt │ │ bla │ │
+ │ │ bla bla │ │
completion │ │ │ ─┘
│ └────────────────────────┘
│ |
│ LLM generation
│ |
│ v
│ ┌────────────────────────┐
│ │ │ ─┐
│ │ bla bla │ │
│ │ bla bla bla │ │ text completion
│ │ bla │ │
└─ │ │ ─┘
└────────────────────────┘
Penyelesaian chat
Mode penyelesaian yang ditetapkan sebagai chat berarti bahwa LLM yang disesuaikan untuk "peran" obrolan (pengguna mengatakan, asisten mengatakan, ...). Detail sebelum, silakan baca ini. Prompt jendela konteks sebenarnya dibuat oleh
gpt3.5-turbo . Untuk menggunakan mode penyelesaian obrolan, model harus mendukung mode itu, melalui API tertentu. ┌────────────────────────┐
┌─ │ bla bla bla bla │ ─┐
│ │ bla bla bla │ │
│ │ bla bla │ │ system
│ │ bla bla bla bla │ │ prompt
context │ │ bla │ │
window │ │ bla bla │ ─┘
= │ └────────────────────────┘
system prompt │ ┌────────────────────────┐
+ │ │ user: blablabla │ ─┐
chat │ ├────────────────────────┤ │
+ │ │ assistant: bla bla bla │ │
completion │ ├────────────────────────┤ │ chat
│ │ user: bla bla bla │ │ prompt
│ ├────────────────────────┤ │
│ │ assistant: blabla bla │ │
│ ├────────────────────────┤ │
│ │ user: blabla bla │ ─┘
│ └────────────────────────┘
│ |
│ LLM generation
│ |
│ v
│ ┌────────────────────────┐
│ │ │ ─┐
└─ │ assistant: bla bla bla │ │ chat completion
│ │ ─┘
└────────────────────────┘
Plugin prompter.vim dikandung untuk bekerja sebagai taman bermain prototipe cepat teks, menghindari komplikasi peran obrolan.
Jadi jika model yang hanya berfungsi dalam mode obrolan (misalnya OpenAi GPT3.5-Turbo ) digunakan, di belakang layar (melalui metode litellm text_completion() ) Konten teks editor (prompt) dimasukkan sebagai prompt peran "sistem". Lihat juga: Diskusi.
Saya sadar bahwa menggunakan model berbasis obrolan sebagai model berbasis teks, seperti yang dijelaskan di atas, bukan penggunaan yang optimal, tetapi ini merupakan kompromi antara kesederhanaan memiliki taman bermain penyelesaian teks tunggal dan kompleksitas mengelola peran obrolan.
Plugin ini dibuat di Python3. Periksa apakah instalasi VIM Anda mendukung Python3:
vim --version | grep " +python3 " | awk ' {print $3} ' Dalam kasus saya, saya mendapat +python3 . Itulah prasyarat utama.
Periksa juga yang merupakan versi Python yang dikompilasi vim. Ekstrak versi Python yang tepat dengan perintah:
vim --version | grep -o -P ' (?<=/python)[0-9]+.[0-9]+ ' Dalam kasus saya, saya mendapat 3.8 .
Perhatikan bahwa Vim hanya dapat menggunakan versi Python (dan paket terkait) yang dikompilasi. Dengan contoh jika sistem Anda Python Version saat ini (
python3 --version==Python 3.11.6) berbeda dari versi Vim Python, katakanlahPython 3.8, ingat Vim hanya akan melihat paketPython 3.8. Untuk menggunakan paketPython 3.11.6, Anda harus mengkompilasi ulang vim.
Instal paket python litellm . Anda harus menginstal litellm menggunakan pip dari versi Python yang sesuai, misalnya pip3.8 .
pip3.8 install -U litellm Instal plugin menggunakan manajer plugin pilihan Anda, misalnya menggunakan VIM-PLUG Plug-in Manager, masukkan file .vimrc Anda:
Plug ' solyarisoftware/prompter.vim ' # PROVIDER DEPENDENT SETTINGS USING LiteLLM CONFIGURATION
# https://docs.litellm.ai/docs/providers
# https://docs.litellm.ai/docs/providers/azure
# LLM PROVIDER MANDATORY SETTINGS
export AZURE_API_VERSION=2023-09-01-preview
export AZURE_API_BASE= " https://XXXXXXXXXXXXXXX.openai.azure.com/ "
export AZURE_API_KEY= " YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY "
export MODEL= " azure/your_deployment-name "
# LLM PARAMETERS OPTIONAL SETTINGS
# translated OpenAI model parameters
# https://docs.litellm.ai/docs/completion/input#translated-openai-params
export TEMPERATURE=0.3
export MAX_TOKENS=3000
export OPENAI_STOP= " " Ide yang bagus adalah mengedit dan menyimpan semua variabel di atas dalam file tersembunyi, source ~/.prompter_azure.vim vi ~/.prompter_azure.vim
Anda dapat menjalankan perintah dalam mode perintah VIM ( : atau kunci terkait:
| Memerintah | Kunci | Tindakan |
|---|---|---|
:PrompterSetup | <F9> | Pengaturan model dan konfigurasi awal |
:PrompterGenerate | <F12> | Jalankan penyelesaian teks LLM |
:PrompterInfo | <F10> | Laporkan konfigurasi saat ini |
:PrompterSetupSaat Anda memasuki VIM, untuk mengaktifkan lingkungan taman bermain prompter, pertama -tama dijalankan dalam mode perintah:
:PrompterSetupMengikuti pengaturan lingkungan, jika berhasil, perintah cetak di baris status konfigurasi model:
Model: azure/gpt-35-turbo completion mode: chat temperature: 0.7 max_tokens: 100
Penjelasan Nilai dalam Laporan Baris Status:
temperature preset value ───────────────────────────┐
│
max_tokens preset value ──────────┐ │
│ │
┌─────┐ ┌────────────┐ ┌────┐ ┌─┴─┐ ┌─┴─┐
Model:│azure│/│gpt-35-turbo│ completion mode:│chat│ temperature:│0.7│ max_tokens:│100│
└──┬──┘ └─────┬──────┘ └──┬─┘ └───┘ └───┘
│ │ │
│ │ └─ chat or text, depending on the model
│ │
│ └── name of the Azure deployment
│
└───────────── name of the LLM provider
:PrompterGenerateEdit prompt Anda di jendela vim, dan untuk menjalankan penyelesaian llm saja
:PrompterGenerateLaporan garis status beberapa statistik:
Latency: 1480ms (1.5s) Tokens: 228 (prompt: 167 completion: 61) Throughput: 154 Words: 28 Chars: 176, Lines: 7
Penjelasan Nilai dalam Laporan Baris Status:
┌─ latency in milliseconds and seconds
│
│ ┌───────────────────────────────── total nr. of tokens
│ │
│ │ ┌──────────────────── nr. of tokens in prompt
│ │ │
│ │ │ ┌──── nr. of tokens in completion
│ │ │ │
┌─┴───────────┐ ┌─┴─┐ ┌─┴─┐ ┌─┴┐ ┌───┐ ┌──┐ ┌───┐ ┌─┐
Latency:│1480ms (1.5s)│Tokens:│228│(prompt:│167│completion:│61│) Throughput:│154│Words:│28│Chars:│176│ Lines:│7│
└─────────────┘ └───┘ └───┘ └──┘ └─┬─┘ └─┬┘ └─┬─┘ └┬┘
│ │ │ │
│ │ │ │
Latency / Tokens ───────────────────────┘ │ │ │
│ │ │
nr. of words ───────────┘ │ │
│ │
nr. of characters ─────────────────────┘ │
│
nr. of lines ────────────────────────────────┘
Statistik melaporkan metrik ini:
| Metrik | Keterangan | Contoh |
|---|---|---|
| Latensi | Bot dalam milidetik dan perkiraan kedua | 1480ms (1.5s) |
| Token | Jumlah Token Total, Subtotal, dan Subtotal Penyelesaian | 228 |
| Throughput | Token penyelesaian / rasio latensi (dalam detik). Lihat diskusi tentang konsep throughput di sini | 154 |
| Kata-kata | Jumlah kata yang dihasilkan dalam penyelesaian | 28 |
| Chars | Jumlah karakter dalam penyelesaian | 176 |
| Baris | Jumlah baris yang dihasilkan dalam penyelesaian | 7 |
Secara default perintah ditetapkan ke tombol fungsi
F12. Sedemikian rupa Anda dapat menjalankan penyelesaian hanya dengan menekan tombol tunggalF12.
:PrompterInfoMelaporkan versi plugin saat ini, daftar perintah plugin, pengaturan model saat ini.
:PrompterInfoPerintah mencetak info ini:
Version:
prompter.vim, by [email protected], version 0.2 (November 28, 2023)
Model:
Model: azure/gpt-35-turbo completion mode: chat temperature: 0.5 max_tokens: 1500
Commands:
PrompterGenerate <F12>
PrompterInfo <F10>
PrompterSetup <F9>
Dapatkan dan atur latar belakang penyelesaian dan warna latar depan:
echo g: prompter_completion_ctermbg
echo g: prompter_completion_ctermfg
let g: prompter_completion_ctermbg = 3
let g: prompter_completion_ctermfg = 0Jika Anda tidak menyukai warna highlight default, Anda dapat mengganti nilai
ctermbgdanctermfgmenggunakan subset warna CMS/XTERM 256. Untuk menunjukkan semua warna yang tersedia, Anda dapat menggunakan perintah:HighlightColorsbagian dari plugin saya: Sorot.
Untuk memodifikasi nilai suhu
let g: temperature = 0.2Untuk memodifikasi nilai token maks
let g: max_tokens = 2000
Untuk memodifikasi urutan berhenti
let g: stop = [ ' x: ' , ' y: ' , ' z: ' ]Perintah dikaitkan dengan tombol fungsi dengan pengaturan default ini:
let g: prompter_setup_keystroke = ' <F9> '
let g: prompter_info_keystroke = ' <F10> '
let g: prompter_generate_keystroke = ' <F12> '
let g: prompter_regenerate_keystroke = ' <F8> ' Bahkan jika di VIM Anda dapat menetapkan perintah ke pemetaan kunci dari preferensi Anda, dengan contoh: map <F2> :PrompterGenerate<CR> dan Anda dapat melihat pemetaan apa untuk kunci tertentu, misalnya F2 , Anda dapat menggunakan perintah VIM: map <F12> , cara yang disarankan untuk melanjutkan adalah untuk memodifikasi satu atau lebih dari variabel yang disebutkan di atas dan run :PrompterSetup .
Gunakan (vim-termasuk) pemeriksa ejaan
Saat Anda menulis prompt LLM, sangat penting untuk menghindari kesalahan ketik! Saya sering mengalami bahwa penyelesaian LLM terburuk jika Anda salah mengira kata kerja.
Segalanya menjadi lebih buruk jika Anda menulis petunjuk dalam lebih dari satu bahasa. Secara pribadi saya biasanya menulis petunjuk percakapan dalam bahasa Inggris, untuk beberapa alasan yang dijelaskan dalam artikel saya bahasa non-Inggris yang cepat menukar pertukaran rekayasa, tetapi bahasa target dari chat prompt adalah bahasa ibu saya: Italia. Semua dalam semua prompt berisi teks dalam bahasa Inggris dan Italia. Dalam hal ini saya menjalankan fungsi Vimscript kecil ini:
function ! Spell ()
set spelllang = en_us,it
setlocal spell
echom " Spell check set for Italian and English languages "
endfunction
com ! SPELL call Spell ()Baca semua statistik penyelesaian Anda sebelumnya
messagesVIM akan menunjukkan info statistik penyelesaian terakhir. Sebagai contoh, jika Anda baru saja menjalankan 3 penyelesaian:
Latency: 961ms (1.0s) Tokens: 616 (prompt: 577 completion: 39) Throughput: 641 Words: 21 Chars: 134
Latency: 368ms (0.4s) Tokens: 648 (prompt: 642 completion: 6) Throughput: 1761 Words: 2 Chars: 15
Latency: 4227ms (4.2s) Tokens: 775 (prompt: 660 completion: 115) Throughput: 183 Words: 60 Chars: 377, Lines: 5
Mengaktifkan Garis Bungkus Lembut
Saya biasanya bekerja dengan pengaturan VIM layar penuh. Itu membantu saya memaksimalkan perhatian saya. Namun demikian memiliki antrean yang sangat panjang (setelah PrompterGenerate ) tidak membantu membaca.
Sayangnya, di VIM tidak mudah untuk mengkonfigurasi bungkus lembut kolom tetap. Lihat diskusi. Anda dapat mengatur Soft Warp dengan perintah berikut:
set wrap linebreak nolist Teknik yang saya gunakan untuk membuat promosi dialog prototipe, adalah untuk memasukkan blok belok dialog seperti pada contoh berikut, di mana blok dialog berakhir dengan "urutan berhenti" ( a: :) memicu LLM untuk menyelesaikan peran asisten:
TASK
You (a:) are a customer care assistant and you are assisting a user (u:).
...
...
DIALOG
a: Hello! How can I assist you today?
u: I want to open a report.
a: Fantastic! First, could you provide me with a detailed description of the issue you're experiencing?
u: The computer monitor won't turn on.
a: Thank you for the description. What is the name or model of the product or system you're having trouble with?
u: I can't read the brand. It's the company's PC monitor.
a: Thank you for the information. What is your preferred method of contact?
u: via email at [email protected]
a: Thank you. Please confirm the provided email address: [email protected]
u: that's correct!
a:
Dalam kasus di atas, untuk mengatur LLM berhenti menunggu input pengguna, Anda dapat mengatur urutan berhenti sebagai u: dengan perintah:
let g: stop = [ ' u: ' ] Harap dicatat jika Anda tidak mengatur urutan berhenti seperti yang dijelaskan di atas, LLM akan mencoba menyelesaikan seluruh percakapan. Ini secara umum tidak diinginkan karena Anda ingin menulis kalimat mengikuti u: . Namun demikian, kadang -kadang berguna untuk membuka g:stop hanya untuk melihat bagaimana llm membayangkan percakapan mengalir.
Perintah VIM lainnya yang bisa bermanfaat:
u: cukup tekan tombol F6 : map <F6> :normal ou: <CR> a: ,, cukup tekan tombol F7 : map <F7> :normal oa: <CR> Versi 0.1
Rilis pertama. Hanya model OpenAI/Azure OpenAI yang didukung melalui modul Python versi OpenAI.
Versi 0.2
Penyelesaian LLMS dilakukan melalui Litellm, LLMS Abstraction Layer Python Paket, memungkinkan untuk menggunakan banyak penyedia LLM yang berbeda.
Dukung semua parameter input LLM
Sejauh ini Prompter.vim hanya mendukung temperature , max_tokens , stop argumen.
Litellm menerima dan menerjemahkan Params Penyelesaian OpenAI CHAT di seluruh semua penyedia.
Dukungan template dukungan
Anda merancang "permintaan templat" yang terdiri dari berbagai bagian yang dapat dibangun secara dinamis saat run-time. Pertimbangkan, misalnya, bahwa Anda ingin membuat prototipe "prompt templat" yang berisi variabel placeholder, yang merupakan referensi ke variabel tertentu yang diisi oleh petunjuk atau file lain, seperti itu:
TASK
{some_task_description}
DATA
{some_yaml}
DIALOG
{dialog_history}
Dalam contoh di atas, saat menggunakan taman bermain web, Anda berfungsi sebagai perantara copy-paste. Anda diharuskan untuk membuka empat tab Web, menjalankan penyelesaian teks di masing -masing, dan akhirnya menempelkan penyelesaian secara manual, mengganti variabel seperti {some_data} , {dialog_history} . Selain itu, Anda mungkin perlu memuat file ke variabel, seperti {some_yaml} .
Idenya adalah untuk mendukung pengeditan templat template yang memungkinkan untuk mengganti dengan cepat (dengan penekanan tombol) variabel placeholder, dengan konten buffer/windows lainnya.
Penyelesaian LLM asinkron
Saat ini, Perintah Penyelesaian LLM PrompterGenerate adalah perintah sinkron: Editor diblokir sampai API LLM mengembalikan teks penyelesaian. Bisa membosankan untuk permintaan yang sangat kompleks dan panjang yang membutuhkan banyak detik untuk diselesaikan (misalnya >> 10). Dalam kasus ini bisa lebih baik jika perintah bisa asinkron, memungkinkan pengembang untuk menggunakan editor VIM dengan penyelesaian sedang berlangsung.
Dukungan streaming
Sejauh ini penyelesaian streaming tidak dipertimbangkan.
David Shapiro untuk pekerjaan penyebarannya yang besar pada LLM dan AI generatif. Saya telah mengikuti dengan antusiasme terutama LLM Prompt Engineering Live Coding YouTube Video!
Vivian de Smedt Vim Expert untuk bantuannya menyelesaikan masalah yang dihadapi saat mengembangkan plugin ini.
Pencipta Litellm karena telah mengintegrasikan beberapa fitur yang disarankan, sebagai format penyelesaian teks!
Proyek ini adalah Versi ALFA Bukti Konsep Konsep yang sedang dalam proses!
Saya bukan ahli Vimscript, jadi setiap kontribusi atau saran diterima. Untuk proposal dan masalah apa pun, silakan kirim di sini tentang masalah gitub untuk bug, saran, dll. Anda juga dapat menghubungi saya melalui email ([email protected]).
Jika Anda menyukai proyek ini, silakan ️Star Repositori ini untuk menunjukkan dukungan Anda!
Copyright (c) 2023 Giorgio Robino
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
atas