概述

  在另外一个《Senparc.AI 系列教程》(Senparc.AI 系列教程(一):概要 ,Senparc.AI 系列教程(二):配置大模型,开始开发应用)中简要介绍了 Senparc.AI 所支撑的底层能力(持续更新中),从这个系列开始,我们将逐步探索其强大的扩展和落地能力。

  本文介绍的案例中,我们使用微信 SDK,借助 Senparc.AI,结合 MCP,打通了微信接口的自动搜索和代码生成,使开发者可以在网页、IDE,甚至 Dfiy、n8n 等框架中高效开发或让微信程序自动化运行。

  微信的案例我将分为(上)(中)(下)三篇,分别介绍网页版助手IDE 端 AI 辅助编程,以及参与到工作流的智能体互动中。

案例资源

  当前展示的案例已经全部开源(可商用),可在  https://sdk.weixin.senparc.com 在线体验,同时也支持本地部署,涉及到的开源项目如下:

  1. 微信 SDK:https://github.com/JeffreySu/WeiXinMPSDK
  2. NeuCharFramework:
    源码:https://github.com/NeuCharFramework/NcfPackageSources
    可直接运行的模板:https://github.com/NeuCharFramework/NCF (桌面版下载:https://github.com/NeuCharFramework/NCF/releases
  3. QQ 交流群:553198593

  本文的网页版案例主要集中在微信 SDK。

案例功能介绍(网页版助手)

  这个工具的诞生,源于目前 AI 编程的巨大痛点:即使大模型已经学习了大量编程知识,但是对于特定 SDK 内部编程接口的幻觉依然非常严重,准确率低。而各类 SDK,尤其 API 的对接精准度要求通常又比较高,所以光使用大模型辅助编程效率仍然很低,经常发生的情况是:生成 3 分钟,修改 3 小时

  尤其对于 SDK 类型和基础库,程序能否成功运行,高度依赖方法生成的准确性,否则一旦出现任何问题,开发人员需要花费更多的时间重新阅读文档、研究接口、排查错误,修复错误,痛苦不堪。

  为此我们推出了基于 MCP 的整体解决方案,当前章节主要介绍网页版。

  先上效果,然后我们再分析原理。

  打开页面(或从微信 SDK 开源项目下载到本地):  https://sdk.weixin.senparc.com,在首页即可看到 AI 助手(或从顶部菜单【工具箱】>【AI 开发助手】进入):

  输入你想实现的功能:

  稍等片刻,即可收到 AI 助手回复:

  AI 回复内容中包含了自动识别的模块(公众号/小程序/企业微信/开放平台等),以及接口的说明、可直接复制使用的代码示例以及使用提示,同时也可以点击“接口参数说明”,查看每个参数详细的介绍:

  当然你可以对此并不满意,并且提出了更加复杂的需求,AI 也会回你自动生成精准代码。点击编辑图标:

  重新编辑内容:

  发送并获取结果:

  

  如果代码中包含了多个接口,相关参数也一览无余:

  至此,AI 已经帮你完成了大部分的关键接口开发,至少省掉了几个小时的接口研究和测试(接口调用是非常精准的)。

  小彩蛋:你可以要求 AI 使用异步方法,看看是否能同样能准确响应。

原理解析

  先上图:

  关键过程解析

  服务起始于 2.1 处理请求并连接 MCP 服务,相关任务提交至位于 Sample 的 AiDocController 中的 ProcessQuery() 方法中,随后尝试连接 MCP 服务并获取工具列表(tool-list)(图中 3.1),核心代码如下:

 1 //建立 MCP 连接,并获取信息
