如何使用Kimi API实现单次和多轮对话的Microsoft Agent Framework控制台应用?

摘要:引言 如果你的技术栈主要是 .NET,想要快速上手 Agent 开发,那么 Microsoft Agent Framework 是一个非常不错的选择。它提供了对话管理、上下文保持、工具调用等一系列功能,让你能专注于业务逻辑实现。 这篇文章用
引言 如果你的技术栈主要是 .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 一个控制台项目 创建项目并安装依赖: dotnet new console -n AgentConsoleApp cd AgentConsoleApp dotnet add package Microsoft.Agents.AI dotnet add package Microsoft.Agents.AI.OpenAI dotnet add package OpenAI 开发实战 一、配置 Kimi API 的访问参数 注意:在实际开发中,确保妥善保管 API 密钥,避免泄露。 我这里把密钥放在了环境变量中,代码中通过读取环境变量来获取密钥。 macOS / Linux: export KIMI_API_KEY="你的 kimi_api_key 放这里" export KIMI_MODEL="moonshot-v1-8k" export KIMI_BASE_URL="https://api.moonshot.cn/v1" Windows PowerShell: $env:KIMI_API_KEY="你的 kimi_api_key 放这里" $env:KIMI_MODEL="moonshot-v1-8k" $env:KIMI_BASE_URL="https://api.moonshot.cn/v1" 读取环境变量的配置类: internal sealed class KimiSettings { public required string ApiKey { get; init; } public required string Model { get; init; } public required string BaseUrl { get; init; } public static KimiSettings FromEnvironment() { var apiKey = Environment.GetEnvironmentVariable("KIMI_API_KEY"); var model = Environment.GetEnvironmentVariable("KIMI_MODEL") ?? "moonshot-v1-8k"; var baseUrl = Environment.GetEnvironmentVariable("KIMI_BASE_URL") ?? "https://api.moonshot.cn/v1"; if (string.IsNullOrWhiteSpace(apiKey)) { throw new InvalidOperationException("缺少环境变量 KIMI_API_KEY。"); } return new KimiSettings { ApiKey = apiKey, Model = model, BaseUrl = baseUrl }; } } 二、完整 Program.cs(含单次对话 + 多轮对话) 把下面代码放到 Program.cs: using Microsoft.Agents.AI; using OpenAI; using OpenAI.Chat; using System.ClientModel; var settings = KimiSettings.FromEnvironment(); var openAiOptions = new OpenAIClientOptions { Endpoint = new Uri(settings.BaseUrl) }; var chatClient = new ChatClient( model: settings.Model, credential: new ApiKeyCredential(settings.ApiKey), options: openAiOptions); var agent = chatClient.AsAIAgent( name: "KimiConsoleAgent", instructions: "你是一个专业、简洁的 .NET 助手。回答优先给结论,再给关键步骤。", description: "Console demo agent with Kimi API"); Console.WriteLine("=== Microsoft Agent Framework + Kimi API Demo ==="); Console.WriteLine($"Model: {settings.Model}"); Console.WriteLine(); await RunSingleTurnAsync(agent); await RunMultiTurnAsync(agent); static async Task RunSingleTurnAsync(ChatClientAgent agent) { Console.WriteLine("[单次对话]"); var question = "请用 3 句话解释 .NET 中 async/await 的作用。"; var response = await agent.RunAsync(question); Console.WriteLine($"你: {question}"); Console.WriteLine($"Agent: {response.Text}"); Console.WriteLine(); } static async Task RunMultiTurnAsync(ChatClientAgent agent) { Console.WriteLine("[多轮对话]"); Console.WriteLine("输入 exit 退出。\n"); // 关键点:同一个 session 会保留上下文,实现多轮会话。 var session = await agent.CreateSessionAsync(); while (true) { Console.Write("你: "); var input = Console.ReadLine(); if (string.IsNullOrWhiteSpace(input)) { continue; } if (input.Equals("exit", StringComparison.OrdinalIgnoreCase)) { Console.WriteLine("会话结束。"); break; } try { var response = await agent.RunAsync(input, session); Console.WriteLine($"Agent: {response.Text}\n"); } catch (Exception ex) { Console.WriteLine($"调用失败: {ex.Message}\n"); } } } 第三方大模型服务接口可以使用 New ChatClient 直接调用,为了演示 Microsoft Agent Framework 的能力,我们通过 AsAIAgent 把它封装成一个 Agent。这样就能享受 Agent Framework 带来的对话管理、上下文保持等特性。 三、运行与验证 执行: dotnet run 我跑了两次对话,效果如下: 建议你也在第二次对话中,验证“多轮上下文是否生效”: 第一轮:我叫小a,是.net开发 第二轮:你记得我叫什么吗? 如果第二轮能回答出“小a”,说明 Session 已承载上下文。 总结 本文我们完成了一个最小但完整的集成: 用 Microsoft Agent Framework 封装 Agent 用 Kimi API(OpenAI 兼容)提供模型能力 在控制台中实现了单次与多轮对话