手搓MCP客户端动态调用多MCP服务,调用哪个你说了算!

Spring AI MCP实践指南:通过MCP连接你的应用与AI大模型 本文详细讲解Model Context Protocol(MCP)和Spring AI的集成实践,包括MCP简介、Spring AI简介、通信模式对比(SSE和stdio)以及详细的代码实现示例,帮助开发者快速构建AI增强型应用。 阅读详情
AI摘要

本文围绕粉丝咨询的服务动态调用和动态加载服务链接问题展开。先通过代码追踪、探寻使用位置等步骤实现MCP客户端动态调用多MCP服务,根据服务名称区分不同调用;接着尝试从数据库读取服务链接,经配置和动态加载链接操作,最终解决问题并分享经验。

01 引言

前两天,有个粉丝朋友咨询MCP服务如何动态调用,动态加载MCP服务的链接?我们都知道MCP客户端可以配置多个MCP服务的地址:

spring.ai.mcp.client.sse.connections.server1.url=http://localhost:xxxx
spring.ai.mcp.client.sse.connections.server2.url=http://localhost:xxxx
spring.ai.mcp.client.sse.connections.server3.url=http://localhost:xxxx

这样的MCP服务会自动加载到项目中,类似合成一个服务。一个请求进来,MCP客户端会在所有的服务中寻找合适的方法。

但是,业务中总会有各种不同的场景。例如,粉丝朋友的需求。SpringBoot一直坚持约定大于配置的方式,Spring AI也不例外,既然提供配置文件的配置,那么JavaBean的配置一样可行。指定调用只要需要找到调用的时机,自然可以控制。

本篇就带大家一起解决这份粉丝朋友的问题。

02 MCP动态调用

2.1 代码追踪

在研究动态调用之前,我们需要知道配置用在了哪里?

我们直接在.properties或.yml配置文件中,

按住Ctrl,然后用鼠标点击url,就会跳转到下面的文件:

从方法中可以看到:

最终的配置会保存在SseParameters中,最后放到Map集合中。使用或者获取服务链接的时候,肯定也会通过getConnections()来获取,这个也是突破问题的关键。

2.2 探寻使用位置

上面找到了配置文件对用的Java类:

org.springframework.ai.mcp.client.autoconfigure.properties.McpSseClientProperties

我们可以采用上面相同的方法,看看哪里调用了getConnections(),由于我们的源码没有全部下载下来,所以很大程度上可能找不到。所以,断点提示就变成了我们唯一的出路。

断点启动之后,我们看到连接数为0,也就是还没有加载MCP服务的链接呢。如下图:

我们断点继续向下执行(快捷键:F8),中间会经历漫长的Bean的创建过程。我们的目标就是看看是哪一个Bean实例化的时候会获取连接。

我们就需要注意几个注解:@Bean、@Component等,终于实例化出来了,找到了关键类:

org.springframework.ai.mcp.client.autoconfigure.McpClientAutoConfiguration

具体如图:

我们可以看到namedTransports里面就包含了我们MCP服务,最终放到mcpSyncClients集合中,如下图:

至此,Spring 启动随后完成。

2.3 修改点

我们可以看到mcpSyncClients集合上有@Bean标签,所以会被Spring管理,所以可以直接从Spring容器中,通过注入的方式获取到。

但是修改点有在哪里呢?我们先看看MCP调用的案例:

从构建ChatClient到发送请求参数,就只有ChatModel和ToolCallbackProvider两个参数。而ChatMode表示采用的大模型的类型,显然和MCP服务没有关系,就只有ToolCallbackProvider这个类了。

org.springframework.ai.tool.ToolCallbackProvider的实现有四个:

通过注入的ToolCallbackProvider,我们断点可以看到它的实现是:

org.springframework.ai.mcp.SyncMcpToolCallbackProvider

从代码的构造启可以看到,参数就是我们上面注入的mcpSyncClients。

2.4 动态调用

我们只要根据MCP服务的名称区分不同的McpSyncClient即可。

我们从截图可以看到:

小编提供了两个MCP服务,分别是csdn-mcp-server(优快云文章浏览服务)和gzh-mcp-server(种种好推荐服务)。小编没有传递参数,默认会调用gzh-mcp-server。

我们看看返回的结果:

请求是一个与csdn-mcp-server匹配度比较高的请求,最终只调用了gzh-mcp-server。所以我们就可以控制调用的MCP服务了。

03 动态加载

动态调用的问题,我们已经解决了。如果这些服务链接想从数据库读取,又该如何处理呢?

最直接的想法,就是直接将配置文件对应的Bean自己new出来交给Spring管理。

3.1 配置McpSseClientProperties

Bean配置

@Bean
public McpSseClientProperties mcpSseClientProperties() {
    McpSseClientProperties mcpSseClientProperties = new McpSseClientProperties();
    Map<String, SseParameters> connections = mcpSseClientProperties.getConnections();
    connections.put("server1", new SseParameters("http://localhost:8080", null));
    connections.put("server2", new SseParameters("http://localhost:8082", null));
    return mcpSseClientProperties;
}

启动结果

McpSseClientProperties发现了2个,实际只需要一个。也就是说,框架自动实例化McpSseClientProperties和我们的冲突了。

这种方式行不通!!!

既然已经存在,那就直接添加连接呢?因为Spring默认是单例。

3.2 动态加载链接

容器启动后加载链接

测试

已经加载成功了。

04 小结

到这里粉丝朋友的问题就全部解决了。同时,也分享给大家,希望对大家有帮助!

Python 实现 MCP 客户端全指南:从基础调用到高级功能 扩展支持非标准 MCP 服务:python# 调用旧系统API# 注册为MCP资源# 通过MCP客户端调用Python MCP 客户端为构建智能应用提供了强大而灵活的工具,从简单的工具调用到复杂的多智能体协作,都能通过简洁的 API 实现。本文详细介绍了客户端开发的各个方面,包括基础功能、高级特性、性能优化和实战案例,希望能帮助开发者快速掌握 MCP 客户端开发技能。随着 MCP 协议的不断发展,Python SDK 也将持续更新以支持新特性。 阅读详情

相关推荐

新手也能开发MCP服务:从0写代码到客户端调用,全流程+避坑指南

摘要: MCP(Model Context Protocol)作为大模型与外部资源的标准化接口协议,解决了AI模型调用本地文件、工具或API的兼容性问题。本文基于Python技术栈,详细拆解MCP服务的开发全流程:从环境配置(Python≥3.10、虚拟环境、SDK安装)到核心开发(工具函数、资源、提示词模板的定义),再到客户端调用与调试(CLINE配置、MCP Inspector排查)。通过具体代码示例(如获取桌面文件列表、生成问候语等),演示如何实现“5分钟快速开发”,并给出高级应用建议(权限控制、AP

weixin_52610848的博客 2221

大模型学习之MCP协议

MCP(Model Context Protocol,模型上下文协议)是一种开放标准协议,由Anthropic于2024年11月提出并开源。其主要目的是在大型语言模型(LLM)与外部数据源及工具之间建立安全的双向链接。MCP协议旨在解决AI模型因数据孤岛限制而无法充分发挥潜力的问题,使AI应用能够安全地访问和操作本地及远程数据。此外,MCP通过标准化的服务器实现,支持AI模型与各种资源进行安全交互,使其成为连接万物的接口。将工具注入从编译时转移到运行时,开发者可以在运行时动态管理工具的增删改。

大模型教程的博客 2827

MCP(4):MCP与工具调用

在MCP系列的前三篇文章中,我们介绍了模型上下文协议(MCP)的基本概念、技术架构以及如何搭建一个简单的MCP应用。本篇文章将聚焦于MCP最核心的功能之一——工具调用(Tool Calling),探讨MCP如何革新AI与外部工具的交互方式,以及它与传统Function Calling方法的区别和优势。对于AI开发者来说,理解不同工具调用范式的特点与适用场景,有助于选择最合适的技术方案,构建更强大、更灵活的AI应用。本文将通过丰富的示例和对比分析,帮助你全面把握MCP工具调用的精髓。静态定义。

分享一些感兴趣的技术方面 2290

手搓MCP全流程指南:从本地开发部署到PyPI公开发布

MCP是一个由Anthropic公司推出的开源标准,旨在统一AI模型与外部工具及数据源的交互方式。在MCP出现之前,开发者需要为每一个AI需要接入的应用编写特定的集成代码,过程繁琐且难以扩展。MCP的出现改变了这一现状,它就如同一个为AI应用打造的“USB-C”接口,提供了一个标准化的连接方式,让AI模型可以轻松地与不同的数据源和工具进行连接和通信。简而言之,MCP允许AI应用(作为客户端)与外部工具或数据源(作为服务器)之间建立安全的双向连接。

2301_80863610的博客 3万+

从零教你做一个mcp服务端和客户端,真正理解什么是mcp(保姆级教程+代码),智能体和大模型的高效落地就靠mcp了。

🛠️ 可用工具: [<Tool name='add' description='这个工具能将两个数字相加' arguments={'a': <Argument type='integer'>, 'b': <Argument type='integer'>} result_type='integer'>]传统的API调用方式,往往显得笨拙、低效,甚至有点“智障”。你的客户端成功启动了服务器,并与之进行了一系列的交互:列出了可用的提示、资源和工具,并且成功地获取了提示内容、读取了资源、调用了工具并得到了结果!

lizhijianwill的博客 1537

MCP的工具调用:让LLM执行复杂任务

在使用MCP(Model Context Protocol)构建智能应用时,工具调用是实现复杂功能的关键机制。通过工具调用,LLM(大型语言模型)可以与外部工具和服务进行交互,从而执行各种复杂的任务。本文将详细介绍MCP的工具调用功能,包括工具的定义、注册、调用以及如何通过代码示例实现这些功能。以下是一个简单的工具定义示例,该工具用于生成文件内容:Python复制# 模拟生成文件内容通过本文的介绍,你已经了解了MCP的工具调用功能,包括工具的定义、注册、调用以及如何通过代码示例实现这些功能。

加入“Super Entity”,与全能开发团队共探AI智能体与数字人项目,开启前沿技术之旅。 2630

手搓一个与多PPT文档对话的RAG引擎,并封装MCP Server。

本文介绍了一种基于视觉模型的多PPT文档RAG引擎实现方案,并将其封装为MCP Server。系统通过LibreOffice和Pdfium将PPT转换为图片,利用视觉模型解析内容并生成Markdown格式,使用LlamaIndex框架构建向量索引。MCP Server提供文档管理(添加/删除)、状态查询和对话交互功能,支持将解析结果与源PPT页面截图关联,增强回答的可溯源性。该方案实现了PPT文档的深度解析和动态索引管理,并采用缓存机制优化处理效率。源代码见文末。

qkh1234567的博客 760

【实战】手搓一个极简MCP服务,最后交给小龙虾调用

从基本原理开始,手把手从零开始手搓一个极简mcp服务,最后交给小龙虾使用。

海兰 1000

大模型如何调用外部工具?通过几个简单MCP客户端示例迅速掌握!

上一篇主要讲MCP服务端的实现。本篇将通过几个简单例子让大家轻松理解大模型如何调用外部工具并且快速上手MCP客户端开发。

bigbigbugbug的博客 1557

中兴B860AV2.1-A刷机避坑指南:晶晨免拆神器+安卓7.1.2固件实测

本文提供中兴B860AV2.1-A机顶盒的详细刷机教程,重点介绍使用晶晨免拆神器配合安卓7.1.2线刷固件包的实操步骤。内容涵盖刷机前的硬件确认、工具准备、软件设置、烧录全过程监控及常见问题解决,旨在帮助用户安全、高效地完成刷机,规避变砖风险,释放设备潜力。

pytorch8learner的博客 752

图片边界矢量化-地理配准

无地理和投影信息的JPG图片,通过ArcGIS进行地理配准(Georeferencing)完成数字化边界。

u012727861的博客 1908

MCP客户端与服务端使用教程

MCP是一种标准化协议,用于连接大模型与外部工具(如数据库、API等),通过客户端-服务器架构实现统一调用。服务端负责提供工具能力(如API调用、数据查询等),需提前配置工具并生成访问端点。mcp-demoFastMCP客户端是集成MCP服务的应用(如IDE、聊天工具),需连接服务端端点。STDIO@Tool。

慕漓的博客 2557

关于光耦隔离与SP3485E芯片一起使用无法拉高485使能引脚问题

最近在做的一个项目,定制了一块STM32F407ZG的工控板,工控板载4个485接口全部都是只能接收数据,不能对外发送数据。1.接线不正确:接线不正确导致485收发出现问题。 2.程序端口初始化问题:控制光耦隔离的输入脚IO的初始化和置位状态有问题。 3.GPIO复用问题:控制对应串口的GPIO不是正点原子默认的GPIO,而是经过复用的其他IO,复用问题。 4.程序设置与485E芯片收发模式不对应:对于使能引脚的电平要根据光耦的输出情况确定输入IO与RE的关系,可能模式没有对应。 5.光耦隔离或者SP485

weixin_45862642的博客 2978

大模型开发 - SpringAI之MCP Client开发:让Agent动态调用远程工具服务

本文介绍了MCP协议及其在Spring AI中的应用,解决了多个AI Agent系统共享工具能力的问题。MCP协议通过标准化工具连接,实现跨进程调用和动态发现远程工具服务。核心概念包括工具(可执行函数)、资源(数据)和提示词(模板)。MCP采用Client-Server架构,支持HTTP等传输方式,实现工具的解耦和动态发现。通过MCP,不同端口部署的服务可以共享工具,避免重复编码,简化部署流程。

小工匠 4345

双摄像头的实时视频拼接及目标跟踪(一)

本章主要讲图像拼接算法的研究 先膜拜一下知乎大佬全面的叙述:https://www.zhihu.com/question/34535199/answer/135169187 本文图像拼接是基于opencv的图像拼接,流程分为以下几步 ...

Y.W.jian的博客 3万+

Macbook Pro上如何修改brew源

一、需求说明 我的macbook电脑安装了中科大的brew源码,发现安装gpg工具失败,其他工具可以正常安装,为了能将gpg安装成功,就找了找切换brew源的方案,记录如下。 二、切换至国内源 由于使用github默认源有可能存在路径远或者部分服务访问超时的原因,切换至国内源可以提速。 2.1 替换brew.git $ cd "$(brew --repo)" # 中国科大: $ git remote set-url origin https://mirrors.ustc.edu.cn/brew.git #

bufegar0的博客 1080

AIGC入门,手搓大模型客户端与MCP交互

本文介绍了一个基于MCP协议和Ollama本地大模型的智能时间查询系统。该系统由两部分组成:时间服务器(time_server.py)提供获取当前时间和列出时区的工具函数;客户端(time_client_test3.py)利用Ollama模型分析用户查询并智能调用时间服务。时间服务器实现了完整的时区处理和错误提示功能,通过MCP协议暴露工具接口。客户端采用异步连接管理和多重策略解析模型响应,能够智能判断是否需要调用时间服务工具。这种架构展示了如何将大语言模型与专用工具服务相结合,构建既能理解自然语言又能精准

明月专栏 990

MATLAB信号处理实战:VMD分解参数调优全指南(附避坑技巧)

本文深入探讨了MATLAB中变分模态分解(VMD)的核心参数调优实战技巧。针对模态数K和惩罚系数α的选择难题,提供了从经验估计、可视化观察到量化指标辅助的渐进式调优框架,并分享了避免过分解与欠分解的实用避坑指南,旨在帮助工程师高效处理非平稳信号,提取清晰的物理特征。

weixin_29079671的博客 146

手搓的 MCP-server 被 Cherry Studio 调用,模型 Key 走 TaoToken

手搓 MCP-server 并用 Cherry Studio 通过 stdio 调用时,最折腾的不是 FastMCP 里的 add 工具,而是模型 Key 分散在多个服务商。正文以 UV 初始化 mcp-server-demo、在 main.py 里用 FastMCP 注册工具为例,演示了完整的本地调试链路;随后将模型 Key 统一到 TaoToken 这一统一 API 通道,在 Cherry Studio 的 OpenAI 兼容供应商中填入 https://taotoken.net/api 作为 Base

weixin_35756130的博客 12

SAP会计凭证导入ABAP开发模板+注意点—附带源码

开发并不仅仅只要考虑实现的功能,只实现功能的是程序,考虑到使用场景的是工程。使用bapi校验创建会计凭证的数据,报错和参数和正式创建一致。用途,防止产生错误的凭证,即使财务凭证可以冲销。正式创建会计凭证。隐藏的坑。

小九啥也不会 1233

【Matlab】飞行器气动弹性仿真与分析

气动弹性是飞行器设计领域的核心交叉学科,融合了空气动力学、结构动力学和控制理论,主要研究飞行器结构在气动力作用下的弹性变形、振动响应及相互耦合规律,直接影响飞行器的飞行稳定性、操纵性和结构安全性。随着飞行器向高速度、高机动性、轻量化方向发展,气动弹性问题愈发突出,如颤振、发散、嗡鸣等现象,严重时会导致飞行器结构破坏甚至飞行事故,因此气动弹性仿真与分析已成为飞行器设计、验证和优化的关键环节。当前,飞行器气动弹性仿真面临诸多技术挑战:气动力与结构变形的强耦合特性难以精准描述,易出现仿真误差;

unber的博客 238

单机MCP服务端和客户端的搭建

在上面代码中,定义了一个函数,用于转换tools工具中的JSON数据,而Qwen3的作用是对输入的内容和函数进行匹配,并完成函数的调用。注意,这里每次处理一个问题都会重新建立与MCP服务器的连接以及与LLM的交互,这在实际应用中可能不是最高效的方式,但便于演示和测试。ask_llm(question, tools_list):构建系统提示词,将工具描述和用户问题结合,生成一个JSON格式的工具调用命令。其中,mcp.tool()的作用是对函数进行注册,将函数转换为可供MCP框架使用的工具。

夏天又到了的专栏 1375

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

玩转MCP:用百度热搜采集案例快速上手并接入cline

今天带领大家手搓一个稍微带点复杂度的案例:百度热榜新闻采集MCP服务器并接入cline。

apo0625的博客 2135

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

SpringAI调用MCP服务的实现思路

Spring AI 实现 MCP 多服务调用的方式可以概括为:协议层:基于 MCP 协议(SSE/Stdio)与一个或多个服务器通信。适配层:在启动时自动发现所有远程工具和资源。抽象层:将每个远程工具动态封装成一个 Spring AI FunctionCallback。执行层:在 AI 对话过程中,由 LLM 驱动,通过对应的 FunctionCallback 透明地执行 MCP 函数调用,并将结果返回给 LLM。

weixin_47053123的博客 2266

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

从零开始手搓MCP服务器,技术宅的春天来了!

它就像给AI装了个外接大脑,让模型能直接调用你的数据库、API接口、甚至本地Excel表格。举个不恰当的例子:没有MCP的LLM就像只会背菜谱的厨子,有了MCP它就能直接打开你家冰箱找食材!支付方式选..." 气得我当场表演了一个"键盘消失术"——这不就是典型的"人工智障"吗?它能让你的AI应用像乐高积木一样自由拼装,程序员再也不用当"调参侠"了。比如用户说"帮我把上季度销售数据生成图表",AI就能自动组合多个API,先调数据接口,再传可视化服务,最后邮件发送——全程无需写死代码!

dotNET跨平台 247
上一篇: 流式数据服务端怎么传给前端,前端怎么接收?
下一篇: Mybatis批量插入,形式不同性能也不同
智_永无止境
博客等级 码龄10年 803粉丝 406原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智_永无止境

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值