在 .NET 中使用 Moonshot Kimi + AgentFramework:从 SDK 到 Agent 的完整实践

在 .NET 中使用 Moonshot Kimi + AgentFramework:从 SDK 到 Agent 的完整实践 🚀

最近我将两个常用的 .NET AI 组件移植为支持 Moonshot Kimi 系列模型的版本,使其可以无缝接入现有的 .NET AI 生态,并与 AgentFramework 直接配合使用。

本文介绍这两个库的设计目标、使用方式,以及如何快速构建一个可调用工具函数的 Agent。


项目背景

当前 .NET 生态中已经存在两套非常优秀的抽象:

但它们默认只支持 OpenAI 端点,而 Moonshot Kimi 提供的是 OpenAI 兼容接口。

  • openai SDK 中的 ChoiceDelta 和 ChatCompletionMessage 类型并不提供 reasoning_content 字段,因此无法直接通过 .reasoning_content 的方式访问该字段,仅支持通过 hasattr(obj, "reasoning_content") 来判断是否存在字段,如果存在,则使用 getattr(obj, "reasoning_content") 获取字段值 输出思考内容 - Kimi API 开放平台

因此只需要适配即可直接融入现有生态。

为此我创建了两个移植库:

为了版本号和原本的库保持一致,所以只发行 beta 版本,以便可以随时修复bug

二者配合后即可直接接入:

  • Microsoft.Extensions.AI
  • Microsoft.Agents.AI
  • AgentFramework
  • Tool Calling
  • Function Calling
  • Streaming

设计目标

1. 完全兼容现有 .NET AI 生态

无需修改现有代码结构即可切换到 Moonshot Kimi:

2. 支持 Kimi 系列模型

例如:

  • kimi-k2.5
  • kimi-k2
  • kimi-1.5
  • 以及后续新模型

3. 可直接构建 Agent

通过 AsAIAgent() 扩展即可转换为 AgentFramework Agent。


安装

两个库可以分别使用,也可以组合使用。

通常推荐组合:

  • SDK:负责底层 API 调用
  • Extensions:负责 Agent 与抽象层

基础使用

首先创建 Moonshot OpenAI 兼容客户端:

csharp 复制代码
using Microsoft.Extensions.AI;
using Microsoft.Agents.AI;
using OpenAI;
using System.ClientModel;

var client = new OpenAIClient(
    new ApiKeyCredential("YOUR API KEY"),
    new OpenAIClientOptions()
    {
        Endpoint = new Uri("https://api.moonshot.cn/v1"),
    });

选择 Kimi 模型:

csharp 复制代码
var chatClient = client.GetChatClient("kimi-k2.5");

构建 Agent

通过扩展方法直接转换为 Agent:

csharp 复制代码
AIAgent agent = chatClient
    .AsIChatClient()
    .AsAIAgent(
        instructions: "你是一个智能助手。",
        name: "Agent Assistant",
        tools: [AIFunctionFactory.Create(MenuTools.GetWeather)]);

调用:

csharp 复制代码
var res = await agent.RunAsync("今天昆明天气怎么样?");
Console.WriteLine(res);

定义工具函数

AgentFramework 支持直接从 C# 方法生成 Tool:

csharp 复制代码
class MenuTools
{
    [Description("获取指定地点的天气情况。")]
    public static string GetWeather(
        [Description("获取天气信息的地点。")] string location)
        => $"{location} 的天气多云,最高气温为 14°C。";
}

运行结果示例:

复制代码
昆明 的天气多云,最高气温为 14°C。

Agent 会自动:

  1. 识别用户意图
  2. 调用工具函数
  3. 返回结果

无需手动解析 Function Call。


架构关系

整体调用链如下:

复制代码
Moonshot Kimi API
        ↑
moonshotai-dotnet
        ↑
Moonshot.Extensions.AI
        ↑
Microsoft.Extensions.AI
        ↑
Microsoft.Agents.AI
        ↑
AgentFramework

这意味着:

  • 可以直接使用现有 Agent 代码
  • 可以复用 Tool 生态
  • 可以与 Semantic Kernel 等共存

与直接调用 API 的区别

直接调用:

  • 需要手写 function call 解析
  • 需要维护上下文
  • 需要手动调度工具

使用 AgentFramework:

  • 自动工具调用
  • 自动上下文管理
  • 支持多工具协作
  • 支持复杂 Agent

使用场景

适用于:

  • 企业内部智能助手
  • 多工具 AI Agent
  • RAG + Agent 系统
  • 自动化工作流
  • Copilot 类应用

总结

通过这两个移植库,可以在 .NET 中非常轻松地使用 Moonshot Kimi:

  • 保持 OpenAI SDK 编程体验
  • 无缝接入 Microsoft AI 抽象
  • 直接构建 Agent
  • 支持 Tool Calling
  • 支持复杂 Agent 编排

这使得 Moonshot Kimi 能够完整融入 .NET Agent 生态,构建生产级 AI 应用。

如果你已经在使用 Microsoft.Extensions.AI 或 AgentFramework,基本只需要替换 Endpoint 即可完成迁移。✨

相关推荐
key_3_feng11 小时前
评估与对齐:Agent 自我进化的护栏
前端·数据库·agent
念念不忘 必有回响12 小时前
从0到1:搭建你的第一个 MCP 服务器实战
agent·mcp
jerrywus12 小时前
Skill、MCP、Workflow、Rules、Memory 有什么区别?拿几次真实开发任务讲清楚
前端·agent·claude
七夜zippoe12 小时前
第一季收官:Agent 架构设计模式语言与选型决策框架
ai·agent·架构设计·模式语言·选择决策
yunzerui13 小时前
模型不是选错,是干脆不调用:一次 function-calling 失败的真实归因
agent
小易老师13 小时前
用中间件把任务规划嵌入 Agent 循环:告别把计划写死在 Prompt 里
人工智能·agent
weixin_4492293813 小时前
Skill应用11:详细设计自动生成|强制“文字先行”,杜绝AI只堆代码不讲设计
人工智能·agent·架构设计·详细设计·trae·skill应用
終不似少年遊*14 小时前
【Skill】为中型研发团队制作的敏捷迭代AI副驾Skill
人工智能·python·华为云·agent·ai编程·skill
lee_curry14 小时前
第十周完整学习笔记:继续升级为“检索更准、权限安全、索引可维护、失败可恢复、长期可运行”的企业级 RAG 系统
python·ai·langchain·agent·langgraph
sg_knight15 小时前
Bug 定位实战:把报错丢给 Codex,它是怎么修的
chatgpt·llm·bug·openai·agent·ai编程·codex