Microsoft Agent Framework + Kimi API 实战:控制台应用跑通单次与多轮 Agent 对话
·
如果你的技术栈主要是 .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开发 - 第二轮:
你记得我叫什么吗?
更多推荐


所有评论(0)