Dela via


Anpassade utvärderare

Inbyggda utvärderare är utmärkta och direkt användbara för att börja utvärdera programmets genereringar. Men du kanske vill skapa en egen kodbaserad eller promptbaserad utvärderare för att tillgodose dina specifika utvärderingsbehov.

Kodbaserade utvärderare

Ibland behövs inte en stor språkmodell för vissa utvärderingsmått. Det här är när kodbaserade utvärderare kan ge dig flexibiliteten att definiera mått baserat på funktioner eller anropsbar klass. Du kan till exempel skapa en egen kodbaserad utvärderare genom att skapa en enkel Python-klass som beräknar längden på ett svar i answer_length.py under katalogen answer_len/:

Exempel på kodbaserad utvärderare: Svarslängd

class AnswerLengthEvaluator:
    def __init__(self):
        pass
    # A class is made a callable my implementing the special method __call__
    def __call__(self, *, answer: str, **kwargs):
        return {"answer_length": len(answer)}

Kör sedan utvärderaren på en rad med data genom att importera en anropsbar klass:

from answer_len.answer_length import AnswerLengthEvaluator

answer_length_evaluator = AnswerLengthEvaluator()
answer_length = answer_length_evaluator(answer="What is the speed of light?")

Kodbaserade utvärderarutdata: Svarslängd

{"answer_length":27}

Frågebaserade utvärderare

Om du vill skapa en egen frågebaserad utvärderingsmodell för stora språk eller en AI-assisterad anteckning kan du skapa en anpassad utvärderare baserat på en Prompty-fil . Prompty är en fil med .prompty tillägg för att utveckla en promptmall. Prompty-resursen är en markdown-fil med ett ändrat förtext. Fronten är i YAML-format som innehåller många metadatafält som definierar modellkonfiguration och förväntade indata för Prompty. Nu ska vi skapa en anpassad utvärderare FriendlinessEvaluator för att mäta ett svars vänlighet.

Exempel på frågabaserad utvärderare: Utvärdering av användarvänlighet

Skapa först en friendliness.prompty fil som beskriver definitionen av måttet för användarvänlighet och dess klassificeringskriteriet:

---
name: Friendliness Evaluator
description: Friendliness Evaluator to measure warmth and approachability of answers.
model:
  api: chat
  configuration:
    type: azure_openai
    azure_endpoint: ${env:AZURE_OPENAI_ENDPOINT}
    azure_deployment: gpt-4o-mini
  parameters:
    model:
    temperature: 0.1
inputs:
  response:
    type: string
outputs:
  score:
    type: int
  explanation:
    type: string
---

system:
Friendliness assesses the warmth and approachability of the answer. Rate the friendliness of the response between one to five stars using the following scale:

One star: the answer is unfriendly or hostile

Two stars: the answer is mostly unfriendly

Three stars: the answer is neutral

Four stars: the answer is mostly friendly

Five stars: the answer is very friendly

Please assign a rating between 1 and 5 based on the tone and demeanor of the response.

**Example 1**
generated_query: I just don't feel like helping you! Your questions are getting very annoying.
output:
{"score": 1, "reason": "The response is not warm and is resisting to be providing helpful information."}
**Example 2**
generated_query: I'm sorry this watch is not working for you. Very happy to assist you with a replacement.
output:
{"score": 5, "reason": "The response is warm and empathetic, offering a resolution with care."}


**Here the actual conversation to be scored:**
generated_query: {{response}}
output:

Skapa sedan en klass FriendlinessEvaluator för att läsa in prompty-filen och bearbeta utdata med json-format:

import os
import json
import sys
from promptflow.client import load_flow


class FriendlinessEvaluator:
    def __init__(self, model_config):
        current_dir = os.path.dirname(__file__)
        prompty_path = os.path.join(current_dir, "friendliness.prompty")
        self._flow = load_flow(source=prompty_path, model={"configuration": model_config})

    def __call__(self, *, response: str, **kwargs):
        llm_response = self._flow(response=response)
        try:
            response = json.loads(llm_response)
        except Exception as ex:
            response = llm_response
        return response

Nu kan du skapa en egen Prompty-baserad utvärderare och köra den på en rad med data:

from friendliness.friend import FriendlinessEvaluator

friendliness_eval = FriendlinessEvaluator(model_config)

friendliness_score = friendliness_eval(response="I will not apologize for my behavior!")

Fråga-baserade utvärderare utdata: Användarvänlighet utvärderare

{
    'score': 1, 
    'reason': 'The response is hostile and unapologetic, lacking warmth or approachability.'
}