Aracılığıyla paylaş


İ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ştirir
  • ChatEvaluatorburada 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ştirir
  • ContentSafetyChatEvaluatorburada 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_configayarlayı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_configyerine 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_truthveri 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 ContentSafetyChatEvaluatorevaluate() 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 ContentSafetyChatEvaluatorburada 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 ContentSafetyChatEvaluatorile 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}"
        }
    }
)