🎯 使用 GitHub 模型 (.NET) 进行规划和设计模式

📋 学习目标

本笔记本演示了使用 .NET 中的 Microsoft Agent Framework 和 GitHub 模型构建智能代理的企业级规划和设计模式。您将学习创建可以分解复杂问题、规划多步骤解决方案以及使用 .NET 企业功能执行复杂工作流程的代理。

⚙️ 先决条件和设置

开发环境:

  • .NET 9.0 SDK 或更高版本
  • Visual Studio 2022 或带有 C# 扩展的 VS Code
  • GitHub 模型 API 访问

所需的依赖项:

1
2
3
<PackageReference Include="Microsoft.Extensions.AI" Version="9.9.0" />
<PackageReference Include="Microsoft.Extensions.AI.OpenAI" Version="9.9.0-preview.1.25458.4" />
<PackageReference Include="DotNetEnv" Version="3.1.1" />

Environment Configuration (.env file):

1
2
3
GITHUB_TOKEN=your_github_personal_access_token
GITHUB_ENDPOINT=https://models.inference.ai.azure.com
GITHUB_MODEL_ID=gpt-4o-mini

运行代码

本课程包括 .NET 单文件应用程序实现。运行它:

1
2
3
4
5
# Make the file executable (Linux/macOS)
chmod +x 07-dotnet-agent-framework.cs

# Run the application
./07-dotnet-agent-framework.cs

或者使用 dotnet run 命令:

1
dotnet run 07-dotnet-agent-framework.cs

代码实现

完整的实现可以在 07-dotnet-agent-framework.cs 中找到,它演示了:

  • 使用DotNetEnv加载环境配置
  • 为 GitHub 模型配置 OpenAI 客户端
  • 使用 JSON 序列化定义结构化数据模型(Plan 和 TravelPlan)
  • 使用 JSON 模式创建具有结构化输出的 AI 代理
  • 使用类型安全响应执行规划请求

关键概念

使用类型安全模型的结构化规划

代理使用 C# 类来定义规划输出的结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Plan
{
[JsonPropertyName("assigned_agent")]
public string? Assigned_agent { get; set; }

[JsonPropertyName("task_details")]
public string? Task_details { get; set; }
}

public class TravelPlan
{
[JsonPropertyName("main_task")]
public string? Main_task { get; set; }

[JsonPropertyName("subtasks")]
public IList<Plan> Subtasks { get; set; }
}

结构化输出的 JSON 模式

代理配置为返回与 TravelPlan 架构匹配的响应:

1
2
3
4
5
6
7
8
9
10
ChatClientAgentOptions agentOptions = new(name: AGENT_NAME, instructions: AGENT_INSTRUCTIONS)
{
ChatOptions = new()
{
ResponseFormat = ChatResponseFormatJson.ForJsonSchema(
schema: AIJsonUtilities.CreateJsonSchema(typeof(TravelPlan)),
schemaName: "TravelPlan",
schemaDescription: "Travel Plan with main_task and subtasks")
}
};

规划代理说明

代理充当协调员,将任务委派给专门的子代理:

  • FlightBooking:用于预订航班并提供航班信息
  • HotelBooking:用于预订酒店并提供酒店信息
  • CarRental:用于预订汽车并提供汽车租赁信息
  • 活动预订:用于预订活动并提供活动信息
  • DestinationInfo:用于提供有关目的地的信息
  • DefaultAgent:用于处理一般请求

预期输出

当您通过旅行计划请求运行代理时,它将分析请求并生成结构化计划,其中将适当的任务分配给专业代理,格式为符合 TravelPlan 架构的 JSON。