Pembangunan Ejen Berasaskan Penilaian: Bagaimana Saya Berhenti Menala Prompt Berdasarkan Gerak Hati
Saya mengubah prompt. Larian seterusnya kelihatan lebih baik. Adakah perubahan itu membantu, atau saya sekadar bernasib baik?
Untuk masa yang lama, jawapan saya ialah "Saya rasa begitu." Saya akan mengubah suai arahan, menjalankan saluran paip (pipeline), melihatnya berjaya, dan melancarkannya. Ini adalah kejuruteraan berasaskan gerak hati. Hampir semua orang yang membina ejen melakukan perkara ini kerana alternatifnya terasa sukar.
Tetapi ejen pengekodan adalah bukan deterministik. Anda boleh menjalankan tugas yang sama dua kali dan mendapat dua hasil yang berbeza. Satu larian yang baik tidak memberitahu anda apa-apa. Anda tidak dapat menentukan sama ada perubahan anda berjaya atau dadu sekadar memihak kepada anda.
Saya menyelesaikan masalah ini dengan menggunakan disiplin pembelajaran mesin. Saya membina kerangka kerja penilaian untuk membungkus keseluruhan sistem saya.
Berikut adalah cara kerangka kerja ini berfungsi:
• Sasaran: Kod asas (codebase) yang tetap. Ini kekal sama supaya skor kekal boleh dibandingkan. • Tugas: Item penanda aras khusus dengan prompt dan oracle. • Oracle: Semakan deterministik. Ini adalah arahan shell yang mesti lulus. • Varian: Perubahan khusus yang anda uji, seperti perancang (planner) baharu. • Percubaan: Satu larian tunggal. Saya menjalankan setiap tugas berulang kali untuk mengambil kira faktor rawak.
Saya menggunakan dua jenis pemarkahan untuk mengesan kegagalan yang berbeza:
- Pemarkah Kod (Deterministik): Ini menyemak kadar kelulusan ujian, kos, masa, dan perubahan fail.
- Hakim LLM (Probabilistik): Model tetap yang berasingan memberikan skor kepada kualiti spesifikasi dan kesetiaan pelaksanaan.
Pemarkah kod memberitahu anda jika kod itu berjalan. Hakim memberitahu anda jika kod itu bagus. Anda memerlukan kedua-duanya.
Saya juga berhenti menggunakan purata. Nilai min menipu tentang ejen. Jika sesuatu tugas berjaya 2 daripada 3 kali, ia kelihatan okay. Tetapi ia tidak boleh dipercayai. Sebaliknya, saya menggunakan dua metrik:
- pass@k: Adakah ejen berjaya sekurang-kurangnya sekali? (Keupayaan)
- pass^k: Adakah ejen berjaya setiap kali? (Kebolehpercayaan)
Peningkatan dalam pass^k adalah kemenangan sebenar. Ini bermakna anda menjadikan ejen itu konsisten, bukan sekadar bernasib baik.
Untuk memastikan sistem sentiasa tajam, saya menambah tugas sukar yang memerlukan pemahaman mendalam. Apabila ejen gagal pada pepijat (bug) sebenar, saya menukarkan kegagalan itu menjadi tugas kekal. Ini mewujudkan gelung tertutup. Penanda aras menjadi lebih sukar apabila ejen menjadi lebih baik.
Infrastruktur ini memerlukan banyak kerja, tetapi ia adalah perkara yang paling memberi impak tinggi yang saya bina. Ia mengubah "Saya rasa ini lebih baik" kepada "ini 20% lebih boleh dipercayai pada kos yang lebih rendah."
Ejen pengekodan mudah untuk didemonstrasikan tetapi sukar untuk dipercayai. Jika anda ingin melangkaui sekadar demonstrasi, anda mesti memutuskan untuk melakukan pengukuran.
Sumber: https://dev.to/rickjms/eval-driven-agent-development-how-i-stopped-tuning-prompts-on-vibes-1189
Komuniti pembelajaran pilihan: https://t.me/GyaanSetuAi
