Panduan
Pengguna simulasi
Percakapan berskrip menguji asisten Anda terhadap pengguna yang tidak pernah bereaksi. Pengguna simulasi bereaksi: sebuah model memerankan orang yang dideskripsikan setiap kasus, menulis setiap pesan berikutnya dari apa yang baru saja dikatakan asisten Anda, dan berhenti ketika tujuannya tercapai atau ketika ia menyerah. Oloproof merekam apa yang berlangsung di antara keduanya, mengukurnya seperti percakapan lainnya, dan membiarkan gerbang memutuskan atasnya hanya setelah orang-orang menilai pengguna simulasi itu realistis. Tutorial ini memandu layanan dukungan yang bercakap dengan pelanggan simulasi.
Persona
Input setiap kasus memuat sebuah persona: siapa penggunanya, apa yang diinginkannya, dan apa yang diketahuinya.
{"id": "c25", "input": {"persona": {
"description": "A retired teacher who ordered a cookbook last week. Writes short, polite messages.",
"goal": "Have the order of a cookbook delivered to my new address.",
"facts": {"order": "B-35", "postcode": "10275"}
}}}- description dan goal wajib. Tulis tujuan yang dapat diperiksa pembaca dari percakapan itu saja: "membuat toko memulai pengembalian dana" dapat diputuskan dari apa yang dikatakan asisten, "mendapatkan pengembalian dana" tidak bisa, karena uangnya tiba belakangan.
- facts adalah apa yang diketahui pengguna dan hanya dibagikannya saat percakapan membutuhkannya, seperti nomor pesanan. Asisten Anda tidak pernah melihat persona.
- opening adalah pesan pertama pengguna, kata demi kata, ketika setiap sistem harus disapa dengan cara yang sama.
- max_turns membatasi pesan pengguna ini, menggantikan batas milik proyek.
Persona adalah konten dataset: ia dicakup oleh digest suite dan sama untuk setiap sistem yang diukur terhadapnya.
Mendeklarasikan pengguna simulasi
Model yang memerankan setiap persona dideklarasikan pada sistem, seperti juri:
system:
name: support-desk
callable: desk:talk
simulated_user:
provider: openai_compatible
base_url: http://localhost:11434/v1
model: qwen2.5vl
max_turns: 6Setiap field ada di referensi konfigurasi. Model lokal tidak memakan biaya; model yang di-hosting menagih setiap pesan yang ditulisnya, dan token-nya direkam di samping percakapan dan tidak pernah dihitung sebagai biaya sistem Anda.
Sistem Anda tetap memegang loop-nya
Oloproof tidak mengendalikan percakapan. Sistem Anda meminta pesan pertama pengguna, menjawabnya dengan cara apa pun ia menjawab pengguna, dan menyerahkan kembali setiap jawaban untuk mendapatkan pesan berikutnya:
from oloproof import current_case
def talk(case):
user = current_case().simulated_user()
message = user.opening()
while message is not None:
message = user.reply(my_assistant.answer(message))
return {}reply mengembalikan None begitu pengguna berhenti. Sistem Anda dapat mengakhiri percakapan sendiri dengan user.end(answer), seperti halnya penyerahan ke seorang manusia; sistem async def menunggu aopening(), areply(answer), dan aend(answer). Oloproof merekam apa yang melewati handle itu sebagai conversation/v1 dan bagaimana percakapan berakhir sebagai simulated_user/v1, dan menolak keduanya jika berasal dari sistem Anda (Referensi SDK).
Bagaimana percakapan berakhir
Setelah setiap jawaban sistem Anda, model pengguna simulasi ditanya, sebagai pertanyaan terpisah pada suhu 0 dan tanpa permainan peran di sekitarnya, apakah jawaban itu mencapai tujuannya. Jika ya, percakapan berakhir goal_reached. Jika tidak, pengguna menulis pesan berikutnya, atau pergi (user_left), sampai ia telah mengirim max_turns pesan (turn_limit). Sistem yang berhenti tanpa menjawab pesan terakhir meninggalkan percakapan dalam keadaan unanswered dan terpotong.
Bertanya secara terpisah itulah yang membuat model lokal kecil dapat dipakai: memerankan persona dan memutuskan apakah suatu tujuan tercapai adalah tugas yang berbeda, dan model yang diminta melakukan keduanya dalam satu balasan cenderung terus mengobrol setelah tujuannya tercapai, atau mengatakan bahwa ia pergi padahal ia sudah puas.
Mengukur percakapan
Percakapan adalah unitnya: setiap evaluator memberikan satu putusan per percakapan, sehingga setiap interval, perbandingan, dan gerbang berlaku tanpa perubahan.
| Tipe | Lolos ketika |
|---|---|
| conversation_completed | sistem Anda menjawab setiap pesan |
| goal_reached | pemeriksaan tujuan mendapati tujuannya tercapai |
| turns_to_goal | hal itu terjadi dalam max_turns pesan pengguna |
| every_turn | setiap jawaban memenuhi syarat yang dideklarasikan: kata yang harus atau tidak boleh dimuatnya, sebuah pola, sebuah panjang |
| conversation_judge | juri model atas seluruh transkrip meloloskannya, setelah divalidasi terhadap label dari orang-orang |
Replikasi (replicates:) bertemu pengguna dengan seed yang berbeda, sehingga satu persona menjadi beberapa percakapan. Versi pengguna simulasi (model, prompt, suhu, dan anggarannya) adalah bagian dari kunci cache setiap eksekusi, sehingga pengguna simulasi yang berbeda mengukur ulang sistem Anda.
Memvalidasi pengguna simulasi
Hasil atas pengguna simulasi berlaku bagi pengguna nyata hanya sejauh pengguna simulasi itu menyerupai mereka. Jadi setiap aturan atas eksekusi yang penggunanya disimulasikan bernilai INSUFFICIENT_EVIDENCE dengan simulated_user_not_validated sampai orang-orang menilai percakapannya realistis:
oloproof labels export RUN_ID --criterion simulated_user_realistic --sample 30 --local --out realism.csv
oloproof labels import realism.csv
oloproof simulated-users RUN_IDLembar itu menampilkan setiap percakapan yang terambil beserta persona dan cara percakapan itu berakhir. Seseorang menandai passed ya ketika pelanggan nyata bisa saja menulis sisi pengguna dan mengakhirinya di titik itu, dengan cara itu, yang juga mencakup pemeriksaan tujuan: percakapan yang berakhir goal_reached padahal tujuannya tidak tercapai tidaklah realistis. Pengguna simulasi divalidasi pada suite itu ketika batas bawah eksak dari proporsi yang realistis melampaui minimum_simulated_user_realism di release.yaml. Percakapan yang terambil tetapi dibiarkan tanpa label dihitung tidak realistis, dan sebuah percakapan realistis hanya jika semua orang yang memberinya label menyatakan demikian.
Satu validasi mencakup satu versi pengguna simulasi pada satu suite, sistem mana pun yang diajaknya bercakap, sehingga kandidat yang diukur terhadap persona yang sama diputuskan berdasarkan label milik baseline. Model baru, pengaturan prompt baru, atau kumpulan persona baru memerlukan label baru. Menyetel require_validated_evaluators: false memutuskan atas pengguna simulasi tanpa label itu, dengan sadar.
Simulasi di samping yang nyata
oloproof simulated-users RUN_ID --real REAL_RUN_ID menempatkan bentuk percakapan simulasi di samping eksekusi dengan percakapan nyata (obrolan yang dicatat dan diputar ulang sebagai conversation/v1): berapa banyak pesan yang dikirim pengguna, seberapa panjang pesan-pesan itu, seberapa panjang jawabannya, seberapa sering percakapan terpotong, dan bagaimana percakapan simulasi berakhir. Ini bersifat deskriptif dan tidak pernah memutuskan: membandingkan dua sampel yang tidak berpasangan memerlukan metode yang belum diterima Oloproof. Bacalah untuk hal-hal yang terlewat oleh label realisme, seperti pengguna simulasi yang menulis dalam satu kalimat rapi apa yang oleh pengguna nyata disebar ke tiga kalimat.
Tidak didukung
- Memutuskan atas pengguna simulasi di ruang kerja yang di-hosting: keputusannya tetap ditahan sampai antrean tinjauannya dapat mengambil dan menyegel label realisme sendiri.
- Gerbang atas perbandingan percakapan simulasi dengan percakapan nyata.
- Tingkat per giliran di dalam percakapan, dan memutar ulang percakapan dari suatu giliran.
- Pengguna simulasi untuk sistem HTTP: kode sistem Anda sendiri yang menjalankan loop, sehingga sistem itu harus berupa callable.