Partilhar via


Explorando o Kernel Semântico ChatCompletionAgent

Importante

Este recurso está na fase de candidato a lançamento. Os recursos neste estágio estão quase completos e geralmente estáveis, embora possam passar por pequenos refinamentos ou otimizações antes de atingir a disponibilidade geral total.

A documentação detalhada da API relacionada a esta discussão está disponível em:

Os agentes estão atualmente indisponíveis em Java.

Conclusão do Chat no Kernel Semântico

Conclusão de Chat é fundamentalmente um protocolo para uma interação baseada em chat com um modelo de IA, onde o histórico do chat é mantido e apresentado ao modelo com cada solicitação. Os serviços de IA do Kernel Semânticooferecem uma estrutura unificada para integrar os recursos de conclusão de bate-papo de vários modelos de IA.

Um agente de conclusão de chat pode aproveitar qualquer um desses serviços de IA para gerar respostas, sejam elas direcionadas a um usuário ou outro agente.

Para .NET, os serviços de IA de conclusão de bate-papo são baseados na IChatCompletionService interface.

Para o .NET, alguns dos serviços de IA que suportam modelos com conclusão de bate-papo incluem:

Modelo Serviço de IA Semantic Kernel
Azure OpenAI Microsoft.SemanticKernel.Connectors.AzureOpenAI
Gêmeos Microsoft.SemanticKernel.Connectors.Google
HuggingFace Microsoft.SemanticKernel.Connectors.HuggingFace
Mistral Microsoft.SemanticKernel.Connectors.MistralAI
OpenAI Microsoft.SemanticKernel.Connectors.OpenAI
Onnx Microsoft.SemanticKernel.Connectors.Onnx

Os agentes estão atualmente indisponíveis em Java.

Preparando seu ambiente de desenvolvimento

Para prosseguir com o desenvolvimento de um AzureAIAgent, configure seu ambiente de desenvolvimento com os pacotes apropriados.

Adicione o pacote Microsoft.SemanticKernel.Agents.Core ao seu projeto:

dotnet add package Microsoft.SemanticKernel.Agents.Core --prerelease

Instale o pacote semantic-kernel:

pip install semantic-kernel

Os agentes estão atualmente indisponíveis em Java.

Criando um ChatCompletionAgent

Um agente de conclusão de chat é fundamentalmente baseado em serviços de IA. Como tal, a criação de um agente de conclusão de chat começa com a criação de uma instância Kernel que contém um ou mais serviços de conclusão de chat e, em seguida, instanciando o agente com uma referência a essa instância Kernel.

// Initialize a Kernel with a chat-completion service
IKernelBuilder builder = Kernel.CreateBuilder();

builder.AddAzureOpenAIChatCompletion(/*<...configuration parameters>*/);

Kernel kernel = builder.Build();

// Create the agent
ChatCompletionAgent agent =
    new()
    {
        Name = "SummarizationAgent",
        Instructions = "Summarize user input",
        Kernel = kernel
    };
# Define the Kernel
kernel = Kernel()

# Add the AzureChatCompletion AI Service to the Kernel
kernel.add_service(AzureChatCompletion())

# Create the agent
agent = ChatCompletionAgent(
  kernel=kernel, 
  name="<agent name>", 
  instructions="<agent instructions>",
)

Os agentes estão atualmente indisponíveis em Java.

Seleção de serviços de IA

Tal como ocorre ao usar diretamente os serviços de IA Kernel Semântico, um ChatCompletionAgent apoia a especificação de um seletor de serviços . Um seletor de serviço identifica qual serviço de IA deve ser direcionado quando o Kernel contém mais de um.

Observação: se vários serviços de IA estiverem presentes e nenhum seletor de serviços for fornecido, a mesma lógica padrão será aplicada ao agente que se encontraria ao usar serviços de IA fora do Agent Framework

IKernelBuilder builder = Kernel.CreateBuilder();

// Initialize multiple chat-completion services.
builder.AddAzureOpenAIChatCompletion(/*<...service configuration>*/, serviceId: "service-1");
builder.AddAzureOpenAIChatCompletion(/*<...service configuration>*/, serviceId: "service-2");

Kernel kernel = builder.Build();

ChatCompletionAgent agent =
    new()
    {
        Name = "<agent name>",
        Instructions = "<agent instructions>",
        Kernel = kernel,
        Arguments = // Specify the service-identifier via the KernelArguments
          new KernelArguments(
            new OpenAIPromptExecutionSettings() 
            { 
              ServiceId = "service-2" // The target service-identifier.
            });
    };
from semantic_kernel.connectors.ai.open_ai import (
    AzureChatCompletion,
    AzureChatPromptExecutionSettings,
)

# Define the Kernel
kernel = Kernel()

# Add the AzureChatCompletion AI Service to the Kernel
kernel.add_service(AzureChatCompletion(service_id="service1"))
kernel.add_service(AzureChatCompletion(service_id="service2"))

settings = AzureChatPromptExecutionSettings(service_id="service2")

# Create the agent
agent = ChatCompletionAgent(
  kernel=kernel, 
  name="<agent name>", 
  instructions="<agent instructions>",
  arguments=KernelArguments(settings=settings)
)

Os agentes estão atualmente indisponíveis em Java.

Conversando com ChatCompletionAgent

Conversar com o teu ChatCompletionAgent baseia-se numa instância ChatHistory, não sendo diferente de interagir com um serviço de IA para Conclusão de Conversa .

// Define agent
ChatCompletionAgent agent = ...;

// Create a ChatHistory object to maintain the conversation state.
ChatHistory chat = [];

// Add a user message to the conversation
chat.Add(new ChatMessageContent(AuthorRole.User, "<user input>"));

// Generate the agent response(s)
await foreach (ChatMessageContent response in agent.InvokeAsync(chat))
{
  // Process agent response(s)...
}

Há várias maneiras de conversar com um ChatCompletionAgent.

O mais fácil é ligar e aguardar get_response:

# Define agent
agent = ChatCompletionAgent(...)

# Define the chat history
chat = ChatHistory()

# Add the user message
chat.add_user_message(user_input)
# Generate the agent response
response = await agent.get_response(chat)
# response is a `ChatMessageContent` object

Caso contrário, chamar o método invoke retorna uma AsyncIterable de ChatMessageContent.

# Define agent
agent = ChatCompletionAgent(...)

# Define the chat history
chat = ChatHistory()

# Add the user message
chat.add_user_message(user_input)

# Generate the agent response(s)
async for response in agent.invoke(chat):
  # process agent response(s)

O ChatCompletionAgent também suporta streaming em que o método invoke_stream retorna um AsyncIterable de StreamingChatMessageContent:

# Define agent
agent = ChatCompletionAgent(...)

# Define the chat history
chat = ChatHistory()

# Add the user message
chat.add_message(ChatMessageContent(role=AuthorRole.USER, content=input))

# Generate the agent response(s)
async for response in agent.invoke_stream(chat):
  # process agent response(s)

Os agentes estão atualmente indisponíveis em Java.

Guia prático:

Para obter um exemplo completo de um ChatCompletionAgent, consulte: