Öğretici: Bölüm 3 - Microsoft Döküm SDK'sı (klasik) ile özel bir sohbet uygulamasını değerlendirme

Yalnızca şunlar için geçerlidir:Dökümhane (klasik) portalı. Bu makale yeni Dökümhane portalında kullanılamaz. Yeni portal hakkında daha fazla bilgi edinin.

Not

Bu makaledeki bağlantılar, şu anda görüntülediğiniz Dökümhane (klasik) belgeleri yerine yeni Microsoft Foundry belgelerinde içerik açabilir.

Bu öğreticide, öğretici serisinin 2. Bölümünde oluşturduğunuz sohbet uygulamasını değerlendirirsiniz. Uygulamanızın kalitesini birden çok ölçümde değerlendirir ve iyileştirmeleri yinelersiniz. Bu bölümde:

  • Değerlendirme veri kümesi oluşturma
  • Azure yapay zeka değerlendiricileriyle sohbet uygulamasını değerlendirme
  • Uygulamanızı tekrarla ve geliştirin

Bu öğretici, Bölüm 2: Microsoft Foundry SDK ile özel bir sohbet uygulaması oluşturma üzerine inşa eder.

Önkoşullar

Önemli

Bu makale, merkez tabanlı projeler için eski sistem desteği sağlar. Foundry projeleri için çalışmaz. Bkz. Ne tür bir projem olduğunu nasıl bilebilirim?

SDK uyumluluk notu: Kod örnekleri için belirli bir Microsoft Döküm SDK'sı sürümü gerekir. Uyumluluk sorunlarıyla karşılaşırsanız hub tabanlı bir projeden Foundry projesine geçiş yapmayı göz önünde bulundurun.

  • Etkin aboneliği olan bir Azure hesabı. Hesabınız yoksa ücretsiz deneme aboneliği içeren bir free Azure hesabı oluşturun.
  • Bir projeniz yoksa merkez tabanlı bir proje oluşturun.
  • Sohbet uygulamasını derlemek için öğretici serisinin 2. Bölümünü tamamlayın.
  • Bölüm 1'de oluşturduğunuz hub tabanlı projeyi kullanın.
  • Azure AI izinleri: Model uç nokta hız sınırlarını değiştirmek ve değerlendirme işleri yürütmek için Sahip veya Katkıda Bulunan rolüne sahip olunmalıdır.
  • 2. Bölümden telemetri günlüğü ekleme adımlarını tamamladığınızdan emin olun.

Değerlendirme veri kümesi oluşturma

Örnek sorular ve beklenen yanıtları içeren aşağıdaki değerlendirme veri kümesini kullanın. Bu veri kümesini bir değerlendirici ve get_chat_response() hedef işlevle birlikte kullanarak sohbet uygulamanızın ilgi, temel ve tutarlılık ölçümleri arasındaki performansını değerlendirin.

  1. Assets klasörünüzde chat_eval_data.jsonl adlı bir dosya oluşturun.

  2. Bu veri kümesini dosyaya yapıştırın:

    {"query": "Which tent is the most waterproof?", "truth": "The Alpine Explorer Tent has the highest rainfly waterproof rating at 3000m"}
    {"query": "Which camping table holds the most weight?", "truth": "The Adventure Dining Table has a higher weight capacity than all of the other camping tables mentioned"}
    {"query": "How much do the TrailWalker Hiking Shoes cost? ", "truth": "The Trailewalker Hiking Shoes are priced at $110"}
    {"query": "What is the proper care for trailwalker hiking shoes? ", "truth": "After each use, remove any dirt or debris by brushing or wiping the shoes with a damp cloth."}
    {"query": "What brand is TrailMaster tent? ", "truth": "OutdoorLiving"}
    {"query": "How do I carry the TrailMaster tent around? ", "truth": " Carry bag included for convenient storage and transportation"}
    {"query": "What is the floor area for Floor Area? ", "truth": "80 square feet"}
    {"query": "What is the material for TrailBlaze Hiking Pants?", "truth": "Made of high-quality nylon fabric"}
    {"query": "What color does TrailBlaze Hiking Pants come in?", "truth": "Khaki"}
    {"query": "Can the warrenty for TrailBlaze pants be transfered? ", "truth": "The warranty is non-transferable and applies only to the original purchaser of the TrailBlaze Hiking Pants. It is valid only when the product is purchased from an authorized retailer."}
    {"query": "How long are the TrailBlaze pants under warranty for? ", "truth": " The TrailBlaze Hiking Pants are backed by a 1-year limited warranty from the date of purchase."}
    {"query": "What is the material for PowerBurner Camping Stove? ", "truth": "Stainless Steel"}
    {"query": "Is France in Europe?", "truth": "Sorry, I can only queries related to outdoor/camping gear and equipment"}
    

    Kaynaklar: Değerlendirme veri kümeleri için JSONL biçimi.

