当前位置: 首页 > news >正文

连接 AI 模型和配置 MCP

使用 SemanticKernel 框架对接 LLM,将 MCP Tool 转换为 Function 添加到对话上下文中。

var aiModel = configuration.GetSection("AIModel"); var builder = Kernel.CreateBuilder() .AddAzureOpenAIChatCompletion( deploymentName: aiModel["ModelId"], endpoint: aiModel["Endpoint"], apiKey: aiModel["Key"]); builder.Services.AddLogging(s => { s.AddConsole(); }); Kernel kernel = builder.Build(); // 这里将 mcp 转换为 functaion call kernel.Plugins.AddFromFunctions("amap", tools.Select(aiFunction => aiFunction.AsKernelFunction())); var chatCompletionService = kernel.GetRequiredService<IChatCompletionService>(); OpenAIPromptExecutionSettings openAIPromptExecutionSettings = new() { Temperature = 0, FunctionChoiceBehavior = FunctionChoiceBehavior.Auto(options: new() { RetainArgumentTypes = true }) };

第三步:对话交互

编写控制台与用户对话交互。

var history = new ChatHistory(); string? userInput; do { Console.Write("用户提问 > "); userInput = Console.ReadLine(); history.AddUserMessage(userInput!); var result = await chatCompletionService.GetChatMessageContentAsync( history, executionSettings: openAIPromptExecutionSettings, kernel: kernel); Console.WriteLine("AI 回答 > " + result); history.AddMessage(result.Role, result.Content ?? string.Empty); } while (userInput is not null);

演示地图规划

注意,由于高德地图免费额度限流,而 AI 对话时可能有多次对 MCP Server 请求,因此有时候效果并不是那么好。

1. 智能旅游路线规划

最多支持16个途经点的旅游路线规划,自动计算最优顺序,并提供可视化地图链接。

使用示例

请帮我规划一条上海三日游路线,包括外滩、东方明珠、迪士尼、豫园、南京路,并提供可视化地图

2. 景点搜索与详情查询

查询景点的详细信息,包括评分、开放时间、门票价格等。

使用示例:

请查询黄山风景区的开放时间、门票价格和旅游季节推荐

AI 是怎么识别调用 MCP

在编写高德地图规划时,有一段代码是将 MCP 服务器的接口转换为 Function 的,代码如下:

kernel.Plugins .AddFromFunctions("amap", tools.Select(aiFunction => aiFunction.AsKernelFunction()))

其实在这里就可以下结论,并不是 AI 模型直接调用 MCP Server 的,依然 Client 进行是 Function call 。

通过拦截 http 请求可以发现,当用户输入请帮我规划一条上海三日游路线,包括外滩、东方明珠、迪士尼、豫园、南京路,并提供可视化地图时,客户端首先将用户提问和 mcp 服务所提供的 function call 一起发送到 AI 模型服务器。

对话时,Client 提供给 LLM 的 Function (MCP Tool)列表。

然后 AI 回答要调用的 Function call 步骤和参数,接着由客户端实现将 Function 定位 MCP Server,并顺序调用每个 Tool。

LLM 返回要顺序调用的 Function 列表以及参数:

客户端将每个 Function 的执行结果和用户的提问等信息,一起再次提交给 AI 模型服务器。

由于高德接口并发限制,有部分接口调用失败,那么客户端可能会来回请求多次,最后输出 AI 的回答。

到这里,读者应该明白 MCP Tool、Plugin、Function Call 的关系了吧!

实现 Mcp Server

前面笔者介绍了 MCP Tool,但是 MCP Server 还可以提供很多很有用的功能,MCP 协议定义了以下核心模块:

  • Core architecture
  • Resources
  • Prompts
  • Tools
  • Sampling
  • Roots
  • Transports

作为当前社区中最关注的 Tools,本文已经单独介绍,接下来将会以继续讲解其它功能模块。

实现 Resources

示例项目参考:ResourceServer、ResourceClient。

Resources 定义:Resources 是 Model Context Protocol (MCP) 中的一个核心原语,它允许服务器暴露可以被 clients 读取并用作 LLM 交互上下文的数据和内容。

Resources 代表 MCP server 想要提供给 clients 的任何类型的数据,在使用上,MCP Server 可以给每种资源定义一个 Uri,这个 Uri 的协议格式可以是虚拟的,这不重要,只要是能够定位资源的一段 Uri 字符串即可。

只看定义,读者可能不理解什么意思,没关系,等后面动手做的时候就知道了。

http://www.gsyq.cn/news/1623995.html

相关文章:

  • 终极指南:如何一键下载百度文库等30+平台文档?kill-doc免费工具全解析
  • Python爬虫经典案例第60篇:邮件平台爬取:Gmail数据采集实战
  • Appium WebView自动化测试:从原理到实战的环境搭建与避坑指南
  • Burpsuite Intruder自动化越权测试:Cookie替换实战指南
  • 如何将钢琴录音自动转换为专业乐谱:开源音乐转录工具完整指南
  • HAR文件转pytest测试用例:接口自动化效率提升300%
  • C++ OpenCV灰度图像增强三合一工具:对比度拉伸+伽马校正+直方图均衡化
  • 嵌入式电源管理:TPS65263与PIC18F87J10的高效协同设计
  • java面试题 4
  • STM32G071RB与WSEN-ISDS IMU运动跟踪开发指南
  • JMeter gRPC性能测试插件实战:从原理到CI/CD集成
  • yuzu模拟器完整指南:如何在PC上高效运行Switch游戏的实用方案
  • JMeter性能测试实战:从入门到精通,掌握接口压测与分布式部署
  • JMeter SSE接口自动化测试:流式响应数据提取与断言实战
  • Frida Native函数Hook实战:精准获取堆栈、参数与返回值
  • CVE-2023-38646漏洞应急响应:Metabase企业版RCE漏洞检测、修复与验证实战
  • JMeter CSV参数化实战:数据驱动性能测试配置与并发控制详解
  • AI安全测试与红队评估:从原理到企业落地
  • JMeter性能测试实战:从脚本优化到瓶颈定位的完整指南
  • Hashcat密码恢复实战:从原理到防御的完整指南
  • CLONEit 评测以及如何使用CLONEit 轻松传输数据
  • FDE前沿部署工程师全解:实战训练营如何搭建完整上岗能力体系
  • Android支付安全升级:KeyStore2与AES-GCM认证加密实战指南
  • CORS安全配置实战:从漏洞原理到Nginx与后端修复指南
  • SkillBridge终极指南:3步实现Python与Cadence Virtuoso无缝集成
  • LoadRunner 11性能测试实战:从脚本开发到瓶颈定位的完整指南
  • BurpSuite从入门到实战:Web安全测试核心工具环境搭建与模块解析
  • LTC6904与MKV44F128VLH16实现高精度方波信号生成
  • Python加解密实战:从AES、RSA到HMAC的安全编程指南
  • Turbo Intruder:高性能HTTP模糊测试与安全审计实战指南