Изучение семантического ядра 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
возвращает объект типа AsyncIterable
StreamingChatMessageContent
.
# 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
см. здесь:
- практическое руководство :
ChatCompletionAgent