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


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

Важный

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

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

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

Завершение чата в семантическом ядре

Завершение взаимодействия в чате является основным протоколом взаимодействия с моделью искусственного интеллекта в чате, где история чата поддерживается и представляется модели с каждым запросом. Службы ИИ семантического ядрапредлагают единую платформу для интеграции возможностей завершения чата различных моделей ИИ.

Агент по завершению чата может использовать любой из этих AI-сервисов для генерации ответов, независимо от того, направлен ли ответ пользователю или другому агенту.

Для .NET службы ИИ для завершения чата основаны на интерфейсе IChatCompletionService.

Для .NET некоторые службы ИИ, поддерживающие модели с завершением чата, включают:

Модель Служба семантического ядра ИИ
Azure OpenAI Microsoft.SemanticKernel.Connectors.AzureOpenAI
Близнецы Microsoft.SemanticKernel.Connectors.Google
HuggingFace Microsoft.SemanticKernel.Connectors.HuggingFace
Мистраль Microsoft.SemanticKernel.Connectors.MistralAI
OpenAI Microsoft.SemanticKernel.Connectors.OpenAI
Onnx Microsoft.SemanticKernel.Connectors.Onnx

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

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

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

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

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

Установите пакет semantic-kernel.

pip install semantic-kernel

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

Создание ChatCompletionAgent

ChatCompletionAgent фундаментально основан на службах искусственного интеллекта . Таким образом, создание ChatCompletionAgent начинается с создания экземпляра Kernel, содержащего одну или несколько служб завершения чата, а затем созданием экземпляра агента с ссылкой на этот экземпляр 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
    };

Существует два способа создания ChatCompletionAgent:

1. Предоставив службу завершения чата напрямую:

# Create the agent by directly providing the chat completion service
agent = ChatCompletionAgent(
    service=AzureChatCompletion(),  # your chat completion service instance
    name="<agent name>",
    instructions="<agent instructions>",
)

2. Сначала создав ядро, добавив к ней службу, а затем предоставив ядро:

# Define the kernel
kernel = Kernel()

# Add the chat completion service to the kernel
kernel.add_service(AzureChatCompletion())

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

Первый метод полезен, если у вас уже есть служба завершения чата. Второй метод является полезным, если требуется ядро, которое управляет несколькими службами или дополнительными функциями.

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

Выбор службы ИИ

Использование семантического ядра служб ИИ напрямую не отличается от того, как ChatCompletionAgent поддерживает возможность выбора сервиса с помощью селектора. Селектор службы определяет, какую службу ИИ выбрать, когда в Kernel содержится более одной.

Примечание. Если существует несколько служб ИИ и нет селектора службы, то для агента применяется та же логика по умолчанию, которую вы найдете при использовании служб ИИ за пределами 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)
)

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

Общение с ChatCompletionAgent

Общение с вашим ChatCompletionAgent основано на экземпляре ChatHistory, не отличающемся от взаимодействия со службой ИИ завершения чата.

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

Существует несколько способов общения с ChatCompletionAgent.

Проще всего позвонить и ожидать 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

В противном случае вызов метода invoke возвращает объект AsyncIterable типа 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)

ChatCompletionAgent также поддерживает потоковую передачу, в которой метод invoke_stream возвращает объект типа AsyncIterableStreamingChatMessageContent.

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

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

Инструкция:

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