Azure yapay zeka değerlendiricileriyle değerlendirme

Hedef işlev sarmalayıcı oluşturan, veri kümenizi yükleyen, değerlendirmeyi çalıştıran ve sonuçları Foundry projenize kaydeden bir değerlendirme betiği oluşturun.

  1. Ana klasörünüzde evaluate.py adlı bir dosya oluşturun.

  2. Gerekli kitaplıkları içeri aktarmak, proje istemcisi oluşturmak ve bazı ayarları yapılandırmak için aşağıdaki kodu ekleyin:

    import os
    import pandas as pd
    from azure.ai.projects import AIProjectClient
    from azure.ai.projects.models import ConnectionType
    from azure.ai.evaluation import evaluate, GroundednessEvaluator
    from azure.identity import DefaultAzureCredential
    
    from chat_with_products import chat_with_products
    
    # load environment variables from the .env file at the root of this repo
    from dotenv import load_dotenv
    
    load_dotenv()
    
    # create a project client using environment variables loaded from the .env file
    project = AIProjectClient.from_connection_string(
        conn_str=os.environ["AIPROJECT_CONNECTION_STRING"], credential=DefaultAzureCredential()
    )
    
    connection = project.connections.get_default(connection_type=ConnectionType.AZURE_OPEN_AI, include_credentials=True)
    
    evaluator_model = {
        "azure_endpoint": connection.endpoint_url,
        "azure_deployment": os.environ["EVALUATION_MODEL"],
        "api_version": "2024-06-01",
        "api_key": connection.key,
    }
    
    groundedness = GroundednessEvaluator(evaluator_model)
    

    Başvurular: AIProjectClient, DefaultAzureCredential, azure-ai-evaluation.

  3. Sorgu ve yanıt değerlendirmesi için değerlendirme arabirimini uygulayan bir sarmalayıcı işlevi oluşturmak için kod ekleyin:

    def evaluate_chat_with_products(query):
        response = chat_with_products(messages=[{"role": "user", "content": query}])
        return {"response": response["message"].content, "context": response["context"]["grounding_data"]}
    

    Referanslar: azure-ai-evaluation, değerlendirme hedef fonksiyonlar.

  4. Son olarak, değerlendirmeyi çalıştırmak, sonuçları yerel olarak görüntülemek ve Foundry portalında değerlendirme sonuçlarına bir bağlantı almak için kod ekleyin:

    # Evaluate must be called inside of __main__, not on import
    if __name__ == "__main__":
        from config import ASSET_PATH
    
        # workaround for multiprocessing issue on linux
        from pprint import pprint
        from pathlib import Path
        import multiprocessing
        import contextlib
    
        with contextlib.suppress(RuntimeError):
            multiprocessing.set_start_method("spawn", force=True)
    
        # run evaluation with a dataset and target function, log to the project
        result = evaluate(
            data=Path(ASSET_PATH) / "chat_eval_data.jsonl",
            target=evaluate_chat_with_products,
            evaluation_name="evaluate_chat_with_products",
            evaluators={
                "groundedness": groundedness,
            },
            evaluator_config={
                "default": {
                    "query": {"${data.query}"},
                    "response": {"${target.response}"},
                    "context": {"${target.context}"},
                }
            },
            azure_ai_project=project.scope,
            output_path="./myevalresults.json",
        )
    
        tabular_result = pd.DataFrame(result.get("rows"))
    
        pprint("-----Summarized Metrics-----")
        pprint(result["metrics"])
        pprint("-----Tabular Result-----")
        pprint(tabular_result)
        pprint(f"View evaluation results in AI Studio: {result['studio_url']}")
    

    Kaynaklar: azure-ai-evaluation, AIProjectClient.

Değerlendirme modelini yapılandırma

Değerlendirme betiği modeli birçok kez çağırır. Değerlendirme modeli için dakika başına belirteç sayısını artırmayı göz önünde bulundurun.

Bu öğretici serisinin 1. Bölümünde, değerlendirme modelinin adını belirten bir gpt-4o-mini dosyası oluşturdunuz. Kullanılabilir kotanız varsa bu model için dakika başına belirteç sınırını artırmayı deneyin. Değeri artırmak için yeterli kotanız yoksa endişelenmeyin. Betik, limit hatalarını işlemek için tasarlanmıştır.

  1. Foundry portalındaki projenizde Modeller + uç noktalar'ı seçin.
  2. gpt-4o-mini'yi seçin.
  3. Düzenle'yi seçin.
  4. Kotanız varsa Dakika Başına Belirteç Hız Sınırı'nı 30 veya daha fazla olarak artırın.
  5. Kaydet ve kapat'ı seçin.

Değerlendirme betiğini çalıştırma

  1. Konsolunuzdan Azure CLI kullanarak Azure hesabınızda oturum açın:

    az login
    
  2. Gerekli paketleri yükleyin:

    pip install openai
    pip install azure-ai-evaluation[remote]
    

    Başvurular: azure-ai-değerlendirme SDK'sı, Değerlendirme SDK'sı belgeleri.

Değerlendirme kurulumunuzu doğrulama

Tam değerlendirmeyi çalıştırmadan önce (5-10 dakika sürer), şu hızlı testi çalıştırarak SDK'nın ve proje bağlantınızın çalıştığını doğrulayın:

from azure.ai.projects import AIProjectClient
from azure.identity import DefaultAzureCredential

# Test that you can connect to your project
project = AIProjectClient.from_connection_string(
    conn_str=os.environ["AIPROJECT_CONNECTION_STRING"], credential=DefaultAzureCredential()
)
print("Evaluation SDK is ready! You can now run evaluate.py")

görürseniz "Evaluation SDK is ready!"kurulumunuz tamamlanır ve devam edebilirsiniz.

Referanslar: AIProjectClient, DefaultAzureCredential.

Değerlendirmeyi başlatma

  • Değerlendirme betiğini çalıştırın:

    python evaluate.py
    

Değerlendirmenin tamamlanması 5-10 dakika sürer. Zaman aşımı uyarıları ve hız sınırı hataları görebilirsiniz. Betik bu hataları otomatik olarak işler ve işlemeye devam eder.

Değerlendirme çıkışını yorumlama

Konsol çıkışında her soru için bir yanıt ve ardından ilgi, temellik ve tutarlılık puanlarını gösteren özetlenmiş ölçümlerin yer aldığı bir tablo görürsünüz. Puanlar, GPT destekli ölçümler için 0 (en kötü) ile 4 (en iyi) arasında değişir. Başvuru belgeleri tarafından iyi desteklenmeyen yanıtları belirlemek için düşük temellilik puanlarını ve konu dışı yanıtları belirlemek için düşük ilgi puanlarını arayın.