2 var mcpEndpoint = "https://www.ncf.pub/mcp-senparc-xncf-weixinmanager/sse";
3 var clientTransport = new SseClientTransport(new SseClientTransportOptions()
4 {
5 Endpoint = new Uri(mcpEndpoint),
6 Name = "NCF-Server"
7 });
8
9 var client = await McpClientFactory.CreateAsync(clientTransport);
10 var tools = await client.ListToolsAsync();

  上述 mcpEndpoint 所对应的 Server 中,部署了一系列为 AI 助手服务的 MCP 工具(原理在后续章节介绍)。

  获取到 tools 后(图中 2.2),我们使用 Senparc.AI 完成请求基础配置(图中 2.3),并发起一个 AI 请求(图中 2.4):

 1 var aiSetting = Senparc.AI.Config.SenparcAiSetting;
2 var semanticAiHandler = new SemanticAiHandler(aiSetting);
3
4 var parameter = new PromptConfigParameter()
5 {
6 MaxTokens = 2000,
7 Temperature = 0.7,
8 TopP = 0.5,
9 StopSequences = new List<string> { "<END>" }
10 };
11
12 var systemMessage = $@"你是一位智能助手,帮我选择最适合的 API 方案。";
13
14 var iWantToRun = semanticAiHandler.ChatConfig(parameter,
15 userId: "Jeffrey",
16 maxHistoryStore: 10,
17 chatSystemMessage: systemMessage,
18 senparcAiSetting: aiSetting,
19 kernelBuilderAction: kh =>
20 {
21 // kh.Plugins.AddMcpFunctionsFromSseServerAsync("NCF-Server", "http://localhost:5000/sse/sse");
22 kh.Plugins.AddFromFunctions("WeixinMpRouter", tools.Select(z => z.AsKernelFunction()));
23 }
24 );
25 var executionSettings = new OpenAIPromptExecutionSettings
26 {
27 Temperature = 0,
28 FunctionChoiceBehavior = FunctionChoiceBehavior.Auto()
29 };
30 var ka = new KernelArguments(executionSettings) { };
31
32 var prompt = $@"...";//发送到 AI 的要求
33 //输出结果
34 var resultRaw = await iWantToRun.Kernel.InvokePromptAsync(prompt, ka);

  上述代码中:

  • 相关 AI 配置需要提前完成,参考《Senparc.AI 系列教程(二):配置大模型,开始开发应用》)
  • 第 1 行:使用 Senparc.AI.Config.SenparcAiSetting 对象获取到当前默认 AI 模型配置。
  • 第 2 行:构建 SemanticAiHandler 对象,构造函数中的 aiSetting 如果传入 null,则会默认从 Senparc.AI.Config.SenparcAiSetting 获取(所以示例代码中的效果等同于传入 null,只是为了做演示)。如果这里希望使用 appsettings.json 默认配置意外的模型,那么可以在这里进行修改。
  • 第 4-10 行:进行模型参数配置。
  • 第 12-30 行(图中 2.3):完成 Senparc.AI 中另外一个重要对象:IWantToRun 的构建,相关代码完成了一个 Chat(聊天)场景的配置(注意:使用 MCP 或者 function-calling 推荐使用 Chat 模式,而不是 Completion 模式)。
  • 第 28 行:这里设置 FunctionChoiceBehavior 非常重要,否则模型不一定会执行 function-calling 或 MCP(本质上还是 function-calling 同样的原理),这里根据需要,我默认选择了 FunctionChoiceBehavior.Auto(),如果需要每次都强制调用工具,那么可以设置为 FunctionChoiceBehavior.Required()。
  • 第 32 行:需要传入 AI 的 Prompt,由于内容比较多,此处略,可以参考源码,其中包含了大量提示词工程的经验。
  • 第 34 行:发送获取结果(图中 2.4-2.7)。
  • 后续部分都是 UI 渲染相关。

