构建智能应用的新方式:Semantic Kernel MCP 客户端实践

构建智能应用的新方式:Semantic Kernel MCP 客户端实践

引言

在人工智能快速发展的今天,如何有效地将各种 AI 服务和工具整合到一起,为用户提供统一、智能的交互体验,成为了开发者面临的重要挑战。本文将介绍我最近开发的一个项目 —— Semantic Kernel MCP 客户端,它基于微软的 Semantic Kernel 框架,实现了对多种 MCP (Multi-modal Chat Protocol) 服务的集成和管理。

前排提示,文末有大模型AGI-CSDN独家资料包哦!

什么是 Semantic Kernel 和 MCP?

在深入了解项目之前,让我们先简单了解一下核心技术:

Semantic Kernel 是微软开发的一个开源框架,它为开发者提供了一种简单而强大的方式来集成大型语言模型(如 GPT-4)到传统应用程序中。它允许 AI 与应用程序的功能无缝协作,使开发者能够构建更智能的应用。

MCP (Multi-modal Chat Protocol) 是一种用于多模态聊天的协议,它允许不同的 AI 工具和服务通过统一的接口进行交互。这使得开发者可以轻松地将各种专业工具(如 GitHub 工具、搜索引擎等)集成到 AI 应用中。

项目概述

Semantic Kernel MCP 客户端项目的核心目标是:将多个 MCP 服务集成到一个统一的接口中,并通过 Semantic Kernel 使这些服务能够被 AI 模型(如 GPT-4o)无缝调用

这个项目解决了以下几个关键问题:

  1. 如何管理和连接多个 MCP 服务
  2. 如何将 MCP 服务的工具映射为 Semantic Kernel 函数
  3. 如何让 AI 模型能够自动选择和使用合适的工具

技术实现

核心架构

项目的核心架构包括以下几个部分:

  1. MCP 客户端管理:通过 McpDotNetExtensions 类提供对 MCP 客户端的创建、管理和访问
  2. 工具映射:将 MCP 服务提供的工具自动映射为 Semantic Kernel 函数
  3. 聊天界面:提供一个简单的控制台界面,支持用户输入问题并获取流式响应
关键代码解析
MCP 客户端配置和加载
public static async Task<Dictionary<string, IMcpClient>> GetAllMcpClientsAsync(string? configPath = null, ILoggerFactory? loggerFactory = null)
{
    var configs = await LoadMcpConfigsAsync(configPath);
    var result = new Dictionary<string, IMcpClient>();
    var options = new McpClientOptions
    {
        ClientInfo = new() { Name = "MCP Client", Version = "1.0.0" }
    };

    var factory = new McpClientFactory(
        configs,
        options,
        loggerFactory ?? NullLoggerFactory.Instance
    );

    foreach (var config in configs)
    {
        try
        {
            var client = await factory.GetClientAsync(config.Id).ConfigureAwait(false);
            result.Add(config.Id, client);
        }
        catch (Exception ex)
        {
            // 记录错误但继续处理其他客户端
            var logger = (loggerFactory ?? NullLoggerFactory.Instance).CreateLogger(typeof(McpDotNetExtensions));
            logger.LogError(ex, "无法创建ID为'{Id}'的MCP客户端", config.Id);
        }
    }

    return result;
}

这段代码负责从配置文件中加载 MCP 服务配置,并创建相应的客户端实例。它使用了工厂模式来创建客户端,并处理了可能出现的错误,确保即使某个客户端创建失败,其他客户端仍然可以正常工作。

工具映射为 Kernel 函数
public static async Task<IEnumerable<KernelFunction>> MapToFunctionsAsync(this IMcpClient mcpClient)
{
    var tools = await mcpClient.ListToolsAsync().ConfigureAwait(false);
    return tools.Tools.Select(t => t.ToKernelFunction(mcpClient)).ToList();
}

private static KernelFunction ToKernelFunction(this Tool tool, IMcpClient mcpClient)
{
    async Task<string> InvokeToolAsync(Kernel kernel, KernelFunction function, KernelArguments arguments, CancellationToken cancellationToken)
    {
        try
        {
            // 转换参数为mcpdotnet期望的字典格式
            Dictionary<string, object> mcpArguments = [];
            foreach (var arg in arguments)
            {
                if (arg.Value is not null)
                {
                    mcpArguments[arg.Key] = function.ToArgumentValue(arg.Key, arg.Value);
                }
            }

            // 通过mcpdotnet调用工具
            var result = await mcpClient.CallToolAsync(
                tool.Name,
                mcpArguments,
                cancellationToken: cancellationToken
            ).ConfigureAwait(false);

            // 从结果中提取文本内容
            return string.Join("\n", result.Content
                .Where(c => c.Type == "text")
                .Select(c => c.Text));
        }
        catch (Exception ex)
        {
            Console.Error.WriteLine($"调用工具'{tool.Name}'时出错: {ex.Message}");

            // 重新抛出异常,让kernel处理
            throw;
        }
    }

    return KernelFunctionFactory.CreateFromMethod(
        method: InvokeToolAsync,
        functionName: tool.Name,
        description: tool.Description,
        parameters: tool.ToParameters(),
        returnParameter: ToReturnParameter()
    );
}

这段代码是项目的核心部分,它将 MCP 服务提供的工具转换为 Semantic Kernel 函数。这种转换使得 AI 模型可以像调用普通函数一样调用这些工具,大大简化了开发过程。