Birçok WARNING:opentelemetry.attributes: ileti ve zaman aşımı hatası görebilirsiniz. Bu iletileri güvenle yoksayabilirsiniz. Değerlendirme sonuçlarını etkilemez. Değerlendirme betiği, hız sınırı hatalarını işlemek ve işlemi sürdürmek amacıyla tasarlanmıştır.

Değerlendirme sonuçları çıkışı, değerlendirme çalıştırmalarını yan yana karşılaştırabileceğiniz ve zaman içindeki iyileştirmeleri izleyebileceğiniz Foundry portalında ayrıntılı sonuçları görüntülemek için bir bağlantı da içerir.

====================================================
'-----Summarized Metrics-----'
{'groundedness.gpt_groundedness': 1.6666666666666667,
 'groundedness.groundedness': 1.6666666666666667}
'-----Tabular Result-----'
                                     outputs.response  ... line_number
0   Could you specify which tent you are referring...  ...           0
1   Could you please specify which camping table y...  ...           1
2   Sorry, I only can answer queries related to ou...  ...           2
3   Could you please clarify which aspects of care...  ...           3
4   Sorry, I only can answer queries related to ou...  ...           4
5   The TrailMaster X4 Tent comes with an included...  ...           5
6                                            (Failed)  ...           6
7   The TrailBlaze Hiking Pants are crafted from h...  ...           7
8   Sorry, I only can answer queries related to ou...  ...           8
9   Sorry, I only can answer queries related to ou...  ...           9
10  Sorry, I only can answer queries related to ou...  ...          10
11  The PowerBurner Camping Stove is designed with...  ...          11
12  Sorry, I only can answer queries related to ou...  ...          12

[13 rows x 8 columns]
('View evaluation results in Foundry portal: '
 'https://xxxxxxxxxxxxxxxxxxxxxxx')

Yineleme ve geliştirme

Değerlendirme sonuçları, yanıtların genellikle başvuru belgelerinde iyi temellenmediğini ortaya koyuyor. Temelliliği iyileştirmek için, assets/grounded_chat.prompty dosyasındaki sistem isteminizi değiştirerek modelin başvuru belgelerini daha doğrudan kullanmasını teşvik edin.

Geçerli komut istemi (sorunlu):

If the question is not related to outdoor/camping gear and clothing, just say 'Sorry, I only can answer queries related to outdoor/camping gear and clothing. So, how can I help?'
If the question is related to outdoor/camping gear and clothing but vague, ask clarifying questions.

Geliştirilmiş komut:

If the question is related to outdoor/camping gear and clothing, answer based on the reference documents provided.
If you cannot find information in the reference documents, say: 'I don't have information about that specific topic. Let me help with related products or try a different question.'
For vague questions, ask clarifying questions to better assist.

İstemi güncelleştirdikten sonra:

  1. Dosyayı kaydedin.

  2. Değerlendirme betiğini yeniden çalıştırın:

    python evaluate.py
    
  3. Yeni değerlendirme sonuçlarını önceki değerlendirme ile karşılaştırın. Geliştirilmiş güvenirlik puanlarını görmeniz gerekir.

Aşağıdaki gibi ek değişiklikleri deneyin:

  • Sistem istemini değiştirerek tamlık üzerinde doğruluğa odaklanma
  • Farklı bir modelle test etme (örneğin, gpt-4-turbo varsa)
  • Bağlam alma işlemini daha ilgili belgeler döndürecek şekilde ayarlama

Her yineleme, hangi değişikliklerin belirli ölçümleri geliştirdiğini anlamanıza yardımcı olur.

Kaynakları temizleme

Gereksiz Azure maliyetlerle karşılaşmamak için, artık gerekli değilse bu öğreticide oluşturduğunuz kaynakları silin. Kaynakları yönetmek için Azure portal kullanabilirsiniz.

  • Microsoft Foundry SDK