Repositori ini adalah taman bermain saya untuk menguji petunjuk yang menghasilkan respons yang sesuai dari LLM lokal. Karena ini adalah taman bermain, itu tidak terstruktur dengan baik, jadi jangan ragu untuk mengajukan pertanyaan jika Anda memilikinya. Perselisihan Autogen adalah tempat yang tepat untuk dibahas, lihat saluran #alt-model di dalamnya.
Saya sedang menyelidiki titik -titik dalam alur kerja autogen (dari basis kode ke deskripsi agen) yang perlu disesuaikan untuk mengakomodasi LLM lokal yang tidak mampu seperti model pribadi besar seperti chatgpt AI.
Saat ini menguji dengan skenario debat "obrolan grup" (lihat debat.py) yang dibuat oleh Tevslin (lihat repositori dan posting blognya, terima kasih!) Menggunakan Mixtral dan berbagai LLM lokal lainnya untuk mendapatkan LLM untuk mengembalikan nama tersebut Agen/peran berikutnya secara konsisten. Ini adalah tes yang baik karena melibatkan LLM memahami urutan agen, meninjau di mana perdebatan sampai dan menentukan agen berikutnya. Kami hampir dapat melakukan ini dalam format round-robin, atau mesin negara yang terbatas (di mana kami menetapkan siapa yang dapat berbicara dengan siapa), tetapi penting untuk dapat mendorong LLM untuk memilih agen yang tepat, selanjutnya,.
Saya akan menempatkan temuan di readme ini. Harap dicatat bahwa ini sedang berkembang dan saya hanya satu orang yang mencoba membuat sesuatu berhasil?
Saya menggunakan ollama saat menguji terhadap perpustakaan autogen dan dengan litellm saat menguji melalui autogenstudio.
Kode yang saat ini saya uji sedang dalam pemilihan speaker - putaran uji.
Speaker dipilih dengan benar | |
---|---|
✅ | Semua 5 benar |
? | 4 dari 5 benar |
3 atau kurang benar | |
? | tidak lewat pergi |
Meja Lebar - Gulir ->
Langkah 1 Konten | Pilih Speaker | Pengurangan Konteks | Phind-Codellama: 34B-V2 | Mixtral 8x7b (Q4) | OpenHermes: 7b-mistral-v2.5-q6_k | orca2: 13b-q5_k_s | Solar: 10.7b-instruct-v1-q5_k_m | Neural-Chat: 7B-V3.3-Q6_K | llama2: 13b-chat | Qwen: 14B-CHAT-Q6_K | Mistral: 7b-instruct-q6_k | YI: 34B-CHAT-Q3_K_M | Phi-2 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Asli | Asli | Tidak ada | ? | ||||||||||
Asli | Tekankan, urutan, ringkas | Diringkas | ✅ | ✅ | ✅ | ? | ? | ||||||
Asli | Tekankan, urutan, ringkas | Tidak ada | ✅ | ✅ | ? | ? | |||||||
Menekankan keteraturan | Tekankan, urutan, ringkas | Tidak ada | ✅ | ? | ✅ | ? | ? | ? | ? | ||||
Menekankan keteraturan | Tekankan, urutan, ringkas | Diringkas | ✅ | ? | ✅ | ? | ? | ? | ? | ||||
Tekankan + contoh | Tekankan, urutan, ringkas | Tidak ada | ✅ | ✅ | ? | ? | ? | ? | ? | ||||
Tekankan + contoh | Tekankan, urutan, ringkas | Diringkas | ✅ | ✅ | ? | ? | ? | ? | ? | ||||
Asli | Asli | Hanya nama pembicara | ✅ | ✅ | ? | ||||||||
Tekankan + contoh | Menekankan, ibukota, penalaran, tidak ada debat | 300 karakter pertama | ? | ✅ | ? | ? | ? | ||||||
Menekankan keteraturan | Tekankan, urutan, ringkas | 300 karakter pertama | ? | ✅ | ? | ? | ? | ||||||
Menekankan keteraturan | Tekankan, urutan, ringkas | 100 chars dan nama pertama | ✅ | ? | ? | ? | ? | ||||||
Menekankan keteraturan | Tekankan, urutan, ringkas | Hanya nama pembicara | ? | ✅ | ? | ? | ? | ||||||
Menekankan keteraturan | Menekankan, ibukota, penalaran, tidak ada debat | 300 karakter pertama | ? | ✅ | ? | ? | |||||||
Tekankan + contoh | Tekankan, urutan, ringkas | 300 karakter pertama | ✅ | ? | ? | ? | |||||||
Tekankan + contoh | Tekankan, urutan, ringkas | Hanya nama pembicara | ? | ✅ | ? | ? | |||||||
Tekankan + contoh | Tekankan, ibukota, balasan kata tunggal | Diringkas | ? | ✅ | ? | ? | |||||||
Tekankan + contoh | Tekankan, urutan, ringkas | 100 chars dan nama pertama | ? | ✅ | ? | ||||||||
Tekankan + contoh | Tekankan, ibukota, balasan kata tunggal | Tidak ada | ✅ | ? | ? | ||||||||
Tekankan + contoh | Tekankan, ibukota, balasan kata tunggal | Hanya nama pembicara | ✅ | ? | |||||||||
Tekankan + contoh | Menekankan, ibukota, penalaran, tidak ada debat | Tidak ada | ? | ? | ? | ? | ? | ? | |||||
Tekankan + contoh | Menekankan, ibukota, penalaran, tidak ada debat | Diringkas | ? | ? | ? | ? | ? | ? |
Pemenang:
Hasil berbeda secara signifikan antara LLM, tidak mengejutkan. Namun, tweaking dorongan mengubah cara mereka berperilaku mandiri - misalnya mengubah satu atau dua kata dalam prompt akan berarti bahwa Mistral 7B, yang telah menghasilkan hasil yang tepat, akan menghasilkan sesuatu yang tidak terduga tetapi perubahan yang sama akan berarti solar 10.7b, Solar, Yang tidak menghasilkan apa yang saya inginkan, tiba -tiba akan menghasilkan hasil yang benar.
Jadi, pada tahap ini saya yakin kita perlu menyesuaikan banyak petunjuk (baik yang dapat kita kendalikan melalui deskripsi agen dan pesan sistem, melalui petunjuk yang mendasarinya seperti pemilihan speaker) agar sesuai dengan LLM yang kita gunakan . Itu sampai standar penalaran LLM minimum dapat dicapai.
Saya belajar dengan cepat bahwa untuk mendapatkan hasil yang konsisten, setidaknya untuk prompt pemilihan speaker, saya harus mengatur suhu menjadi nol (dapat bekerja dengan angka rendah daripada hanya nol). Meskipun, bahkan pada nol, responsnya bervariasi pada waktu mereka umumnya konsisten.
Kemampuan untuk dapat mengatur suhu untuk model dalam autogen adalah penting untuk LLM kecil ini.
Karena pesan obrolan terus tumbuh dalam jumlah, demikian juga kesempatan bahwa model akan berhenti menghasilkan respons yang baik. Beberapa, seperti PHI-2 dengan panjang konteks 2K, akan berhenti menghasilkan hasil kurang dari setengah pengujian saya dengan obrolan grup debat. Lainnya, termasuk mixtral 8x7b dengan jendela konteks 32k, menunjukkan peningkatan ketika panjang konteks berkurang (jauh sebelum konten itu panjang).
Contohnya, dengan Mixtral, adalah bahwa ketika pesan obrolan lengkap diteruskan ke Mixtral kurang dari 8.700 karakter (bukan token, saya tidak bisa mendapatkan angka itu) itu akan mengembalikan jawaban yang benar (secara konsisten hingga jumlah karakter itu). Ketika berada di atas 8.700 karakter, itu tidak akan mengikuti arahan dan alih -alih mengembalikan nama pembicara berikutnya, itu akan berdebat sebagai mereka. Ini adalah masalah yang konsisten karena panjangnya terus meningkat melampaui 8.700. Saya membayangkan model lain titik switching ini masih akan lebih rendah.
Saat ini tampaknya tidak ada mekanisme untuk menekan riwayat percakapan, namun saya pikir ini bisa berguna untuk menjaga konteks obrolan penuh karena lebih banyak obrolan terjadi.
Dengan tantangan meminimalkan panjang konteks saya memikirkan dua opsi:
Kurasa, kita bisa menggabungkan dua opsi, menghapus konten pesan lama dan merangkum yang lebih baru.
Untuk pengujian pemilihan speaker yang saya lakukan, menghapus konteks dan meringkas pesan agen baik berfungsi dan menghasilkan hasil yang benar. Ini menjanjikan.
Saya telah fokus pada pengujian ini karena sangat penting untuk memiliki agen yang dipilih dengan benar. Tugas ini, yang sebagian besar dilakukan dalam kode autogen yang mendasarinya, dirancang untuk membuka chatgpt AI. Prompt itu menghasilkan kemungkinan bekerja dengan model lain yang sangat besar juga. Namun, mengendalikan prompt ini diperlukan untuk memberikan arah spesifik untuk LLM lokal kami yang lebih kecil.
Prompt default adalah
You are in a role play game. The following roles are available:n{self._participant_roles(agents)}.nnRead the following conversation.nThen select the next role from {[agent.name for agent in agents]} to play. Only return the role.
Untuk pengujian saya pada alur kerja debat, saya terus -menerus menyesuaikan prompt dan contoh seperti apa rupa untuk Mixtral 8x7b adalah:
Read the above conversation and select the next role, the list of roles is ['Debate_Moderator_Agent', 'Affirmative_Constructive_Debater', 'Negative_Constructive_Debater', 'Affirmative_Rebuttal_Debater', 'Negative_Rebuttal_Debater', 'Debate_Judge']. What is the next role to speak, answer concisely please?
Menariknya, bahkan tweak kecil seperti berubah (dalam teks di atas)
answer concisely please
ke
return only the name of the role
Mengubah respons terhadap yang salah untuk mixtral tetapi yang benar untuk llama 13b.
Dengan tes debat ada pesan obrolan yang pengantar (ini adalah permainan permainan peran, ...) dan kemudian pesan obrolan untuk masing -masing debat. Kami menyampaikan semua pesan obrolan ini ke LLM untuk menentukan speaker berikutnya selama proses pemilihan speaker.
Pesan obrolan untuk setiap debat memiliki konten (respons debat mereka), peran ("pengguna"), dan nama (nama agen mereka), seperti ini:
{
"content": "<a whole lot of content here.>",
"role": "user",
"name": "Affirmative_Constructive_Debater",
},
Karena itu semua akan diteruskan ke LLM saya pikir itu akan menggunakan kunci name
/nilai untuk mengetahui agen mana pesan itu berasal.
Menariknya, jika saya menambahkan yang berikut ini ke awal konten untuk masing -masing pesan tersebut
I am <the debater's name here>. <then the original content goes next>
... Mixtral jauh lebih baik dalam mengambil yang telah berbicara dan memilih agen berikutnya. Oleh karena itu, mungkin menguntungkan untuk memasukkan ini secara eksplisit di awal pesan masing -masing agen sehingga kami yakin bahwa LLM tahu siapa agen itu. Atau, setidaknya dalam kasus ini di mana nama agen penting untuk menentukan urutannya.
Sebagian besar model mengembalikan respons teks biasa dan ini penting untuk mencocokkan nama agen dengan teks yang dikembalikan dari LLM.
Namun, dan menyakitkan karena ini adalah model utama yang ingin saya gunakan, Mixtral tampaknya memberikan respons dalam format penurunan harga (?) Sebagian besar waktu. Jadi jika seorang agen dinamai
Negative_Constructive_Debater
itu mungkin kembali
Negative_Constructive_Debater
atau
Negative Constructive Debater
Dan itu akan membuang Autogen dari mencocokkannya dengan nama agen.
Saya mencoba mengubah petunjuk untuk mendapatkan Mixtral untuk memberikan output teks biasa tetapi tidak bisa membuatnya melakukannya secara konsisten.
Mungkin taktik di sini bukan untuk menggunakan garis bawah, meskipun saya pikir telah disebutkan untuk menghindari spasi dalam nama agen dan menggunakan garis bawah sebagai gantinya, jadi ada baiknya mengatasi hal ini.
Perubahan pada kode pencocokan untuk mengakomodasi _
dan ruang untuk garis bawah akan jauh untuk mendukung LLM lokal yang dapat mencampurnya.
Sebagai peringatan, saya lebih awal dalam pengujian saya dan saya hanya telah menguji dorongan pemilihan speaker. Meskipun ini sangat penting untuk proses multi-agen, ada banyak aspek lain dari LLM (respons kualitas, pembuatan kode, panggilan fungsi, dll.) Yang bahkan belum saya sentuh.
Jadi, catatan saya di bawah ini pada pengujian awal LLMS memilih agen berikutnya yang benar dan mengembalikan namanya. Saya akan memasukkannya ke dalam urutan preferensi saya.
Terakhir, banyak dari itu adalah keterampilan yang menjanjikan dan saya bukan ahli :).
Llm | Pikiran |
---|---|
Mixtral 8x7b v0.1 Instruksikan (Q4) | Sebagai model terbesar yang saya harapkan ini menangani arah lebih baik daripada yang lain. Pengalaman saya adalah bahwa ia memberikan respons yang konsisten dan dengan beberapa perubahan cepat Anda dapat bertengkar untuk mendapatkan hasil yang Anda butuhkan. Itu memang memiliki kekhasan aneh karena kadang -kadang merespons dalam format penurunan harga. |
Mistral 7B V0.2 Instruksi | Awalnya ini memberikan respons terbaik, hasil teks biasa dan kemampuan untuk mengembalikan nama agen tunggal tanpa keluar jalur. Proseding menunjukkan bahwa itu cukup sensitif terhadap perubahan yang cepat. Itu tidak selalu memahami arah, meskipun, tidak dan juga mixtral |
LLAMA2 Obrolan 13B | Hit dan Miss, ketika itu tepat, itu sempurna, jika tidak, tidak saja tidak. Tweake yang lebih cepat bisa bekerja di sini. |
Solar 10.7b Instruksi | Saat petunjuk diubah, ini menjadi semakin konsisten |
Obrolan Saraf 7B | Mirip dengan llama 13b, kadang -kadang sangat baik tetapi apa pun kecuali pada orang lain |
OpenHermes 7b Mistral V2.5 (Q6) | Dalam satu tes itu sempurna, untuk sisanya dibom. Menemukan bahwa itu tidak mengikuti arahan dengan baik. |
Orca 2 13b | Hanya menyelesaikan satu tes dengan baik, tidak mengikuti arahan dengan baik untuk yang lain |
Qwen 14b obrolan (Q6) | Saya belum pernah menggunakan model ini sebelumnya dan semoga, tetapi tidak pernah lulus tes dan mengikuti arahan bukan keahliannya. |
Phi-2 | Sayangnya panjang konteks yang didukung oleh model ini dengan cepat habis. Selain itu, itu benar -benar tidak mengikuti arah dengan tepat. |
Phind Codellama 34B | Sangat bagus! Dengan mixtral. Namun, dikatakan tidak akan berdebat! |
Obrolan Yi-34b (Q3) | Ini mengejutkan saya, itu benar -benar yang terburuk dari kelompok itu. Saya memberi peringkat di bawah phi-2 karena terlalu besar untuk menjadi seburuk ini di arah berikut. Mungkin instruksi / versi lain akan lebih baik. |
Lihat informasi lebih lanjut dalam salah satu dokumen temuan cepat saya yang menunjukkan bagaimana saya mengulangi melalui petunjuk dan apa efeknya pada masing -masing tanggapan LLMS.
Sudahkah Anda menggunakan model lain yang mengikuti petunjuk dengan baik, beri tahu saya!
Menerapkan beberapa di antaranya (temp = 0, meringkas, nama agen pembersih, perubahan pemilihan peran) berarti saya bisa mendapatkan mixtral untuk memilih agen yang tepat setiap kali selama pemilihan pembicara (masing -masing 5 urutan dengan 10 iterasi masing -masing). ?
Tanpa menyetel petunjuk secara khusus untuk model -model lain ini:
Saya percaya ini signifikan karena mereka kurang berhasil sebelum perubahan ini dan agak tidak dapat diprediksi.
Tentu saja pengujian dan tweak saya, terutama pada petunjuk, ada di obrolan tes yang sedang saya kerjakan. Jadi lebih banyak pengujian akan bagus.