Skip to content

Step 6:托管部署

Microsoft.Agents.AI.Hosting 提供了在 ASP.NET Core 中注册和配置 Agent 及工作流的基础设施。


注册 AI Agent 到 DI

csharp
using Microsoft.Agents.AI.Hosting;

var builder = WebApplication.CreateBuilder(args);

// 1. 注册 IChatClient(底层 AI 连接)
IChatClient chatClient = new AIProjectClient(
        new Uri(endpoint),
        new DefaultAzureCredential())
    .GetProjectOpenAIClient()
    .GetProjectResponsesClient()
    .AsIChatClient(deploymentName);

builder.Services.AddSingleton(chatClient);

// 2. 注册 Agent(AddAIAgent 是 Hosting 库的核心方法)
var pirateAgent = builder.AddAIAgent(
    "pirate",                              // Agent 名称(用于 DI keyed service)
    instructions: "You are a pirate. Speak like a pirate.",
    description: "An agent that speaks like a pirate.",
    chatClientServiceKey: "chat-model");   // 指定使用哪个 IChatClient

// 3. 链式配置工具和会话存储
builder.AddAIAgent("support", instructions: "你是技术支持工程师。")
    .WithAITool(new TicketTool())                       // 添加工具
    .WithInMemorySessionStore();                        // 内存会话存储

注册工作流

csharp
// 注册多个 Agent
builder.AddAIAgent("agent-1", instructions: "you are agent 1!");
builder.AddAIAgent("agent-2", instructions: "you are agent 2!");

// 注册工作流(顺序执行两个 Agent)
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]);
});

// 将工作流转为 AIAgent(以便通过协议暴露)
workflow.AddAsAIAgent();

通过 A2A 协议暴露 Agent

A2A(Agent-to-Agent)是标准的 Agent 间通信协议:

csharp
// 注册 A2A 服务
builder.Services.AddA2AServer();

var app = builder.Build();

// 映射 A2A 端点
app.MapA2A(pirateAgent,
    path: "/a2a/pirate",
    agentCard: new()
    {
        Name = "Pirate Agent",
        Description = "An agent that speaks like a pirate.",
        Version = "1.0"
    });

app.Run();

全部组合:完整的托管示例

csharp
using Microsoft.Agents.AI.Hosting;
using Microsoft.Agents.AI.Hosting.A2A;

var builder = WebApplication.CreateBuilder(args);

// 1. AI 服务
var endpoint = Environment.GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT")!;
var deploymentName = Environment.GetEnvironmentVariable("AZURE_OPENAI_DEPLOYMENT_NAME") ?? "gpt-4o-mini";

IChatClient chatClient = new AIProjectClient(
        new Uri(endpoint), new DefaultAzureCredential())
    .GetProjectOpenAIClient().GetProjectResponsesClient()
    .AsIChatClient(deploymentName);
builder.Services.AddSingleton(chatClient);

// 2. 注册 Agent
builder.AddAIAgent("support", instructions: "你是技术支持工程师。回答专业简洁。")
    .WithInMemorySessionStore();

// 3. A2A 协议
builder.Services.AddA2AServer();
builder.Services.AddCors(o => o.AddDefaultPolicy(p =>
    p.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader()));

var app = builder.Build();
app.UseCors();

// 4. 映射 A2A 端点
app.MapA2A(agent, path: "/a2a/support",
    agentCard: new() { Name = "Support Agent", Description = "技术支持", Version = "1.0" });

// 5. 健康检查和 HTTP API
app.MapGet("/health", () => Results.Ok(new {
    status = "healthy",
    version = "1.0.0",
    agent = "support"
}));

// 6. 启动服务
app.Run();

Docker 部署

dockerfile
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
WORKDIR /app
EXPOSE 8080

FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src
COPY ["AgentService.csproj", "."]
RUN dotnet restore
COPY . .
RUN dotnet publish -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=build /app/publish .
ENV ASPNETCORE_URLS=http://+:8080
ENTRYPOINT ["dotnet", "AgentService.dll"]

集成生态

向量存储

通过 Microsoft.Extensions.VectorData.Abstractions 统一抽象层,可以在不改变业务代码的前提下切换不同的向量数据库后端。目前支持的实现包括 Azure AI Search、Azure Cosmos DB for MongoDB vCore、Elasticsearch、Pinecone、PostgreSQL(pgvector)、Qdrant、Redis Stack、Weaviate 等 19 种。

聊天历史 Provider

  • InMemoryChatHistoryProvider — 开发测试用,数据不持久化
  • CosmosDBChatHistoryProvider — 生产环境,持久化到 Cosmos DB

Memory Provider

  • ChatHistoryMemoryProvider — 基于对话历史的短期记忆
  • Neo4jMemoryProvider — 基于图数据库的知识图谱记忆

RAG Provider

  • Neo4jGraphRAGProvider — 基于图数据库的 RAG 实现
  • TextSearchProvider — 基于关键词和向量混合搜索

A2A 协议集成

A2A 定义了四个核心概念:Agent Card(发现信息)、消息通信、长期运行任务、跨平台互操作。在 C# 中通过 Microsoft.Agents.AI.Hosting.A2AMicrosoft.Agents.AI.Hosting.A2A.AspNetCore 实现。

从开发到生产的完整路径

阶段内容验证目标
概念验证Console + AIAgent + RunAsyncAgent 能回答问题
工具集成接入数据库、API、文件系统Agent 能替做事
对话管理AgentSession + 序列化恢复Agent 能保持上下文
工作流编排WorkflowBuilder能处理复杂业务流程
生产部署Hosting + A2A + Docker服务化运行

下一步:常见问题 — 排查技巧与学习资源。

学而不思则罔,思而不学则殆