Como gerar preenchimentos de chat com a inferência de modelo de IA do Azure
Importante
Os itens marcados (versão prévia) neste artigo estão atualmente em versão prévia pública. Essa versão prévia é fornecida sem um contrato de nível de serviço e não recomendamos isso 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.
Este artigo explica como usar a API de preenchimentos de chat com modelos implantados na inferência do modelo de IA do Azure nos serviços de IA do Azure.
Pré-requisitos
Para usar modelos de preenchimento de chat no aplicativo, é necessário:
Uma assinatura do Azure. Se você estiver usando Modelos do GitHub, poderá atualizar sua experiência e criar uma assinatura do Azure no processo. Ler Atualização de Modelos do GitHub para inferência de modelo de IA do Azure, se esse for o seu caso.
Um recurso dos serviços de IA do Azure. Para obter mais informações, confira Criar um recurso dos Serviços de IA do Azure.
O URL e a chave do ponto de extremidade.
Uma implantação de modelo de preenchimento de chat. Se você não tiver uma leitura , adicione e configure modelos para os serviços de IA do Azure para adicionar um modelo de preenchimento de chat ao seu recurso.
Instale o pacote de inferência de IA do Azure com o seguinte comando:
pip install -U azure-ai-inference
Dica
Saiba mais sobre o Pacote de inferência da IA do Azure e referências.
Usar preenchimentos de chat
Primeiro, crie o cliente para consumir o modelo. O código a seguir usa um URL de ponto de extremidade e uma chave que são armazenados 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"]),
model="mistral-large-2407"
)
Se você tiver configurado o recurso com suporte ao Microsoft Entra ID, poderá usar o snippet 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(),
model="mistral-large-2407"
)
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
Alguns modelos não dão suporte a mensagens do 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: mistral-large-2407
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.
Para transmitir conclusões, defina stream=True
ao chamar o modelo.
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 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={ "type": ChatCompletionsResponseFormatText() },
)
Alguns modelos não dão suporte à formatação de saída JSON. 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 Passar parâmetros adicionais para o modelo.
Criar saídas JSON
Alguns modelos podem criar saídas JSON. Defina response_format
como json_object
para habilitar o modo JSON e garantir que a mensagem gerada pelo modelo seja JSON válida. Você também deve instruir o modelo a produzir JSON por conta própria por meio de um sistema ou mensagem de usuário. Além disso, o conteúdo da mensagem poderá ser parcialmente cortado se finish_reason="length"
, o que indica que a geração excedeu max_tokens
ou que a conversa excedeu o comprimento máximo do contexto.
from azure.ai.inference.models import ChatCompletionsResponseFormatJSON
response = client.complete(
messages=[
SystemMessage(content="You are a helpful assistant that always generate responses in JSON format, using."
" the following format: { ""answer"": ""response"" }."),
UserMessage(content="How many languages are in the world?"),
],
response_format={ "type": ChatCompletionsResponseFormatJSON() }
)
Passar parâmetros adicionais para o 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.
response = client.complete(
messages=[
SystemMessage(content="You are a helpful assistant."),
UserMessage(content="How many languages are in the world?"),
],
model_extras={
"logprobs": True
}
)
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.
Usar ferramentas
Alguns modelos dão suporte ao uso de ferramentas, que podem ser um recurso extraordinário quando você precisa descarregar tarefas específicas do modelo de linguagem e, em vez disso, dependem de um sistema mais determinístico ou até mesmo de um modelo de linguagem diferente. A API de Inferência de Modelo de IA do Azure permite que você defina ferramentas da seguinte maneira.
O exemplo de código a seguir cria uma definição de ferramenta que é capaz de analisar informações de pré-lançamento de duas cidades diferentes.
from azure.ai.inference.models import FunctionDefinition, ChatCompletionsFunctionToolDefinition
flight_info = ChatCompletionsFunctionToolDefinition(
function=FunctionDefinition(
name="get_flight_info",
description="Returns information about the next flight between two cities. This includes the name of the airline, flight number and the date and time of the next flight",
parameters={
"type": "object",
"properties": {
"origin_city": {
"type": "string",
"description": "The name of the city where the flight originates",
},
"destination_city": {
"type": "string",
"description": "The flight destination city",
},
},
"required": ["origin_city", "destination_city"],
},
)
)
tools = [flight_info]
Neste exemplo, a saída da função é que não há voos disponíveis para a rota selecionada, mas o usuário deve considerar pegar um trem.
def get_flight_info(loc_origin: str, loc_destination: str):
return {
"info": f"There are no flights available from {loc_origin} to {loc_destination}. You should take a train, specially if it helps to reduce CO2 emissions."
}
Observação
Os modelos Cohere exigem que as respostas de uma ferramenta sejam um conteúdo JSON válido formatado como uma cadeia de caracteres. Ao construir mensagens do tipo Ferramenta, verifique se a resposta é uma cadeia de caracteres JSON válida.
Solicite ao modelo para reservar voos com a ajuda desta função:
messages = [
SystemMessage(
content="You are a helpful assistant that help users to find information about traveling, how to get"
" to places and the different transportations options. You care about the environment and you"
" always have that in mind when answering inqueries.",
),
UserMessage(
content="When is the next flight from Miami to Seattle?",
),
]
response = client.complete(
messages=messages, tools=tools, tool_choice="auto"
)
Você pode inspecionar a resposta para descobrir se uma ferramenta precisa ser chamada. Inspecione o motivo de término para determinar se a ferramenta deve ser chamada. Lembre-se de que vários tipos de ferramentas podem ser indicados. Este exemplo demonstra uma ferramenta do tipo function
.
response_message = response.choices[0].message
tool_calls = response_message.tool_calls
print("Finish reason:", response.choices[0].finish_reason)
print("Tool call:", tool_calls)
Para continuar, adicione esta mensagem ao histórico de chats:
messages.append(
response_message
)
Agora, é hora de chamar a função apropriada para lidar com a chamada de ferramenta. O trecho de código a seguir itera em todas as chamadas de ferramenta indicadas na resposta e chama a função correspondente com os parâmetros apropriados. A resposta também é adicionada ao histórico de chats.
import json
from azure.ai.inference.models import ToolMessage
for tool_call in tool_calls:
# Get the tool details:
function_name = tool_call.function.name
function_args = json.loads(tool_call.function.arguments.replace("\'", "\""))
tool_call_id = tool_call.id
print(f"Calling function `{function_name}` with arguments {function_args}")
# Call the function defined above using `locals()`, which returns the list of all functions
# available in the scope as a dictionary. Notice that this is just done as a simple way to get
# the function callable from its string name. Then we can call it with the corresponding
# arguments.
callable_func = locals()[function_name]
function_response = callable_func(**function_args)
print("->", function_response)
# Once we have a response from the function and its arguments, we can append a new message to the chat
# history. Notice how we are telling to the model that this chat message came from a tool:
messages.append(
ToolMessage(
tool_call_id=tool_call_id,
content=json.dumps(function_response)
)
)
Veja a resposta do modelo:
response = client.complete(
messages=messages,
tools=tools,
)
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 como definir e controlar as configurações da Segurança de Conteúdo de IA do Azure, consulte a Documentação da Segurança de Conteúdo de IA do Azure.
Usar preenchimento de chat com imagens
Alguns modelos conseguem realizar raciocínios com base em texto e imagens e geram preenchimentos de texto com base nos dois tipos de entrada. Nesta seção, você explorará os recursos de alguns modelos de visão em forma de chat:
Importante
Alguns modelos dão suporte a apenas uma imagem por turno na conversa de chat, e apenas a última imagem é mantida no contexto. Se você adicionar várias imagens, isso resultará em um erro.
Para ver essa funcionalidade, baixe uma imagem e codifique as informações como cadeia de caracteres base64
. Os dados resultantes devem estar dentro de uma URL de dados:
from urllib.request import urlopen, Request
import base64
image_url = "https://news.microsoft.com/source/wp-content/uploads/2024/04/The-Phi-3-small-language-models-with-big-potential-1-1900x1069.jpg"
image_format = "jpeg"
request = Request(image_url, headers={"User-Agent": "Mozilla/5.0"})
image_data = base64.b64encode(urlopen(request).read()).decode("utf-8")
data_url = f"data:image/{image_format};base64,{image_data}"
Visualize a imagem:
import requests
import IPython.display as Disp
Disp.Image(requests.get(image_url).content)
Agora, crie uma solicitação de preenchimento de chat com a imagem:
from azure.ai.inference.models import TextContentItem, ImageContentItem, ImageUrl
response = client.complete(
messages=[
SystemMessage("You are a helpful assistant that can generate responses based on images."),
UserMessage(content=[
TextContentItem(text="Which conclusion can be extracted from the following chart?"),
ImageContentItem(image=ImageUrl(url=data_url))
]),
],
temperature=0,
top_p=1,
max_tokens=2048,
)
A resposta é a seguinte, em que você pode ver as estatísticas de uso do modelo:
print(f"{response.choices[0].message.role}:\n\t{response.choices[0].message.content}\n")
print("Model:", response.model)
print("Usage:")
print("\tPrompt tokens:", response.usage.prompt_tokens)
print("\tCompletion tokens:", response.usage.completion_tokens)
print("\tTotal tokens:", response.usage.total_tokens)
ASSISTANT: The chart illustrates that larger models tend to perform better in quality, as indicated by their size in billions of parameters. However, there are exceptions to this trend, such as Phi-3-medium and Phi-3-small, which outperform smaller models in quality. This suggests that while larger models generally have an advantage, there might be other factors at play that influence a model's performance.
Model: mistral-large-2407
Usage:
Prompt tokens: 2380
Completion tokens: 126
Total tokens: 2506
Importante
Os itens marcados (versão prévia) neste artigo estão atualmente em versão prévia pública. Essa versão prévia é fornecida sem um contrato de nível de serviço e não recomendamos isso 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.
Este artigo explica como usar a API de preenchimentos de chat com modelos implantados na inferência do modelo de IA do Azure nos serviços de IA do Azure.
Pré-requisitos
Para usar modelos de preenchimento de chat no aplicativo, é necessário:
Uma assinatura do Azure. Se você estiver usando Modelos do GitHub, poderá atualizar sua experiência e criar uma assinatura do Azure no processo. Ler Atualização de Modelos do GitHub para inferência de modelo de IA do Azure, se esse for o seu caso.
Um recurso dos serviços de IA do Azure. Para obter mais informações, confira Criar um recurso dos Serviços de IA do Azure.
O URL e a chave do ponto de extremidade.
Uma implantação de modelo de preenchimento de chat. Se você não tiver uma leitura , adicione e configure modelos para os serviços de IA do Azure para adicionar um modelo de preenchimento de chat ao seu recurso.
Instale a biblioteca de inferência do Azure para JavaScript com o seguinte comando:
npm install @azure-rest/ai-inference
Dica
Saiba mais sobre o Pacote de inferência da IA do Azure e referências.
Usar preenchimentos de chat
Primeiro, crie o cliente para consumir o modelo. O código a seguir usa um URL de ponto de extremidade e uma chave que são armazenados 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)
);
Se você tiver configurado o recurso com suporte ao Microsoft Entra ID, poderá usar o snippet 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()
);
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
Alguns modelos não dão suporte a mensagens do 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: mistral-large-2407
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.
Para transmitir conclusões, use .asNodeStream()
ao chamar 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,
}
}).asNodeStream();
É 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" },
}
});
Alguns modelos não dão suporte à formatação de saída JSON. 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 Passar parâmetros adicionais para o modelo.
Criar saídas JSON
Alguns modelos podem criar saídas JSON. Defina response_format
como json_object
para habilitar o modo JSON e garantir que a mensagem gerada pelo modelo seja JSON válida. Você também deve instruir o modelo a produzir JSON por conta própria por meio de um sistema ou mensagem de usuário. Além disso, o conteúdo da mensagem poderá ser parcialmente cortado se finish_reason="length"
, o que indica que a geração excedeu max_tokens
ou que a conversa excedeu o comprimento máximo do contexto.
var messages = [
{ role: "system", content: "You are a helpful assistant that always generate responses in JSON format, using."
+ " the following format: { \"answer\": \"response\" }." },
{ role: "user", content: "How many languages are in the world?" },
];
var response = await client.path("/chat/completions").post({
body: {
messages: messages,
response_format: { type: "json_object" }
}
});
Passar parâmetros adicionais para o 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.
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
}
});
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.
Usar ferramentas
Alguns modelos dão suporte ao uso de ferramentas, que podem ser um recurso extraordinário quando você precisa descarregar tarefas específicas do modelo de linguagem e, em vez disso, dependem de um sistema mais determinístico ou até mesmo de um modelo de linguagem diferente. A API de Inferência de Modelo de IA do Azure permite que você defina ferramentas da seguinte maneira.
O exemplo de código a seguir cria uma definição de ferramenta que é capaz de analisar informações de pré-lançamento de duas cidades diferentes.
const flight_info = {
name: "get_flight_info",
description: "Returns information about the next flight between two cities. This includes the name of the airline, flight number and the date and time of the next flight",
parameters: {
type: "object",
properties: {
origin_city: {
type: "string",
description: "The name of the city where the flight originates",
},
destination_city: {
type: "string",
description: "The flight destination city",
},
},
required: ["origin_city", "destination_city"],
},
}
const tools = [
{
type: "function",
function: flight_info,
},
];
Neste exemplo, a saída da função é que não há voos disponíveis para a rota selecionada, mas o usuário deve considerar pegar um trem.
function get_flight_info(loc_origin, loc_destination) {
return {
info: "There are no flights available from " + loc_origin + " to " + loc_destination + ". You should take a train, specially if it helps to reduce CO2 emissions."
}
}
Observação
Os modelos Cohere exigem que as respostas de uma ferramenta sejam um conteúdo JSON válido formatado como uma cadeia de caracteres. Ao construir mensagens do tipo Ferramenta, verifique se a resposta é uma cadeia de caracteres JSON válida.
Solicite ao modelo para reservar voos com a ajuda desta função:
var result = await client.path("/chat/completions").post({
body: {
messages: messages,
tools: tools,
tool_choice: "auto"
}
});
Você pode inspecionar a resposta para descobrir se uma ferramenta precisa ser chamada. Inspecione o motivo de término para determinar se a ferramenta deve ser chamada. Lembre-se de que vários tipos de ferramentas podem ser indicados. Este exemplo demonstra uma ferramenta do tipo function
.
const response_message = response.body.choices[0].message;
const tool_calls = response_message.tool_calls;
console.log("Finish reason: " + response.body.choices[0].finish_reason);
console.log("Tool call: " + tool_calls);
Para continuar, adicione esta mensagem ao histórico de chats:
messages.push(response_message);
Agora, é hora de chamar a função apropriada para lidar com a chamada de ferramenta. O trecho de código a seguir itera em todas as chamadas de ferramenta indicadas na resposta e chama a função correspondente com os parâmetros apropriados. A resposta também é adicionada ao histórico de chats.
function applyToolCall({ function: call, id }) {
// Get the tool details:
const tool_params = JSON.parse(call.arguments);
console.log("Calling function " + call.name + " with arguments " + tool_params);
// Call the function defined above using `window`, which returns the list of all functions
// available in the scope as a dictionary. Notice that this is just done as a simple way to get
// the function callable from its string name. Then we can call it with the corresponding
// arguments.
const function_response = tool_params.map(window[call.name]);
console.log("-> " + function_response);
return function_response
}
for (const tool_call of tool_calls) {
var tool_response = tool_call.apply(applyToolCall);
messages.push(
{
role: "tool",
tool_call_id: tool_call.id,
content: tool_response
}
);
}
Veja a resposta do modelo:
var result = await client.path("/chat/completions").post({
body: {
messages: messages,
tools: tools,
}
});
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 como definir e controlar as configurações da Segurança de Conteúdo de IA do Azure, consulte a Documentação da Segurança de Conteúdo de IA do Azure.
Usar preenchimento de chat com imagens
Alguns modelos conseguem realizar raciocínios com base em texto e imagens e geram preenchimentos de texto com base nos dois tipos de entrada. Nesta seção, você explorará os recursos de alguns modelos de visão em forma de chat:
Importante
Alguns modelos dão suporte a apenas uma imagem por turno na conversa de chat, e apenas a última imagem é mantida no contexto. Se você adicionar várias imagens, isso resultará em um erro.
Para ver essa funcionalidade, baixe uma imagem e codifique as informações como cadeia de caracteres base64
. Os dados resultantes devem estar dentro de uma URL de dados:
const image_url = "https://news.microsoft.com/source/wp-content/uploads/2024/04/The-Phi-3-small-language-models-with-big-potential-1-1900x1069.jpg";
const image_format = "jpeg";
const response = await fetch(image_url, { headers: { "User-Agent": "Mozilla/5.0" } });
const image_data = await response.arrayBuffer();
const image_data_base64 = Buffer.from(image_data).toString("base64");
const data_url = `data:image/${image_format};base64,${image_data_base64}`;
Visualize a imagem:
const img = document.createElement("img");
img.src = data_url;
document.body.appendChild(img);
Agora, crie uma solicitação de preenchimento de chat com a imagem:
var messages = [
{ role: "system", content: "You are a helpful assistant that can generate responses based on images." },
{ role: "user", content:
[
{ type: "text", text: "Which conclusion can be extracted from the following chart?" },
{ type: "image_url", image:
{
url: data_url
}
}
]
}
];
var response = await client.path("/chat/completions").post({
body: {
messages: messages,
temperature: 0,
top_p: 1,
max_tokens: 2048,
}
});
A resposta é a seguinte, em que você pode ver as estatísticas de uso do modelo:
console.log(response.body.choices[0].message.role + ": " + 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("\tCompletion tokens:", response.body.usage.completion_tokens);
console.log("\tTotal tokens:", response.body.usage.total_tokens);
ASSISTANT: The chart illustrates that larger models tend to perform better in quality, as indicated by their size in billions of parameters. However, there are exceptions to this trend, such as Phi-3-medium and Phi-3-small, which outperform smaller models in quality. This suggests that while larger models generally have an advantage, there might be other factors at play that influence a model's performance.
Model: mistral-large-2407
Usage:
Prompt tokens: 2380
Completion tokens: 126
Total tokens: 2506
Importante
Os itens marcados (versão prévia) neste artigo estão atualmente em versão prévia pública. Essa versão prévia é fornecida sem um contrato de nível de serviço e não recomendamos isso 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.
Este artigo explica como usar a API de preenchimentos de chat com modelos implantados na inferência do modelo de IA do Azure nos serviços de IA do Azure.
Pré-requisitos
Para usar modelos de preenchimento de chat no aplicativo, é necessário:
Uma assinatura do Azure. Se você estiver usando Modelos do GitHub, poderá atualizar sua experiência e criar uma assinatura do Azure no processo. Ler Atualização de Modelos do GitHub para inferência de modelo de IA do Azure, se esse for o seu caso.
Um recurso dos serviços de IA do Azure. Para obter mais informações, confira Criar um recurso dos Serviços de IA do Azure.
O URL e a chave do ponto de extremidade.
Uma implantação de modelo de preenchimento de chat. Se você não tiver uma leitura , adicione e configure modelos para os serviços de IA do Azure para adicionar um modelo de preenchimento de chat ao seu recurso.
Adicione o pacote de inferência de IA do Azure ao projeto:
<dependency> <groupId>com.azure</groupId> <artifactId>azure-ai-inference</artifactId> <version>1.0.0-beta.1</version> </dependency>
Dica
Saiba mais sobre o Pacote de inferência da IA do Azure e referências.
Se estiver usando o Entra ID, você também precisará do seguinte pacote:
<dependency> <groupId>com.azure</groupId> <artifactId>azure-identity</artifactId> <version>1.13.3</version> </dependency>
Importar os seguintes namespaces:
package com.azure.ai.inference.usage; import com.azure.ai.inference.EmbeddingsClient; import com.azure.ai.inference.EmbeddingsClientBuilder; import com.azure.ai.inference.models.EmbeddingsResult; import com.azure.ai.inference.models.EmbeddingItem; import com.azure.core.credential.AzureKeyCredential; import com.azure.core.util.Configuration; import java.util.ArrayList; import java.util.List;
Usar preenchimentos de chat
Primeiro, crie o cliente para consumir o modelo. O código a seguir usa um URL de ponto de extremidade e uma chave que são armazenados em variáveis de ambiente.
Se você tiver configurado o recurso com suporte ao Microsoft Entra ID, poderá usar o snippet de código a seguir para criar um cliente.
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.
Observação
Alguns modelos não dão suporte a mensagens do 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:
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: mistral-large-2407
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.
É possível observar como o streaming gera conteúdos:
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. Alguns modelos não dão suporte à formatação de saída JSON. 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 Passar parâmetros adicionais para o modelo.
Criar saídas JSON
Alguns modelos podem criar saídas JSON. Defina response_format
como json_object
para habilitar o modo JSON e garantir que a mensagem gerada pelo modelo seja JSON válida. Você também deve instruir o modelo a produzir JSON por conta própria por meio de um sistema ou mensagem de usuário. Além disso, o conteúdo da mensagem poderá ser parcialmente cortado se finish_reason="length"
, o que indica que a geração excedeu max_tokens
ou que a conversa excedeu o comprimento máximo do contexto.
Passar parâmetros adicionais para o 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.
Usar ferramentas
Alguns modelos dão suporte ao uso de ferramentas, que podem ser um recurso extraordinário quando você precisa descarregar tarefas específicas do modelo de linguagem e, em vez disso, dependem de um sistema mais determinístico ou até mesmo de um modelo de linguagem diferente. A API de Inferência de Modelo de IA do Azure permite que você defina ferramentas da seguinte maneira.
O exemplo de código a seguir cria uma definição de ferramenta que é capaz de analisar informações de pré-lançamento de duas cidades diferentes.
Neste exemplo, a saída da função é que não há voos disponíveis para a rota selecionada, mas o usuário deve considerar pegar um trem.
Observação
Os modelos Cohere exigem que as respostas de uma ferramenta sejam um conteúdo JSON válido formatado como uma cadeia de caracteres. Ao construir mensagens do tipo Ferramenta, verifique se a resposta é uma cadeia de caracteres JSON válida.
Solicite ao modelo para reservar voos com a ajuda desta função:
Você pode inspecionar a resposta para descobrir se uma ferramenta precisa ser chamada. Inspecione o motivo de término para determinar se a ferramenta deve ser chamada. Lembre-se de que vários tipos de ferramentas podem ser indicados. Este exemplo demonstra uma ferramenta do tipo function
.
Para continuar, adicione esta mensagem ao histórico de chats:
Agora, é hora de chamar a função apropriada para lidar com a chamada de ferramenta. O trecho de código a seguir itera em todas as chamadas de ferramenta indicadas na resposta e chama a função correspondente com os parâmetros apropriados. A resposta também é adicionada ao histórico de chats.
Veja a resposta do modelo:
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.
Dica
Para saber como definir e controlar as configurações da Segurança de Conteúdo de IA do Azure, consulte a Documentação da Segurança de Conteúdo de IA do Azure.
Usar preenchimento de chat com imagens
Alguns modelos conseguem realizar raciocínios com base em texto e imagens e geram preenchimentos de texto com base nos dois tipos de entrada. Nesta seção, você explorará os recursos de alguns modelos de visão em forma de chat:
Importante
Alguns modelos dão suporte a apenas uma imagem por turno na conversa de chat, e apenas a última imagem é mantida no contexto. Se você adicionar várias imagens, isso resultará em um erro.
Para ver essa funcionalidade, baixe uma imagem e codifique as informações como cadeia de caracteres base64
. Os dados resultantes devem estar dentro de uma URL de dados:
Visualize a imagem:
Agora, crie uma solicitação de preenchimento de chat com a imagem:
A resposta é a seguinte, em que você pode ver as estatísticas de uso do modelo:
ASSISTANT: The chart illustrates that larger models tend to perform better in quality, as indicated by their size in billions of parameters. However, there are exceptions to this trend, such as Phi-3-medium and Phi-3-small, which outperform smaller models in quality. This suggests that while larger models generally have an advantage, there might be other factors at play that influence a model's performance.
Model: mistral-large-2407
Usage:
Prompt tokens: 2380
Completion tokens: 126
Total tokens: 2506
Importante
Os itens marcados (versão prévia) neste artigo estão atualmente em versão prévia pública. Essa versão prévia é fornecida sem um contrato de nível de serviço e não recomendamos isso 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.
Este artigo explica como usar a API de preenchimentos de chat com modelos implantados na inferência do modelo de IA do Azure nos serviços de IA do Azure.
Pré-requisitos
Para usar modelos de preenchimento de chat no aplicativo, é necessário:
Uma assinatura do Azure. Se você estiver usando Modelos do GitHub, poderá atualizar sua experiência e criar uma assinatura do Azure no processo. Ler Atualização de Modelos do GitHub para inferência de modelo de IA do Azure, se esse for o seu caso.
Um recurso dos serviços de IA do Azure. Para obter mais informações, confira Criar um recurso dos Serviços de IA do Azure.
O URL e a chave do ponto de extremidade.
Uma implantação de modelo de preenchimento de chat. Se você não tiver uma leitura , adicione e configure modelos para os serviços de IA do Azure para adicionar um modelo de preenchimento de chat ao seu recurso.
Instale o pacote de inferência de IA do Azure com o seguinte comando:
dotnet add package Azure.AI.Inference --prerelease
Dica
Saiba mais sobre o Pacote de inferência da IA do Azure e referências.
Se estiver usando o Entra ID, você também precisará do seguinte pacote:
dotnet add package Azure.Identity
Usar preenchimentos de chat
Primeiro, crie o cliente para consumir o modelo. O código a seguir usa um URL de ponto de extremidade e uma chave que são armazenados em variáveis de ambiente.
ChatCompletionsClient client = new ChatCompletionsClient(
new Uri(Environment.GetEnvironmentVariable("AZURE_INFERENCE_ENDPOINT")),
new AzureKeyCredential(Environment.GetEnvironmentVariable("AZURE_INFERENCE_CREDENTIAL")),
"mistral-large-2407"
);
Se você tiver configurado o recurso com suporte ao Microsoft Entra ID, poderá usar o snippet de código a seguir para criar um cliente.
client = new ChatCompletionsClient(
new Uri(Environment.GetEnvironmentVariable("AZURE_INFERENCE_ENDPOINT")),
new DefaultAzureCredential(includeInteractiveCredentials: true),
"mistral-large-2407"
);
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
Alguns modelos não dão suporte a mensagens do 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.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: mistral-large-2407
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.
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.
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 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.Content}");
Alguns modelos não dão suporte à formatação de saída JSON. 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 Passar parâmetros adicionais para o modelo.
Criar saídas JSON
Alguns modelos podem criar saídas JSON. Defina response_format
como json_object
para habilitar o modo JSON e garantir que a mensagem gerada pelo modelo seja JSON válida. Você também deve instruir o modelo a produzir JSON por conta própria por meio de um sistema ou mensagem de usuário. Além disso, o conteúdo da mensagem poderá ser parcialmente cortado se finish_reason="length"
, o que indica que a geração excedeu max_tokens
ou que a conversa excedeu o comprimento máximo do contexto.
requestOptions = new ChatCompletionsOptions()
{
Messages = {
new ChatRequestSystemMessage(
"You are a helpful assistant that always generate responses in JSON format, " +
"using. the following format: { \"answer\": \"response\" }."
),
new ChatRequestUserMessage(
"How many languages are in the world?"
)
},
ResponseFormat = new ChatCompletionsResponseFormatJSON()
};
response = client.Complete(requestOptions);
Console.WriteLine($"Response: {response.Value.Content}");
Passar parâmetros adicionais para o 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.
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.Content}");
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.
Usar ferramentas
Alguns modelos dão suporte ao uso de ferramentas, que podem ser um recurso extraordinário quando você precisa descarregar tarefas específicas do modelo de linguagem e, em vez disso, dependem de um sistema mais determinístico ou até mesmo de um modelo de linguagem diferente. A API de Inferência de Modelo de IA do Azure permite que você defina ferramentas da seguinte maneira.
O exemplo de código a seguir cria uma definição de ferramenta que é capaz de analisar informações de pré-lançamento de duas cidades diferentes.
FunctionDefinition flightInfoFunction = new FunctionDefinition("getFlightInfo")
{
Description = "Returns information about the next flight between two cities. This includes the name of the airline, flight number and the date and time of the next flight",
Parameters = BinaryData.FromObjectAsJson(new
{
Type = "object",
Properties = new
{
origin_city = new
{
Type = "string",
Description = "The name of the city where the flight originates"
},
destination_city = new
{
Type = "string",
Description = "The flight destination city"
}
}
},
new JsonSerializerOptions() { PropertyNamingPolicy = JsonNamingPolicy.CamelCase }
)
};
ChatCompletionsFunctionToolDefinition getFlightTool = new ChatCompletionsFunctionToolDefinition(flightInfoFunction);
Neste exemplo, a saída da função é que não há voos disponíveis para a rota selecionada, mas o usuário deve considerar pegar um trem.
static string getFlightInfo(string loc_origin, string loc_destination)
{
return JsonSerializer.Serialize(new
{
info = $"There are no flights available from {loc_origin} to {loc_destination}. You " +
"should take a train, specially if it helps to reduce CO2 emissions."
});
}
Observação
Os modelos Cohere exigem que as respostas de uma ferramenta sejam um conteúdo JSON válido formatado como uma cadeia de caracteres. Ao construir mensagens do tipo Ferramenta, verifique se a resposta é uma cadeia de caracteres JSON válida.
Solicite ao modelo para reservar voos com a ajuda desta função:
var chatHistory = new List<ChatRequestMessage>(){
new ChatRequestSystemMessage(
"You are a helpful assistant that help users to find information about traveling, " +
"how to get to places and the different transportations options. You care about the" +
"environment and you always have that in mind when answering inqueries."
),
new ChatRequestUserMessage("When is the next flight from Miami to Seattle?")
};
requestOptions = new ChatCompletionsOptions(chatHistory);
requestOptions.Tools.Add(getFlightTool);
requestOptions.ToolChoice = ChatCompletionsToolChoice.Auto;
response = client.Complete(requestOptions);
Você pode inspecionar a resposta para descobrir se uma ferramenta precisa ser chamada. Inspecione o motivo de término para determinar se a ferramenta deve ser chamada. Lembre-se de que vários tipos de ferramentas podem ser indicados. Este exemplo demonstra uma ferramenta do tipo function
.
var responseMessage = response.Value;
var toolsCall = responseMessage.ToolCalls;
Console.WriteLine($"Finish reason: {response.Value.Choices[0].FinishReason}");
Console.WriteLine($"Tool call: {toolsCall[0].Id}");
Para continuar, adicione esta mensagem ao histórico de chats:
requestOptions.Messages.Add(new ChatRequestAssistantMessage(response.Value));
Agora, é hora de chamar a função apropriada para lidar com a chamada de ferramenta. O trecho de código a seguir itera em todas as chamadas de ferramenta indicadas na resposta e chama a função correspondente com os parâmetros apropriados. A resposta também é adicionada ao histórico de chats.
foreach (ChatCompletionsToolCall tool in toolsCall)
{
if (tool is ChatCompletionsFunctionToolCall functionTool)
{
// Get the tool details:
string callId = functionTool.Id;
string toolName = functionTool.Name;
string toolArgumentsString = functionTool.Arguments;
Dictionary<string, object> toolArguments = JsonSerializer.Deserialize<Dictionary<string, object>>(toolArgumentsString);
// Here you have to call the function defined. In this particular example we use
// reflection to find the method we definied before in an static class called
// `ChatCompletionsExamples`. Using reflection allows us to call a function
// by string name. Notice that this is just done for demonstration purposes as a
// simple way to get the function callable from its string name. Then we can call
// it with the corresponding arguments.
var flags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static;
string toolResponse = (string)typeof(ChatCompletionsExamples).GetMethod(toolName, flags).Invoke(null, toolArguments.Values.Cast<object>().ToArray());
Console.WriteLine("->", toolResponse);
requestOptions.Messages.Add(new ChatRequestToolMessage(toolResponse, callId));
}
else
throw new Exception("Unsupported tool type");
}
Veja a resposta do modelo:
response = client.Complete(requestOptions);
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.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 como definir e controlar as configurações da Segurança de Conteúdo de IA do Azure, consulte a Documentação da Segurança de Conteúdo de IA do Azure.
Usar preenchimento de chat com imagens
Alguns modelos conseguem realizar raciocínios com base em texto e imagens e geram preenchimentos de texto com base nos dois tipos de entrada. Nesta seção, você explorará os recursos de alguns modelos de visão em forma de chat:
Importante
Alguns modelos dão suporte a apenas uma imagem por turno na conversa de chat, e apenas a última imagem é mantida no contexto. Se você adicionar várias imagens, isso resultará em um erro.
Para ver essa funcionalidade, baixe uma imagem e codifique as informações como cadeia de caracteres base64
. Os dados resultantes devem estar dentro de uma URL de dados:
string imageUrl = "https://news.microsoft.com/source/wp-content/uploads/2024/04/The-Phi-3-small-language-models-with-big-potential-1-1900x1069.jpg";
string imageFormat = "jpeg";
HttpClient httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0");
byte[] imageBytes = httpClient.GetByteArrayAsync(imageUrl).Result;
string imageBase64 = Convert.ToBase64String(imageBytes);
string dataUrl = $"data:image/{imageFormat};base64,{imageBase64}";
Visualize a imagem:
Agora, crie uma solicitação de preenchimento de chat com a imagem:
ChatCompletionsOptions requestOptions = new ChatCompletionsOptions()
{
Messages = {
new ChatRequestSystemMessage("You are an AI assistant that helps people find information."),
new ChatRequestUserMessage([
new ChatMessageTextContentItem("Which conclusion can be extracted from the following chart?"),
new ChatMessageImageContentItem(new Uri(dataUrl))
]),
},
MaxTokens=2048,
};
var response = client.Complete(requestOptions);
Console.WriteLine(response.Value.Content);
A resposta é a seguinte, em que você pode ver as estatísticas de uso do modelo:
Console.WriteLine($"{response.Value.Role}: {response.Value.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}");
ASSISTANT: The chart illustrates that larger models tend to perform better in quality, as indicated by their size in billions of parameters. However, there are exceptions to this trend, such as Phi-3-medium and Phi-3-small, which outperform smaller models in quality. This suggests that while larger models generally have an advantage, there might be other factors at play that influence a model's performance.
Model: mistral-large-2407
Usage:
Prompt tokens: 2380
Completion tokens: 126
Total tokens: 2506
Importante
Os itens marcados (versão prévia) neste artigo estão atualmente em versão prévia pública. Essa versão prévia é fornecida sem um contrato de nível de serviço e não recomendamos isso 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.
Este artigo explica como usar a API de preenchimentos de chat com modelos implantados na inferência do modelo de IA do Azure nos serviços de IA do Azure.
Pré-requisitos
Para usar modelos de preenchimento de chat no aplicativo, é necessário:
Uma assinatura do Azure. Se você estiver usando Modelos do GitHub, poderá atualizar sua experiência e criar uma assinatura do Azure no processo. Ler Atualização de Modelos do GitHub para inferência de modelo de IA do Azure, se esse for o seu caso.
Um recurso dos serviços de IA do Azure. Para obter mais informações, confira Criar um recurso dos Serviços de IA do Azure.
O URL e a chave do ponto de extremidade.
- Uma implantação de modelo de preenchimento de chat. Se você não tiver uma leitura , adicione e configure modelos para os serviços de IA do Azure para adicionar um modelo de preenchimento de chat ao seu recurso.
Usar preenchimentos de chat
Para usar as inserções de texto, use a rota /chat/completions
acrescentada ao URL base junto a credencial indicada em api-key
. O cabeçalho Authorization
também tem suporte no formato Bearer <key>
.
POST https://<resource>.services.ai.azure.com/models/chat/completions?api-version=2024-05-01-preview
Content-Type: application/json
api-key: <key>
Se você configurou o recurso com suporte aoMicrosoft Entra ID, passe o token no cabeçalho Authorization
:
POST https://<resource>.services.ai.azure.com/models/chat/completions?api-version=2024-05-01-preview
Content-Type: application/json
Authorization: Bearer <token>
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.
{
"model": "mistral-large-2407",
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "How many languages are in the world?"
}
]
}
Observação
Alguns modelos não dão suporte a mensagens do 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": "mistral-large-2407",
"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.
{
"model": "mistral-large-2407",
"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": "mistral-large-2407",
"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": "mistral-large-2407",
"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.
{
"model": "mistral-large-2407",
"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": "mistral-large-2407",
"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
}
}
Alguns modelos não dão suporte à formatação de saída JSON. 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 Passar parâmetros adicionais para o modelo.
Criar saídas JSON
Alguns modelos podem criar saídas JSON. Defina response_format
como json_object
para habilitar o modo JSON e garantir que a mensagem gerada pelo modelo seja JSON válida. Você também deve instruir o modelo a produzir JSON por conta própria por meio de um sistema ou mensagem de usuário. Além disso, o conteúdo da mensagem poderá ser parcialmente cortado se finish_reason="length"
, o que indica que a geração excedeu max_tokens
ou que a conversa excedeu o comprimento máximo do contexto.
{
"model": "mistral-large-2407",
"messages": [
{
"role": "system",
"content": "You are a helpful assistant that always generate responses in JSON format, using the following format: { \"answer\": \"response\" }"
},
{
"role": "user",
"content": "How many languages are in the world?"
}
],
"response_format": { "type": "json_object" }
}
{
"id": "0a1234b5de6789f01gh2i345j6789klm",
"object": "chat.completion",
"created": 1718727522,
"model": "mistral-large-2407",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "{\"answer\": \"There are approximately 7,117 living languages in the world today, according to the latest estimates. However, this number can vary as some languages become extinct and others are newly discovered or classified.\"}",
"tool_calls": null
},
"finish_reason": "stop",
"logprobs": null
}
],
"usage": {
"prompt_tokens": 39,
"total_tokens": 87,
"completion_tokens": 48
}
}
Passar parâmetros adicionais para o 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.
POST https://<resource>.services.ai.azure.com/models/chat/completions?api-version=2024-05-01-preview
Authorization: Bearer <TOKEN>
Content-Type: application/json
extra-parameters: pass-through
{
"model": "mistral-large-2407",
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "How many languages are in the world?"
}
],
"logprobs": true
}
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.
Usar ferramentas
Alguns modelos dão suporte ao uso de ferramentas, que podem ser um recurso extraordinário quando você precisa descarregar tarefas específicas do modelo de linguagem e, em vez disso, dependem de um sistema mais determinístico ou até mesmo de um modelo de linguagem diferente. A API de Inferência de Modelo de IA do Azure permite que você defina ferramentas da seguinte maneira.
O exemplo de código a seguir cria uma definição de ferramenta que é capaz de analisar informações de pré-lançamento de duas cidades diferentes.
{
"type": "function",
"function": {
"name": "get_flight_info",
"description": "Returns information about the next flight between two cities. This includes the name of the airline, flight number and the date and time of the next flight",
"parameters": {
"type": "object",
"properties": {
"origin_city": {
"type": "string",
"description": "The name of the city where the flight originates"
},
"destination_city": {
"type": "string",
"description": "The flight destination city"
}
},
"required": [
"origin_city",
"destination_city"
]
}
}
}
Neste exemplo, a saída da função é que não há voos disponíveis para a rota selecionada, mas o usuário deve considerar pegar um trem.
Observação
Os modelos Cohere exigem que as respostas de uma ferramenta sejam um conteúdo JSON válido formatado como uma cadeia de caracteres. Ao construir mensagens do tipo Ferramenta, verifique se a resposta é uma cadeia de caracteres JSON válida.
Solicite ao modelo para reservar voos com a ajuda desta função:
{
"model": "mistral-large-2407",
"messages": [
{
"role": "system",
"content": "You are a helpful assistant that help users to find information about traveling, how to get to places and the different transportations options. You care about the environment and you always have that in mind when answering inqueries"
},
{
"role": "user",
"content": "When is the next flight from Miami to Seattle?"
}
],
"tool_choice": "auto",
"tools": [
{
"type": "function",
"function": {
"name": "get_flight_info",
"description": "Returns information about the next flight between two cities. This includes the name of the airline, flight number and the date and time of the next flight",
"parameters": {
"type": "object",
"properties": {
"origin_city": {
"type": "string",
"description": "The name of the city where the flight originates"
},
"destination_city": {
"type": "string",
"description": "The flight destination city"
}
},
"required": [
"origin_city",
"destination_city"
]
}
}
}
]
}
Você pode inspecionar a resposta para descobrir se uma ferramenta precisa ser chamada. Inspecione o motivo de término para determinar se a ferramenta deve ser chamada. Lembre-se de que vários tipos de ferramentas podem ser indicados. Este exemplo demonstra uma ferramenta do tipo function
.
{
"id": "0a1234b5de6789f01gh2i345j6789klm",
"object": "chat.completion",
"created": 1718726007,
"model": "mistral-large-2407",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "",
"tool_calls": [
{
"id": "abc0dF1gh",
"type": "function",
"function": {
"name": "get_flight_info",
"arguments": "{\"origin_city\": \"Miami\", \"destination_city\": \"Seattle\"}",
"call_id": null
}
}
]
},
"finish_reason": "tool_calls",
"logprobs": null
}
],
"usage": {
"prompt_tokens": 190,
"total_tokens": 226,
"completion_tokens": 36
}
}
Para continuar, adicione esta mensagem ao histórico de chats:
Agora, é hora de chamar a função apropriada para lidar com a chamada de ferramenta. O trecho de código a seguir itera em todas as chamadas de ferramenta indicadas na resposta e chama a função correspondente com os parâmetros apropriados. A resposta também é adicionada ao histórico de chats.
Veja a resposta do modelo:
{
"model": "mistral-large-2407",
"messages": [
{
"role": "system",
"content": "You are a helpful assistant that help users to find information about traveling, how to get to places and the different transportations options. You care about the environment and you always have that in mind when answering inqueries"
},
{
"role": "user",
"content": "When is the next flight from Miami to Seattle?"
},
{
"role": "assistant",
"content": "",
"tool_calls": [
{
"id": "abc0DeFgH",
"type": "function",
"function": {
"name": "get_flight_info",
"arguments": "{\"origin_city\": \"Miami\", \"destination_city\": \"Seattle\"}",
"call_id": null
}
}
]
},
{
"role": "tool",
"content": "{ \"info\": \"There are no flights available from Miami to Seattle. You should take a train, specially if it helps to reduce CO2 emissions.\" }",
"tool_call_id": "abc0DeFgH"
}
],
"tool_choice": "auto",
"tools": [
{
"type": "function",
"function": {
"name": "get_flight_info",
"description": "Returns information about the next flight between two cities. This includes the name of the airline, flight number and the date and time of the next flight",
"parameters":{
"type": "object",
"properties": {
"origin_city": {
"type": "string",
"description": "The name of the city where the flight originates"
},
"destination_city": {
"type": "string",
"description": "The flight destination city"
}
},
"required": ["origin_city", "destination_city"]
}
}
}
]
}
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.
{
"model": "mistral-large-2407",
"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 como definir e controlar as configurações da Segurança de Conteúdo de IA do Azure, consulte a Documentação da Segurança de Conteúdo de IA do Azure.
Usar preenchimento de chat com imagens
Alguns modelos conseguem realizar raciocínios com base em texto e imagens e geram preenchimentos de texto com base nos dois tipos de entrada. Nesta seção, você explorará os recursos de alguns modelos de visão em forma de chat:
Importante
Alguns modelos dão suporte a apenas uma imagem por turno na conversa de chat, e apenas a última imagem é mantida no contexto. Se você adicionar várias imagens, isso resultará em um erro.
Para ver essa funcionalidade, baixe uma imagem e codifique as informações como cadeia de caracteres base64
. Os dados resultantes devem estar dentro de uma URL de dados:
Dica
Você precisará construir o URL de dados usando uma linguagem de script ou programação. Este tutorial usa esta imagem de exemplo no formato JPEG. Uma URL de dados tem um formato da seguinte maneira: data:image/jpg;base64,0xABCDFGHIJKLMNOPQRSTUVWXYZ...
.
Visualize a imagem:
Agora, crie uma solicitação de preenchimento de chat com a imagem:
{
"model": "phi-3.5-vision-instruct",
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": "Which peculiar conclusion about LLMs and SLMs can be extracted from the following chart?"
},
{
"type": "image_url",
"image_url": {
"url": "data:image/jpg;base64,0xABCDFGHIJKLMNOPQRSTUVWXYZ..."
}
}
]
}
],
"temperature": 0,
"top_p": 1,
"max_tokens": 2048
}
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-vision-instruct",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "The chart illustrates that larger models tend to perform better in quality, as indicated by their size in billions of parameters. However, there are exceptions to this trend, such as Phi-3-medium and Phi-3-small, which outperform smaller models in quality. This suggests that while larger models generally have an advantage, there might be other factors at play that influence a model's performance.",
"tool_calls": null
},
"finish_reason": "stop",
"logprobs": null
}
],
"usage": {
"prompt_tokens": 2380,
"completion_tokens": 126,
"total_tokens": 2506
}
}