Udostępnij za pośrednictwem


Jak używać modeli czatów rodzinnych Phi-3 w usłudze Azure Machine Learning

W tym artykule dowiesz się więcej o modelach czatów rodzinnych Phi-3 i sposobie ich używania. Rodzina modeli małego języka Phi-3 (SLMs) to kolekcja modeli tekstowych dostrajania instrukcji.

Ważne

Ta funkcja jest obecnie w publicznej wersji zapoznawczej. Ta wersja zapoznawcza jest udostępniana bez umowy dotyczącej poziomu usług i nie zalecamy korzystania z niej w przypadku obciążeń produkcyjnych. Niektóre funkcje mogą być nieobsługiwane lub ograniczone.

Aby uzyskać więcej informacji, zobacz Uzupełniające warunki korzystania z wersji zapoznawczych platformy Microsoft Azure.

Modele czatów rodzinnych Phi-3

Modele czatów rodzinnych Phi-3 obejmują następujące modele:

Modele Phi-3.5 to lekkie, najnowocześniejsze, otwarte modele. Te modele zostały przeszkolone przy użyciu zestawów danych Phi-3, które zawierają zarówno dane syntetyczne, jak i przefiltrowane, publicznie dostępne dane witryn internetowych, koncentrując się na wysokiej jakości i właściwościach gęstych.

Phi-3.5 Mini używa parametrów 3,8B i jest gęstym modelem transformatora tylko do dekodera przy użyciu tego samego tokenizatora co Phi-3 Mini.

Phi-3.5 MoE (mieszanka ekspertów) używa parametrów 16x3.8B z 6.6B aktywnych parametrów podczas korzystania z 2 ekspertów. Model jest modelem transformatora tylko dla ekspertów, używając tokenizatora o rozmiarze słownictwa 32 064.

Modele przeszły rygorystyczny proces ulepszania, obejmujący zarówno nadzorowane dostrajanie, optymalizację zasad proximalnych, jak i bezpośrednią optymalizację preferencji w celu zapewnienia dokładnego przestrzegania instrukcji i niezawodnych środków bezpieczeństwa. Podczas oceny pod kątem testów porównawczych, które testują zdrowy rozsądek, interpretację języka, matematykę, kod, długi kontekst i logiczne rozumowanie, modele Phi-3.5 zaprezentowały niezawodne i najnowocześniejsze wyniki wśród modeli z mniej niż 13 miliardów parametrów.

Modele Phi-3.5 są dostępne w następujących wariantach, a warianty mają długość kontekstu (w tokenach) 128K.

Są dostępne następujące modele:

  • Phi-3.5-Mini-Poinstruowanie
  • Phi-3.5-Moe-Poinstruowanie

Wymagania wstępne

Aby korzystać z modeli czatów rodzinnych Phi-3 w usłudze Azure Machine Learning, potrzebne są następujące wymagania wstępne:

Wdrożenie modelu

Wdrażanie do bezserwerowych interfejsów API

Modele czatów rodzinnych phi-3 można wdrożyć w punktach końcowych bezserwerowego interfejsu API z rozliczeniami płatności zgodnie z rzeczywistym użyciem. Tego rodzaju wdrożenie umożliwia korzystanie z modeli jako interfejsu API bez hostowania ich w ramach subskrypcji, przy jednoczesnym zachowaniu bezpieczeństwa i zgodności przedsiębiorstwa, których potrzebują organizacje.

Wdrożenie do punktu końcowego bezserwerowego interfejsu API nie wymaga limitu przydziału z subskrypcji. Jeśli model nie został jeszcze wdrożony, użyj usługi Azure Machine Learning Studio, zestawu Azure Machine Learning SDK dla języka Python, interfejsu wiersza polecenia platformy Azure lub szablonów usługi ARM, aby wdrożyć model jako bezserwerowy interfejs API.

Wdrażanie w zarządzanym samodzielnie zarządzanym środowisku obliczeniowym

Modele czatów rodzinnych Phi-3 można wdrożyć w naszym rozwiązaniu do wnioskowania zarządzanego przez siebie, które umożliwia dostosowywanie i kontrolowanie wszystkich szczegółów dotyczących sposobu obsługi modelu.

W przypadku wdrożenia w zarządzanym samodzielnie zarządzanym środowisku obliczeniowym musisz mieć wystarczający limit przydziału w ramach subskrypcji. Jeśli nie masz wystarczającego limitu przydziału, możesz użyć naszego tymczasowego dostępu do limitu przydziału, wybierając opcję Chcę użyć udostępnionego limitu przydziału i potwierdzam, że ten punkt końcowy zostanie usunięty w ciągu 168 godzin.

Zainstalowany pakiet wnioskowania

Przewidywania z tego modelu można używać przy użyciu azure-ai-inference pakietu w języku Python. Aby zainstalować ten pakiet, potrzebne są następujące wymagania wstępne:

  • Zainstalowano środowisko Python w wersji 3.8 lub nowszej, w tym narzędzie.
  • Adres URL punktu końcowego. Aby utworzyć bibliotekę klienta, należy przekazać adres URL punktu końcowego. Adres URL punktu końcowego ma postać https://your-host-name.your-azure-region.inference.ai.azure.com, gdzie your-host-name jest unikatową nazwą hosta wdrożenia modelu i your-azure-region regionem świadczenia usługi Azure, w którym wdrożono model (na przykład eastus2).
  • W zależności od preferencji wdrażania modelu i uwierzytelniania potrzebny jest klucz do uwierzytelniania względem usługi lub poświadczeń identyfikatora Entra firmy Microsoft. Klucz jest ciągiem 32-znakowym.

Po spełnieniu tych wymagań wstępnych zainstaluj pakiet wnioskowania usługi Azure AI za pomocą następującego polecenia:

pip install azure-ai-inference

Dowiedz się więcej na temat pakietu wnioskowania i dokumentacji dotyczącej wnioskowania na platformie Azure.

Praca z ukończeniami czatu

W tej sekcji użyjesz interfejsu API wnioskowania modelu AI platformy Azure z modelem uzupełniania czatów na potrzeby czatu.

Napiwek

Interfejs API wnioskowania modelu sztucznej inteligencji platformy Azure umożliwia komunikację z większością modeli wdrożonych w usłudze Azure AI Studio przy użyciu tego samego kodu i struktury, w tym modeli czatów rodzinnych Phi-3.

Tworzenie klienta do korzystania z modelu

Najpierw utwórz klienta, aby korzystać z modelu. Poniższy kod używa adresu URL punktu końcowego i klucza przechowywanego w zmiennych środowiskowych.

import os
from azure.ai.inference import ChatCompletionsClient
from azure.core.credentials import AzureKeyCredential

client = ChatCompletionsClient(
    endpoint=os.environ["AZURE_INFERENCE_ENDPOINT"],
    credential=AzureKeyCredential(os.environ["AZURE_INFERENCE_CREDENTIAL"]),
)

Podczas wdrażania modelu w własnym punkcie końcowym online z obsługą identyfikatora Entra firmy Microsoft możesz użyć następującego fragmentu kodu, aby utworzyć klienta.

import os
from azure.ai.inference import ChatCompletionsClient
from azure.identity import DefaultAzureCredential

client = ChatCompletionsClient(
    endpoint=os.environ["AZURE_INFERENCE_ENDPOINT"],
    credential=DefaultAzureCredential(),
)

Uwaga

Obecnie punkty końcowe bezserwerowego interfejsu API nie obsługują używania identyfikatora Entra firmy Microsoft do uwierzytelniania.

Uzyskiwanie możliwości modelu

Trasa /info zwraca informacje o modelu wdrożonym w punkcie końcowym. Zwróć informacje o modelu, wywołując następującą metodę:

model_info = client.get_model_info()

Odpowiedź jest następująca:

print("Model name:", model_info.model_name)
print("Model type:", model_info.model_type)
print("Model provider name:", model_info.model_provider_name)
Model name: Phi-3.5-Mini-Instruct
Model type: chat-completions
Model provider name: Microsoft

Tworzenie żądania ukończenia czatu

W poniższym przykładzie pokazano, jak utworzyć podstawowe żądanie ukończenia czatu do modelu.

from azure.ai.inference.models import SystemMessage, UserMessage

response = client.complete(
    messages=[
        SystemMessage(content="You are a helpful assistant."),
        UserMessage(content="How many languages are in the world?"),
    ],
)

Uwaga

Phi-3.5-Mini-Poinstruuj, Phi-3.5-MoE-Instruct, Phi-3-mini-4k-Instruct, Phi-3-mini-128k-Poinstruuj, Phi-3-small-8k-Poinstruuj, Phi-3-small-128k-Poinstruuj i Phi-3-medium-128k-Poinstruuj nie obsługują komunikatów systemowych (role="system"). W przypadku korzystania z interfejsu API wnioskowania modelu AI platformy Azure komunikaty systemowe są tłumaczone na komunikaty użytkowników, co jest najbliższą dostępną funkcją. To tłumaczenie jest oferowane dla wygody, ale ważne jest, aby sprawdzić, czy model jest przestrzegany instrukcji w komunikacie systemowym z odpowiednim poziomem pewności.

Odpowiedź jest następująca, gdzie można zobaczyć statystyki użycia modelu:

print("Response:", response.choices[0].message.content)
print("Model:", response.model)
print("Usage:")
print("\tPrompt tokens:", response.usage.prompt_tokens)
print("\tTotal tokens:", response.usage.total_tokens)
print("\tCompletion tokens:", response.usage.completion_tokens)
Response: As of now, it's estimated that there are about 7,000 languages spoken around the world. However, this number can vary as some languages become extinct and new ones develop. It's also important to note that the number of speakers can greatly vary between languages, with some having millions of speakers and others only a few hundred.
Model: Phi-3.5-Mini-Instruct
Usage: 
  Prompt tokens: 19
  Total tokens: 91
  Completion tokens: 72

Sprawdź sekcję usage w odpowiedzi, aby zobaczyć liczbę tokenów używanych dla monitu, łączną liczbę wygenerowanych tokenów oraz liczbę tokenów używanych do ukończenia.

Przesyłanie strumieniowe zawartości

Domyślnie interfejs API uzupełniania zwraca całą wygenerowaną zawartość w pojedynczej odpowiedzi. Jeśli generujesz długie zakończenia, oczekiwanie na odpowiedź może potrwać wiele sekund.

Możesz przesyłać strumieniowo zawartość, aby pobrać ją podczas jego generowania. Zawartość strumieniowa umożliwia rozpoczęcie przetwarzania ukończenia w miarę dostępności zawartości. Ten tryb zwraca obiekt, który przesyła strumieniowo odpowiedź jako zdarzenia wysyłane tylko do serwera. Wyodrębnij fragmenty z pola różnicowego, a nie z pola komunikatu.

result = client.complete(
    messages=[
        SystemMessage(content="You are a helpful assistant."),
        UserMessage(content="How many languages are in the world?"),
    ],
    temperature=0,
    top_p=1,
    max_tokens=2048,
    stream=True,
)

Aby przesłać strumieniowo uzupełnienia, ustaw stream=True podczas wywoływania modelu.

Aby zwizualizować dane wyjściowe, zdefiniuj funkcję pomocnika, aby wydrukować strumień.

def print_stream(result):
    """
    Prints the chat completion with streaming.
    """
    import time
    for update in result:
        if update.choices:
            print(update.choices[0].delta.content, end="")

Możesz zwizualizować sposób generowania zawartości przez przesyłanie strumieniowe:

print_stream(result)

Poznaj więcej parametrów obsługiwanych przez klienta wnioskowania

Zapoznaj się z innymi parametrami, które można określić w kliencie wnioskowania. Aby uzyskać pełną listę wszystkich obsługiwanych parametrów i odpowiedniej dokumentacji, zobacz Dokumentacja interfejsu API wnioskowania modelu AI platformy Azure.

from azure.ai.inference.models import ChatCompletionsResponseFormat

response = client.complete(
    messages=[
        SystemMessage(content="You are a helpful assistant."),
        UserMessage(content="How many languages are in the world?"),
    ],
    presence_penalty=0.1,
    frequency_penalty=0.8,
    max_tokens=2048,
    stop=["<|endoftext|>"],
    temperature=0,
    top_p=1,
    response_format={ "type": ChatCompletionsResponseFormatText() },
)

Ostrzeżenie

Modele rodziny Phi-3 nie obsługują formatowania danych wyjściowych JSON (response_format = { "type": "json_object" }). Zawsze możesz monitować model o wygenerowanie danych wyjściowych JSON. Jednak takie dane wyjściowe nie mają gwarancji, że są prawidłowe dane JSON.

Jeśli chcesz przekazać parametr, który nie znajduje się na liście obsługiwanych parametrów, możesz przekazać go do modelu bazowego przy użyciu dodatkowych parametrów. Zobacz Przekazywanie dodatkowych parametrów do modelu.

Przekazywanie dodatkowych parametrów do modelu

Interfejs API wnioskowania modelu AI platformy Azure umożliwia przekazywanie dodatkowych parametrów do modelu. Poniższy przykład kodu pokazuje, jak przekazać dodatkowy parametr logprobs do modelu.

Przed przekazaniem dodatkowych parametrów do interfejsu API wnioskowania modelu AI platformy Azure upewnij się, że model obsługuje te dodatkowe parametry. Po wysłaniu żądania do modelu bazowego nagłówek extra-parameters jest przekazywany do modelu z wartością pass-through. Ta wartość informuje punkt końcowy o przekazaniu dodatkowych parametrów do modelu. Użycie dodatkowych parametrów z modelem nie gwarantuje, że model może je faktycznie obsłużyć. Przeczytaj dokumentację modelu, aby dowiedzieć się, które dodatkowe parametry są obsługiwane.

response = client.complete(
    messages=[
        SystemMessage(content="You are a helpful assistant."),
        UserMessage(content="How many languages are in the world?"),
    ],
    model_extras={
        "logprobs": True
    }
)

Następujące dodatkowe parametry można przekazać do modeli czatów rodzinnych Phi-3:

Nazwa/nazwisko opis Type
logit_bias Akceptuje obiekt JSON mapujący tokeny (określone przez ich identyfikator tokenu w tokenizatorze) na skojarzzoną wartość stronniczą z zakresu od -100 do 100. Matematycznie stronniczy jest dodawany do logitów wygenerowanych przez model przed próbkowaniem. Dokładny efekt będzie się różnić w zależności od modelu, ale wartości z zakresu od -1 do 1 powinny zmniejszyć lub zwiększyć prawdopodobieństwo wyboru; wartości takie jak -100 lub 100 powinny spowodować zakaz lub wyłączny wybór odpowiedniego tokenu. float
logprobs Czy zwracać prawdopodobieństwo dziennika tokenów wyjściowych, czy nie. Jeśli wartość true, zwraca prawdopodobieństwo dziennika każdego tokenu wyjściowego zwróconego w elemecie content message. int
top_logprobs Liczba całkowita z zakresu od 0 do 20 określająca liczbę najbardziej prawdopodobnych tokenów do zwrócenia na każdej pozycji tokenu, z których każde ma skojarzone prawdopodobieństwo dziennika. logprobs musi być ustawiona na true wartość , jeśli ten parametr jest używany. float
n Ile opcji ukończenia czatu ma być generowanych dla każdej wiadomości wejściowej. Pamiętaj, że opłaty będą naliczane na podstawie liczby wygenerowanych tokenów we wszystkich opcjach. int

Stosowanie bezpieczeństwa zawartości

Interfejs API wnioskowania modelu AI platformy Azure obsługuje bezpieczeństwo zawartości usługi Azure AI. W przypadku korzystania z wdrożeń z włączonym bezpieczeństwem zawartości sztucznej inteligencji platformy Azure dane wejściowe i wyjściowe przechodzą przez zespół modeli klasyfikacji mających na celu wykrywanie i zapobieganie wystąpieniu szkodliwej zawartości. System filtrowania zawartości (wersja zapoznawcza) wykrywa i podejmuje działania dotyczące określonych kategorii potencjalnie szkodliwej zawartości zarówno w monitach wejściowych, jak i w przypadku uzupełniania danych wyjściowych.

W poniższym przykładzie pokazano, jak obsługiwać zdarzenia, gdy model wykryje szkodliwą zawartość w monicie wejściowym i włączono bezpieczeństwo zawartości.

from azure.ai.inference.models import AssistantMessage, UserMessage, SystemMessage

try:
    response = client.complete(
        messages=[
            SystemMessage(content="You are an AI assistant that helps people find information."),
            UserMessage(content="Chopping tomatoes and cutting them into cubes or wedges are great ways to practice your knife skills."),
        ]
    )

    print(response.choices[0].message.content)

except HttpResponseError as ex:
    if ex.status_code == 400:
        response = ex.response.json()
        if isinstance(response, dict) and "error" in response:
            print(f"Your request triggered an {response['error']['code']} error:\n\t {response['error']['message']}")
        else:
            raise
    raise

Napiwek

Aby dowiedzieć się więcej na temat konfigurowania i kontrolowania ustawień bezpieczeństwa zawartości usługi Azure AI, zapoznaj się z dokumentacją dotyczącą bezpieczeństwa zawartości usługi Azure AI.

Uwaga

Bezpieczeństwo zawartości sztucznej inteligencji platformy Azure jest dostępne tylko dla modeli wdrożonych jako punkty końcowe bezserwerowego interfejsu API.

Modele czatów rodzinnych Phi-3

Modele czatów rodzinnych Phi-3 obejmują następujące modele:

Modele Phi-3.5 to lekkie, najnowocześniejsze, otwarte modele. Te modele zostały przeszkolone przy użyciu zestawów danych Phi-3, które zawierają zarówno dane syntetyczne, jak i przefiltrowane, publicznie dostępne dane witryn internetowych, koncentrując się na wysokiej jakości i właściwościach gęstych.

