引言
如果你的技术栈主要是 .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 带来的对话管理、上下文保持等特性。
三、运行与验证
执行:我跑了两次对话,效果如下:
建议你也在第二次对话中,验证了“多轮上下文是否生效”:
- 第一轮:我叫小a,是.net开发
- 第二轮:你记得我叫什么吗?
如果第二轮能回答出“小a”,说明 Session 已承载上下文。
总结
本文我们完成了一个最小但完整的集成:
- 用 Microsoft Agent Framework 封装 Agent
- 用 Kimi API(OpenAI 兼容)提供模型能力
- 在控制台中实现了单次与多轮对话
这套代码非常适合作为你后续 Web API 或后台服务化改造的起点。下一篇可以直接写“工具调用(Function Calling)+ 业务接口接入”。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |