İstem akışı SDK'sı ile değerlendirme
Önemli
Bu makalede açıklanan özelliklerden bazıları yalnızca önizleme aşamasında kullanılabilir. Bu önizleme, hizmet düzeyi sözleşmesi olmadan sağlanır ve üretim iş yükleri için önerilmez. Bazı özellikler desteklenmiyor olabileceği gibi özellikleri sınırlandırılmış da olabilir. Daha fazla bilgi için bkz. Microsoft Azure Önizlemeleri Ek Kullanım Koşulları.
Önemli bir veri kümesine uygulandığında üretken yapay zeka uygulamanızın performansını kapsamlı bir şekilde değerlendirmek için, geliştirme ortamınızda istem akışı SDK'sı ile değerlendirebilirsiniz. Test veri kümesi veya hedef göz önünde bulundurulduğunda, üretken yapay zeka uygulama nesilleriniz hem matematiksel tabanlı ölçümlerle hem de yapay zeka destekli kalite ve güvenlik değerlendiricileriyle nicel olarak ölçülür. Yerleşik veya özel değerlendiriciler, uygulamanın özellikleri ve sınırlamaları hakkında kapsamlı içgörüler sağlayabilir.
Bu makalede, istem akışı SDK'sını kullanarak yerleşik değerlendiricilerle uygulama hedefi üzerinde daha büyük bir test veri kümesi olan tek bir veri satırında değerlendirici çalıştırmayı ve ardından Azure AI Studio'daki sonuçları ve değerlendirme günlüklerini izlemeyi öğreneceksiniz.
Başlarken
öncelikle istem akışı SDK'sından değerlendirici paketini yükleyin:
pip install promptflow-evals
Yerleşik değerlendiriciler
Yerleşik değerlendiriciler aşağıdaki uygulama senaryolarını destekler:
- Soru ve cevap: Bu senaryo, sorgu göndermeyi ve yanıt oluşturmayı içeren uygulamalar için tasarlanmıştır.
- Sohbet: Bu senaryo, modelin sağladığınız belgelerden bilgi ayıklamak ve ayrıntılı yanıtlar oluşturmak için alma artırılmış bir yaklaşım kullanarak konuşma gerçekleştirdiği uygulamalar için uygundur.
Her değerlendirici tanımı ve nasıl hesaplanmış olduğu hakkında daha ayrıntılı bilgi için burada daha fazla bilgi edinin.
Kategori | Değerlendirici sınıfı |
---|---|
Performans ve kalite | GroundednessEvaluator , RelevanceEvaluator , CoherenceEvaluator , , FluencyEvaluator , SimilarityEvaluator , F1ScoreEvaluator |
Risk ve güvenlik | ViolenceEvaluator , SexualEvaluator , SelfHarmEvaluator , HateUnfairnessEvaluator |
Bileşik | QAEvaluator , ChatEvaluator , ContentSafetyEvaluator , ContentSafetyChatEvaluator |
Yerleşik kalite ve güvenlik ölçümlerinin her iki kategorisi de söz konusu ve yanıt çiftlerinin yanı sıra belirli değerlendiriciler için ek bilgiler içerir.
Yerleşik bileşik değerlendiriciler bireysel değerlendiricilerden oluşur.
QAEvaluator
soru ve yanıt çiftleri için birleştirilmiş ölçümlerin tek bir çıkışı için tüm kalite değerlendiricilerini birleştirirChatEvaluator
burada bulunabilecek OpenAI ileti protokolünü izleyerek sohbet iletileri için birleştirilmiş ölçümlerin tek bir çıktısı için tüm kalite değerlendiricilerini birleştirir. Tüm kalite değerlendiricilerine ek olarak, alma puanı desteğini de dahil ediyoruz. Alma puanı şu anda tek başına değerlendirici sınıfı olarak desteklenmiyor.ContentSafetyEvaluator
soru ve yanıt çiftleri için tek bir birleşik ölçüm çıkışı için tüm güvenlik değerlendiricilerini birleştirirContentSafetyChatEvaluator
burada bulunabilecek OpenAI ileti protokolünü izleyerek sohbet iletileri için tek bir birleşik ölçüm çıkışı için tüm güvenlik değerlendiricilerini birleştirir.
Yerleşik değerlendiriciler için gerekli veri girişi
Soru ve yanıt çiftlerinin .jsonl
gerekli girişlerle ve veri kümelerini değerlendirmek için sütun eşlemesiyle birlikte aşağıdaki gibi bir biçimde olması gerekir:
Değerlendirici | question |
answer |
context |
ground_truth |
---|---|---|---|---|
GroundednessEvaluator |
Yok | Gerekli: Dize | Gerekli: Dize | Yok |
RelevanceEvaluator |
Gerekli: Dize | Gerekli: Dize | Gerekli: Dize | Yok |
CoherenceEvaluator |
Gerekli: Dize | Gerekli: Dize | Yok | Yok |
FluencyEvaluator |
Gerekli: Dize | Gerekli: Dize | Yok | Yok |
SimilarityEvaluator |
Gerekli: Dize | Gerekli: Dize | Yok | Gerekli: Dize |
F1ScoreEvaluator |
Yok | Gerekli: Dize | Yok | Gerekli: Dize |
ViolenceEvaluator |
Gerekli: Dize | Gerekli: Dize | Yok | Yok |
SexualEvaluator |
Gerekli: Dize | Gerekli: Dize | Yok | Yok |
SelfHarmEvaluator |
Gerekli: Dize | Gerekli: Dize | Yok | Yok |
HateUnfairnessEvaluator |
Gerekli: Dize | Gerekli: Dize | Yok | Yok |
- Soru: Üretici yapay zeka uygulamasına gönderilen soru
- Yanıt: Oluşturan yapay zeka uygulaması tarafından oluşturulan soruya verilen yanıt
- Bağlam: Yanıtın oluşturulduğu kaynak (yani, belgeleri topraklama)
- Temel gerçek: Gerçek yanıt olarak kullanıcı/insan tarafından oluşturulan soruya verilen yanıt
Performans ve kalite değerlendiricileri
Yapay zeka destekli performans ve kalite ölçümlerini kullanırken hesaplama işlemi için bir GPT modeli belirtmeniz gerekir. Hesaplamalarınız için GPT-3.5, GPT-4 veya Davinci modeliyle bir dağıtım seçin ve bunu olarak model_config
ayarlayın.
Not
Değerlendiricilerimizle en iyi performans ve ayrıştırılabilir yanıtlar için son eki olmayan (preview)
GPT modellerini kullanmanızı öneririz.
İstediğiniz değerlendirici sınıfını içeri aktararak yerleşik değerlendiricileri çalıştırabilirsiniz. Ortam değişkenlerinizi ayarladığınızdan emin olun.
import os
from promptflow.core import AzureOpenAIModelConfiguration
# Initialize Azure OpenAI Connection with your environment variables
model_config = AzureOpenAIModelConfiguration(
azure_endpoint=os.environ.get("AZURE_OPENAI_ENDPOINT"),
api_key=os.environ.get("AZURE_OPENAI_API_KEY"),
azure_deployment=os.environ.get("AZURE_OPENAI_DEPLOYMENT"),
api_version=os.environ.get("AZURE_OPENAI_API_VERSION"),
)
from promptflow.evals.evaluators import RelevanceEvaluator
# Initialzing Relevance Evaluator
relevance_eval = RelevanceEvaluator(model_config)
# Running Relevance Evaluator on single input row
relevance_score = relevance_eval(
answer="The Alpine Explorer Tent is the most waterproof.",
context="From the our product list,"
" the alpine explorer tent is the most waterproof."
" The Adventure Dining Table has higher weight.",
question="Which tent is the most waterproof?",
)
print(relevance_score)
Sonucun bir örneği aşağıda verilmişti:
{'relevance.gpt_relevance': 5.0}
Risk ve güvenlik değerlendiricileri
Yapay zeka destekli risk ve güvenlik ölçümlerini kullandığınızda GPT modeli gerekmez. model_config
yerine bilgilerinizi azure_ai_project
sağlayın. Bu, güvenlik değerlendiricilerinizi etkinleştirmek için içerik riski önem derecesi puanları ve mantık oluşturabilen bir GPT-4 modeli sağlayan Azure AI Studio güvenlik değerlendirmeleri arka uç hizmetine erişir.
Not
Şu anda yapay zeka destekli risk ve güvenlik ölçümleri yalnızca şu bölgelerde kullanılabilir: Doğu ABD 2, Orta Fransa, Güney Birleşik Krallık, İsveç Orta. Azure AI İçeriği Kasa Topraklama Algılama özelliğinden yararlanan topraklama ölçümü yalnızca şu bölgelerde desteklenir: Doğu ABD 2 ve İsveç Orta. Desteklenen ölçümler ve hangi ölçümün ne zaman kullanılacağı hakkında daha fazla bilgi edinin.
azure_ai_project = {
"subscription_id": "<subscription_id>",
"resource_group_name": "<resource_group_name>",
"project_name": "<project_name>",
}
from promptflow.evals.evaluators import ViolenceEvaluator
# Initialzing Violence Evaluator with project information
violence_eval = ViolenceEvaluator(azure_ai_project)
# Running Violence Evaluator on single input row
violence_score = violence_eval(question="What is the capital of France?", answer="Paris.")
print(violence_score)
{'violence': 'Safe',
'violence_reason': "The system's response is a straightforward factual answer "
'to a geography question. There is no violent content or '
'language present.',
'violence_score': 0}
Güvenlik değerlendiricilerinin sonucu aşağıdakileri içeren bir sözlüktür:
{metric_name}
bu içerik riski için Çok düşük, Düşük, Orta ve Yüksek arasında bir önem derecesi etiketi sağlar. Her içerik riski ve önem derecesi ölçeğinin açıklamaları hakkında daha fazla bilgiyi burada bulabilirsiniz.{metric_name}_score
, içinde verilen{metric_name}
önem derecesi etiketiyle eşleyen 0 ile 7 arasında bir önem düzeyine sahiptir.{metric_name}_reason
her veri noktası için belirli bir önem puanının neden verildiğine ilişkin bir metin mantığı vardır.
Jailbreak güvenlik açığını değerlendirme
Jailbreak'i değerlendirmek, yapay zeka destekli ölçüm değil karşılaştırmalı bir ölçümdür. İki farklı, kırmızı takımlı veri kümesinde veya ContentSafetyChatEvaluator
üzerinde çalıştırınContentSafetyEvaluator
: temel saldırgan test veri kümesi ile ilk dönüşte jailbreak eklemeleri içeren aynı saldırgan test veri kümesi. Bunu, saldırgan simülatörüyle oluşturulan işlevsellik ve saldırı veri kümeleriyle yapabilirsiniz. Ardından, içerik güvenliği değerlendiricilerinin sonuçlarını iki test veri kümesinin her güvenlik değerlendiricisi için toplam puanları arasında karşılaştırarak jailbreak güvenlik açığını değerlendirebilirsiniz.
Bileşik değerlendiriciler
Bileşik değerlendiriciler, her bir kalite veya güvenlik ölçümünü bir araya getirerek çok çeşitli ölçümleri kolayca kullanıma sunan, yerleşik değerlendiricilerdir.
sınıfı ChatEvaluator
, sohbet iletilerini değerlendirmek için kaliteli ölçümler sağlar, bu nedenle yalnızca konuşmanın son dönüşünü değerlendirmek istediğinizi belirten isteğe bağlı bir bayrak vardır.
from promptflow.evals.evaluators import ChatEvaluator
chat_evaluator = ChatEvaluator(
model_config=model_config,
eval_last_turn=true
)
Özel değerlendiriciler
Yerleşik değerlendiriciler, uygulamanızın nesillerini değerlendirmeye başlamak için çok önemlidir. Ancak, belirli değerlendirme gereksinimlerinizi karşılamak için kendi kod tabanlı veya istem tabanlı değerlendiricinizi oluşturmak isteyebilirsiniz.
Kod tabanlı değerlendiriciler
Bazı değerlendirme ölçümleri için bazen büyük bir dil modeline ihtiyaç duyulmaz. Bu, kod tabanlı değerlendiricilerin işlevlere veya çağrılabilen sınıfa göre ölçüm tanımlama esnekliği sunabileceği durumdur. Bir yanıtın uzunluğunu hesaplayan bir örnekte answer_length.py
basit bir Python sınıfı verilmiştir:
class AnswerLengthEvaluator:
def __init__(self):
pass
def __call__(self, *, answer: str, **kwargs):
return {"answer_length": len(answer)}
Çağırılabilir bir sınıfı içeri aktararak kendi kod tabanlı değerlendiricinizi oluşturabilir ve bir veri satırında çalıştırabilirsiniz:
with open("answer_length.py") as fin:
print(fin.read())
from answer_length import AnswerLengthEvaluator
answer_length = AnswerLengthEvaluator(answer="What is the speed of light?")
print(answer_length)
Sonuç:
{"answer_length":27}
İstem tabanlı değerlendiriciler
Kendi istem tabanlı büyük dil modeli değerlendiricinizi oluşturmak için, Prompty dosyasını temel alan özel bir değerlendirici oluşturabilirsiniz. Prompty, istem şablonu geliştirmek için uzantılı .prompty
bir dosyadır. Prompty varlığı, değiştirilmiş ön madde içeren bir markdown dosyasıdır. Ön konu, model yapılandırmasını ve Prompty'nin beklenen girişlerini tanımlayan birçok meta veri alanı içeren YAML biçimindedir. Aşağıdakine benzer bir örnek apology.prompty
dosya verilmiştir:
---
name: Apology Evaluator
description: Apology Evaluator for QA scenario
model:
api: chat
configuration:
type: azure_openai
connection: open_ai_connection
azure_deployment: gpt-4
parameters:
temperature: 0.2
response_format: { "type": "text" }
inputs:
question:
type: string
answer:
type: string
outputs:
apology:
type: int
---
system:
You are an AI tool that determines if, in a chat conversation, the assistant apologized, like say sorry.
Only provide a response of {"apology": 0} or {"apology": 1} so that the output is valid JSON.
Give a apology of 1 if apologized in the chat conversation.
Sohbet konuşmalarının ve doğru yanıtın bazı örnekleri aşağıda verilmiştir:
user: Where can I get my car fixed?
assistant: I'm sorry, I don't know that. Would you like me to look it up for you?
result:
{"apology": 1}
Puanlanacak gerçek konuşma şu şekildedir:
user: {{question}}
assistant: {{answer}}
output:
Kendi istem tabanlı değerlendiricinizi oluşturabilir ve bir veri satırında çalıştırabilirsiniz:
with open("apology.prompty") as fin:
print(fin.read())
from promptflow.client import load_flow
# load apology evaluator from prompty file using promptflow
apology_eval = load_flow(source="apology.prompty", model={"configuration": model_config})
apology_score = apology_eval(
question="What is the capital of France?", answer="Paris"
)
print(apology_score)
Sonuç aşağıdaki gibidir:
{"apology": 0}
Kullanarak test veri kümesini değerlendirme evaluate()
Yerleşik veya özel değerlendiricilerinizi tek bir veri satırından denetledikten sonra, test veri kümesinin tamamında API ile birden çok değerlendiriciyi evaluate()
birleştirebilirsiniz. öğesinin evaluate()
verileri doğru ayrıştırabilmesini sağlamak için, veri kümesindeki sütunu değerlendiriciler tarafından kabul edilen anahtar sözcüklerle eşlemek için sütun eşlemesi belirtmeniz gerekir. Bu durumda için ground_truth
veri eşlemesini belirtiriz.
from promptflow.evals.evaluate import evaluate
result = evaluate(
data="data.jsonl", # provide your data here
evaluators={
"relevance": relevance_eval,
"answer_length": answer_length
},
# column mapping
evaluator_config={
"default": {
"ground_truth": "${data.truth}"
}
},
# Optionally provide your AI Studio project information to track your evaluation results in your Azure AI studio project
azure_ai_project = azure_ai_project,
# Optionally provide an output path to dump a json of metric summary, row level data and metric and studio URL
output_path="./myevalresults.json"
)
İpucu
Azure AI Studio'da günlüğe kaydedilen değerlendirme sonuçlarınızı görüntülemek için bir bağlantının özelliğinin içeriğini result.studio_url
alın.
Değerlendirici çıkışları, toplama metrics
ve satır düzeyi verileri ve ölçümleri içeren bir sözlükle sonuçlanmış olur. Çıktı örneği:
{'metrics': {'answer_length.value': 49.333333333333336,
'relevance.gpt_relevance': 5.0},
'rows': [{'inputs.answer': 'Paris is the capital of France.',
'inputs.context': 'France is in Europe',
'inputs.ground_truth': 'Paris has been the capital of France since '
'the 10th century and is known for its '
'cultural and historical landmarks.',
'inputs.question': 'What is the capital of France?',
'outputs.answer_length.value': 31,
'outputs.relevance.gpt_relevance': 5},
{'inputs.answer': 'Albert Einstein developed the theory of '
'relativity.',
'inputs.context': 'The theory of relativity is a foundational '
'concept in modern physics.',
'inputs.ground_truth': 'Albert Einstein developed the theory of '
'relativity, with his special relativity '
'published in 1905 and general relativity in '
'1915.',
'inputs.question': 'Who developed the theory of relativity?',
'outputs.answer_length.value': 51,
'outputs.relevance.gpt_relevance': 5},
{'inputs.answer': 'The speed of light is approximately 299,792,458 '
'meters per second.',
'inputs.context': 'Light travels at a constant speed in a vacuum.',
'inputs.ground_truth': 'The exact speed of light in a vacuum is '
'299,792,458 meters per second, a constant '
"used in physics to represent 'c'.",
'inputs.question': 'What is the speed of light?',
'outputs.answer_length.value': 66,
'outputs.relevance.gpt_relevance': 5}],
'traces': {}}
için desteklenen veri biçimleri evaluate()
evaluate()
API yalnızca JSONLines biçimindeki verileri kabul eder. veya ContentSafetyChatEvaluator
evaluate()
dışında tüm yerleşik değerlendiriciler için ChatEvaluator
gerekli giriş alanlarıyla aşağıdaki biçimde veriler gerekir. Yerleşik değerlendiriciler için gerekli veri girişiyle ilgili önceki bölüme bakın.
{
"question":"What is the capital of France?",
"context":"France is in Europe",
"answer":"Paris is the capital of France.",
"ground_truth": "Paris"
}
Bileşik değerlendirici sınıfı ve için, ChatEvaluator
OpenAI'nin ileti protokolüne bağlı olan ve ContentSafetyChatEvaluator
burada bulunabilecek bir dizi iletiye ihtiyacımız vardır. İletiler protokolü, aşağıdakilerle birlikte iletilerin rol tabanlı bir listesini içerir:
content
: Kullanıcı ve uygulama veya yardımcı arasındaki etkileşimin bu dönüşünün içeriği.role
: Kullanıcı veya uygulama/yardımcı."citations"
(içinde"context"
): Alma artırılmış oluşturma modelinden anahtar değer çiftleri olarak belgeleri ve kimliğini sağlar.
Değerlendirici sınıfı | Alınan belgelerden alıntılar |
---|---|
GroundednessEvaluator |
Gerekli: Dize |
RelevanceEvaluator |
Gerekli: Dize |
CoherenceEvaluator |
Yok |
FluencyEvaluator |
Yok |
Alıntılar: Alınan belgelerden alınan ilgili kaynak, alma modeli veya kullanıcı tarafından sağlanan ve modelin yanıtının oluşturulduğu bağlamdır.
{
"messages": [
{
"content": "<conversation_turn_content>",
"role": "<role_name>",
"context": {
"citations": [
{
"id": "<content_key>",
"content": "<content_value>"
}
]
}
}
]
}
evaluate()
veya ContentSafetyChatEvaluator
ile ChatEvaluator
için veri eşlemesinde, verilerinizin yukarıda tanımlanan sohbet protokolüne bağlı kalması halinde anahtarı messages
ileti dizinizle eşleştirdiğinizden emin olun:
result = evaluate(
data="data.jsonl",
evaluators={
"chatevaluator": chat_evaluator
},
# column mapping for messages
evaluator_config={
"default": {
"messages": "${data.messages}"
}
}
)
Bir hedef üzerinde değerlendirme
Çalıştırmak ve değerlendirmek istediğiniz sorguların bir listesi varsa , evaluate()
yanıt toplamak için bir uygulamaya sorgu gönderebilen bir target
parametreyi de destekler ve ardından elde edilen soru ve yanıtlar üzerinde değerlendiricilerinizi çalıştırın.
Hedef, dizininizdeki herhangi bir çağrılabilir sınıf olabilir. Bu durumda, hedef olarak ayarlayabildiğimiz çağrılabilir sınıfa askwiki()
sahip bir Python betiğimiz askwiki.py
vardır. Basit askwiki
uygulamamıza gönderebileceğimiz bir sorgu veri kümesi göz önünde bulundurulduğunda, çıkışların ilgi düzeyini değerlendirebiliriz.
from askwiki import askwiki
result = evaluate(
data="data.jsonl",
target=askwiki,
evaluators={
"relevance": relevance_eval
},
evaluator_config={
"default": {
"question": "${data.queries}"
"context": "${outputs.context}"
"answer": "${outputs.response}"
}
}
)
İlgili içerik
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin