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

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

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

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

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

  打开页面(或从微信 SDK 开源项目

image

  输入你想实现的功能:

image

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

image

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

image

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

image

   重新编辑内容:

image

  发送并获取结果:

image

   

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

image

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

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

原理解析

  先上图:

image

  关键过程解析

  服务起始于 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 连接的内容,如:

image

   这说明这个 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 中的方法信息,因此准确度得到了大幅提升。

Logo

更多推荐