De acordo com a documentação da Microsoft, a API de chamada para a Azure OpenAI Service funcionaria a partir da interação de três camadas:
- Control Plane: esta camada tem um contexto que se assemelha a todos os demais painéis de controles para serviços da Azure OpenAI, de modo que por meio dela seria possível realizar tarefas como criar recursos e instanciar modelos.
- Data Plane - authoring: já o contexto dessa camada da API estaria relacionado com tarefas como Fine-Tunning, File-Upload, Ingestion Jobs, Batch, etc.
- Data Plane - inference: finalmente, nesta camada a API dispões capacidades para tarefas relacionadas com as Completions, Chat Completions, Embeddings, Speech/Whisper, Dall-e, Assistants, etc.
Assim, por meio dessas três camadas da especificação da API do Azure OpenAI todos os modelos, todos os recursos e todas as capacidades do serviço poderiam ser alcançados pelos desenvolvedores.
Em termos de autenticação há dois métodos:
- Autenticação pela API Key: neste caso a api-key é inserida na header da chamada.
- Autenticação por meio do Microsoft ID: segundo a documentação este método é um pouco mais complexo e exige a formatação do ID da Microsoft para a construção do header das chamadas.
"You can authenticate an API call using a Microsoft Entra token. Authentication tokens are included in a request as the Authorization header. The token provided must be preceded by Bearer, for example Bearer YOUR_AUTH_TOKEN."
Azure OpenAI Service REST API reference
Tip
Exemplo de uma URL de chamada para um recurso: POST https://{endpoint}/openai/deployments/{deployment-id}/completions?api-version=2024-10-21
E por meio da estrutura de um JSON é possível transmitir parâmetros para o prompt com o qual interagimos:
{
"prompt": [
"tell me a joke about mango"
],
"max_tokens": 32,
"temperature": 1.0,
"n": 1
}
Acima podemos ver a passagem de um parámetro para o prompt, bem como parâmetros relacionados à estruturação da resposta por parte do modelo de IA.
Assim, por meio do parâmetro max_tokes o desenvolvedor pode especificar o número máximo de tokes gastos para um resposta, enquanto por meio da temperature ele define o percentual probabilístico ou determinístico das respostas, enquanto que em n é definido o número de compleitions que o desenvolvedor espera receber na resposta.
As repostas às chamada também são recebidas por meio de JSON de forma que é possível ao desenvolvedor construir a sua saída para o usuário de acordo com a escolha dos campos recebidos pela estrutura de JSON.
Outros parâmetros possíveis seriam:
- Top-p
- Presence/Frequence penalties, etc.
A API da Azure OpenAI possui bibliotecas especiais chamadas de Assistants (ou Assistentes) que visam para auxiliar na preparação das chamadas e na personalização dos modelos, e que podem ser usadas nas seguintes linguagens:
- Python
- Go
- Java
- JavaScript:
deprecated - C#
Abaixo temos Um exemplo da criação de um Assistente com a linguagem Python:
from openai import AzureOpenAI
client = AzureOpenAI(
api_key=os.getenv("AZURE_OPENAI_API_KEY"),
api_version="2024-08-01-preview",
azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT")
)
assistant = client.beta.assistants.create(
instructions="You are an AI assistant that can write code to help answer math questions",
model="<REPLACE WITH MODEL DEPLOYMENT NAME>", # replace with model deployment name.
tools=[{"type": "code_interpreter"}]
)
A documentação da Microsoft define o Semantic Kernel como um kit de desenvolvimento leve e open-source destinado a facilitar a criação de agents e para a integração aos modelos de IA a partir de códigos pelas linguagens C#, Python ou Java.
"Microsoft and other Fortune 500 companies are already leveraging Semantic Kernel because it’s flexible, modular, and observable. Backed with security enhancing capabilities like telemetry support, and hooks and filters so you’ll feel confident you’re delivering responsible AI solutions at scale."
Introduction to Semantic Kernel
Em termos práticos, o semantic kernel funcionaria como um middleware para facilitar o processo da construção de código modular e também para facilitar as tarefas de estender recursos, como, por exemplo, das especificações para o 365 Copilot*.
Ademais, a documentação acrescenta também que por se tratar de uma funcionalidade amplamente integrada à API, o semantic kernel ofereceria ao desenvolvedor uma extraordinária flexibilidade para alcançar "all of the services and plugins necessary to run both native code and AI services", além de capaz de ser usado por praticamente todos os componentes da SDK para trazer funcionalidades aos agentes criados:
"This is extremely powerful, because it means you as a developer have a single place where you can configure, and most importantly monitor, your AI agents. Take for example, when you invoke a prompt from the kernel. When you do so, the kernel will...\
- Select the best AI service to run the prompt.\
- Build the prompt using the provided prompt template.\
- Send the prompt to the AI service.\
- Receive and parse the response.\
- And finally return the response from the LLM to your application."
Introduction to Semantic Kernel
A figura abaixo traz exemplos dos recursos e das capacidades que o semantic kernel disponibiliza aos desenvolvedores:
E abaixo temos uma lista dos serviços já disponibilizados pelo semantic kernel, ainda que nem todos os serviços estejam plenamente implantados em cada uma das linguagens de programação especificadas:
- Chat Complition
- Text Generation
- Embedding Generation (Experimental)
- Text-to-Image (Experimental)
- Image-to-Text (Experimental)
- Text-to-Audio (Experimental)
- Audio-to-Text (Experimental)
- Realtime (Experimental)
- Referências:
Hello there, my name is Marcus Richa and I would like to present here some of my personal experiences within the the DIO educational platform!
- Linux Experience - bootcamp 44h - Fev. 2025 (Certificado)
- Microsoft AI for Tech - OpenAI Services - em andamento.