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


Создание агента из шаблона семантического ядра

Это важно

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

Шаблоны запросов в семантическом ядре

Роль агента в основном формируется инструкциями, которые он получает, которые определяют его поведение и действия. Как и при вызове Kernelзапроса, инструкции агента могут включать шаблонные параметры ( как значения, так и функции), которые динамически заменяются во время выполнения. Это обеспечивает гибкие ответы с учетом контекста, позволяя агенту настраивать выходные данные на основе входных данных в режиме реального времени.

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

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

Инструкции агента в качестве шаблона

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

Агент завершения чата

// Initialize a Kernel with a chat-completion service
Kernel kernel = ...;

ChatCompletionAgent agent =
    new()
    {
        Kernel = kernel,
        Name = "StoryTeller",
        Instructions = "Tell a story about {{$topic}} that is {{$length}} sentences long.",
        Arguments = new KernelArguments()
        {
            { "topic", "Dog" },
            { "length", "3" },
        }
    };
agent = ChatCompletionAgent(
    service=AzureChatCompletion(), # or other supported AI Services
    name="StoryTeller",
    instructions="Tell a story about {{$topic}} that is {{$length}} sentences long.",
    arguments=KernelArguments(topic="Dog", length="2"),
)

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

Агент-ассистент OpenAI

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

// Retrieve an existing assistant definition by identifier
AzureOpenAIClient client = OpenAIAssistantAgent.CreateAzureOpenAIClient(new AzureCliCredential(), new Uri("<your endpoint>"));
AssistantClient assistantClient = client.GetAssistantClient();
Assistant assistant = await client.GetAssistantAsync();
OpenAIAssistantAgent agent = new(assistant, assistantClient, new KernelPromptTemplateFactory(), PromptTemplateConfig.SemanticKernelTemplateFormat)
{
    Arguments = new KernelArguments()
    {
        { "topic", "Dog" },
        { "length", "3" },
    }
}
# Create the client using Azure OpenAI resources and configuration
client, model = AzureAssistantAgent.setup_resources()

# Retrieve the assistant definition from the server based on the assistant ID
definition = await client.beta.assistants.retrieve(
    assistant_id="your-assistant-id",
)

# Create the AzureAssistantAgent instance using the client and the assistant definition
agent = AzureAssistantAgent(
    client=client,
    definition=definition,
    arguments=KernelArguments(topic="Dog", length="3"),
)

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

Определение агента из шаблона запроса

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

Шаблон YAML

name: GenerateStory
template: |
  Tell a story about {{$topic}} that is {{$length}} sentences long.
template_format: semantic-kernel
description: A function that generates a story about a topic.
input_variables:
  - name: topic
    description: The topic of the story.
    is_required: true
  - name: length
    description: The number of sentences in the story.
    is_required: true

Инициализация агента

// Read YAML resource
string generateStoryYaml = File.ReadAllText("./GenerateStory.yaml");
// Convert to a prompt template config
PromptTemplateConfig templateConfig = KernelFunctionYaml.ToPromptTemplateConfig(generateStoryYaml);

// Create agent with Instructions, Name and Description 
// provided by the template config.
ChatCompletionAgent agent =
    new(templateConfig)
    {
        Kernel = this.CreateKernelWithChatCompletion(),
        // Provide default values for template parameters
        Arguments = new KernelArguments()
        {
            { "topic", "Dog" },
            { "length", "3" },
        }
    };
import yaml

from semantic_kernel.prompt_template import PromptTemplateConfig

# Read the YAML file
with open("./GenerateStory.yaml", "r", encoding="utf-8") as file:
    generate_story_yaml = file.read()

# Parse the YAML content
data = yaml.safe_load(generate_story_yaml)

# Use the parsed data to create a PromptTemplateConfig object
prompt_template_config = PromptTemplateConfig(**data)

agent = ChatCompletionAgent(
    service=AzureChatCompletion(), # or other supported AI services
    prompt_template_config=prompt_template_config,
    arguments=KernelArguments(topic="Dog", length="3"),
)

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

Переопределение значений шаблонов для прямого вызова

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

// Initialize a Kernel with a chat-completion service
Kernel kernel = ...;

ChatCompletionAgent agent =
    new()
    {
        Kernel = kernel,
        Name = "StoryTeller",
        Instructions = "Tell a story about {{$topic}} that is {{$length}} sentences long.",
        Arguments = new KernelArguments()
        {
            { "topic", "Dog" },
            { "length", "3" },
        }
    };

// Create a ChatHistory object to maintain the conversation state.
ChatHistory chat = [];

KernelArguments overrideArguments =
    new()
    {
        { "topic", "Cat" },
        { "length", "3" },
    });

// Generate the agent response(s)
await foreach (ChatMessageContent response in agent.InvokeAsync(chat, overrideArguments))
{
  // Process agent response(s)...
}
agent = ChatCompletionAgent(
    service=AzureChatCompletion(),
    name="StoryTeller",
    instructions="Tell a story about {{$topic}} that is {{$length}} sentences long.",
    arguments=KernelArguments(topic="Dog", length="2"),
)

# Create a chat history to maintain the conversation state
chat = ChatHistory()

override_arguments = KernelArguments(topic="Cat", length="3")

# Two ways to get a response from the agent

# Get the response which returns a ChatMessageContent directly
response = await agent.get_response(chat, arguments=override_arguments)

# or use the invoke method to return an AsyncIterable of ChatMessageContent
async for response in agent.invoke(chat, arguments=override_arguments):
    # process agent response(s)...

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

Инструкции

Пример от начала до конца по созданию агента из шаблона запроса см. здесь: