Freigeben über


Erforschung des semantischen Kerns OpenAIAssistantAgent

Wichtig

Dieses Feature befindet sich in der Veröffentlichungskandidatenphase. Features in dieser Phase sind nahezu vollständig und allgemein stabil, obwohl sie kleinere Verfeinerungen oder Optimierungen durchlaufen können, bevor sie die vollständige allgemeine Verfügbarkeit erreichen.

Detaillierte API-Dokumentation zu dieser Diskussion finden Sie unter:

Agents sind derzeit in Java nicht verfügbar.

Was ist ein Assistent?

Die OpenAI-Assistent-API ist eine spezielle Schnittstelle, die für erweiterte und interaktive KI-Funktionen entwickelt wurde, sodass Entwickler personalisierte und mehrstufige aufgabenorientierte Agents erstellen können. Im Gegensatz zur Chat-Vervollständigungs-API, die sich auf einfachen Unterhaltungsaustausch konzentriert, ermöglicht die Assistenten-API dynamische, zielgesteuerte Interaktionen mit zusätzlichen Features wie Code-Interpreter und Dateisuche.

So bereiten Sie Ihre Entwicklungsumgebung vor

Um mit der Entwicklung einer OpenAIAIAssistantAgentfortzufahren, konfigurieren Sie Ihre Entwicklungsumgebung mit den entsprechenden Paketen.

Fügen Sie dem Projekt das Microsoft.SemanticKernel.Agents.OpenAI-Paket hinzu:

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

Möglicherweise möchten Sie auch das Azure.Identity Paket einschließen:

dotnet add package Azure.Identity

Installieren Sie das semantic-kernel-Paket mit den optionalen Azure-Abhängigkeiten:

pip install semantic-kernel[azure]

Agents sind derzeit in Java nicht verfügbar.

Erstellen eines OpenAIAssistantAgent

Das Erstellen eines OpenAIAssistant erfordert das Aufrufen eines Remotediensts, der asynchron behandelt wird. Um dies zu verwalten, wird die OpenAIAssistantAgent über eine statische Fabrikmethode instanziiert, damit der Prozess nicht blockierend abläuft. Diese Methode abstrahiert die Komplexität des asynchronen Aufrufs und gibt eine Zusage oder zukunft zurück, sobald der Assistent vollständig initialisiert und einsatzbereit ist.

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,
)

Agents sind derzeit in Java nicht verfügbar.

Abrufen eines OpenAIAssistantAgent

Nach der Erstellung kann auf den Bezeichner des Assistenten über diesen zugegriffen werden. Dieser Bezeichner kann verwendet werden, um eine OpenAIAssistantAgent aus einer vorhandenen Assistentendefinition zu erstellen.

Für .NET wird der Agentbezeichner als string über die von einem beliebigen Agenten definierte Eigenschaft verfügbar gemacht.

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,
)

Agents sind derzeit in Java nicht verfügbar.

Verwenden eines OpenAIAssistantAgent

Wie bei allen Aspekten der Assistenten-API werden Unterhaltungen remote gespeichert. Jede Unterhaltung wird als Thread bezeichnet und durch einen eindeutigen string Bezeichner identifiziert. Interaktionen mit Ihrem OpenAIAssistantAgent sind an diesen spezifischen Threadbezeichner gebunden, der beim Aufrufen des Agents angegeben werden muss/

// 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)

Agents sind derzeit in Java nicht verfügbar.

Löschen eines OpenAIAssistantAgent

Da die Definition des Assistenten remote gespeichert wird, wird sie beibehalten, wenn sie nicht gelöscht wird.
Das Löschen einer Assistentendefinition kann direkt mit dem AssistantClientdurchgeführt werden.

Hinweis: Der Versuch, eine Agentinstanz nach dem Löschen zu verwenden, führt zu einer Service-Ausnahme.

Für .NET wird der Agentbezeichner als string über die Agent.Id-Eigenschaft verfügbar gemacht, die von einem beliebigen Agenten definiert wurde.

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

is_deleted = agent._is_deleted

Agenten sind momentan in Java nicht verfügbar.

Vorgehensweise

Ein End-to-End-Beispiel für eine OpenAIAssistantAgentfinden Sie unter: