Kılavuzlar
Simüle edilmiş kullanıcılar
Senaryolu bir konuşma, asistanınızı hiç tepki vermeyen bir kullanıcıya karşı test eder. Simüle edilmiş bir kullanıcı tepki verir: bir model, her vakanın tarif ettiği bir kişiyi canlandırır, her sonraki mesajı asistanınızın az önce söylediğinden yola çıkarak yazar ve hedefine ulaşıldığında ya da vazgeçtiğinde durur. Oloproof aralarında geçenleri kaydeder, bunu her konuşma gibi ölçer ve bir kapının bunun üzerinde karar vermesine ancak insanlar simüle edilmiş kullanıcıyı gerçekçi bulduktan sonra izin verir. Eğitim, simüle edilmiş müşterilerle konuşan bir destek masasını adım adım gösterir.
Personalar
Her vakanın girdisi bir persona içerir: kullanıcının kim olduğu, ne istediği ve ne bildiği.
{"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 ve goal zorunludur. Bir okurun yalnızca konuşmadan denetleyebileceği bir hedef yazın: "mağazanın bir iadeyi başlatmasını sağlamak" asistanın söylediklerinden karara bağlanabilir, "bir iade almak" bağlanamaz, çünkü para daha sonra gelir.
- facts, kullanıcının bildiği ve yalnızca konuşma gerektirdiğinde paylaştığı şeylerdir; örneğin bir sipariş numarası. Asistanınız personayı asla görmez.
- opening, her sistem aynı biçimde karşılanmalıyken kullanıcının kelimesi kelimesine ilk mesajıdır.
- max_turns, projenin değerini geçersiz kılarak bu kullanıcının mesajlarını sınırlar.
Bir persona veri kümesi içeriğidir: paket özetinin kapsamındadır ve ona karşı ölçülen her sistem için aynıdır.
Simüle edilmiş kullanıcıyı bildirmek
Her personayı canlandıran model, bir hakem gibi, sistemde bildirilir:
system:
name: support-desk
callable: desk:talk
simulated_user:
provider: openai_compatible
base_url: http://localhost:11434/v1
model: qwen2.5vl
max_turns: 6Her alan yapılandırma başvurusu sayfasındadır. Yerel bir model hiçbir şeye mal olmaz; barındırılan bir model yazdığı her mesajı faturalar ve token'ları konuşmanın yanında kaydedilir ve asla sisteminizin maliyeti olarak sayılmaz.
Sisteminiz kendi döngüsünü korur
Konuşmayı Oloproof yürütmez. Sisteminiz kullanıcının ilk mesajını ister, onu kullanıcıları nasıl yanıtlıyorsa öyle yanıtlar ve bir sonraki mesaj için her yanıtı geri verir:
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, kullanıcı durduğunda None döndürür. Sisteminiz, bir kişiye devrin yapacağı gibi, konuşmayı user.end(answer) ile kendisi bitirebilir; bir async def sistemi aopening(), areply(answer) ve aend(answer) için await kullanır. Oloproof bu tutamaçtan geçenleri conversation/v1 olarak, konuşmanın nasıl bittiğini de simulated_user/v1 olarak kaydeder ve ikisini de sisteminizden kabul etmez (SDK başvurusu).
Bir konuşma nasıl biter
Sisteminizin her yanıtından sonra simüle edilmiş kullanıcının modeline, 0 sıcaklıkta ve etrafındaki rol oyunu olmadan ayrı bir soru olarak, o yanıtın hedefi gerçekleştirip gerçekleştirmediği sorulur. Gerçekleştirdiyse konuşma goal_reached olarak biter. Aksi halde kullanıcı, max_turns mesaj gönderene kadar (turn_limit) bir sonraki mesajını yazar ya da ayrılır (user_left). Son mesajı yanıtlamadan duran bir sistem konuşmayı unanswered ve kesilmiş olarak bırakır.
Ayrı sormak, küçük bir yerel modeli kullanılabilir kılan şeydir: bir personayı canlandırmak ve bir hedefe ulaşılıp ulaşılmadığına karar vermek farklı görevlerdir ve ikisini tek bir yanıtta yapması istenen bir model, hedefine ulaşıldıktan sonra sohbete devam etmeye ya da memnun olduğunda ayrıldığını söylemeye eğilimlidir.
Konuşmaları ölçmek
Birim konuşmadır: her değerlendirici konuşma başına tek bir hüküm verir, bu yüzden her aralık, karşılaştırma ve kapı değişmeden uygulanır.
| Tür | Şu durumda geçer |
|---|---|
| conversation_completed | sisteminiz her mesajı yanıtladığında |
| goal_reached | hedef denetimi hedefe ulaşıldığını bulduğunda |
| turns_to_goal | bu, kullanıcının mesajlarından en fazla max_turns tanesi içinde olduğunda |
| every_turn | her yanıt bildirilen koşulları karşıladığında: içermesi ya da içermemesi gereken kelimeler, bir örüntü, bir uzunluk |
| conversation_judge | tüm dökümü değerlendiren bir model hakemi, insanların etiketlerine karşı doğrulandıktan sonra onu geçirdiğinde |
Yinelemeler (replicates:) farklı tohumlanmış kullanıcılarla karşılaşır, bu yüzden bir persona birkaç konuşma demektir. Simüle edilmiş kullanıcının sürümü (modeli, istemi, sıcaklığı ve bütçesi) her yürütmenin önbellek anahtarının parçasıdır, bu yüzden farklı bir simüle edilmiş kullanıcı sisteminizi yeniden ölçer.
Simüle edilmiş kullanıcıyı doğrulamak
Simüle edilmiş kullanıcılar üzerindeki bir sonuç, gerçek kullanıcılara ancak simüle edilmiş kullanıcının onlara benzediği ölçüde ulaşır. Bu yüzden kullanıcıları simüle edilmiş bir çalıştırma üzerindeki her kural, insanlar onun konuşmalarını gerçekçi bulana kadar simulated_user_not_validated ile INSUFFICIENT_EVIDENCE olur:
oloproof labels export RUN_ID --criterion simulated_user_realistic --sample 30 --local --out realism.csv
oloproof labels import realism.csv
oloproof simulated-users RUN_IDSayfa, örneklenen her konuşmayı persona ve konuşmanın nasıl bittiğiyle birlikte gösterir. Gerçek bir müşteri kullanıcının tarafını yazıp konuşmayı orada, o şekilde bitirebilecek olduğunda bir kişi passed alanını evet olarak işaretler; bu, hedef denetimini de kapsar: hedefe ulaşılmamışken goal_reached ile biten bir konuşma gerçekçi değildir. Gerçekçi payın kesin alt sınırı release.yaml içindeki minimum_simulated_user_realism değerine ulaştığında simüle edilmiş kullanıcı o pakette doğrulanmış olur. Örneklenmiş ama etiketlenmeden bırakılmış bir konuşma gerçekçi değil sayılır ve bir konuşma ancak onu etiketleyen herkes öyle dediğinde gerçekçidir.
Bir doğrulama, hangi sistemle konuşmuş olursa olsun, bir simüle edilmiş kullanıcının bir sürümünü bir pakette kapsar; bu yüzden aynı personalara karşı ölçülen bir aday, temelin etiketleriyle karara bağlanır. Yeni bir model, istem ayarı ya da persona kümesi yeni etiketler gerektirir. require_validated_evaluators: false ayarlamak, simüle edilmiş kullanıcılar üzerinde onlar olmadan, bilerek karar verir.
Gerçeğin yanında simüle edilmiş
oloproof simulated-users RUN_ID --real REAL_RUN_ID, simüle edilmiş konuşmaların biçimini gerçek konuşmalardan oluşan bir çalıştırmanın (conversation/v1 olarak yeniden oynatılan kayıtlı sohbetler) yanına koyar: kullanıcının kaç mesaj gönderdiği, bunların ne kadar uzun olduğu, yanıtların ne kadar uzun olduğu, bir konuşmanın ne sıklıkla yarıda kesildiği ve simüle edilmiş olanların nasıl bittiği. Bu betimleyicidir ve asla karar vermez: eşleştirilmemiş iki örneklemi karşılaştırmak, Oloproof'un kabul etmediği bir yöntem gerektirir. Bunu, gerçekçilik etiketlerinin kaçırdıkları için okuyun; örneğin gerçek kullanıcıların üç mesaja yaydığını tek bir derli toplu cümlede yazan simüle edilmiş kullanıcılar.
Desteklenmeyenler
- Barındırılan bir çalışma alanında simüle edilmiş kullanıcılar üzerinde karar vermek: inceleme kuyruğu gerçekçilik etiketlerini kendisi çekip mühürleyebilene kadar kararları alıkonmuş kalır.
- Simüle edilmiş konuşmaların gerçek olanlarla nasıl karşılaştırıldığı üzerine bir kapı.
- Bir konuşma içinde tur düzeyinde oranlar ve bir konuşmayı bir turdan itibaren yeniden oynatmak.
- Bir HTTP sistemi için simüle edilmiş kullanıcılar: döngüyü sisteminizin kendi kodu yürütür, bu yüzden sistem bir callable olmalıdır.