Partilhar via


Como usar os modelos de chat da família Phi-3 com o Azure Machine Learning

Neste artigo, você aprenderá sobre os modelos de chat da família Phi-3 e como utilizá-los. A família Phi-3 de pequenos modelos de linguagem (SLMs) é uma coleção de modelos de texto generativos ajustados por instrução.

Importante

Esse recurso está atualmente em visualização pública. Essa versão prévia é fornecida sem um contrato de nível de serviço e não é recomendada para cargas de trabalho de produção. Alguns recursos podem não ter suporte ou podem ter restrição de recursos.

Para obter mais informações, consulte Termos de Uso Complementares de Versões Prévias do Microsoft Azure.

Modelos de chat da família Phi-3

Os modelos de chat da família Phi-3 incluem os seguintes modelos:

Os modelos Phi-3.5 são modelos leves e de última geração. Esses modelos foram treinados com conjuntos de dados Phi-3 que incluem tanto dados sintéticos quanto dados de sites públicos filtrados, com foco em alta qualidade e propriedades densas em raciocínio. O Phi-3.5 Mini usa 3,8 bilhões de parâmetros e é um modelo transformador somente decodificador denso, usando o mesmo tokenizador que o Phi-3 Mini.

Os modelos passaram por um rigoroso processo de aprimoramento, incorporando tanto ajuste fino supervisionado, otimização de políticas proximais quanto otimização de preferências diretas para garantir a adesão precisa às instruções e robustas medidas de segurança. Quando avaliados em parâmetros de comparação que testam o senso comum, reconhecimento de linguagem, matemática, código, contexto longo e raciocínio lógico, os modelos Phi-3.5 demonstraram desempenho robusto e de última geração entre modelos com menos de 13 bilhões de parâmetros.

Os modelos Phi-3.5 vêm nas seguintes variantes, com comprimento de contexto (em tokens) de 128K.

Os seguintes modelos estão disponíveis:

  • Phi-3.5-Mini-Instruct

Pré-requisitos

Para usar os modelos de chat da família Phi-3 com o Azure Machine Learning, você precisará dos seguintes pré-requisitos:

Uma implantação de modelo

Implantação em APIs sem servidor

Os modelos de chat da família Phi-3 podem ser implantados em pontos de extremidade de API sem servidor com a cobrança por pagamento conforme o uso. Esse tipo de implantação fornece uma maneira de consumir modelos como uma API sem hospedá-los em sua assinatura, ao mesmo tempo que mantém a segurança empresarial e a conformidade que as organizações precisam.

A implantação em um ponto de extremidade de API sem servidor não exige o uso de cotas da sua assinatura. Se o seu modelo ainda não estiver implantado, use o Estúdio do Azure Machine Learning, o SDK do Azure Machine Learning para Python, a CLI do Azure ou modelos do ARM para implantar o modelo como uma API sem servidor.

Implantação em uma computação gerenciada auto-hospedada

Os modelos de chat da família Phi-3 podem ser implantados na nossa solução de inferência gerenciada auto-hospedada, que permite personalizar e controlar todos os detalhes sobre como o modelo é servido.

Para implantação em uma computação gerenciada auto-hospedada, você deve ter cota suficiente em sua assinatura. Se você não tiver cota suficiente disponível, poderá usar nosso acesso temporário de cota selecionando a opção Quero usar cota compartilhada e reconheço que esse ponto de extremidade será excluído em 168 horas.

O pacote de inferência instalado

Você pode consumir previsões desse modelo usando o pacote azure-ai-inference com Python. Para instalar esse pacote, você precisa atender aos seguintes pré-requisitos:

  • Python 3.8 ou posterior instalado, incluindo o pip.
  • O URL do ponto de extremidade. Para criar a biblioteca de clientes, você precisa transmitir o URL do ponto de extremidade. O URL do ponto de extremidade tem o formulário https://your-host-name.your-azure-region.inference.ai.azure.com, em que your-host-name é o nome de host exclusivo da implantação do modelo e your-azure-region é a região do Azure em que o modelo é implantado (por exemplo, eastus2).
  • Dependendo da sua preferência de autenticação e implantação de modelos, você precisará de uma chave para autenticação no serviço ou de credenciais do Microsoft Entra ID. A chave é uma cadeia de caracteres de 32 caracteres.

Depois de atender aos pré-requisitos, instale o pacote de inferência da IA do Azure com o seguinte comando:

pip install azure-ai-inference

Saiba mais sobre o Pacote de inferência da IA do Azure e referências.

Trabalhar com conclusões de chat

Nesta seção, você usa a API de inferência de modelo da IA do Azure com um modelo de conclusões para chat.

Dica

A API de inferência de modelo de IA do Azure permite que você converse com a maioria dos modelos implantados no Estúdio de IA do Azure usando o mesmo código e estrutura, incluindo os modelos de chat da família Phi-3.

Criar um cliente para consumir o modelo

Primeiro, crie o cliente para consumir o modelo. O código a seguir usa uma URL de ponto de extremidade e uma chave que são armazenadas em variáveis de ambiente.

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"]),
)

Ao implantar o modelo em um ponto de extremidade online auto-hospedado com suporte ao Microsoft Entra ID, você pode usar o trecho de código a seguir para criar um cliente.

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

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

Observação

Atualmente, os pontos de extremidade da API sem servidor não dão suporte ao uso do Microsoft Entra ID para autenticação.

Obter as funcionalidades do modelo

A rota /info retorna informações sobre o modelo que é implantado no ponto de extremidade. Retorne as informações do modelo chamando o seguinte método:

model_info = client.get_model_info()

A resposta é a seguinte:

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

Como criar uma solicitação de conclusão de chat

O exemplo a seguir mostra como você pode criar uma solicitação básica de conclusões de chat para o modelo.

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?"),
    ],
)

Observação

Phi-3.5-Mini-Instruct, Phi-3-mini-4k-Instruct, Phi-3-mini-128k-Instruct, Phi-3-small-8k-Instruct, Phi-3-small-128k-Instruct e Phi-3-medium-128k-Instruct não dão suporte a mensagens de sistema (role="system"). Quando você usa a API de inferência do modelo de IA do Azure, as mensagens do sistema são traduzidas para mensagens de usuário, que é a funcionalidade mais próxima disponível. Essa tradução é oferecida para conveniência, mas é importante verificar se o modelo está seguindo as instruções na mensagem do sistema com o nível certo de confiança.

A resposta é a seguinte, em que você pode ver as estatísticas de uso do modelo:

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

Inspecione a seção usage na resposta para conferir o número de tokens usados para a solicitação, o número total de tokens gerados e o número de tokens usados para a conclusão.

Como transmitir conteúdos

Por padrão, a API de conclusões retorna todo o conteúdo gerado em uma única resposta. Ao gerar conclusões longas, você pode precisar aguardar a resposta por muitos segundos.

É possível transmitir o conteúdo para recebê-lo à medida que ele é gerado. Ao transmitir o conteúdo, é possível começar a processar a conclusão à medida que ele se torna disponível. Esse modo retorna um objeto que transmite de volta a resposta na forma de eventos somente de dados enviados pelo servidor. Extraia partes do campo delta, em vez do campo de mensagem.

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,
)

Para transmitir conclusões, defina stream=True ao chamar o modelo.

Para exibir a saída, defina uma função auxiliar a fim de imprimir a transmissão.

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="")

É possível observar como o streaming gera conteúdos:

print_stream(result)

Como explorar outros parâmetros com suporte do cliente de inferência

Confira outros parâmetros que podem ser especificados no cliente de inferência. Para obter uma lista completa de todos os parâmetros com suporte e da documentação correspondente, consulte a Referência da API de inferência de modelo da IA do Azure.

from azure.ai.inference.models import ChatCompletionsResponseFormatText

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=ChatCompletionsResponseFormatText(),
)

Aviso

Os modelos da família Phi-3 não dão suporte à formatação de saída em JSON (response_format = { "type": "json_object" }). Você sempre pode solicitar que o modelo gere saídas JSON. No entanto, não há garantia de que essas saídas estejam em formato JSON válido.

Para transmitir um parâmetro que não está na lista de parâmetros com suporte, faça a transmissão para o modelo subjacente usando parâmetros extras. Consulte Transmitir parâmetros extras ao modelo.

Como transmitir parâmetros extras ao modelo

A API de inferência de modelo da IA do Azure permite transmitir parâmetros extras ao modelo. O exemplo de código a seguir mostra como transmitir o parâmetro extra logprobs ao modelo.

Antes de transmitir parâmetros extras à API de inferência de modelo da IA do Azure, verifique se o modelo dá suporte a esses parâmetros. Quando a solicitação é feita ao modelo subjacente, o cabeçalho extra-parameters é transmitido a ele com o valor pass-through. Esse valor indica que o ponto de extremidade deve transmitir os parâmetros extras ao modelo. O uso de parâmetros extras com o modelo não garante que ele possa realmente lidar com eles. Leia a documentação do modelo para entender quais parâmetros adicionais têm suporte.

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

Os seguintes parâmetros extras podem ser passados para os modelos de chat da família Phi-3:

Nome Descrição Type
logit_bias Aceita um objeto JSON que mapeia tokens (especificados por sua ID de token no tokenizer) para um valor de viés associado de -100 a 100. Matematicamente, o desvio é adicionado aos logits gerados pelo modelo antes da amostragem. O efeito exato varia de acordo com o modelo, mas os valores entre -1 e 1 deverão diminuir ou aumentar a probabilidade da seleção, os valores como -100 ou 100 deverão resultar em uma proibição ou seleção exclusiva do token relevante. float
logprobs Se você quer retornar as probabilidades de log dos tokens de saída ou não. Se for true, retornará as probabilidades de log de cada token de saída retornado no content da message. int
top_logprobs Um inteiro entre 0 e 20 especificando o número de tokens mais prováveis a serem retornados em cada posição de token, cada um com uma probabilidade de log associada. logprobs precisa estar definido como true se esse parâmetro for usado. float
n Quantas opções de preenchimento de chat serão geradas para cada mensagem de entrada. Observe que você será cobrado com base no número de tokens gerados em todas as opções. int

Aplicar segurança de conteúdo

A API de inferência de modelo da IA do Azure dá suporte à Segurança de Conteúdo de IA do Azure. Ao usar implantações com a Segurança de Conteúdo de IA do Azure habilitada, as entradas e saídas são transmitidas por um conjunto de modelos de classificação que detectam e impedem a saída de usar conteúdos nocivos. O sistema de filtragem de conteúdo detecta e executa ações em categorias específicas de conteúdo potencialmente prejudicial em prompts de entrada e conclusões de saída.

O exemplo a seguir mostra como lidar com eventos quando o modelo detecta conteúdo nocivo na solicitação de entrada e a Segurança de Conteúdo está habilitada.

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

Dica

Para saber mais sobre como você pode definir e controlar as configurações de segurança de conteúdo da IA do Azure, verifique a Documentação da segurança de conteúdo da IA do Azure.

Observação

A segurança de conteúdo da IA do Azure só está disponível para modelos implantados como pontos de extremidade de API sem servidor.

Modelos de chat da família Phi-3

Os modelos de chat da família Phi-3 incluem os seguintes modelos:

Os modelos Phi-3.5 são modelos leves e de última geração. Esses modelos foram treinados com conjuntos de dados Phi-3 que incluem tanto dados sintéticos quanto dados de sites públicos filtrados, com foco em alta qualidade e propriedades densas em raciocínio. O Phi-3.5 Mini usa 3,8 bilhões de parâmetros e é um modelo transformador somente decodificador denso, usando o mesmo tokenizador que o Phi-3 Mini.

Os modelos passaram por um rigoroso processo de aprimoramento, incorporando tanto ajuste fino supervisionado, otimização de políticas proximais quanto otimização de preferências diretas para garantir a adesão precisa às instruções e robustas medidas de segurança. Quando avaliados em parâmetros de comparação que testam o senso comum, reconhecimento de linguagem, matemática, código, contexto longo e raciocínio lógico, os modelos Phi-3.5 demonstraram desempenho robusto e de última geração entre modelos com menos de 13 bilhões de parâmetros.

Os modelos Phi-3.5 vêm nas seguintes variantes, com comprimento de contexto (em tokens) de 128K.

Os seguintes modelos estão disponíveis:

  • Phi-3.5-Mini-Instruct

Pré-requisitos

Para usar os modelos de chat da família Phi-3 com o Estúdio do Azure Machine Learning, você precisa dos seguintes pré-requisitos:

Uma implantação de modelo

Implantação em APIs sem servidor

Os modelos de chat da família Phi-3 podem ser implantados em pontos de extremidade de API sem servidor com a cobrança por pagamento conforme o uso. Esse tipo de implantação fornece uma maneira de consumir modelos como uma API sem hospedá-los em sua assinatura, ao mesmo tempo que mantém a segurança empresarial e a conformidade que as organizações precisam.

A implantação em um ponto de extremidade de API sem servidor não exige o uso de cotas da sua assinatura. Se o seu modelo ainda não estiver implantado, use o Estúdio do Azure Machine Learning, o SDK do Azure Machine Learning para Python, a CLI do Azure ou modelos do ARM para implantar o modelo como uma API sem servidor.

Implantação em uma computação gerenciada auto-hospedada

Os modelos de chat da família Phi-3 podem ser implantados na nossa solução de inferência gerenciada auto-hospedada, que permite personalizar e controlar todos os detalhes sobre como o modelo é servido.

Para implantação em uma computação gerenciada auto-hospedada, você deve ter cota suficiente em sua assinatura. Se você não tiver cota suficiente disponível, poderá usar nosso acesso temporário de cota selecionando a opção Quero usar cota compartilhada e reconheço que esse ponto de extremidade será excluído em 168 horas.

O pacote de inferência instalado

Você pode consumir previsões desse modelo usando o pacote @azure-rest/ai-inference de npm. Para instalar esse pacote, você precisa atender aos seguintes pré-requisitos:

  • Versões LTS de Node.js com npm.
  • O URL do ponto de extremidade. Para criar a biblioteca de clientes, você precisa transmitir o URL do ponto de extremidade. O URL do ponto de extremidade tem o formulário https://your-host-name.your-azure-region.inference.ai.azure.com, em que your-host-name é o nome de host exclusivo da implantação do modelo e your-azure-region é a região do Azure em que o modelo é implantado (por exemplo, eastus2).
  • Dependendo da sua preferência de autenticação e implantação de modelos, você precisará de uma chave para autenticação no serviço ou de credenciais do Microsoft Entra ID. A chave é uma cadeia de caracteres de 32 caracteres.

Depois de atender a esses pré-requisitos, instale a biblioteca de inferência do Azure para JavaScript com o seguinte comando:

npm install @azure-rest/ai-inference

Como trabalhar com conclusões de chat

Nesta seção, você usa a API de inferência de modelo da IA do Azure com um modelo de conclusões para chat.

Dica

A API de inferência de modelo de IA do Azure permite que você converse com a maioria dos modelos implantados no Estúdio do Azure Machine Learning usando o mesmo código e estrutura, incluindo os modelos de chat da família Phi-3.

Criar um cliente para consumir o modelo

Primeiro, crie o cliente para consumir o modelo. O código a seguir usa uma URL de ponto de extremidade e uma chave que são armazenadas em variáveis de ambiente.

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)
);

Ao implantar o modelo em um ponto de extremidade online auto-hospedado com suporte ao Microsoft Entra ID, você pode usar o trecho de código a seguir para criar um cliente.

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()
);

Observação

Atualmente, os pontos de extremidade da API sem servidor não dão suporte ao uso do Microsoft Entra ID para autenticação.

Obter as funcionalidades do modelo

A rota /info retorna informações sobre o modelo que é implantado no ponto de extremidade. Retorne as informações do modelo chamando o seguinte método:

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

A resposta é a seguinte:

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

Como criar uma solicitação de conclusão de chat

O exemplo a seguir mostra como você pode criar uma solicitação básica de conclusões de chat para o modelo.

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,
    }
});

Observação

Phi-3.5-Mini-Instruct, Phi-3-mini-4k-Instruct, Phi-3-mini-128k-Instruct, Phi-3-small-8k-Instruct, Phi-3-small-128k-Instruct e Phi-3-medium-128k-Instruct não dão suporte a mensagens de sistema (role="system"). Quando você usa a API de inferência do modelo de IA do Azure, as mensagens do sistema são traduzidas para mensagens de usuário, que é a funcionalidade mais próxima disponível. Essa tradução é oferecida para conveniência, mas é importante verificar se o modelo está seguindo as instruções na mensagem do sistema com o nível certo de confiança.

A resposta é a seguinte, em que você pode ver as estatísticas de uso do modelo:

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

Inspecione a seção usage na resposta para conferir o número de tokens usados para a solicitação, o número total de tokens gerados e o número de tokens usados para a conclusão.

Como transmitir conteúdos

Por padrão, a API de conclusões retorna todo o conteúdo gerado em uma única resposta. Ao gerar conclusões longas, você pode precisar aguardar a resposta por muitos segundos.

É possível transmitir o conteúdo para recebê-lo à medida que ele é gerado. Ao transmitir o conteúdo, é possível começar a processar a conclusão à medida que ele se torna disponível. Esse modo retorna um objeto que transmite de volta a resposta na forma de eventos somente de dados enviados pelo servidor. Extraia partes do campo delta, em vez do campo de mensagem.

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();

Para transmitir conclusões, use .asNodeStream() ao chamar o modelo.

É possível observar como o streaming gera conteúdos:

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 ?? "");
    }
}

Como explorar outros parâmetros com suporte do cliente de inferência

Confira outros parâmetros que podem ser especificados no cliente de inferência. Para obter uma lista completa de todos os parâmetros com suporte e da documentação correspondente, consulte a Referência da API de inferência de modelo da IA do 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" },
    }
});

Aviso

Os modelos da família Phi-3 não dão suporte à formatação de saída em JSON (response_format = { "type": "json_object" }). Você sempre pode solicitar que o modelo gere saídas JSON. No entanto, não há garantia de que essas saídas estejam em formato JSON válido.

Para transmitir um parâmetro que não está na lista de parâmetros com suporte, faça a transmissão para o modelo subjacente usando parâmetros extras. Consulte Transmitir parâmetros extras ao modelo.

Como transmitir parâmetros extras ao modelo

A API de inferência de modelo da IA do Azure permite transmitir parâmetros extras ao modelo. O exemplo de código a seguir mostra como transmitir o parâmetro extra logprobs ao modelo.

Antes de transmitir parâmetros extras à API de inferência de modelo da IA do Azure, verifique se o modelo dá suporte a esses parâmetros. Quando a solicitação é feita ao modelo subjacente, o cabeçalho extra-parameters é transmitido a ele com o valor pass-through. Esse valor indica que o ponto de extremidade deve transmitir os parâmetros extras ao modelo. O uso de parâmetros extras com o modelo não garante que ele possa realmente lidar com eles. Leia a documentação do modelo para entender quais parâmetros adicionais têm suporte.

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
    }
});

Os seguintes parâmetros extras podem ser passados para os modelos de chat da família Phi-3:

Nome Descrição Type
logit_bias Aceita um objeto JSON que mapeia tokens (especificados por sua ID de token no tokenizer) para um valor de viés associado de -100 a 100. Matematicamente, o desvio é adicionado aos logits gerados pelo modelo antes da amostragem. O efeito exato varia de acordo com o modelo, mas os valores entre -1 e 1 deverão diminuir ou aumentar a probabilidade da seleção, os valores como -100 ou 100 deverão resultar em uma proibição ou seleção exclusiva do token relevante. float
logprobs Se você quer retornar as probabilidades de log dos tokens de saída ou não. Se for true, retornará as probabilidades de log de cada token de saída retornado no content da message. int
top_logprobs Um inteiro entre 0 e 20 especificando o número de tokens mais prováveis a serem retornados em cada posição de token, cada um com uma probabilidade de log associada. logprobs precisa estar definido como true se esse parâmetro for usado. float
n Quantas opções de preenchimento de chat serão geradas para cada mensagem de entrada. Observe que você será cobrado com base no número de tokens gerados em todas as opções. int

Aplicar segurança de conteúdo

A API de inferência de modelo da IA do Azure dá suporte à Segurança de Conteúdo de IA do Azure. Ao usar implantações com a Segurança de Conteúdo de IA do Azure habilitada, as entradas e saídas são transmitidas por um conjunto de modelos de classificação que detectam e impedem a saída de usar conteúdos nocivos. O sistema de filtragem de conteúdo detecta e executa ações em categorias específicas de conteúdo potencialmente prejudicial em prompts de entrada e conclusões de saída.

O exemplo a seguir mostra como lidar com eventos quando o modelo detecta conteúdo nocivo na solicitação de entrada e a Segurança de Conteúdo está habilitada.

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;
        }
    }
}

Dica

Para saber mais sobre como você pode definir e controlar as configurações de segurança de conteúdo da IA do Azure, verifique a Documentação da segurança de conteúdo da IA do Azure.

Observação

A segurança de conteúdo da IA do Azure só está disponível para modelos implantados como pontos de extremidade de API sem servidor.

Modelos de chat da família Phi-3

Os modelos de chat da família Phi-3 incluem os seguintes modelos:

Os modelos Phi-3.5 são modelos leves e de última geração. Esses modelos foram treinados com conjuntos de dados Phi-3 que incluem tanto dados sintéticos quanto dados de sites públicos filtrados, com foco em alta qualidade e propriedades densas em raciocínio. O Phi-3.5 Mini usa 3,8 bilhões de parâmetros e é um modelo transformador somente decodificador denso, usando o mesmo tokenizador que o Phi-3 Mini.

Os modelos passaram por um rigoroso processo de aprimoramento, incorporando tanto ajuste fino supervisionado, otimização de políticas proximais quanto otimização de preferências diretas para garantir a adesão precisa às instruções e robustas medidas de segurança. Quando avaliados em parâmetros de comparação que testam o senso comum, reconhecimento de linguagem, matemática, código, contexto longo e raciocínio lógico, os modelos Phi-3.5 demonstraram desempenho robusto e de última geração entre modelos com menos de 13 bilhões de parâmetros.

Os modelos Phi-3.5 vêm nas seguintes variantes, com comprimento de contexto (em tokens) de 128K.

Os seguintes modelos estão disponíveis:

  • Phi-3.5-Mini-Instruct

Pré-requisitos

Para usar os modelos de chat da família Phi-3 com o Estúdio do Azure Machine Learning, você precisa dos seguintes pré-requisitos:

Uma implantação de modelo

Implantação em APIs sem servidor

Os modelos de chat da família Phi-3 podem ser implantados em pontos de extremidade de API sem servidor com a cobrança por pagamento conforme o uso. Esse tipo de implantação fornece uma maneira de consumir modelos como uma API sem hospedá-los em sua assinatura, ao mesmo tempo que mantém a segurança empresarial e a conformidade que as organizações precisam.

A implantação em um ponto de extremidade de API sem servidor não exige o uso de cotas da sua assinatura. Se o seu modelo ainda não estiver implantado, use o Estúdio do Azure Machine Learning, o SDK do Azure Machine Learning para Python, a CLI do Azure ou modelos do ARM para implantar o modelo como uma API sem servidor.

Implantação em uma computação gerenciada auto-hospedada

Os modelos de chat da família Phi-3 podem ser implantados na nossa solução de inferência gerenciada auto-hospedada, que permite personalizar e controlar todos os detalhes sobre como o modelo é servido.

Para implantação em uma computação gerenciada auto-hospedada, você deve ter cota suficiente em sua assinatura. Se você não tiver cota suficiente disponível, poderá usar nosso acesso temporário de cota selecionando a opção Quero usar cota compartilhada e reconheço que esse ponto de extremidade será excluído em 168 horas.

O pacote de inferência instalado

Você pode consumir as previsões desse modelo usando o pacote Azure.AI.Inference do NuGet. Para instalar esse pacote, você precisa atender aos seguintes pré-requisitos:

  • O URL do ponto de extremidade. Para criar a biblioteca de clientes, você precisa transmitir o URL do ponto de extremidade. O URL do ponto de extremidade tem o formulário https://your-host-name.your-azure-region.inference.ai.azure.com, em que your-host-name é o nome de host exclusivo da implantação do modelo e your-azure-region é a região do Azure em que o modelo é implantado (por exemplo, eastus2).
  • Dependendo da sua preferência de autenticação e implantação de modelos, você precisará de uma chave para autenticação no serviço ou de credenciais do Microsoft Entra ID. A chave é uma cadeia de caracteres de 32 caracteres.

Depois de atender a esses pré-requisitos, instale a biblioteca de inferência da IA do Azure com o seguinte comando:

dotnet add package Azure.AI.Inference --prerelease

Também é possível realizar a autenticação com o Microsoft Entra ID (antigo Azure Active Directory). Para usar os provedores de credenciais fornecidos com o SDK do Azure, instale o pacote Azure.Identity:

dotnet add package Azure.Identity

Importe os seguintes namespaces:

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

Este exemplo também usa os seguintes namespaces, mas talvez você nem sempre precise deles:

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

Como trabalhar com conclusões de chat

Nesta seção, você usa a API de inferência de modelo da IA do Azure com um modelo de conclusões para chat.

Dica

A API de inferência de modelo de IA do Azure permite que você converse com a maioria dos modelos implantados no Estúdio do Azure Machine Learning usando o mesmo código e estrutura, incluindo os modelos de chat da família Phi-3.

Criar um cliente para consumir o modelo

Primeiro, crie o cliente para consumir o modelo. O código a seguir usa uma URL de ponto de extremidade e uma chave que são armazenadas em variáveis de ambiente.

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

Ao implantar o modelo em um ponto de extremidade online auto-hospedado com suporte ao Microsoft Entra ID, você pode usar o trecho de código a seguir para criar um cliente.

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

Observação

Atualmente, os pontos de extremidade da API sem servidor não dão suporte ao uso do Microsoft Entra ID para autenticação.

Obter as funcionalidades do modelo

A rota /info retorna informações sobre o modelo que é implantado no ponto de extremidade. Retorne as informações do modelo chamando o seguinte método:

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

A resposta é a seguinte:

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

Como criar uma solicitação de conclusão de chat

O exemplo a seguir mostra como você pode criar uma solicitação básica de conclusões de chat para o modelo.

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);

Observação

Phi-3.5-Mini-Instruct, Phi-3-mini-4k-Instruct, Phi-3-mini-128k-Instruct, Phi-3-small-8k-Instruct, Phi-3-small-128k-Instruct e Phi-3-medium-128k-Instruct não dão suporte a mensagens de sistema (role="system"). Quando você usa a API de inferência do modelo de IA do Azure, as mensagens do sistema são traduzidas para mensagens de usuário, que é a funcionalidade mais próxima disponível. Essa tradução é oferecida para conveniência, mas é importante verificar se o modelo está seguindo as instruções na mensagem do sistema com o nível certo de confiança.

A resposta é a seguinte, em que você pode ver as estatísticas de uso do modelo:

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

Inspecione a seção usage na resposta para conferir o número de tokens usados para a solicitação, o número total de tokens gerados e o número de tokens usados para a conclusão.

Como transmitir conteúdos

Por padrão, a API de conclusões retorna todo o conteúdo gerado em uma única resposta. Ao gerar conclusões longas, você pode precisar aguardar a resposta por muitos segundos.

É possível transmitir o conteúdo para recebê-lo à medida que ele é gerado. Ao transmitir o conteúdo, é possível começar a processar a conclusão à medida que ele se torna disponível. Esse modo retorna um objeto que transmite de volta a resposta na forma de eventos somente de dados enviados pelo servidor. Extraia partes do campo delta, em vez do campo de mensagem.

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);
}

Para transmitir conclusões, use o método CompleteStreamingAsync ao chamar o modelo. Observe que, neste exemplo, a chamada é encapsulada em um método assíncrono.

Para exibir a saída, defina um método assíncrono a fim de imprimir o fluxo no console.

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);
        }
    }
}

É possível observar como o streaming gera conteúdos:

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

Como explorar outros parâmetros com suporte do cliente de inferência

Confira outros parâmetros que podem ser especificados no cliente de inferência. Para obter uma lista completa de todos os parâmetros com suporte e da documentação correspondente, consulte a Referência da API de inferência de modelo da IA do 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}");

Aviso

Os modelos da família Phi-3 não dão suporte à formatação de saída em JSON (response_format = { "type": "json_object" }). Você sempre pode solicitar que o modelo gere saídas JSON. No entanto, não há garantia de que essas saídas estejam em formato JSON válido.

Para transmitir um parâmetro que não está na lista de parâmetros com suporte, faça a transmissão para o modelo subjacente usando parâmetros extras. Consulte Transmitir parâmetros extras ao modelo.

Como transmitir parâmetros extras ao modelo

A API de inferência de modelo da IA do Azure permite transmitir parâmetros extras ao modelo. O exemplo de código a seguir mostra como transmitir o parâmetro extra logprobs ao modelo.

Antes de transmitir parâmetros extras à API de inferência de modelo da IA do Azure, verifique se o modelo dá suporte a esses parâmetros. Quando a solicitação é feita ao modelo subjacente, o cabeçalho extra-parameters é transmitido a ele com o valor pass-through. Esse valor indica que o ponto de extremidade deve transmitir os parâmetros extras ao modelo. O uso de parâmetros extras com o modelo não garante que ele possa realmente lidar com eles. Leia a documentação do modelo para entender quais parâmetros adicionais têm suporte.

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}");

Os seguintes parâmetros extras podem ser passados para os modelos de chat da família Phi-3:

Nome Descrição Type
logit_bias Aceita um objeto JSON que mapeia tokens (especificados por sua ID de token no tokenizer) para um valor de viés associado de -100 a 100. Matematicamente, o desvio é adicionado aos logits gerados pelo modelo antes da amostragem. O efeito exato varia de acordo com o modelo, mas os valores entre -1 e 1 deverão diminuir ou aumentar a probabilidade da seleção, os valores como -100 ou 100 deverão resultar em uma proibição ou seleção exclusiva do token relevante. float
logprobs Se você quer retornar as probabilidades de log dos tokens de saída ou não. Se for true, retornará as probabilidades de log de cada token de saída retornado no content da message. int
top_logprobs Um inteiro entre 0 e 20 especificando o número de tokens mais prováveis a serem retornados em cada posição de token, cada um com uma probabilidade de log associada. logprobs precisa estar definido como true se esse parâmetro for usado. float
n Quantas opções de preenchimento de chat serão geradas para cada mensagem de entrada. Observe que você será cobrado com base no número de tokens gerados em todas as opções. int

Aplicar segurança de conteúdo

A API de inferência de modelo da IA do Azure dá suporte à Segurança de Conteúdo de IA do Azure. Ao usar implantações com a Segurança de Conteúdo de IA do Azure habilitada, as entradas e saídas são transmitidas por um conjunto de modelos de classificação que detectam e impedem a saída de usar conteúdos nocivos. O sistema de filtragem de conteúdo detecta e executa ações em categorias específicas de conteúdo potencialmente prejudicial em prompts de entrada e conclusões de saída.

O exemplo a seguir mostra como lidar com eventos quando o modelo detecta conteúdo nocivo na solicitação de entrada e a Segurança de Conteúdo está habilitada.

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;
    }
}

Dica

Para saber mais sobre como você pode definir e controlar as configurações de segurança de conteúdo da IA do Azure, verifique a Documentação da segurança de conteúdo da IA do Azure.

Observação

A segurança de conteúdo da IA do Azure só está disponível para modelos implantados como pontos de extremidade de API sem servidor.

Modelos de chat da família Phi-3

Os modelos de chat da família Phi-3 incluem os seguintes modelos:

Os modelos Phi-3.5 são modelos leves e de última geração. Esses modelos foram treinados com conjuntos de dados Phi-3 que incluem tanto dados sintéticos quanto dados de sites públicos filtrados, com foco em alta qualidade e propriedades densas em raciocínio. O Phi-3.5 Mini usa 3,8 bilhões de parâmetros e é um modelo transformador somente decodificador denso, usando o mesmo tokenizador que o Phi-3 Mini.

Os modelos passaram por um rigoroso processo de aprimoramento, incorporando tanto ajuste fino supervisionado, otimização de políticas proximais quanto otimização de preferências diretas para garantir a adesão precisa às instruções e robustas medidas de segurança. Quando avaliados em parâmetros de comparação que testam o senso comum, reconhecimento de linguagem, matemática, código, contexto longo e raciocínio lógico, os modelos Phi-3.5 demonstraram desempenho robusto e de última geração entre modelos com menos de 13 bilhões de parâmetros.

Os modelos Phi-3.5 vêm nas seguintes variantes, com comprimento de contexto (em tokens) de 128K.

Os seguintes modelos estão disponíveis:

  • Phi-3.5-Mini-Instruct

Pré-requisitos

Para usar os modelos de chat da família Phi-3 com o Estúdio do Azure Machine Learning, você precisa dos seguintes pré-requisitos:

Uma implantação de modelo

Implantação em APIs sem servidor

Os modelos de chat da família Phi-3 podem ser implantados em pontos de extremidade de API sem servidor com a cobrança por pagamento conforme o uso. Esse tipo de implantação fornece uma maneira de consumir modelos como uma API sem hospedá-los em sua assinatura, ao mesmo tempo que mantém a segurança empresarial e a conformidade que as organizações precisam.

A implantação em um ponto de extremidade de API sem servidor não exige o uso de cotas da sua assinatura. Se o seu modelo ainda não estiver implantado, use o Estúdio do Azure Machine Learning, o SDK do Azure Machine Learning para Python, a CLI do Azure ou modelos do ARM para implantar o modelo como uma API sem servidor.

Implantação em uma computação gerenciada auto-hospedada

Os modelos de chat da família Phi-3 podem ser implantados na nossa solução de inferência gerenciada auto-hospedada, que permite personalizar e controlar todos os detalhes sobre como o modelo é servido.

Para implantação em uma computação gerenciada auto-hospedada, você deve ter cota suficiente em sua assinatura. Se você não tiver cota suficiente disponível, poderá usar nosso acesso temporário de cota selecionando a opção Quero usar cota compartilhada e reconheço que esse ponto de extremidade será excluído em 168 horas.

Um cliente REST

Os modelos implantados com a API de inferência de modelo da IA do Azure podem ser consumidos com qualquer cliente REST. Para usar o cliente REST, você precisa atender a estes pré-requisitos:

  • Para criar as solicitações, você precisa transmitir o URL do ponto de extremidade. O URL do ponto de extremidade tem o formulário https://your-host-name.your-azure-region.inference.ai.azure.com, em que your-host-name`` is your unique model deployment host name and your-azure-region é a região do Azure em que o modelo é implantado (por exemplo, eastus2).
  • Dependendo da sua preferência de autenticação e implantação de modelos, você precisará de uma chave para autenticação no serviço ou de credenciais do Microsoft Entra ID. A chave é uma cadeia de caracteres de 32 caracteres.

Como trabalhar com conclusões de chat

Nesta seção, você usa a API de inferência de modelo da IA do Azure com um modelo de conclusões para chat.

Dica

A API de inferência de modelo de IA do Azure permite que você converse com a maioria dos modelos implantados no Estúdio do Azure Machine Learning usando o mesmo código e estrutura, incluindo os modelos de chat da família Phi-3.

Criar um cliente para consumir o modelo

Primeiro, crie o cliente para consumir o modelo. O código a seguir usa uma URL de ponto de extremidade e uma chave que são armazenadas em variáveis de ambiente.

Ao implantar o modelo em um ponto de extremidade online auto-hospedado com suporte ao Microsoft Entra ID, você pode usar o trecho de código a seguir para criar um cliente.

Observação

Atualmente, os pontos de extremidade da API sem servidor não dão suporte ao uso do Microsoft Entra ID para autenticação.

Obter as funcionalidades do modelo

A rota /info retorna informações sobre o modelo que é implantado no ponto de extremidade. Retorne as informações do modelo chamando o seguinte método:

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

A resposta é a seguinte:

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

Como criar uma solicitação de conclusão de chat

O exemplo a seguir mostra como você pode criar uma solicitação básica de conclusões de chat para o modelo.

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

Observação

Phi-3.5-Mini-Instruct, Phi-3-mini-4k-Instruct, Phi-3-mini-128k-Instruct, Phi-3-small-8k-Instruct, Phi-3-small-128k-Instruct e Phi-3-medium-128k-Instruct não dão suporte a mensagens de sistema (role="system"). Quando você usa a API de inferência do modelo de IA do Azure, as mensagens do sistema são traduzidas para mensagens de usuário, que é a funcionalidade mais próxima disponível. Essa tradução é oferecida para conveniência, mas é importante verificar se o modelo está seguindo as instruções na mensagem do sistema com o nível certo de confiança.

A resposta é a seguinte, em que você pode ver as estatísticas de uso do modelo:

{
    "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
    }
}

Inspecione a seção usage na resposta para conferir o número de tokens usados para a solicitação, o número total de tokens gerados e o número de tokens usados para a conclusão.

Como transmitir conteúdos

Por padrão, a API de conclusões retorna todo o conteúdo gerado em uma única resposta. Ao gerar conclusões longas, você pode precisar aguardar a resposta por muitos segundos.

É possível transmitir o conteúdo para recebê-lo à medida que ele é gerado. Ao transmitir o conteúdo, é possível começar a processar a conclusão à medida que ele se torna disponível. Esse modo retorna um objeto que transmite de volta a resposta na forma de eventos somente de dados enviados pelo servidor. Extraia partes do campo delta, em vez do campo de mensagem.

{
    "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
}

É possível observar como o streaming gera conteúdos:

{
    "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
        }
    ]
}

A última mensagem no fluxo tem finish_reason definido, o que indica o motivo da interrupção do processo de geração.

{
    "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
    }
}

Como explorar outros parâmetros com suporte do cliente de inferência

Confira outros parâmetros que podem ser especificados no cliente de inferência. Para obter uma lista completa de todos os parâmetros com suporte e da documentação correspondente, consulte a Referência da API de inferência de modelo da IA do 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
    }
}

Aviso

Os modelos da família Phi-3 não dão suporte à formatação de saída em JSON (response_format = { "type": "json_object" }). Você sempre pode solicitar que o modelo gere saídas JSON. No entanto, não há garantia de que essas saídas estejam em formato JSON válido.

Para transmitir um parâmetro que não está na lista de parâmetros com suporte, faça a transmissão para o modelo subjacente usando parâmetros extras. Consulte Transmitir parâmetros extras ao modelo.

Como transmitir parâmetros extras ao modelo

A API de inferência de modelo da IA do Azure permite transmitir parâmetros extras ao modelo. O exemplo de código a seguir mostra como transmitir o parâmetro extra logprobs ao modelo.

Antes de transmitir parâmetros extras à API de inferência de modelo da IA do Azure, verifique se o modelo dá suporte a esses parâmetros. Quando a solicitação é feita ao modelo subjacente, o cabeçalho extra-parameters é transmitido a ele com o valor pass-through. Esse valor indica que o ponto de extremidade deve transmitir os parâmetros extras ao modelo. O uso de parâmetros extras com o modelo não garante que ele possa realmente lidar com eles. Leia a documentação do modelo para entender quais parâmetros adicionais têm suporte.

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
}

Os seguintes parâmetros extras podem ser passados para os modelos de chat da família Phi-3:

Nome Descrição Type
logit_bias Aceita um objeto JSON que mapeia tokens (especificados por sua ID de token no tokenizer) para um valor de viés associado de -100 a 100. Matematicamente, o desvio é adicionado aos logits gerados pelo modelo antes da amostragem. O efeito exato varia de acordo com o modelo, mas os valores entre -1 e 1 deverão diminuir ou aumentar a probabilidade da seleção, os valores como -100 ou 100 deverão resultar em uma proibição ou seleção exclusiva do token relevante. float
logprobs Se você quer retornar as probabilidades de log dos tokens de saída ou não. Se for true, retornará as probabilidades de log de cada token de saída retornado no content da message. int
top_logprobs Um inteiro entre 0 e 20 especificando o número de tokens mais prováveis a serem retornados em cada posição de token, cada um com uma probabilidade de log associada. logprobs precisa estar definido como true se esse parâmetro for usado. float
n Quantas opções de preenchimento de chat serão geradas para cada mensagem de entrada. Observe que você será cobrado com base no número de tokens gerados em todas as opções. int

Aplicar segurança de conteúdo

A API de inferência de modelo da IA do Azure dá suporte à Segurança de Conteúdo de IA do Azure. Ao usar implantações com a Segurança de Conteúdo de IA do Azure habilitada, as entradas e saídas são transmitidas por um conjunto de modelos de classificação que detectam e impedem a saída de usar conteúdos nocivos. O sistema de filtragem de conteúdo detecta e executa ações em categorias específicas de conteúdo potencialmente prejudicial em prompts de entrada e conclusões de saída.

O exemplo a seguir mostra como lidar com eventos quando o modelo detecta conteúdo nocivo na solicitação de entrada e a Segurança de Conteúdo está habilitada.

{
    "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
    }
}

Dica

Para saber mais sobre como você pode definir e controlar as configurações de segurança de conteúdo da IA do Azure, verifique a Documentação da segurança de conteúdo da IA do Azure.

Observação

A segurança de conteúdo da IA do Azure só está disponível para modelos implantados como pontos de extremidade de API sem servidor.

Mais exemplos de inferência

Para mais exemplos sobre como usar os modelos da família Phi-3, consulte os seguintes exemplos e tutoriais:

Descrição Idioma Amostra
Solicitação CURL Bash Link
Pacote de inferência de IA do Azure para JavaScript JavaScript Link
Pacote de inferência da IA do Azure para Python Python Link
Solicitações da Web do Python Python Link
SDK do OpenAI (experimental) Python Link
LangChain Python Link
LiteLLM Python Link

Considerações sobre custo e cotas para modelos da família Phi-3 implantados como pontos de extremidade de API sem servidor

A cota é gerenciada por implantação. Cada implantação tem um limite de taxa de 200.000 tokens por minuto e 1.000 solicitações de API por minuto. No entanto, atualmente, limitamos uma implantação por modelo e projeto. Entre em contato com o Suporte do Microsoft Azure se os limites de taxa atuais não forem suficientes para seus cenários.

Considerações sobre custo e cota para os modelos da família Phi-3 implantados na computação gerenciada

Os modelos da família Phi-3 implantados em computação gerenciada são cobrados com base nas horas de núcleo da instância de computação associada. O custo da instância de computação é determinado pelo tamanho da instância, pelo número de instâncias em execução e pela duração da execução.

É uma boa prática começar com um número baixo de instâncias e escalar verticalmente conforme necessário. Você pode monitorar o custo da instância de computação no portal do Azure.