找回密码
 立即注册
首页 业界区 业界 Microsoft Agent Framework + Kimi API 实战:控制台应 ...

Microsoft Agent Framework + Kimi API 实战:控制台应用跑通单次与多轮 Agent 对话

彼瞄 昨天 18:45
引言

如果你的技术栈主要是 .NET,想要快速上手 Agent 开发,那么 Microsoft Agent Framework 是一个非常不错的选择。它提供了对话管理、上下文保持、工具调用等一系列功能,让你能专注于业务逻辑实现。
这篇文章用一个最小控制台应用,通过 maf + kimi ai 合作,完成下面的目标:

  • 使用 Microsoft Agent Framework(NuGet 包名为 Microsoft.Agents.AI 体系)
  • 使用 Kimi 的 OpenAI 兼容接口
  • 实现单次对话
  • 实现多轮对话(基于 Session 保留上下文)
你把代码复制后,只要配置好 KIMI_API_KEY 就能跑起来。
环境准备


  • .NET SDK 9.0+
  • Kimi API Key
  • 一个控制台项目
创建项目并安装依赖:
  1. dotnet new console -n AgentConsoleApp
  2. cd AgentConsoleApp
  3. dotnet add package Microsoft.Agents.AI
  4. dotnet add package Microsoft.Agents.AI.OpenAI
  5. dotnet add package OpenAI
复制代码
开发实战

一、配置 Kimi API 的访问参数

注意:在实际开发中,确保妥善保管 API 密钥,避免泄露。
我这里把密钥放在了环境变量中,代码中通过读取环境变量来获取密钥。
macOS / Linux:
  1. export KIMI_API_KEY="你的 kimi_api_key 放这里"
  2. export KIMI_MODEL="moonshot-v1-8k"
  3. export KIMI_BASE_URL="https://api.moonshot.cn/v1"
复制代码
Windows PowerShell:
  1. $env:KIMI_API_KEY="你的 kimi_api_key 放这里"
  2. $env:KIMI_MODEL="moonshot-v1-8k"
  3. $env:KIMI_BASE_URL="https://api.moonshot.cn/v1"
复制代码
读取环境变量的配置类:
  1. internal sealed class KimiSettings
  2. {
  3.         public required string ApiKey { get; init; }
  4.         public required string Model { get; init; }
  5.         public required string BaseUrl { get; init; }
  6.         public static KimiSettings FromEnvironment()
  7.         {
  8.                 var apiKey = Environment.GetEnvironmentVariable("KIMI_API_KEY");
  9.                 var model = Environment.GetEnvironmentVariable("KIMI_MODEL") ?? "moonshot-v1-8k";
  10.                 var baseUrl = Environment.GetEnvironmentVariable("KIMI_BASE_URL") ?? "https://api.moonshot.cn/v1";
  11.                 if (string.IsNullOrWhiteSpace(apiKey))
  12.                 {
  13.                         throw new InvalidOperationException("缺少环境变量 KIMI_API_KEY。");
  14.                 }
  15.                 return new KimiSettings
  16.                 {
  17.                         ApiKey = apiKey,
  18.                         Model = model,
  19.                         BaseUrl = baseUrl
  20.                 };
  21.         }
  22. }
复制代码
二、完整 Program.cs(含单次对话 + 多轮对话)

把下面代码放到 Program.cs:
  1. using Microsoft.Agents.AI;
  2. using OpenAI;
  3. using OpenAI.Chat;
  4. using System.ClientModel;
  5. var settings = KimiSettings.FromEnvironment();
  6. var openAiOptions = new OpenAIClientOptions
  7. {
  8.         Endpoint = new Uri(settings.BaseUrl)
  9. };
  10. var chatClient = new ChatClient(
  11.         model: settings.Model,
  12.         credential: new ApiKeyCredential(settings.ApiKey),
  13.         options: openAiOptions);
  14. var agent = chatClient.AsAIAgent(
  15.         name: "KimiConsoleAgent",
  16.         instructions: "你是一个专业、简洁的 .NET 助手。回答优先给结论,再给关键步骤。",
  17.         description: "Console demo agent with Kimi API");
  18. Console.WriteLine("=== Microsoft Agent Framework + Kimi API Demo ===");
  19. Console.WriteLine($"Model: {settings.Model}");
  20. Console.WriteLine();
  21. await RunSingleTurnAsync(agent);
  22. await RunMultiTurnAsync(agent);
  23. static async Task RunSingleTurnAsync(ChatClientAgent agent)
  24. {
  25.         Console.WriteLine("[单次对话]");
  26.         var question = "请用 3 句话解释 .NET 中 async/await 的作用。";
  27.         var response = await agent.RunAsync(question);
  28.         Console.WriteLine($"你: {question}");
  29.         Console.WriteLine($"Agent: {response.Text}");
  30.         Console.WriteLine();
  31. }
  32. static async Task RunMultiTurnAsync(ChatClientAgent agent)
  33. {
  34.         Console.WriteLine("[多轮对话]");
  35.         Console.WriteLine("输入 exit 退出。\n");
  36.         // 关键点:同一个 session 会保留上下文,实现多轮会话。
  37.         var session = await agent.CreateSessionAsync();
  38.         while (true)
  39.         {
  40.                 Console.Write("你: ");
  41.                 var input = Console.ReadLine();
  42.                 if (string.IsNullOrWhiteSpace(input))
  43.                 {
  44.                         continue;
  45.                 }
  46.                 if (input.Equals("exit", StringComparison.OrdinalIgnoreCase))
  47.                 {
  48.                         Console.WriteLine("会话结束。");
  49.                         break;
  50.                 }
  51.                 try
  52.                 {
  53.                         var response = await agent.RunAsync(input, session);
  54.                         Console.WriteLine($"Agent: {response.Text}\n");
  55.                 }
  56.                 catch (Exception ex)
  57.                 {
  58.                         Console.WriteLine($"调用失败: {ex.Message}\n");
  59.                 }
  60.         }
  61. }
复制代码
第三方大模型服务接口可以使用 New ChatClient 直接调用,为了演示 Microsoft Agent Framework 的能力,我们通过 AsAIAgent 把它封装成一个 Agent。这样就能享受 Agent Framework 带来的对话管理、上下文保持等特性。
三、运行与验证

执行:
  1. dotnet run
复制代码
我跑了两次对话,效果如下:
1.png

建议你也在第二次对话中,验证了“多轮上下文是否生效”:

  • 第一轮:我叫小a,是.net开发
  • 第二轮:你记得我叫什么吗?
如果第二轮能回答出“小a”,说明 Session 已承载上下文。
总结

本文我们完成了一个最小但完整的集成:

  • 用 Microsoft Agent Framework 封装 Agent
  • 用 Kimi API(OpenAI 兼容)提供模型能力
  • 在控制台中实现了单次与多轮对话
这套代码非常适合作为你后续 Web API 或后台服务化改造的起点。下一篇可以直接写“工具调用(Function Calling)+ 业务接口接入”。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册