Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
После создания агента необходимо разместить его, чтобы пользователи и другие агенты могли взаимодействовать с ним.
Параметры размещения
| Вариант | Description | Лучше всего для |
|---|---|---|
| Протокол A2A | Предоставление доступа к агентам через протокол "агент-к-агенту" | Системы с несколькими агентами |
| Совместимые с OpenAI конечные точки | Публикация агентов через API завершения чата или ответов | Клиенты, совместимые с OpenAI |
| Устойчивое расширение | Создание устойчивых агентов и рабочих процессов C# и Python на Функции 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 your Microsoft Foundry project endpoint
// deploymentName is 'gpt-4o-mini' for example
IChatClient chatClient = new AIProjectClient(
new Uri(endpoint),
new DefaultAzureCredential())
.GetProjectOpenAIClient()
.GetProjectResponsesClient()
.AsIChatClient(deploymentName);
builder.Services.AddSingleton(chatClient);
Предупреждение
DefaultAzureCredential удобно для разработки, но требует тщательного рассмотрения в рабочей среде. В рабочей среде рекомендуется использовать определенные учетные данные (например, ManagedIdentityCredential), чтобы избежать проблем с задержкой, непреднамеренной проверки данных аутентификации и потенциальных рисков безопасности из-за резервных механизмов.
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();
Подсказка
Примеры Durable Agent для Функции Azure и локальных примеров.
Установите пакет размещения Функции Azure, клиент Foundry и пакет проверки подлинности Azure:
pip install agent-framework-azurefunctions agent-framework-foundry azure-identity
Создайте агент:
# 1. Instantiate the agent with the chosen deployment and instructions.
def _create_agent() -> Any:
"""Create the Joker agent."""
return Agent(
client=FoundryChatClient(
project_endpoint=os.environ["FOUNDRY_PROJECT_ENDPOINT"],
model=os.environ["FOUNDRY_MODEL"],
credential=AzureCliCredential(),
),
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:
az login
pip install -r requirements.txt
# Start Azurite and copy local.settings.json.template to local.settings.json first.
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 для других схем.
Размещение с помощью протокола A2A
Порт Go обеспечивает A2A-хостинг через a2aprovider, который оборачивает агента в HTTP-обработчик, совместимый с протоколом Agent-to-Agent.
Note
Поддержка Durable Extension в Go пока недоступна. Сведения о последнем состоянии пакета SDK go см. в репозитории Agent Framework Go.
Создайте агент:
import (
"github.com/microsoft/agent-framework-go/agent"
"github.com/microsoft/agent-framework-go/provider/a2aprovider"
"github.com/microsoft/agent-framework-go/provider/foundryprovider"
"github.com/a2aproject/a2a-go/v2/a2a"
"github.com/a2aproject/a2a-go/v2/a2asrv"
)
a := foundryprovider.NewAgent(endpoint, token, foundryprovider.ModelDeployment(model), foundryprovider.AgentConfig{
Instructions: "You are a helpful assistant.",
Config: agent.Config{
},
})
Опубликуйте агента через A2A:
url := "http://localhost:5000"
card := &a2a.AgentCard{
Name: "MyAgent",
Description: "A helpful assistant.",
Version: "1.0.0",
DefaultInputModes: []string{"text"},
DefaultOutputModes: []string{"text"},
Capabilities: a2a.AgentCapabilities{Streaming: false},
SupportedInterfaces: []*a2a.AgentInterface{
a2a.NewAgentInterface(url, a2a.TransportProtocolJSONRPC),
},
}
mux := http.NewServeMux()
requestHandler := a2asrv.NewHandler(
a2aprovider.NewExecutor(a, a2aprovider.ExecutorConfig{}),
a2asrv.WithExtendedAgentCard(card),
)
mux.Handle("/", a2asrv.NewJSONRPCHandler(requestHandler))
mux.Handle(a2asrv.WellKnownAgentCardPath, a2asrv.NewStaticAgentCardHandler(card))
log.Println("A2A server listening on :5000")
http.ListenAndServe(":5000", mux)
Подсказка
См. полный клиент-серверный пример A2A для полноценного рабочего примера.
Дальнейшие шаги
Вернитесь глубже:
- Протокол A2A — предоставление и использование агентов через A2A
- Устойчивое расширение — устойчивый C# и Python агент и размещение рабочих процессов
- протоколAG-UI — пользовательские интерфейсы веб-агента
- Документация по размещённым агентам Foundry — понимание работы размещённых агентов в Microsoft Foundry
- Пример размещенных агентов Foundry (Python) — запуск комплексного примера полноценного использования размещенного агента в рамках Agent Framework.