Phi-3.5 Mini używa parametrów 3,8B i jest gęstym modelem transformatora tylko do dekodera przy użyciu tego samego tokenizatora co Phi-3 Mini.

Phi-3.5 MoE (mieszanka ekspertów) używa parametrów 16x3.8B z 6.6B aktywnych parametrów podczas korzystania z 2 ekspertów. Model jest modelem transformatora tylko dla ekspertów, używając tokenizatora o rozmiarze słownictwa 32 064.

Modele przeszły rygorystyczny proces ulepszania, obejmujący zarówno nadzorowane dostrajanie, optymalizację zasad proximalnych, jak i bezpośrednią optymalizację preferencji w celu zapewnienia dokładnego przestrzegania instrukcji i niezawodnych środków bezpieczeństwa. Podczas oceny pod kątem testów porównawczych, które testują zdrowy rozsądek, interpretację języka, matematykę, kod, długi kontekst i logiczne rozumowanie, modele Phi-3.5 zaprezentowały niezawodne i najnowocześniejsze wyniki wśród modeli z mniej niż 13 miliardów parametrów.

Modele Phi-3.5 są dostępne w następujących wariantach, a warianty mają długość kontekstu (w tokenach) 128K.

Są dostępne następujące modele:

  • Phi-3.5-Mini-Poinstruowanie
  • Phi-3.5-Moe-Poinstruowanie

Wymagania wstępne

Aby korzystać z modeli czatów rodzinnych Phi-3 w usłudze Azure Machine Learning Studio, potrzebne są następujące wymagania wstępne:

Wdrożenie modelu

Wdrażanie do bezserwerowych interfejsów API

Modele czatów rodzinnych phi-3 można wdrożyć w punktach końcowych bezserwerowego interfejsu API z rozliczeniami płatności zgodnie z rzeczywistym użyciem. Tego rodzaju wdrożenie umożliwia korzystanie z modeli jako interfejsu API bez hostowania ich w ramach subskrypcji, przy jednoczesnym zachowaniu bezpieczeństwa i zgodności przedsiębiorstwa, których potrzebują organizacje.

Wdrożenie do punktu końcowego bezserwerowego interfejsu API nie wymaga limitu przydziału z subskrypcji. Jeśli model nie został jeszcze wdrożony, użyj usługi Azure Machine Learning Studio, zestawu Azure Machine Learning SDK dla języka Python, interfejsu wiersza polecenia platformy Azure lub szablonów usługi ARM, aby wdrożyć model jako bezserwerowy interfejs API.

Wdrażanie w zarządzanym samodzielnie zarządzanym środowisku obliczeniowym

Modele czatów rodzinnych Phi-3 można wdrożyć w naszym rozwiązaniu do wnioskowania zarządzanego przez siebie, które umożliwia dostosowywanie i kontrolowanie wszystkich szczegółów dotyczących sposobu obsługi modelu.

W przypadku wdrożenia w zarządzanym samodzielnie zarządzanym środowisku obliczeniowym musisz mieć wystarczający limit przydziału w ramach subskrypcji. Jeśli nie masz wystarczającego limitu przydziału, możesz użyć naszego tymczasowego dostępu do limitu przydziału, wybierając opcję Chcę użyć udostępnionego limitu przydziału i potwierdzam, że ten punkt końcowy zostanie usunięty w ciągu 168 godzin.

Zainstalowany pakiet wnioskowania

Przewidywania z tego modelu można używać przy użyciu @azure-rest/ai-inference pakietu z pliku npm. Aby zainstalować ten pakiet, potrzebne są następujące wymagania wstępne:

  • Wersje LTS programu z programem Node.js npm.
  • Adres URL punktu końcowego. Aby utworzyć bibliotekę klienta, należy przekazać adres URL punktu końcowego. Adres URL punktu końcowego ma postać https://your-host-name.your-azure-region.inference.ai.azure.com, gdzie your-host-name jest unikatową nazwą hosta wdrożenia modelu i your-azure-region regionem świadczenia usługi Azure, w którym wdrożono model (na przykład eastus2).
  • W zależności od preferencji wdrażania modelu i uwierzytelniania potrzebny jest klucz do uwierzytelniania względem usługi lub poświadczeń identyfikatora Entra firmy Microsoft. Klucz jest ciągiem 32-znakowym.

Po spełnieniu tych wymagań wstępnych zainstaluj bibliotekę wnioskowania platformy Azure dla języka JavaScript za pomocą następującego polecenia:

npm install @azure-rest/ai-inference

Praca z ukończeniami czatu

W tej sekcji użyjesz interfejsu API wnioskowania modelu AI platformy Azure z modelem uzupełniania czatów na potrzeby czatu.

Napiwek

Interfejs API wnioskowania modelu sztucznej inteligencji platformy Azure umożliwia komunikację z większością modeli wdrożonych w usłudze Azure Machine Learning Studio przy użyciu tego samego kodu i struktury, w tym modeli czatów rodzinnych Phi-3.

Tworzenie klienta do korzystania z modelu

Najpierw utwórz klienta, aby korzystać z modelu. Poniższy kod używa adresu URL punktu końcowego i klucza przechowywanego w zmiennych środowiskowych.

import ModelClient from "@azure-rest/ai-inference";
import { isUnexpected } from "@azure-rest/ai-inference";
import { AzureKeyCredential } from "@azure/core-auth";

const client = new ModelClient(
    process.env.AZURE_INFERENCE_ENDPOINT, 
    new AzureKeyCredential(process.env.AZURE_INFERENCE_CREDENTIAL)
);

Podczas wdrażania modelu w własnym punkcie końcowym online z obsługą identyfikatora Entra firmy Microsoft możesz użyć następującego fragmentu kodu, aby utworzyć klienta.

import ModelClient from "@azure-rest/ai-inference";
import { isUnexpected } from "@azure-rest/ai-inference";
import { DefaultAzureCredential }  from "@azure/identity";

const client = new ModelClient(
    process.env.AZURE_INFERENCE_ENDPOINT, 
    new DefaultAzureCredential()
);

Uwaga

Obecnie punkty końcowe bezserwerowego interfejsu API nie obsługują używania identyfikatora Entra firmy Microsoft do uwierzytelniania.

Uzyskiwanie możliwości modelu

Trasa /info zwraca informacje o modelu wdrożonym w punkcie końcowym. Zwróć informacje o modelu, wywołując następującą metodę:

var model_info = await client.path("/info").get()

Odpowiedź jest następująca:

console.log("Model name: ", model_info.body.model_name)
console.log("Model type: ", model_info.body.model_type)
console.log("Model provider name: ", model_info.body.model_provider_name)
Model name: Phi-3.5-Mini-Instruct
Model type: chat-completions
Model provider name: Microsoft

Tworzenie żądania ukończenia czatu

W poniższym przykładzie pokazano, jak utworzyć podstawowe żądanie ukończenia czatu do modelu.

var messages = [
    { role: "system", content: "You are a helpful assistant" },
    { role: "user", content: "How many languages are in the world?" },
];

var response = await client.path("/chat/completions").post({
    body: {
        messages: messages,
    }
});

Uwaga

Phi-3.5-Mini-Poinstruuj, Phi-3.5-MoE-Instruct, Phi-3-mini-4k-Instruct, Phi-3-mini-128k-Poinstruuj, Phi-3-small-8k-Poinstruuj, Phi-3-small-128k-Poinstruuj i Phi-3-medium-128k-Poinstruuj nie obsługują komunikatów systemowych (role="system"). W przypadku korzystania z interfejsu API wnioskowania modelu AI platformy Azure komunikaty systemowe są tłumaczone na komunikaty użytkowników, co jest najbliższą dostępną funkcją. To tłumaczenie jest oferowane dla wygody, ale ważne jest, aby sprawdzić, czy model jest przestrzegany instrukcji w komunikacie systemowym z odpowiednim poziomem pewności.

Odpowiedź jest następująca, gdzie można zobaczyć statystyki użycia modelu:

if (isUnexpected(response)) {
    throw response.body.error;
}

console.log("Response: ", response.body.choices[0].message.content);
console.log("Model: ", response.body.model);
console.log("Usage:");
console.log("\tPrompt tokens:", response.body.usage.prompt_tokens);
console.log("\tTotal tokens:", response.body.usage.total_tokens);
console.log("\tCompletion tokens:", response.body.usage.completion_tokens);
Response: As of now, it's estimated that there are about 7,000 languages spoken around the world. However, this number can vary as some languages become extinct and new ones develop. It's also important to note that the number of speakers can greatly vary between languages, with some having millions of speakers and others only a few hundred.
Model: Phi-3.5-Mini-Instruct
Usage: 
  Prompt tokens: 19
  Total tokens: 91
  Completion tokens: 72

Sprawdź sekcję usage w odpowiedzi, aby zobaczyć liczbę tokenów używanych dla monitu, łączną liczbę wygenerowanych tokenów oraz liczbę tokenów używanych do ukończenia.

Przesyłanie strumieniowe zawartości

Domyślnie interfejs API uzupełniania zwraca całą wygenerowaną zawartość w pojedynczej odpowiedzi. Jeśli generujesz długie zakończenia, oczekiwanie na odpowiedź może potrwać wiele sekund.

Możesz przesyłać strumieniowo zawartość, aby pobrać ją podczas jego generowania. Zawartość strumieniowa umożliwia rozpoczęcie przetwarzania ukończenia w miarę dostępności zawartości. Ten tryb zwraca obiekt, który przesyła strumieniowo odpowiedź jako zdarzenia wysyłane tylko do serwera. Wyodrębnij fragmenty z pola różnicowego, a nie z pola komunikatu.

var messages = [
    { role: "system", content: "You are a helpful assistant" },
    { role: "user", content: "How many languages are in the world?" },
];

var response = await client.path("/chat/completions").post({
    body: {
        messages: messages,
    }
}).asNodeStream();

Aby przesłać strumieniowo uzupełnienia, użyj .asNodeStream() polecenia podczas wywoływania modelu.

Możesz zwizualizować sposób generowania zawartości przez przesyłanie strumieniowe:

var stream = response.body;
if (!stream) {
    stream.destroy();
    throw new Error(`Failed to get chat completions with status: ${response.status}`);
}

if (response.status !== "200") {
    throw new Error(`Failed to get chat completions: ${response.body.error}`);
}

var sses = createSseStream(stream);

for await (const event of sses) {
    if (event.data === "[DONE]") {
        return;
    }
    for (const choice of (JSON.parse(event.data)).choices) {
        console.log(choice.delta?.content ?? "");
    }
}

Poznaj więcej parametrów obsługiwanych przez klienta wnioskowania

Zapoznaj się z innymi parametrami, które można określić w kliencie wnioskowania. Aby uzyskać pełną listę wszystkich obsługiwanych parametrów i odpowiedniej dokumentacji, zobacz Dokumentacja interfejsu API wnioskowania modelu AI platformy Azure.

var messages = [
    { role: "system", content: "You are a helpful assistant" },
    { role: "user", content: "How many languages are in the world?" },
];

var response = await client.path("/chat/completions").post({
    body: {
        messages: messages,
        presence_penalty: "0.1",
        frequency_penalty: "0.8",
        max_tokens: 2048,
        stop: ["<|endoftext|>"],
        temperature: 0,
        top_p: 1,
        response_format: { type: "text" },
    }
});

Ostrzeżenie

Modele rodziny Phi-3 nie obsługują formatowania danych wyjściowych JSON (response_format = { "type": "json_object" }). Zawsze możesz monitować model o wygenerowanie danych wyjściowych JSON. Jednak takie dane wyjściowe nie mają gwarancji, że są prawidłowe dane JSON.

Jeśli chcesz przekazać parametr, który nie znajduje się na liście obsługiwanych parametrów, możesz przekazać go do modelu bazowego przy użyciu dodatkowych parametrów. Zobacz Przekazywanie dodatkowych parametrów do modelu.

Przekazywanie dodatkowych parametrów do modelu

Interfejs API wnioskowania modelu AI platformy Azure umożliwia przekazywanie dodatkowych parametrów do modelu. Poniższy przykład kodu pokazuje, jak przekazać dodatkowy parametr logprobs do modelu.

Przed przekazaniem dodatkowych parametrów do interfejsu API wnioskowania modelu AI platformy Azure upewnij się, że model obsługuje te dodatkowe parametry. Po wysłaniu żądania do modelu bazowego nagłówek extra-parameters jest przekazywany do modelu z wartością pass-through. Ta wartość informuje punkt końcowy o przekazaniu dodatkowych parametrów do modelu. Użycie dodatkowych parametrów z modelem nie gwarantuje, że model może je faktycznie obsłużyć. Przeczytaj dokumentację modelu, aby dowiedzieć się, które dodatkowe parametry są obsługiwane.

var messages = [
    { role: "system", content: "You are a helpful assistant" },
    { role: "user", content: "How many languages are in the world?" },
];

var response = await client.path("/chat/completions").post({
    headers: {
        "extra-params": "pass-through"
    },
    body: {
        messages: messages,
        logprobs: true
    }
});

Następujące dodatkowe parametry można przekazać do modeli czatów rodzinnych Phi-3:

Nazwa/nazwisko opis Type
logit_bias Akceptuje obiekt JSON mapujący tokeny (określone przez ich identyfikator tokenu w tokenizatorze) na skojarzzoną wartość stronniczą z zakresu od -100 do 100. Matematycznie stronniczy jest dodawany do logitów wygenerowanych przez model przed próbkowaniem. Dokładny efekt będzie się różnić w zależności od modelu, ale wartości z zakresu od -1 do 1 powinny zmniejszyć lub zwiększyć prawdopodobieństwo wyboru; wartości takie jak -100 lub 100 powinny spowodować zakaz lub wyłączny wybór odpowiedniego tokenu. float
logprobs Czy zwracać prawdopodobieństwo dziennika tokenów wyjściowych, czy nie. Jeśli wartość true, zwraca prawdopodobieństwo dziennika każdego tokenu wyjściowego zwróconego w elemecie content message. int
top_logprobs Liczba całkowita z zakresu od 0 do 20 określająca liczbę najbardziej prawdopodobnych tokenów do zwrócenia na każdej pozycji tokenu, z których każde ma skojarzone prawdopodobieństwo dziennika. logprobs musi być ustawiona na true wartość , jeśli ten parametr jest używany. float
n Ile opcji ukończenia czatu ma być generowanych dla każdej wiadomości wejściowej. Pamiętaj, że opłaty będą naliczane na podstawie liczby wygenerowanych tokenów we wszystkich opcjach. int

Stosowanie bezpieczeństwa zawartości

Interfejs API wnioskowania modelu AI platformy Azure obsługuje bezpieczeństwo zawartości usługi Azure AI. W przypadku korzystania z wdrożeń z włączonym bezpieczeństwem zawartości sztucznej inteligencji platformy Azure dane wejściowe i wyjściowe przechodzą przez zespół modeli klasyfikacji mających na celu wykrywanie i zapobieganie wystąpieniu szkodliwej zawartości. System filtrowania zawartości (wersja zapoznawcza) wykrywa i podejmuje działania dotyczące określonych kategorii potencjalnie szkodliwej zawartości zarówno w monitach wejściowych, jak i w przypadku uzupełniania danych wyjściowych.

W poniższym przykładzie pokazano, jak obsługiwać zdarzenia, gdy model wykryje szkodliwą zawartość w monicie wejściowym i włączono bezpieczeństwo zawartości.

try {
    var messages = [
        { role: "system", content: "You are an AI assistant that helps people find information." },
        { role: "user", content: "Chopping tomatoes and cutting them into cubes or wedges are great ways to practice your knife skills." },
    ];

    var response = await client.path("/chat/completions").post({
        body: {
            messages: messages,
        }
    });

    console.log(response.body.choices[0].message.content);
}
catch (error) {
    if (error.status_code == 400) {
        var response = JSON.parse(error.response._content);
        if (response.error) {
            console.log(`Your request triggered an ${response.error.code} error:\n\t ${response.error.message}`);
        }
        else
        {
            throw error;
        }
    }
}

Napiwek

Aby dowiedzieć się więcej na temat konfigurowania i kontrolowania ustawień bezpieczeństwa zawartości usługi Azure AI, zapoznaj się z dokumentacją dotyczącą bezpieczeństwa zawartości usługi Azure AI.

Uwaga

Bezpieczeństwo zawartości sztucznej inteligencji platformy Azure jest dostępne tylko dla modeli wdrożonych jako punkty końcowe bezserwerowego interfejsu API.

Modele czatów rodzinnych Phi-3

Modele czatów rodzinnych Phi-3 obejmują następujące modele:

Modele Phi-3.5 to lekkie, najnowocześniejsze, otwarte modele. Te modele zostały przeszkolone przy użyciu zestawów danych Phi-3, które zawierają zarówno dane syntetyczne, jak i przefiltrowane, publicznie dostępne dane witryn internetowych, koncentrując się na wysokiej jakości i właściwościach gęstych.

Phi-3.5 Mini używa parametrów 3,8B i jest gęstym modelem transformatora tylko do dekodera przy użyciu tego samego tokenizatora co Phi-3 Mini.

Phi-3.5 MoE (mieszanka ekspertów) używa parametrów 16x3.8B z 6.6B aktywnych parametrów podczas korzystania z 2 ekspertów. Model jest modelem transformatora tylko dla ekspertów, używając tokenizatora o rozmiarze słownictwa 32 064.

Modele przeszły rygorystyczny proces ulepszania, obejmujący zarówno nadzorowane dostrajanie, optymalizację zasad proximalnych, jak i bezpośrednią optymalizację preferencji w celu zapewnienia dokładnego przestrzegania instrukcji i niezawodnych środków bezpieczeństwa. Podczas oceny pod kątem testów porównawczych, które testują zdrowy rozsądek, interpretację języka, matematykę, kod, długi kontekst i logiczne rozumowanie, modele Phi-3.5 zaprezentowały niezawodne i najnowocześniejsze wyniki wśród modeli z mniej niż 13 miliardów parametrów.

Modele Phi-3.5 są dostępne w następujących wariantach, a warianty mają długość kontekstu (w tokenach) 128K.

Są dostępne następujące modele:

  • Phi-3.5-Mini-Poinstruowanie
  • Phi-3.5-Moe-Poinstruowanie

Wymagania wstępne

Aby korzystać z modeli czatów rodzinnych Phi-3 w usłudze Azure Machine Learning Studio, potrzebne są następujące wymagania wstępne:

Wdrożenie modelu

Wdrażanie do bezserwerowych interfejsów API

Modele czatów rodzinnych phi-3 można wdrożyć w punktach końcowych bezserwerowego interfejsu API z rozliczeniami płatności zgodnie z rzeczywistym użyciem. Tego rodzaju wdrożenie umożliwia korzystanie z modeli jako interfejsu API bez hostowania ich w ramach subskrypcji, przy jednoczesnym zachowaniu bezpieczeństwa i zgodności przedsiębiorstwa, których potrzebują organizacje.

Wdrożenie do punktu końcowego bezserwerowego interfejsu API nie wymaga limitu przydziału z subskrypcji. Jeśli model nie został jeszcze wdrożony, użyj usługi Azure Machine Learning Studio, zestawu Azure Machine Learning SDK dla języka Python, interfejsu wiersza polecenia platformy Azure lub szablonów usługi ARM, aby wdrożyć model jako bezserwerowy interfejs API.

Wdrażanie w zarządzanym samodzielnie zarządzanym środowisku obliczeniowym

Modele czatów rodzinnych Phi-3 można wdrożyć w naszym rozwiązaniu do wnioskowania zarządzanego przez siebie, które umożliwia dostosowywanie i kontrolowanie wszystkich szczegółów dotyczących sposobu obsługi modelu.

W przypadku wdrożenia w zarządzanym samodzielnie zarządzanym środowisku obliczeniowym musisz mieć wystarczający limit przydziału w ramach subskrypcji. Jeśli nie masz wystarczającego limitu przydziału, możesz użyć naszego tymczasowego dostępu do limitu przydziału, wybierając opcję Chcę użyć udostępnionego limitu przydziału i potwierdzam, że ten punkt końcowy zostanie usunięty w ciągu 168 godzin.

Zainstalowany pakiet wnioskowania

Przewidywania z tego modelu można używać przy użyciu Azure.AI.Inference pakietu z pakietu NuGet. Aby zainstalować ten pakiet, potrzebne są następujące wymagania wstępne:

  • Adres URL punktu końcowego. Aby utworzyć bibliotekę klienta, należy przekazać adres URL punktu końcowego. Adres URL punktu końcowego ma postać https://your-host-name.your-azure-region.inference.ai.azure.com, gdzie your-host-name jest unikatową nazwą hosta wdrożenia modelu i your-azure-region regionem świadczenia usługi Azure, w którym wdrożono model (na przykład eastus2).
  • W zależności od preferencji wdrażania modelu i uwierzytelniania potrzebny jest klucz do uwierzytelniania względem usługi lub poświadczeń identyfikatora Entra firmy Microsoft. Klucz jest ciągiem 32-znakowym.

Po spełnieniu tych wymagań wstępnych zainstaluj bibliotekę wnioskowania usługi Azure AI przy użyciu następującego polecenia:

dotnet add package Azure.AI.Inference --prerelease

Możesz również uwierzytelnić się za pomocą identyfikatora Entra firmy Microsoft (dawniej Azure Active Directory). Aby użyć dostawców poświadczeń dostarczanych z zestawem Azure SDK, zainstaluj Azure.Identity pakiet:

dotnet add package Azure.Identity

Zaimportuj następujące przestrzenie nazw:

using Azure;
using Azure.Identity;
using Azure.AI.Inference;

W tym przykładzie są również używane następujące przestrzenie nazw, ale mogą nie zawsze być potrzebne:

using System.Text.Json;
using System.Text.Json.Serialization;
using System.Reflection;

Praca z ukończeniami czatu

W tej sekcji użyjesz interfejsu API wnioskowania modelu AI platformy Azure z modelem uzupełniania czatów na potrzeby czatu.

Napiwek

Interfejs API wnioskowania modelu sztucznej inteligencji platformy Azure umożliwia komunikację z większością modeli wdrożonych w usłudze Azure Machine Learning Studio przy użyciu tego samego kodu i struktury, w tym modeli czatów rodzinnych Phi-3.

Tworzenie klienta do korzystania z modelu

Najpierw utwórz klienta, aby korzystać z modelu. Poniższy kod używa adresu URL punktu końcowego i klucza przechowywanego w zmiennych środowiskowych.

ChatCompletionsClient client = new ChatCompletionsClient(
    new Uri(Environment.GetEnvironmentVariable("AZURE_INFERENCE_ENDPOINT")),
    new AzureKeyCredential(Environment.GetEnvironmentVariable("AZURE_INFERENCE_CREDENTIAL"))
);

Podczas wdrażania modelu w własnym punkcie końcowym online z obsługą identyfikatora Entra firmy Microsoft możesz użyć następującego fragmentu kodu, aby utworzyć klienta.

client = new ChatCompletionsClient(
    new Uri(Environment.GetEnvironmentVariable("AZURE_INFERENCE_ENDPOINT")),
    new DefaultAzureCredential(includeInteractiveCredentials: true)
);

Uwaga

Obecnie punkty końcowe bezserwerowego interfejsu API nie obsługują używania identyfikatora Entra firmy Microsoft do uwierzytelniania.

Uzyskiwanie możliwości modelu

Trasa /info zwraca informacje o modelu wdrożonym w punkcie końcowym. Zwróć informacje o modelu, wywołując następującą metodę:

Response<ModelInfo> modelInfo = client.GetModelInfo();

Odpowiedź jest następująca:

Console.WriteLine($"Model name: {modelInfo.Value.ModelName}");
Console.WriteLine($"Model type: {modelInfo.Value.ModelType}");
Console.WriteLine($"Model provider name: {modelInfo.Value.ModelProviderName}");
Model name: Phi-3.5-Mini-Instruct
Model type: chat-completions
Model provider name: Microsoft

Tworzenie żądania ukończenia czatu

W poniższym przykładzie pokazano, jak utworzyć podstawowe żądanie ukończenia czatu do modelu.

ChatCompletionsOptions requestOptions = new ChatCompletionsOptions()
{
    Messages = {
        new ChatRequestSystemMessage("You are a helpful assistant."),
        new ChatRequestUserMessage("How many languages are in the world?")
    },
};

Response<ChatCompletions> response = client.Complete(requestOptions);

Uwaga

Phi-3.5-Mini-Poinstruuj, Phi-3.5-MoE-Instruct, Phi-3-mini-4k-Instruct, Phi-3-mini-128k-Poinstruuj, Phi-3-small-8k-Poinstruuj, Phi-3-small-128k-Poinstruuj i Phi-3-medium-128k-Poinstruuj nie obsługują komunikatów systemowych (role="system"). W przypadku korzystania z interfejsu API wnioskowania modelu AI platformy Azure komunikaty systemowe są tłumaczone na komunikaty użytkowników, co jest najbliższą dostępną funkcją. To tłumaczenie jest oferowane dla wygody, ale ważne jest, aby sprawdzić, czy model jest przestrzegany instrukcji w komunikacie systemowym z odpowiednim poziomem pewności.

Odpowiedź jest następująca, gdzie można zobaczyć statystyki użycia modelu:

Console.WriteLine($"Response: {response.Value.Choices[0].Message.Content}");
Console.WriteLine($"Model: {response.Value.Model}");
Console.WriteLine("Usage:");
Console.WriteLine($"\tPrompt tokens: {response.Value.Usage.PromptTokens}");
Console.WriteLine($"\tTotal tokens: {response.Value.Usage.TotalTokens}");
Console.WriteLine($"\tCompletion tokens: {response.Value.Usage.CompletionTokens}");
Response: As of now, it's estimated that there are about 7,000 languages spoken around the world. However, this number can vary as some languages become extinct and new ones develop. It's also important to note that the number of speakers can greatly vary between languages, with some having millions of speakers and others only a few hundred.
Model: Phi-3.5-Mini-Instruct
Usage: 
  Prompt tokens: 19
  Total tokens: 91
  Completion tokens: 72

Sprawdź sekcję usage w odpowiedzi, aby zobaczyć liczbę tokenów używanych dla monitu, łączną liczbę wygenerowanych tokenów oraz liczbę tokenów używanych do ukończenia.

Przesyłanie strumieniowe zawartości

Domyślnie interfejs API uzupełniania zwraca całą wygenerowaną zawartość w pojedynczej odpowiedzi. Jeśli generujesz długie zakończenia, oczekiwanie na odpowiedź może potrwać wiele sekund.

Możesz przesyłać strumieniowo zawartość, aby pobrać ją podczas jego generowania. Zawartość strumieniowa umożliwia rozpoczęcie przetwarzania ukończenia w miarę dostępności zawartości. Ten tryb zwraca obiekt, który przesyła strumieniowo odpowiedź jako zdarzenia wysyłane tylko do serwera. Wyodrębnij fragmenty z pola różnicowego, a nie z pola komunikatu.