MCP 服务

  上述过程中的 MCP 服务,部署到了一个独立站点中(即代码中的 mcpEndpoint:https://www.ncf.pub/mcp-senparc-xncf-weixinmanager/sse),您可以尝试打开这个连接,将会看到一个 SSE 连接的内容,如:

  这说明这个 SSE 的链接同样可以被 Cursor、GitHub Copilot 等 IDE 和工具所使用(我们会在下一篇文章中具体介绍)。

  这个 MCP Server 的服务由 NeuCharFramework 框架自动生成(无需编写额外代码),其中的工具(Tools)则是由 Senparc.Xncf.WeixinManager 模块提供。

  这个模块中又引用了微信 SDK 的 Senparc.Weixin.AspNet 包,其中使用到了我设计的名为 McpRouter 的一种模式:先对资源进行分类,然后通过 NextRoundTip 指定下一级运行的路由指令,达到了 AI 动态生成和工作流的融合,同时又摆脱了传统 Planner 过早制定完整计划的弊端,以及过多 Tools 对于 MCP 调用的压力(Cursor 推荐 40 个以内,而光微信拥有上千个 API,如果同时给到 MCP 将是一场灾难)。

  相关 MCP 方法提供了微信 SDK 中不同层级接口的信息,并根据 AI 的 MCP 请求动态输出。

  上述方法有效弥补了纯靠 AI 生成代码可能出现幻觉的问题,由于 MCP 返回的是精准 SDK 中的方法信息,因此准确度得到了大幅提升。

后续

  1. 上述展示了 McpRouter 模式在网页端的强大能力,下一篇,我们将介绍使用相同的 MCP 工具,在 Cursor、VS Code 等 IDE 中直接编写代码。
  2. 接下去,我们也将在微信 McpRouter 的基础上,进行升级和抽象重构,使其可以服务于更多的 SDK 和基础库,实现更大程度的编程效率、准确性的提升。

微信 SDK + Senparc.AI + MCP 打造微信 AI 开发助手(一):网页版的更多相关文章

  1. react-native 的微信SDK辅助包,支持微信登录、微信分享、微信支付

    微信SDK集成示例,现已完成微信授权登录,之后将陆续包装分享等其他功能. ReactNative高级交流群 127482131 或访问  http://blog.1ygowu.com ReactNat ...

  2. 【Win10 UWP】微信SDK基本使用方法和基本原理

    上回讲到,作为一个长期散播温暖,散播希望的小清新无公害WP开发者,继QQ SDK之后,又把UWP微信SDK这茬了结了,仅供学习交流. 1.安装微信SDK for UWP 微信官方此前明确说明短时间内暂 ...

  3. iOS-不用微信SDK唤起微信支付

    作者:TianBai 原文链接:http://www.jianshu.com/p/8930b4496023 要想知道微信SDK是如何调起微信客户端,那么咱们先看看微信SDK到底做了什么 前期准备 接入 ...

  4. 轻量易用的微信Sdk发布——Magicodes.Wx.Sdk

    概述 最简洁最易于使用的微信Sdk,包括公众号Sdk.小程序Sdk.企业微信Sdk等,以及Abp VNext集成. GitHub地址:https://github.com/xin-lai/Magico ...

  5. .NET平台下的微信SDK(Rabbit.WeiXin)开源发布

    在上一篇文章<RabbitHub开源情况及计划>上有提及到了一个新的开源项目——微信SDK,经过几天的努力现在开源发布Beta1版本. 目录 前言 特点 功能 支持的消息类型 请求消息 事 ...

  6. 群主微信sdk说明地址

    群主微信sdk说明地址官网地址:http://weixin.senparc.com/ 源代码及最新更新:https://github.com/JeffreySu/WeiXinMPSDK 最新DLL发布 ...

  7. 微信事业群WXG成立 致力于打造微信大平台

    今天,微信之父张小龙带领微信团队成立微信事业群(WeiXin Group,简称WXG),致力于打造微信大平台,由他们负责微信基础平台.微信开放平台.微信支付拓展.O2O等微信延伸业务的发展,并包括邮箱 ...

  8. 微信sdk分享,苹果手机分享到qq好友和qq空间没有反应

    最近线上程序苹果手机进行微信分享时,分享到qq好友和qq空间,无法调用分享程序,从微信跳转到qq后就没有反应了,但是安卓手机分享就没事? 解决:调用微信sdk分享时,分享的url(link)的参数不能 ...

  9. 超级懒汉编写的基于.NET的微信SDK

    一.前言 特别不喜欢麻烦的一个人,最近碰到了微信开发.下载下来了一些其他人写的微信开发“框架”,但是被恶心到了,实现的太臃肿啦. 最不喜欢的就是把微信返回的xml消息在组装成实体类,所以会比较臃肿,现 ...

  10. [转贴]超级懒汉编写的基于.NET的微信SDK

    一.前言 特别不喜欢麻烦的一个人,最近碰到了微信开发.下载下来了一些其他人写的微信开发“框架”,但是被恶心到了,实现的太臃肿啦. 最不喜欢的就是把微信返回的xml消息在组装成实体类,所以会比较臃肿,现 ...

随机推荐

  1. 题解:CF1977D XORificator

    题目链接:link. 题目大概其实就是想让我们通过翻转某些行,使得尽可能多的列成为特殊列. 众所周知,暴力肯定是不行的,所以我们需要考虑优化! 对于每一列 \(j\),枚举每一行 \(i\),通过翻转 ...

  2. FastAPI权限验证依赖项究竟藏着什么秘密?

    title: FastAPI权限验证依赖项究竟藏着什么秘密? date: 2025/06/12 06:53:53 updated: 2025/06/12 06:53:53 author: cmdrag ...

  3. AgenticSeek - 完全本地的AI助手替代方案

    English | 中文 | 繁體中文 | Français | 日本語 | Português (Brasil) 100%本地运行的Manus AI替代品,支持语音的AI助手,可自主浏览网页.编写代 ...

  4. 开箱即用,袋鼠云上线DeepSeek AI大模型一体机!

    "服务器繁忙,请稍后再试."DeepSeek于2025年初爆火后,需求量剧增,算力资源被持续压榨,处于满负荷运行状态.加之因担忧数据安全与合规,大型组织纷纷将目光投向DeepSee ...

  5. 香港CN2优化线路带宽低延迟VPS服务器推荐

    原文:https://ichochy.com/posts/20231120.html CN2 CN2,中国电信下一代承载网(ChinaNetNextCarryingNetwork).CN2是一个多业务 ...

  6. Elastic学习之旅 (5) 倒排索引和Analyzer分词

    大家好,我是Edison. 上一篇:ES文档的CRUD操作 重要概念1:倒排索引 在学习ES时,倒排索引是一个非常重要的概念.要了解倒排索引,就得先知道什么是正排索引.举个简单的例子,书籍的目录页(从 ...

  7. 学习spring cloud记录4-Eureka

    前言 Eureka是一个注册中心,在以前的记录中,两个服务之间的调用需要使用硬编码的方式,即把ip和端口号等地址写死在程序中,使用Eureka可解决此问题,但不知能解决这个问题,还有其他的作用. Eu ...

  8. 万字长文,学妹吵着要学的RDKS100模型量化及部署,你确定不学?

    作者:SkyXZ CSDN:SkyXZ--CSDN博客 博客园:SkyXZ - 博客园 宿主机环境:Ubuntu22.04(192x CPU 8x NVIDIA GeForce RTX 4090).D ...

  9. POLIR-Society-Organization-Psychology-Attitude-Life: $\large \bm{Attitude} : 对待\bm{社会生活环境} 的 \bm{Attitude}$

    POLIR-Society-Organization-Life: 对待社会生活环境的正确态度 Question: 我认为对待社会生活环境的正确态度是: Imply when facing Non-Be ...

  10. 雨林木风Win11任务栏修改位置的问题

    有很多雨林木风官网的小伙伴在使用Win10的时候,都会改变任务栏的位置,但是很多人在win11专业版中发现任务栏的位置并没有改变.实际上我们可以通过修改注册表来改变,下面,雨林木风系统小编带大家一起来 ...