主程序流程
var model = "gpt-4o";
var kernelBuilder = Kernel.CreateBuilder();
var apiKey = "your-openai-api-key";

// 配置OpenAI
kernelBuilder.AddOpenAIChatCompletion(model, new Uri("https://api.openai.com/v1"), apiKey);

// 创建Kernel
var kernel = kernelBuilder.Build();

// 添加MCP服务
var allClients = await McpDotNetExtensions.GetAllMcpClientsAsync().ConfigureAwait(false);
await McpDotNetExtensions.SetKernelToFunction(allClients, kernel);

var executionSettings = new OpenAIPromptExecutionSettings
{
    Temperature = 0,
    FunctionChoiceBehavior = FunctionChoiceBehavior.Auto()
};
var chat = kernel.GetRequiredService<IChatCompletionService>();

while (true)
{
    Console.WriteLine("请输入您的问题:");
    var str = Console.ReadLine();

    if (str == "exit")
    {
        break;
    }

    var chatHistory = new ChatHistory();
    chatHistory.AddUserMessage(str);
    await foreach (var item in chat.GetStreamingChatMessageContentsAsync(chatHistory, executionSettings, kernel))
    {
        Console.Write(item?.Content);
    }

    Console.WriteLine();
}

主程序首先初始化 Semantic Kernel 和 OpenAI 客户端,然后加载所有 MCP 服务并将其工具映射为 Kernel 函数。接着,它创建一个简单的交互式控制台界面,允许用户输入问题并获取 AI 的响应。

实际应用场景

这个项目可以应用于多种场景,例如:

1. 开发者助手

开发者可以使用这个项目构建一个智能助手,它不仅能回答编程问题,还能直接与 GitHub 交互,例如搜索代码、创建 issue 或提交 PR。

2. 数据分析工具

通过集成数据处理和可视化工具,用户可以用自然语言描述他们的数据分析需求,系统会自动选择合适的工具进行处理并返回结果。

3. 智能客服系统

企业可以将各种内部工具和知识库集成到这个系统中,构建一个能够处理复杂查询的智能客服系统。

项目优势

与传统的 AI 应用相比,这个项目有以下几个优势:

  1. 模块化设计:每个 MCP 服务都是独立的模块,可以根据需要添加或移除
  2. 统一接口:所有工具都通过统一的接口进行访问,简化了开发过程
  3. 自动工具选择:AI 模型可以根据用户的问题自动选择合适的工具
  4. 可扩展性:可以轻松添加新的 MCP 服务和工具

未来展望

这个项目还有很多可以改进和扩展的地方,例如:

  1. 添加更多的 MCP 服务和工具
  2. 实现更复杂的工具选择逻辑
  3. 开发图形用户界面
  4. 支持多轮对话和上下文管理
  5. 添加用户认证和权限管理

结语

Semantic Kernel MCP 客户端项目展示了如何利用现代 AI 技术和框架构建智能应用。通过将多个专业工具集成到一个统一的接口中,它为开发者提供了一种简单而强大的方式来构建下一代 AI 应用。

无论您是想构建一个简单的聊天机器人,还是一个复杂的智能助手,这个项目都提供了一个很好的起点。我希望这篇文章能够帮助您了解这个项目的核心思想和实现方式,并激发您自己的创意。


如何学习AI大模型 ?

“最先掌握AI的人,将会晚掌握AI的人有竞争优势,晚掌握AI的人比完全不会AI的人竞争优势更大”。 在这个技术日新月异的时代,不会新技能或者说落后就要挨打。

老蓝我作为一名在一线互联网企业(保密不方便透露)工作十余年,指导过不少同行后辈。帮助很多人得到了学习和成长。

我是非常希望可以把知识和技术分享给大家,但苦于传播途径有限,很多互联网行业的朋友无法获得正确的籽料得到学习的提升,所以也是整理了一份AI大模型籽料包括:AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、落地项目实战等 免费分享出来。

👉点击即可获取大模型学习包2024年最新版👈

  1. AI大模型学习路线图
  2. 100套AI大模型商业化落地方案
  3. 100集大模型视频教程
  4. 200本大模型PDF书籍
  5. LLM面试题合集
  6. AI产品经理资源合集

大模型学习路线

想要学习一门新技术,你最先应该开始看的就是学习路线图,而下方这张超详细的学习路线图,按照这个路线进行学习,学完成为一名大模型算法工程师,拿个20k、15薪那是轻轻松松!

视频教程

首先是建议零基础的小伙伴通过视频教程来学习,其中这里给大家分享一份与上面成长路线&学习计划相对应的视频教程。文末有整合包的领取方式

技术书籍籽料

当然,当你入门之后,仅仅是视频教程已经不能满足你的需求了,这里也分享一份我学习期间整理的大模型入门书籍籽料。文末有整合包的领取方式

大模型实际应用报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。文末有整合包的领取方式

大模型落地应用案例PPT

光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。文末有整合包的领取方式

大模型面试题&答案

截至目前大模型已经超过200个,在大模型纵横的时代,不仅大模型技术越来越卷,就连大模型相关的岗位和面试也开始越来越卷了。为了让大家更容易上车大模型算法赛道,我总结了大模型常考的面试题。文末有整合包的领取方式

领取方式

这份完整版的 AI大模型学习籽料我已经上传CSDN,需要的同学可以微⭐扫描下方CSDN官方认证二维码免费领取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值