Compartilhar via


Explorando o kernel semântico OpenAIAssistantAgent

Importante

Esta funcionalidade está na fase de release candidate. Os recursos nesta fase são quase completos e geralmente estáveis, embora possam passar por pequenos refinamentos ou otimizações antes de atingir a disponibilidade geral completa.

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

No momento, os agentes não estão disponíveis em Java.

O que é um assistente?

A API do OpenAI Assistant é uma interface especializada projetada para recursos de IA mais avançados e interativos, permitindo que os desenvolvedores criem agentes orientados a tarefas personalizados e em várias etapas. Ao contrário da API Chat Completion (conclusão de bate-papo), que se concentra em trocas de conversas simples, a API do Assistente permite interações dinâmicas e orientadas por objetivos com recursos adicionais, como interpretador de código e pesquisa de arquivos.

Preparando seu ambiente de desenvolvimento

Para continuar desenvolvendo um OpenAIAIAssistantAgent, configure seu ambiente de desenvolvimento com os pacotes apropriados.

Adicione o pacote de Microsoft.SemanticKernel.Agents.OpenAI ao seu projeto:

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

Talvez você também queira incluir o pacote de Azure.Identity:

dotnet add package Azure.Identity

Instale o pacote semantic-kernel com as dependências opcionais de do Azure:

pip install semantic-kernel[azure]

No momento, os agentes não estão disponíveis em Java.

Criando um OpenAIAssistantAgent

A criação de um OpenAIAssistant requer a invocação de um serviço remoto, que é tratado de forma assíncrona. Para gerenciar isso, o OpenAIAssistantAgent é instanciado por meio de um método de fábrica estático, garantindo que o processo ocorra de maneira não bloqueada. Esse método abstrai a complexidade da chamada assíncrona, retornando uma promessa ou futuro quando o assistente estiver totalmente inicializado e pronto para uso.

AssistantClient client = OpenAIAssistantAgent.CreateAzureOpenAIClient(...).GetAssistantClient();
Assistant assistant =
    await this.AssistantClient.CreateAssistantAsync(
        "<model name>",
        "<agent name>",
        instructions: "<agent instructions>");
OpenAIAssistantAgent agent = new(assistant, client);
from semantic_kernel.agents.open_ai import AzureAssistantAgent, OpenAIAssistantAgent

# Set up the client and model using Azure OpenAI Resources
client, model = AzureAssistantAgent.setup_resources()

# Define the assistant definition
definition = await client.beta.assistants.create(
    model=model,
    instructions="<instructions>",
    name="<agent name>",
)

# Create the AzureAssistantAgent instance using the client and the assistant definition
agent = AzureAssistantAgent(
    client=client,
    definition=definition,
)

# or

# Set up the client and model using OpenAI Resources
client, model = OpenAIAssistantAgent.setup_resources()

# Define the assistant definition
definition = await client.beta.assistants.create(
    model=model,
    instructions="<instructions>",
    name="<agent name>",
)

# Create the OpenAIAssistantAgent instance using the client and the assistant definition
agent = OpenAIAssistantAgent(
    client=client,
    definition=definition,
)

No momento, os agentes não estão disponíveis em Java.

Recuperando um OpenAIAssistantAgent

Uma vez criado, o identificador do assistente pode ser acessado por meio de seu identificador. Esse identificador pode ser usado para criar um OpenAIAssistantAgent a partir de uma definição existente de assistente.

Para o .NET, o identificador do agente é exposto como um string por meio da propriedade definida por qualquer agente.

AssistantClient client = OpenAIAssistantAgent.CreateAzureOpenAIClient(...).GetAssistantClient();
Assistant assistant = await this.AssistantClient.GetAssistantAsync("<assistant id>");
OpenAIAssistantAgent agent = new(assistant, client);
# Using Azure OpenAI Resources

# Create the client using Azure OpenAI resources and configuration
client, model = AzureAssistantAgent.setup_resources()

# Create the assistant definition
definition = await client.beta.assistants.create(
    model=model,
    name="<agent name>",
    instructions="<instructions>",
)

# Store the assistant ID
assistant_id = definition.id

# Retrieve the assistant definition from the server based on the assistant ID
new_asst_definition = await client.beta.assistants.retrieve(assistant_id)

# Create the AzureAssistantAgent instance using the client and the assistant definition
agent = AzureAssistantAgent(
    client=client,
    definition=new_asst_definition,
)

No momento, os agentes não estão disponíveis em Java.

Usando um OpenAIAssistantAgent

Como acontece com todos os aspectos da API do Assistente, as conversas são armazenadas remotamente. Cada conversa é chamada de thread e identificada por um identificador exclusivo string . As interações com seus OpenAIAssistantAgent estão associadas a esse identificador de tópico específico que deve ser especificado ao contatar o agente.

// Define agent
OpenAIAssistantAgent agent = ...;

// Create a thread for the agent conversation.
string threadId = await agent.CreateThreadAsync();

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

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

// Delete the thread when it is no longer needed
await agent.DeleteThreadAsync(threadId);
# Define agent
openai_agent = await ...

# Create a thread for the agent conversation
thread_id = await agent.create_thread()

# Add a user message to the conversation
await agent.add_chat_message(
  thread_id=thread_id, 
  message=ChatMessageContent(role=AuthorRole.USER, content="<user input>"),
)

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

# Delete the thread when it is no longer needed
await agent.delete_thread(thread_id)

No momento, os agentes não estão disponíveis em Java.

Excluindo um OpenAIAssistantAgent

Como a definição do assistente é armazenada remotamente, ela persistirá se não for excluída.
A exclusão de uma definição de assistente pode ser executada diretamente com o AssistantClient.

Observação: a tentativa de usar uma instância do agente depois de ser excluída resultará em uma exceção de serviço.

Para o .NET, o identificador do agente é exposto como um string por meio da Agent.Id propriedade definida por qualquer agente.

AssistantClient client = OpenAIAssistantAgent.CreateAzureOpenAIClient(...).GetAssistantClient();
Assistant assistant = await this.AssistantClient.DeleteAssistantAsync("<assistant id>");
await agent.delete()

is_deleted = agent._is_deleted

No momento, os agentes não estão disponíveis em Java.

Instruções

Para obter um exemplo completo de um OpenAIAssistantAgent, consulte: