Condividi tramite


Esplorazione del kernel semantico OpenAIAssistantAgent

Importante

Questa funzionalità si trova nella fase candidato al rilascio. Le funzionalità in questa fase sono quasi complete e generalmente stabili, anche se possono subire miglioramenti o ottimizzazioni minori prima di raggiungere la disponibilità generale completa.

La documentazione dettagliata dell'API relativa a questa discussione è disponibile all'indirizzo:

Gli agenti non sono attualmente disponibili in Java.

Che cos'è un assistente?

L'API Assistente OpenAI è un'interfaccia specializzata progettata per funzionalità di intelligenza artificiale più avanzate e interattive, consentendo agli sviluppatori di creare agenti personalizzati e orientati alle attività in più passaggi. A differenza dell'API completamento chat, che si concentra su semplici scambi di conversazioni, l'API Assistente consente interazioni dinamiche basate su obiettivi con funzionalità aggiuntive come l'interprete del codice e la ricerca di file.

Preparazione dell'ambiente di sviluppo

Per procedere con lo sviluppo di un OpenAIAIAssistantAgent, configurare l'ambiente di sviluppo con i pacchetti appropriati.

Aggiungere il pacchetto Microsoft.SemanticKernel.Agents.OpenAI al progetto:

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

È anche possibile includere il pacchetto Azure.Identity:

dotnet add package Azure.Identity

Installare il pacchetto semantic-kernel con le dipendenze facoltative di Azure e.

pip install semantic-kernel[azure]

Gli agenti non sono attualmente disponibili in Java.

Creazione di un OpenAIAssistantAgent

Per creare un OpenAIAssistant è necessario richiamare un servizio remoto, gestito in modo asincrono. Per gestirlo, la OpenAIAssistantAgent viene istanziata tramite un metodo statico di fabbrica, garantendo l'esecuzione del processo in modo non bloccante. Questo metodo astrae la complessità della chiamata asincrona, restituendo una promessa o un futuro dopo che l'assistente è completamente inizializzato e pronto per l'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,
)

Gli agenti non sono attualmente disponibili in Java.

Recupero di un OpenAIAssistantAgent

Dopo la creazione, l'identificatore dell'assistente può essere accessibile tramite il relativo identificatore. Questo identificatore può essere usato per creare un OpenAIAssistantAgent da una definizione di assistente esistente.

Per .NET, l'identificatore dell'agente viene esposto come string attraverso la proprietà definita da qualsiasi 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,
)

Gli agenti non sono attualmente disponibili in Java.

Uso di un OpenAIAssistantAgent

Come per tutti gli aspetti dell'API Assistente, le conversazioni vengono archiviate in remoto. Ogni conversazione viene definita thread e identificata da un identificatore univoco string . Le interazioni con il OpenAIAssistantAgent sono associate a questo identificatore di thread specifico che deve essere specificato quando si chiama l'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)

Gli agenti non sono attualmente disponibili in Java.

Eliminazione di un OpenAIAssistantAgent

Poiché la definizione dell'assistente viene archiviata in modalità remota, verrà mantenuta se non eliminata.
L'eliminazione di una definizione di assistente può essere eseguita direttamente con il AssistantClient.

Nota: il tentativo di usare un'istanza dell'agente dopo l'eliminazione genererà un'eccezione del servizio.

Per .NET, l'identificatore dell'agente viene esposto come string tramite la proprietà Agent.Id definita da ciascun agente.

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

is_deleted = agent._is_deleted

Gli agenti non sono attualmente disponibili in Java.

Guida pratica

Per un esempio completo per un OpenAIAssistantAgent, vedere: