Step 1:创建第一个 Agent
这是入门教程的 Step 1,目标是创建一个最简单的 AI Agent 并成功调用。
创建项目
bash
mkdir MyFirstAgent && cd MyFirstAgent
dotnet new console -n Step1_HelloAgent
cd Step1_HelloAgent
dotnet add package Azure.AI.Projects --prerelease
dotnet add package Azure.Identity
dotnet add package Microsoft.Agents.AI三个包各自的作用:
Azure.AI.Projects— Azure AI 平台的项目级客户端。AIProjectClient是 Agent 的入口点,它不做 AI 推理,而是负责资源的连接管理和认证。Azure.Identity— Azure SDK 的统一认证库。DefaultAzureCredential会自动尝试多种认证方式(环境变量 → Azure CLI → Visual Studio → Managed Identity)。Microsoft.Agents.AI— Agent 核心库。定义了AIAgent基类、ChatClientAgent实现、AgentSession会话管理、以及RunAsync/RunStreamingAsync等核心方法。
配置 Azure OpenAI 端点
bash
export AZURE_OPENAI_ENDPOINT="https://your-resource.openai.azure.com/"
export AZURE_OPENAI_DEPLOYMENT_NAME="gpt-4o-mini"编写第一个 Agent
csharp
using Azure.AI.Projects;
using Azure.Identity;
using Microsoft.Agents.AI;
// 从环境变量读取 Azure OpenAI 端点
var endpoint = Environment.GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT")
?? throw new InvalidOperationException("请设置 AZURE_OPENAI_ENDPOINT");
var deploymentName = Environment.GetEnvironmentVariable("AZURE_OPENAI_DEPLOYMENT_NAME")
?? "gpt-4o-mini";
// 第一步:创建 AIProjectClient(Azure AI 项目客户端)
// AIProjectClient 是 Agent 的入口点,它管理模型连接和资源
var projectClient = new AIProjectClient(
new Uri(endpoint),
new DefaultAzureCredential());
// 第二步:通过 AsAIAgent 扩展方法创建 Agent
// AsAIAgent 把 AIProjectClient 包装成一个 AIAgent 实例
AIAgent agent = projectClient.AsAIAgent(
model: deploymentName,
instructions: "你是一个友好的助手。回答简洁明了。",
name: "HelloAgent");
// 第三步:运行 Agent(非流式)
// RunAsync 发送消息并等待完整回复
var response = await agent.RunAsync("法国最大的城市是哪个?");
Console.WriteLine(response);运行这段代码,控制台会输出 Agent 的回答。RunAsync 方法是 Agent 的核心调用方式,它接受用户输入,由 Agent 框架自动处理与 LLM 的通信、工具调用(如果已注册)、上下文管理等一系列复杂操作,最后返回一个 AgentResponse 对象。
关于 DefaultAzureCredential
DefaultAzureCredential 的工作方式是"链式尝试"——按顺序尝试多种认证来源,直到其中一个成功。默认尝试顺序是:环境变量 > Azure CLI > Visual Studio > Managed Identity。如果你在本地用 az login 登录了 Azure CLI,代码中不需要任何额外的配置。
在生产环境中,建议替换为 ManagedIdentityCredential(Azure 托管环境中)或 ChainedTokenCredential(精确控制尝试顺序),避免因意外回退导致的延迟。
流式响应
csharp
// 流式输出——每个 Token 生成后立即返回
await foreach (var update in agent.RunStreamingAsync("给我讲一个有趣的事实。"))
{
Console.Write(update);
}
Console.WriteLine();流式输出的原理:Agent 不是等 LLM 生成完完整回复才返回,而是每生成一个 Token 就立即通过 RunStreamingAsync 返回给调用者。
完整交互式终端
csharp
using Azure.AI.Projects;
using Azure.Identity;
using Microsoft.Agents.AI;
var endpoint = Environment.GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT") ?? throw new InvalidOperationException();
var deploymentName = Environment.GetEnvironmentVariable("AZURE_OPENAI_DEPLOYMENT_NAME") ?? "gpt-4o-mini";
AIAgent agent = new AIProjectClient(new Uri(endpoint), new DefaultAzureCredential())
.AsAIAgent(model: deploymentName, instructions: "你是一个友好的助手。回答简洁明了。", name: "ChatBot");
Console.WriteLine("🤖 Agent 已就绪!输入 'exit' 退出。\n");
while (true)
{
Console.Write("🧑 ");
var input = Console.ReadLine();
if (string.IsNullOrEmpty(input) || input == "exit") break;
Console.Write("🤖 ");
await foreach (var update in agent.RunStreamingAsync(input))
{
Console.Write(update);
}
Console.WriteLine("\n");
}要点回顾
AIProjectClient是 Agent 的入口,管理模型连接和认证AsAIAgent()把AIProjectClient包装为AIAgent实例RunAsync用于非流式调用,返回完整AgentResponseRunStreamingAsync用于流式调用,逐 Token 返回DefaultAzureCredential适合开发环境,生产环境用明确的凭据类型
下一步:Step 2:工具调用 — 给 Agent 添加真实的业务能力。