static async Task StreamMessageAsync(ChatCompletionsClient client)
{
    ChatCompletionsOptions requestOptions = new ChatCompletionsOptions()
    {
        Messages = {
            new ChatRequestSystemMessage("You are a helpful assistant."),
            new ChatRequestUserMessage("How many languages are in the world? Write an essay about it.")
        },
        MaxTokens=4096
    };

    StreamingResponse<StreamingChatCompletionsUpdate> streamResponse = await client.CompleteStreamingAsync(requestOptions);

    await PrintStream(streamResponse);
}

Aby przesłać strumieniowo uzupełnienia, użyj CompleteStreamingAsync metody podczas wywoływania modelu. Zwróć uwagę, że w tym przykładzie wywołanie jest opakowane w metodę asynchroniczną.

Aby zwizualizować dane wyjściowe, zdefiniuj metodę asynchroniczną, aby wydrukować strumień w konsoli programu .

static async Task PrintStream(StreamingResponse<StreamingChatCompletionsUpdate> response)
{
    await foreach (StreamingChatCompletionsUpdate chatUpdate in response)
    {
        if (chatUpdate.Role.HasValue)
        {
            Console.Write($"{chatUpdate.Role.Value.ToString().ToUpperInvariant()}: ");
        }
        if (!string.IsNullOrEmpty(chatUpdate.ContentUpdate))
        {
            Console.Write(chatUpdate.ContentUpdate);
        }
    }
}

Możesz zwizualizować sposób generowania zawartości przez przesyłanie strumieniowe:

StreamMessageAsync(client).GetAwaiter().GetResult();

Poznaj więcej parametrów obsługiwanych przez klienta wnioskowania

Zapoznaj się z innymi parametrami, które można określić w kliencie wnioskowania. Aby uzyskać pełną listę wszystkich obsługiwanych parametrów i odpowiedniej dokumentacji, zobacz Dokumentacja interfejsu API wnioskowania modelu AI platformy Azure.

requestOptions = new ChatCompletionsOptions()
{
    Messages = {
        new ChatRequestSystemMessage("You are a helpful assistant."),
        new ChatRequestUserMessage("How many languages are in the world?")
    },
    PresencePenalty = 0.1f,
    FrequencyPenalty = 0.8f,
    MaxTokens = 2048,
    StopSequences = { "<|endoftext|>" },
    Temperature = 0,
    NucleusSamplingFactor = 1,
    ResponseFormat = new ChatCompletionsResponseFormatText()
};

response = client.Complete(requestOptions);
Console.WriteLine($"Response: {response.Value.Choices[0].Message.Content}");

Ostrzeżenie

Modele rodziny Phi-3 nie obsługują formatowania danych wyjściowych JSON (response_format = { "type": "json_object" }). Zawsze możesz monitować model o wygenerowanie danych wyjściowych JSON. Jednak takie dane wyjściowe nie mają gwarancji, że są prawidłowe dane JSON.

Jeśli chcesz przekazać parametr, który nie znajduje się na liście obsługiwanych parametrów, możesz przekazać go do modelu bazowego przy użyciu dodatkowych parametrów. Zobacz Przekazywanie dodatkowych parametrów do modelu.

Przekazywanie dodatkowych parametrów do modelu

Interfejs API wnioskowania modelu AI platformy Azure umożliwia przekazywanie dodatkowych parametrów do modelu. Poniższy przykład kodu pokazuje, jak przekazać dodatkowy parametr logprobs do modelu.

Przed przekazaniem dodatkowych parametrów do interfejsu API wnioskowania modelu AI platformy Azure upewnij się, że model obsługuje te dodatkowe parametry. Po wysłaniu żądania do modelu bazowego nagłówek extra-parameters jest przekazywany do modelu z wartością pass-through. Ta wartość informuje punkt końcowy o przekazaniu dodatkowych parametrów do modelu. Użycie dodatkowych parametrów z modelem nie gwarantuje, że model może je faktycznie obsłużyć. Przeczytaj dokumentację modelu, aby dowiedzieć się, które dodatkowe parametry są obsługiwane.

requestOptions = new ChatCompletionsOptions()
{
    Messages = {
        new ChatRequestSystemMessage("You are a helpful assistant."),
        new ChatRequestUserMessage("How many languages are in the world?")
    },
    AdditionalProperties = { { "logprobs", BinaryData.FromString("true") } },
};

response = client.Complete(requestOptions, extraParams: ExtraParameters.PassThrough);
Console.WriteLine($"Response: {response.Value.Choices[0].Message.Content}");

Następujące dodatkowe parametry można przekazać do modeli czatów rodzinnych Phi-3:

Nazwa/nazwisko opis Type
logit_bias Akceptuje obiekt JSON mapujący tokeny (określone przez ich identyfikator tokenu w tokenizatorze) na skojarzzoną wartość stronniczą z zakresu od -100 do 100. Matematycznie stronniczy jest dodawany do logitów wygenerowanych przez model przed próbkowaniem. Dokładny efekt będzie się różnić w zależności od modelu, ale wartości z zakresu od -1 do 1 powinny zmniejszyć lub zwiększyć prawdopodobieństwo wyboru; wartości takie jak -100 lub 100 powinny spowodować zakaz lub wyłączny wybór odpowiedniego tokenu. float
logprobs Czy zwracać prawdopodobieństwo dziennika tokenów wyjściowych, czy nie. Jeśli wartość true, zwraca prawdopodobieństwo dziennika każdego tokenu wyjściowego zwróconego w elemecie content message. int
top_logprobs Liczba całkowita z zakresu od 0 do 20 określająca liczbę najbardziej prawdopodobnych tokenów do zwrócenia na każdej pozycji tokenu, z których każde ma skojarzone prawdopodobieństwo dziennika. logprobs musi być ustawiona na true wartość , jeśli ten parametr jest używany. float
n Ile opcji ukończenia czatu ma być generowanych dla każdej wiadomości wejściowej. Pamiętaj, że opłaty będą naliczane na podstawie liczby wygenerowanych tokenów we wszystkich opcjach. int

Stosowanie bezpieczeństwa zawartości

Interfejs API wnioskowania modelu AI platformy Azure obsługuje bezpieczeństwo zawartości usługi Azure AI. W przypadku korzystania z wdrożeń z włączonym bezpieczeństwem zawartości sztucznej inteligencji platformy Azure dane wejściowe i wyjściowe przechodzą przez zespół modeli klasyfikacji mających na celu wykrywanie i zapobieganie wystąpieniu szkodliwej zawartości. System filtrowania zawartości (wersja zapoznawcza) wykrywa i podejmuje działania dotyczące określonych kategorii potencjalnie szkodliwej zawartości zarówno w monitach wejściowych, jak i w przypadku uzupełniania danych wyjściowych.

W poniższym przykładzie pokazano, jak obsługiwać zdarzenia, gdy model wykryje szkodliwą zawartość w monicie wejściowym i włączono bezpieczeństwo zawartości.

try
{
    requestOptions = new ChatCompletionsOptions()
    {
        Messages = {
            new ChatRequestSystemMessage("You are an AI assistant that helps people find information."),
            new ChatRequestUserMessage(
                "Chopping tomatoes and cutting them into cubes or wedges are great ways to practice your knife skills."
            ),
        },
    };

    response = client.Complete(requestOptions);
    Console.WriteLine(response.Value.Choices[0].Message.Content);
}
catch (RequestFailedException ex)
{
    if (ex.ErrorCode == "content_filter")
    {
        Console.WriteLine($"Your query has trigger Azure Content Safety: {ex.Message}");
    }
    else
    {
        throw;
    }
}

Napiwek

Aby dowiedzieć się więcej na temat konfigurowania i kontrolowania ustawień bezpieczeństwa zawartości usługi Azure AI, zapoznaj się z dokumentacją dotyczącą bezpieczeństwa zawartości usługi Azure AI.

Uwaga

Bezpieczeństwo zawartości sztucznej inteligencji platformy Azure jest dostępne tylko dla modeli wdrożonych jako punkty końcowe bezserwerowego interfejsu API.

Modele czatów rodzinnych Phi-3

Modele czatów rodzinnych Phi-3 obejmują następujące modele:

Modele Phi-3.5 to lekkie, najnowocześniejsze, otwarte modele. Te modele zostały przeszkolone przy użyciu zestawów danych Phi-3, które zawierają zarówno dane syntetyczne, jak i przefiltrowane, publicznie dostępne dane witryn internetowych, koncentrując się na wysokiej jakości i właściwościach gęstych.

Phi-3.5 Mini używa parametrów 3,8B i jest gęstym modelem transformatora tylko do dekodera przy użyciu tego samego tokenizatora co Phi-3 Mini.

Phi-3.5 MoE (mieszanka ekspertów) używa parametrów 16x3.8B z 6.6B aktywnych parametrów podczas korzystania z 2 ekspertów. Model jest modelem transformatora tylko dla ekspertów, używając tokenizatora o rozmiarze słownictwa 32 064.

Modele przeszły rygorystyczny proces ulepszania, obejmujący zarówno nadzorowane dostrajanie, optymalizację zasad proximalnych, jak i bezpośrednią optymalizację preferencji w celu zapewnienia dokładnego przestrzegania instrukcji i niezawodnych środków bezpieczeństwa. Podczas oceny pod kątem testów porównawczych, które testują zdrowy rozsądek, interpretację języka, matematykę, kod, długi kontekst i logiczne rozumowanie, modele Phi-3.5 zaprezentowały niezawodne i najnowocześniejsze wyniki wśród modeli z mniej niż 13 miliardów parametrów.

Modele Phi-3.5 są dostępne w następujących wariantach, a warianty mają długość kontekstu (w tokenach) 128K.

Są dostępne następujące modele:

  • Phi-3.5-Mini-Poinstruowanie
  • Phi-3.5-Moe-Poinstruowanie

Wymagania wstępne

Aby korzystać z modeli czatów rodzinnych Phi-3 w usłudze Azure Machine Learning Studio, potrzebne są następujące wymagania wstępne:

Wdrożenie modelu

Wdrażanie do bezserwerowych interfejsów API

Modele czatów rodzinnych phi-3 można wdrożyć w punktach końcowych bezserwerowego interfejsu API z rozliczeniami płatności zgodnie z rzeczywistym użyciem. Tego rodzaju wdrożenie umożliwia korzystanie z modeli jako interfejsu API bez hostowania ich w ramach subskrypcji, przy jednoczesnym zachowaniu bezpieczeństwa i zgodności przedsiębiorstwa, których potrzebują organizacje.

Wdrożenie do punktu końcowego bezserwerowego interfejsu API nie wymaga limitu przydziału z subskrypcji. Jeśli model nie został jeszcze wdrożony, użyj usługi Azure Machine Learning Studio, zestawu Azure Machine Learning SDK dla języka Python, interfejsu wiersza polecenia platformy Azure lub szablonów usługi ARM, aby wdrożyć model jako bezserwerowy interfejs API.

Wdrażanie w zarządzanym samodzielnie zarządzanym środowisku obliczeniowym

Modele czatów rodzinnych Phi-3 można wdrożyć w naszym rozwiązaniu do wnioskowania zarządzanego przez siebie, które umożliwia dostosowywanie i kontrolowanie wszystkich szczegółów dotyczących sposobu obsługi modelu.

W przypadku wdrożenia w zarządzanym samodzielnie zarządzanym środowisku obliczeniowym musisz mieć wystarczający limit przydziału w ramach subskrypcji. Jeśli nie masz wystarczającego limitu przydziału, możesz użyć naszego tymczasowego dostępu do limitu przydziału, wybierając opcję Chcę użyć udostępnionego limitu przydziału i potwierdzam, że ten punkt końcowy zostanie usunięty w ciągu 168 godzin.

Klient REST

Modele wdrożone za pomocą interfejsu API wnioskowania modelu AI platformy Azure można używać przy użyciu dowolnego klienta REST. Do korzystania z klienta REST potrzebne są następujące wymagania wstępne:

  • Aby utworzyć żądania, należy przekazać adres URL punktu końcowego. Adres URL punktu końcowego ma postać https://your-host-name.your-azure-region.inference.ai.azure.com, gdzie twój-region-azure-region'' to region świadczenia usługi Azure, w którym your-host-name`` is your unique model deployment host name and wdrożono model (na przykład eastus2).
  • W zależności od preferencji wdrażania modelu i uwierzytelniania potrzebny jest klucz do uwierzytelniania względem usługi lub poświadczeń identyfikatora Entra firmy Microsoft. Klucz jest ciągiem 32-znakowym.

Praca z ukończeniami czatu

W tej sekcji użyjesz interfejsu API wnioskowania modelu AI platformy Azure z modelem uzupełniania czatów na potrzeby czatu.

Napiwek

Interfejs API wnioskowania modelu sztucznej inteligencji platformy Azure umożliwia komunikację z większością modeli wdrożonych w usłudze Azure Machine Learning Studio przy użyciu tego samego kodu i struktury, w tym modeli czatów rodzinnych Phi-3.

Tworzenie klienta do korzystania z modelu

Najpierw utwórz klienta, aby korzystać z modelu. Poniższy kod używa adresu URL punktu końcowego i klucza przechowywanego w zmiennych środowiskowych.

Podczas wdrażania modelu w własnym punkcie końcowym online z obsługą identyfikatora Entra firmy Microsoft możesz użyć następującego fragmentu kodu, aby utworzyć klienta.

Uwaga

Obecnie punkty końcowe bezserwerowego interfejsu API nie obsługują używania identyfikatora Entra firmy Microsoft do uwierzytelniania.

Uzyskiwanie możliwości modelu

Trasa /info zwraca informacje o modelu wdrożonym w punkcie końcowym. Zwróć informacje o modelu, wywołując następującą metodę:

GET /info HTTP/1.1
Host: <ENDPOINT_URI>
Authorization: Bearer <TOKEN>
Content-Type: application/json

Odpowiedź jest następująca:

{
    "model_name": "Phi-3.5-Mini-Instruct",
    "model_type": "chat-completions",
    "model_provider_name": "Microsoft"
}

Tworzenie żądania ukończenia czatu

W poniższym przykładzie pokazano, jak utworzyć podstawowe żądanie ukończenia czatu do modelu.

{
    "messages": [
        {
            "role": "system",
            "content": "You are a helpful assistant."
        },
        {
            "role": "user",
            "content": "How many languages are in the world?"
        }
    ]
}

Uwaga

Phi-3.5-Mini-Poinstruuj, Phi-3.5-MoE-Instruct, Phi-3-mini-4k-Instruct, Phi-3-mini-128k-Poinstruuj, Phi-3-small-8k-Poinstruuj, Phi-3-small-128k-Poinstruuj i Phi-3-medium-128k-Poinstruuj nie obsługują komunikatów systemowych (role="system"). W przypadku korzystania z interfejsu API wnioskowania modelu AI platformy Azure komunikaty systemowe są tłumaczone na komunikaty użytkowników, co jest najbliższą dostępną funkcją. To tłumaczenie jest oferowane dla wygody, ale ważne jest, aby sprawdzić, czy model jest przestrzegany instrukcji w komunikacie systemowym z odpowiednim poziomem pewności.

Odpowiedź jest następująca, gdzie można zobaczyć statystyki użycia modelu:

{
    "id": "0a1234b5de6789f01gh2i345j6789klm",
    "object": "chat.completion",
    "created": 1718726686,
    "model": "Phi-3.5-Mini-Instruct",
    "choices": [
        {
            "index": 0,
            "message": {
                "role": "assistant",
                "content": "As of now, it's estimated that there are about 7,000 languages spoken around the world. However, this number can vary as some languages become extinct and new ones develop. It's also important to note that the number of speakers can greatly vary between languages, with some having millions of speakers and others only a few hundred.",
                "tool_calls": null
            },
            "finish_reason": "stop",
            "logprobs": null
        }
    ],
    "usage": {
        "prompt_tokens": 19,
        "total_tokens": 91,
        "completion_tokens": 72
    }
}

Sprawdź sekcję usage w odpowiedzi, aby zobaczyć liczbę tokenów używanych dla monitu, łączną liczbę wygenerowanych tokenów oraz liczbę tokenów używanych do ukończenia.

Przesyłanie strumieniowe zawartości

Domyślnie interfejs API uzupełniania zwraca całą wygenerowaną zawartość w pojedynczej odpowiedzi. Jeśli generujesz długie zakończenia, oczekiwanie na odpowiedź może potrwać wiele sekund.

Możesz przesyłać strumieniowo zawartość, aby pobrać ją podczas jego generowania. Zawartość strumieniowa umożliwia rozpoczęcie przetwarzania ukończenia w miarę dostępności zawartości. Ten tryb zwraca obiekt, który przesyła strumieniowo odpowiedź jako zdarzenia wysyłane tylko do serwera. Wyodrębnij fragmenty z pola różnicowego, a nie z pola komunikatu.

{
    "messages": [
        {
            "role": "system",
            "content": "You are a helpful assistant."
        },
        {
            "role": "user",
            "content": "How many languages are in the world?"
        }
    ],
    "stream": true,
    "temperature": 0,
    "top_p": 1,
    "max_tokens": 2048
}

Możesz zwizualizować sposób generowania zawartości przez przesyłanie strumieniowe:

{
    "id": "23b54589eba14564ad8a2e6978775a39",
    "object": "chat.completion.chunk",
    "created": 1718726371,
    "model": "Phi-3.5-Mini-Instruct",
    "choices": [
        {
            "index": 0,
            "delta": {
                "role": "assistant",
                "content": ""
            },
            "finish_reason": null,
            "logprobs": null
        }
    ]
}

Ostatni komunikat w strumieniu został finish_reason ustawiony, wskazujący przyczynę zatrzymania procesu generowania.

{
    "id": "23b54589eba14564ad8a2e6978775a39",
    "object": "chat.completion.chunk",
    "created": 1718726371,
    "model": "Phi-3.5-Mini-Instruct",
    "choices": [
        {
            "index": 0,
            "delta": {
                "content": ""
            },
            "finish_reason": "stop",
            "logprobs": null
        }
    ],
    "usage": {
        "prompt_tokens": 19,
        "total_tokens": 91,
        "completion_tokens": 72
    }
}

Poznaj więcej parametrów obsługiwanych przez klienta wnioskowania

Zapoznaj się z innymi parametrami, które można określić w kliencie wnioskowania. Aby uzyskać pełną listę wszystkich obsługiwanych parametrów i odpowiedniej dokumentacji, zobacz Dokumentacja interfejsu API wnioskowania modelu AI platformy Azure.

{
    "messages": [
        {
            "role": "system",
            "content": "You are a helpful assistant."
        },
        {
            "role": "user",
            "content": "How many languages are in the world?"
        }
    ],
    "presence_penalty": 0.1,
    "frequency_penalty": 0.8,
    "max_tokens": 2048,
    "stop": ["<|endoftext|>"],
    "temperature" :0,
    "top_p": 1,
    "response_format": { "type": "text" }
}
{
    "id": "0a1234b5de6789f01gh2i345j6789klm",
    "object": "chat.completion",
    "created": 1718726686,
    "model": "Phi-3.5-Mini-Instruct",
    "choices": [
        {
            "index": 0,
            "message": {
                "role": "assistant",
                "content": "As of now, it's estimated that there are about 7,000 languages spoken around the world. However, this number can vary as some languages become extinct and new ones develop. It's also important to note that the number of speakers can greatly vary between languages, with some having millions of speakers and others only a few hundred.",
                "tool_calls": null
            },
            "finish_reason": "stop",
            "logprobs": null
        }
    ],
    "usage": {
        "prompt_tokens": 19,
        "total_tokens": 91,
        "completion_tokens": 72
    }
}

Ostrzeżenie

Modele rodziny Phi-3 nie obsługują formatowania danych wyjściowych JSON (response_format = { "type": "json_object" }). Zawsze możesz monitować model o wygenerowanie danych wyjściowych JSON. Jednak takie dane wyjściowe nie mają gwarancji, że są prawidłowe dane JSON.

Jeśli chcesz przekazać parametr, który nie znajduje się na liście obsługiwanych parametrów, możesz przekazać go do modelu bazowego przy użyciu dodatkowych parametrów. Zobacz Przekazywanie dodatkowych parametrów do modelu.

Przekazywanie dodatkowych parametrów do modelu

Interfejs API wnioskowania modelu AI platformy Azure umożliwia przekazywanie dodatkowych parametrów do modelu. Poniższy przykład kodu pokazuje, jak przekazać dodatkowy parametr logprobs do modelu.

Przed przekazaniem dodatkowych parametrów do interfejsu API wnioskowania modelu AI platformy Azure upewnij się, że model obsługuje te dodatkowe parametry. Po wysłaniu żądania do modelu bazowego nagłówek extra-parameters jest przekazywany do modelu z wartością pass-through. Ta wartość informuje punkt końcowy o przekazaniu dodatkowych parametrów do modelu. Użycie dodatkowych parametrów z modelem nie gwarantuje, że model może je faktycznie obsłużyć. Przeczytaj dokumentację modelu, aby dowiedzieć się, które dodatkowe parametry są obsługiwane.

POST /chat/completions HTTP/1.1
Host: <ENDPOINT_URI>
Authorization: Bearer <TOKEN>
Content-Type: application/json
extra-parameters: pass-through
{
    "messages": [
        {
            "role": "system",
            "content": "You are a helpful assistant."
        },
        {
            "role": "user",
            "content": "How many languages are in the world?"
        }
    ],
    "logprobs": true
}

Następujące dodatkowe parametry można przekazać do modeli czatów rodzinnych Phi-3:

Nazwa/nazwisko opis Type
logit_bias Akceptuje obiekt JSON mapujący tokeny (określone przez ich identyfikator tokenu w tokenizatorze) na skojarzzoną wartość stronniczą z zakresu od -100 do 100. Matematycznie stronniczy jest dodawany do logitów wygenerowanych przez model przed próbkowaniem. Dokładny efekt będzie się różnić w zależności od modelu, ale wartości z zakresu od -1 do 1 powinny zmniejszyć lub zwiększyć prawdopodobieństwo wyboru; wartości takie jak -100 lub 100 powinny spowodować zakaz lub wyłączny wybór odpowiedniego tokenu. float
logprobs Czy zwracać prawdopodobieństwo dziennika tokenów wyjściowych, czy nie. Jeśli wartość true, zwraca prawdopodobieństwo dziennika każdego tokenu wyjściowego zwróconego w elemecie content message. int
top_logprobs Liczba całkowita z zakresu od 0 do 20 określająca liczbę najbardziej prawdopodobnych tokenów do zwrócenia na każdej pozycji tokenu, z których każde ma skojarzone prawdopodobieństwo dziennika. logprobs musi być ustawiona na true wartość , jeśli ten parametr jest używany. float
n Ile opcji ukończenia czatu ma być generowanych dla każdej wiadomości wejściowej. Pamiętaj, że opłaty będą naliczane na podstawie liczby wygenerowanych tokenów we wszystkich opcjach. int

Stosowanie bezpieczeństwa zawartości

Interfejs API wnioskowania modelu AI platformy Azure obsługuje bezpieczeństwo zawartości usługi Azure AI. W przypadku korzystania z wdrożeń z włączonym bezpieczeństwem zawartości sztucznej inteligencji platformy Azure dane wejściowe i wyjściowe przechodzą przez zespół modeli klasyfikacji mających na celu wykrywanie i zapobieganie wystąpieniu szkodliwej zawartości. System filtrowania zawartości (wersja zapoznawcza) wykrywa i podejmuje działania dotyczące określonych kategorii potencjalnie szkodliwej zawartości zarówno w monitach wejściowych, jak i w przypadku uzupełniania danych wyjściowych.

W poniższym przykładzie pokazano, jak obsługiwać zdarzenia, gdy model wykryje szkodliwą zawartość w monicie wejściowym i włączono bezpieczeństwo zawartości.

{
    "messages": [
        {
            "role": "system",
            "content": "You are an AI assistant that helps people find information."
        },
                {
            "role": "user",
            "content": "Chopping tomatoes and cutting them into cubes or wedges are great ways to practice your knife skills."
        }
    ]
}
{
    "error": {
        "message": "The response was filtered due to the prompt triggering Microsoft's content management policy. Please modify your prompt and retry.",
        "type": null,
        "param": "prompt",
        "code": "content_filter",
        "status": 400
    }
}

Napiwek

Aby dowiedzieć się więcej na temat konfigurowania i kontrolowania ustawień bezpieczeństwa zawartości usługi Azure AI, zapoznaj się z dokumentacją dotyczącą bezpieczeństwa zawartości usługi Azure AI.

Uwaga

Bezpieczeństwo zawartości sztucznej inteligencji platformy Azure jest dostępne tylko dla modeli wdrożonych jako punkty końcowe bezserwerowego interfejsu API.

Więcej przykładów wnioskowania

Aby uzyskać więcej przykładów używania modeli rodzinnych Phi-3, zobacz następujące przykłady i samouczki:

opis Language Przykład
Żądanie CURL Bash Link
Pakiet wnioskowania usługi Azure AI dla języka JavaScript JavaScript Link
Pakiet wnioskowania usługi Azure AI dla języka Python Python Link
Żądania internetowe języka Python Python Link
Zestaw OPENAI SDK (eksperymentalny) Python Link
LangChain Python Link
LiteLLM Python Link

Zagadnienia dotyczące kosztów i limitów przydziału dla modeli rodziny Phi-3 wdrożonych jako punkty końcowe interfejsu API bezserwerowego

Limit przydziału jest zarządzany na wdrożenie. Każde wdrożenie ma limit szybkości wynoszący 200 000 tokenów na minutę i 1000 żądań interfejsu API na minutę. Obecnie jednak ograniczamy jedno wdrożenie na model na projekt. Skontaktuj się z pomocą techniczną platformy Microsoft Azure, jeśli bieżące limity szybkości nie są wystarczające dla Twoich scenariuszy.

Zagadnienia dotyczące kosztów i limitów przydziału dla modeli rodzinnych Phi-3 wdrożonych w zarządzanych obliczeniach

Modele rodziny Phi-3 wdrożone w zarządzanych obliczeniach są rozliczane na podstawie godzin podstawowych skojarzonego wystąpienia obliczeniowego. Koszt wystąpienia obliczeniowego zależy od rozmiaru wystąpienia, liczby uruchomionych wystąpień i czasu trwania przebiegu.

Dobrym rozwiązaniem jest rozpoczęcie od niewielkiej liczby wystąpień i skalowanie w górę zgodnie z potrzebami. Koszt wystąpienia obliczeniowego można monitorować w witrynie Azure Portal.