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


Шаг 6. Размещение агента

После создания агента необходимо разместить его, чтобы пользователи и другие агенты могли взаимодействовать с ним.

Параметры размещения

Вариант Description Лучше всего для
Протокол A2A Предоставление доступа к агентам через протокол "агент-к-агенту" Системы с несколькими агентами
Совместимые с OpenAI конечные точки Публикация агентов через API завершения чата или ответов Клиенты, совместимые с OpenAI
Функции Azure (устойчивые) Запуск агентов в качестве устойчивых функций Azure Бессерверные, длительные задачи
ПротоколAG-UI Создание веб-приложений агента ИИ Веб-интерфейсы

Размещение в ASP.NET Core

Платформа Agent Framework предоставляет библиотеки хостинга, которые позволяют интегрировать ИИ-агентов в приложения ASP.NET Core. Эти библиотеки упрощают регистрацию, настройку и делают агентов доступными с помощью различных протоколов.

Как описано в обзоре агентов, AIAgent является основной концепцией фреймворка агентов. Он определяет оболочку LLM, которая обрабатывает входные данные пользователей, принимает решения, вызывает средства и выполняет дополнительную работу для выполнения действий и создания ответов. Предоставление агентов ИИ из приложения ASP.NET Core является не тривиальной задачей. Библиотеки размещения решают это путем регистрации агентов ИИ в контейнере внедрения зависимостей, что дает возможность разрешать зависимости и использовать их в службах приложений. Они также позволяют управлять зависимостями агента, такими как средства и хранилище сеансов, из того же контейнера. Агенты могут размещаться вместе с инфраструктурой приложений, независимо от используемых протоколов. Аналогичным образом рабочие процессы можно размещать и использовать общую инфраструктуру приложения.

Библиотека основной хостинговой функции

Библиотека Microsoft.Agents.AI.Hosting является основой для размещения агентов ИИ в ASP.NET Core. Он предоставляет расширения для регистрации и настройки агентов ИИ и рабочих процессов через IHostApplicationBuilder. В ASP.NET Core IHostApplicationBuilder — это базовый тип, представляющий построителя для размещенных приложений и служб, управления конфигурацией, ведением журнала, временем существования и т. д.

Перед настройкой агентов или рабочих процессов зарегистрируйте IChatClient в контейнере внедрения зависимостей. В приведенных ниже примерах он регистрируется в качестве ключевого одноэлемента под именем chat-model:

// endpoint is of 'https://<your-own-foundry-endpoint>.openai.azure.com/' format
// deploymentName is 'gpt-4o-mini' for example

IChatClient chatClient = new AzureOpenAIClient(
        new Uri(endpoint),
        new DefaultAzureCredential())
    .GetChatClient(deploymentName)
    .AsIChatClient();
builder.Services.AddSingleton(chatClient);

AddAIAgent

Зарегистрируйте агент ИИ с инъекцией зависимостей:

var pirateAgent = builder.AddAIAgent(
    "pirate",
    instructions: "You are a pirate. Speak like a pirate",
    description: "An agent that speaks like a pirate.",
    chatClientServiceKey: "chat-model");

Метод AddAIAgent() возвращает метод IHostedAgentBuilder, который предоставляет методы расширения для настройки агента. Например, можно добавить инструменты в агент:

var pirateAgent = builder.AddAIAgent("pirate", instructions: "You are a pirate. Speak like a pirate")
    .WithAITool(new MyTool()); // MyTool is a custom type derived from AITool

Вы также можете настроить хранилище сеансов (хранилище для данных беседы):

var pirateAgent = builder.AddAIAgent("pirate", instructions: "You are a pirate. Speak like a pirate")
    .WithInMemorySessionStore();

AddWorkflow

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

В этом примере два агента работают последовательно. Сначала ввод пользователя отправляется в agent-1, который создает ответ и отправляет его в agent-2. Затем рабочий процесс выводит окончательный ответ. Также существует метод, который создает параллельное взаимодействие агентов BuildConcurrent.

builder.AddAIAgent("agent-1", instructions: "you are agent 1!");
builder.AddAIAgent("agent-2", instructions: "you are agent 2!");

var workflow = builder.AddWorkflow("my-workflow", (sp, key) =>
{
    var agent1 = sp.GetRequiredKeyedService<AIAgent>("agent-1");
    var agent2 = sp.GetRequiredKeyedService<AIAgent>("agent-2");
    return AgentWorkflowBuilder.BuildSequential(key, [agent1, agent2]);
});

Предоставить рабочий процесс как AI-агента

Чтобы использовать интеграции протокола (например, A2A или OpenAI) с рабочим процессом, преобразуйте его в автономный агент. В настоящее время рабочие процессы не предоставляют аналогичные возможности интеграции самостоятельно, поэтому этот шаг преобразования требуется:

var workflowAsAgent = builder
    .AddWorkflow("science-workflow", (sp, key) => { ... })
    .AddAsAIAgent();  // Now the workflow can be used as an agent

Сведения о реализации

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

Например, используя библиотеку хостинга ASP.NET Core с адаптером протокола A2A.

// Register the agent
var pirateAgent = builder.AddAIAgent("pirate",
    instructions: "You are a pirate. Speak like a pirate",
    description: "An agent that speaks like a pirate.");

// Expose via a protocol (e.g. A2A)
builder.Services.AddA2AServer();
var app = builder.Build();
app.MapA2AServer();
app.Run();

Подсказка

Примеры устойчивых функций Azure см. в примерах бессерверного размещения.

Установите пакет размещения Функций Azure:

pip install agent-framework-azurefunctions --pre

Создайте агент:

from agent_framework.azure import AgentFunctionApp, AzureOpenAIChatClient
from azure.identity import AzureCliCredential


# 1. Instantiate the agent with the chosen deployment and instructions.
def _create_agent() -> Any:
    """Create the Joker agent."""

    return AzureOpenAIChatClient(credential=AzureCliCredential()).as_agent(
        name="Joker",
        instructions="You are good at telling jokes.",
    )

Регистрация агента с помощью AgentFunctionApp:

# 2. Register the agent with AgentFunctionApp so Azure Functions exposes the required triggers.
app = AgentFunctionApp(agents=[_create_agent()], enable_health_check=True, max_poll_retries=50)

Запустите локально с помощью основных средств Функций Azure:

func start

Затем вызовите:

curl -X POST http://localhost:7071/api/agents/Joker/run \
  -H "Content-Type: text/plain" \
  -d "Tell me a short joke about cloud computing."

Подсказка

Проверьте полный пример для полного исполняемого файла, а также примеры хостинга функций Azure для других схем.

Дальнейшие шаги

Вернитесь глубже:

См. также