Поделиться через


Изучение OpenAIAssistantAgent семантического ядра

Важный

Эта функция находится на этапе релиз-кандидата. Функции на этом этапе почти завершены и обычно стабильны, хотя они могут пройти незначительные уточнения или оптимизации, прежде чем достичь полной общедоступной доступности.

Подробная документация по API, связанная с этим обсуждением, доступна по адресу:

Агенты в настоящее время недоступны в Java.

Что такое помощник?

API Помощника OpenAI — это специализированный интерфейс, предназначенный для более сложных и интерактивных возможностей ИИ, что позволяет разработчикам создавать персонализированные и многошаговые агенты, ориентированные на выполнение задач. В отличие от API чат-сессии, который направлен на простые разговорные обмены, API помощника обеспечивает динамичные, целенаправленные взаимодействия с дополнительными функциями, такими как интерпретатор кода и поиск файлов.

Подготовка среды разработки

Чтобы продолжить разработку OpenAIAIAssistantAgent, настройте среду разработки с соответствующими пакетами.

Добавьте пакет Microsoft.SemanticKernel.Agents.OpenAI в проект:

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

Также может потребоваться включить пакет Azure.Identity:

dotnet add package Azure.Identity

Установите пакет semantic-kernel с дополнительными зависимостями для Azure.

pip install semantic-kernel[azure]

Агенты в настоящее время недоступны в Java.

Создание OpenAIAssistantAgent

Создание OpenAIAssistant требует вызова удаленной службы, которая обрабатывается асинхронно. Для управления этим процессом OpenAIAssistantAgent создается через статический метод фабрики, что обеспечивает выполнение процесса в неблокирующем режиме. Этот метод абстрагирует сложность асинхронного вызова, возвращая обещание или будущее после полного инициализации и готовности помощника к использованию.

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

Агенты в настоящее время недоступны в Java.

Получение OpenAIAssistantAgent

После создания к помощнику можно получить доступ с помощью его идентификатора. Этот идентификатор можно использовать для создания OpenAIAssistantAgent из существующего определения ассистента.

Для .NET идентификатор агента предоставляется в виде string свойства, определенного любым агентом.

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

Агенты в настоящее время недоступны в Java.

Использование OpenAIAssistantAgent

Как и во всех аспектах API помощника, беседы хранятся удаленно. Каждая беседа называется потоком и определяется уникальным string идентификатором. Взаимодействия с OpenAIAssistantAgent привязаны к этому конкретному идентификатору потока, который необходимо указать при вызове агента/

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

Агенты в настоящее время недоступны в Java.

Удаление OpenAIAssistantAgent

Так как определение помощника хранится удаленно, оно будет сохраняться, если оно не удалено.
Удаление определения помощника может осуществляться непосредственно с помощью AssistantClient.

Примечание. Попытка использования экземпляра агента после удаления вызовет ошибку службы.

Для .NET идентификатор агента предоставляется как string через свойство Agent.Id, определенное любым агентом.

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

is_deleted = agent._is_deleted

Агенты в настоящее время недоступны в Java.

Инструкции

Полный пример для OpenAIAssistantAgentсм.: