Öğretici: Bölüm 3 - Azure AI Foundry SDK'sı ile özel bir sohbet uygulamasını değerlendirme
Bu öğreticide, öğretici serisinin 2. Bölümünde oluşturduğunuz sohbet uygulamasını değerlendirmek için Azure AI SDK'sını (ve diğer kitaplıkları) kullanacaksınız. Bu üçüncü bölümde şunların nasıl yapılacağını öğreneceksiniz:
- Değerlendirme veri kümesi oluşturma
- Azure AI değerlendiricileriyle sohbet uygulamasını değerlendirme
- Uygulamanızı yineleme ve geliştirme
Bu öğretici, üç bölümden oluşan bir öğreticinin üçüncü bölümüdür.
Önkoşullar
- Sohbet uygulamasını oluşturmak için öğretici serisinin 2. bölümünü tamamlayın.
- 2. bölümden telemetri günlüğü ekleme adımlarını tamamladığınızdan emin olun.
Sohbet uygulaması yanıtlarının kalitesini değerlendirme
Sohbet uygulamanızın sohbet geçmişi de dahil olmak üzere sorgularınıza iyi yanıt verdiğini öğrendiğinize göre, birkaç farklı ölçümde ve daha fazla veride nasıl yapıldığını değerlendirmenin zamanı geldi.
Değerlendirme veri kümesi ve get_chat_response()
hedef işlevi olan bir değerlendirici kullanır, ardından değerlendirme sonuçlarını değerlendirirsiniz.
Değerlendirmeyi çalıştırdıktan sonra, sistem isteminizi geliştirme ve sohbet uygulamasının yanıtlarının nasıl değiştiğini ve geliştiğini gözlemleme gibi mantığınızda iyileştirmeler yapabilirsiniz.
Değerlendirme veri kümesi oluşturma
Örnek sorular ve beklenen yanıtlar (gerçek) içeren aşağıdaki değerlendirme veri kümesini kullanın.
Assets klasörünüzde chat_eval_data.jsonl adlı bir dosya oluşturun.
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"}
Azure AI değerlendiricileriyle değerlendirme
Şimdi aşağıdakiler için bir değerlendirme betiği tanımlayın:
- Sohbet uygulaması mantığımız etrafında bir hedef işlev sarmalayıcısı oluşturun.
- Örnek
.jsonl
veri kümesini yükleyin. - Değerlendirmeyi çalıştırarak hedef işlevi alır ve değerlendirme veri kümesini sohbet uygulamasından gelen yanıtlarla birleştirir.
- Sohbet uygulaması yanıtlarının kalitesini değerlendirmek için bir dizi GPT destekli ölçüm (ilgi, temellik ve tutarlılık) oluşturun.
- Sonuçları yerel olarak çıktısını alır ve sonuçları bulut projesine günlüğe kaydeder.
Betik, sonuçları komut satırında ve bir json dosyasına çıkararak sonuçları yerel olarak gözden geçirmenizi sağlar.
Betik ayrıca değerlendirme sonuçlarını bulut projesine günlüğe kaydeder, böylece kullanıcı arabirimindeki değerlendirme çalıştırmalarını karşılaştırabilirsiniz.
Ana klasörünüzde evaluate.py adlı bir dosya oluşturun.
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)
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"]}
Son olarak, değerlendirmeyi çalıştırmak için kod ekleyin, sonuçları yerel olarak görüntüleyin ve Azure AI Foundry portalında değerlendirme sonuçlarına bir bağlantı verir:
# 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']}")
Değerlendirme modelini yapılandırma
Değerlendirme betiği modeli birçok kez çağırdığından, değerlendirme modeli için dakika başına belirteç sayısını artırmak isteyebilirsiniz.
Bu öğretici serisinin 1. Bölümünde, değerlendirme modelinin gpt-4o-mini
adını belirten bir .env 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, sınır hatalarını işlemek için tasarlanmıştır.
- Azure AI Foundry portalındaki projenizde Modeller + uç noktalar'ı seçin.
- gpt-4o-mini'yi seçin.
- Düzenle'yi seçin.
- Dakika Başına Belirteç Hız Sınırını artırma kotanız varsa, bunu 30'a yükseltmeyi deneyin.
- Kaydet ve kapat'ı seçin.
Değerlendirme betiğini çalıştırma
Konsolunuzdan Azure CLI ile Azure hesabınızda oturum açın:
az login
Gerekli paketi yükleyin:
pip install azure-ai-evaluation[remote]
Şimdi değerlendirme betiğini çalıştırın:
python evaluate.py
Değerlendirme çıkışını yorumlama
Konsol çıkışında her soru için bir yanıt ve ardından özetlenmiş ölçümlerin yer aldığı bir tablo görürsünüz. (Çıkışınızda farklı sütunlar görebilirsiniz.)
Modeliniz için dakika başına belirteç sınırını artıramadıysanız beklenen bazı zaman aşımı hataları görebilirsiniz. Değerlendirme betiği bu hataları işlemek ve çalışmaya devam etmek için tasarlanmıştır.
Not
Ayrıca birçok WARNING:opentelemetry.attributes:
kişi görebilirsiniz. Bunlar güvenli bir şekilde yoksayılabilir ve değerlendirme sonuçlarını etkilemez.
====================================================
'-----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 Azure AI Foundry portal: '
'https://xxxxxxxxxxxxxxxxxxxxxxx')
Azure AI Foundry portalında değerlendirme sonuçlarını görüntüleme
Değerlendirme çalıştırması tamamlandıktan sonra, Azure AI Foundry portalındaki Değerlendirme sayfasında değerlendirme sonuçlarını görüntülemek için bağlantıyı izleyin.
Ayrıca tek tek satırlara bakabilir, satır başına ölçüm puanlarını görebilir ve alınan bağlamın/belgelerin tamamını görüntüleyebilirsiniz. Bu ölçümler değerlendirme sonuçlarını yorumlama ve hata ayıklama konusunda yararlı olabilir.
Azure AI Foundry portalında değerlendirme sonuçları hakkında daha fazla bilgi için bkz . Azure AI Foundry portalında değerlendirme sonuçlarını görüntüleme.
Yineleme ve geliştirme
Yanıtların iyi temellenmediğini fark edin. Çoğu durumda model yanıt yerine bir soruyla yanıt verir. Bu, istem şablonu yönergelerinin bir sonucudur.
- assets/grounded_chat.prompty dosyanızda "Soru dış mekan/kamp malzemeleri ve kıyafetlerle ilgiliyse ancak belirsizse, belgelere başvurmak yerine netleştirici sorular sorun" cümlesini bulun.
- Cümleyi "Soru dış mekan/kamp malzemeleri ve kıyafetlerle ilgiliyse ancak belirsizse, başvuru belgelerine dayanarak yanıtlamaya çalışın, ardından netleştirici sorular sorun" olarak değiştirin.
- Dosyayı kaydedin ve değerlendirme betiğini yeniden çalıştırın.
Değişikliklerin değerlendirme sonuçlarını nasıl etkilediğini görmek için istem şablonunda diğer değişiklikleri deneyin veya farklı modelleri deneyin.
Kaynakları temizleme
Gereksiz Azure maliyetlerine maruz kalmamak için, artık gerekli değilse bu öğreticide oluşturduğunuz kaynakları silmeniz gerekir. Kaynakları yönetmek için Azure portalını kullanabilirsiniz.