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.A2A 和 Microsoft.Agents.AI.Hosting.A2A.AspNetCore 实现。
从开发到生产的完整路径
| 阶段 | 内容 | 验证目标 |
|---|---|---|
| 概念验证 | Console + AIAgent + RunAsync | Agent 能回答问题 |
| 工具集成 | 接入数据库、API、文件系统 | Agent 能替做事 |
| 对话管理 | AgentSession + 序列化恢复 | Agent 能保持上下文 |
| 工作流编排 | WorkflowBuilder | 能处理复杂业务流程 |
| 生产部署 | Hosting + A2A + Docker | 服务化运行 |
下一步:常见问题 — 排查技巧与学习资源。