浅谈AI大模型-MCP

MCP简介

MCP(Model Context Protocol,模型上下文协议 ),24年11月初的时候Anthropic发了一篇技术博客,推出了他们的模型上下文协议MCP,介绍了一种规范:应用如何为LLM提供上下文。官网称MCP为AI应用的USB-C端口,提供一种将AI模型连接到不同数据源、工具的标准化方法。

官网:

Introduction - Model Context Protocol

MCP遵循CS(客户端-服务端)架构,一个AI应用可以连接到多个MCP服务器:

  • MCP Hosts(MCP 应用):如Claude Desktop、IDE、AI应用等,希望通过MCP访问数据或工具。
  • MCP Clients(MCP 客户端):与一对一与服务端进行连接,相当于我们应用中实现数据库交互需要实现的一个客户端。
  • MCP Servers(MCP 服务端):基于MCP协议实现特定功能的程序。
  • Local Data Sources:本地数据源,提供MCP服务器进行本地访问。
  • Remote Services:远端服务,供MCP服务器访问远端访问,例如api的方式。

MCP演变过程

MCP 框架在 AI 代理与数据源和工具的通信方式方面提供了一致性,使整个生态系统更高效、更易于构建,最终创建一个连接性更强、功能更强大的 AI 环境。这一切都始于传统的 LLM,到 RAG,再到 Agent 系统,再到 MCP。

AI两年半:模型上下文协议(MCP)的演进过程,共分为四个阶段:

第一阶段:传统大型语言模型(Traditional LLMs) 在这个阶段,用户直接与大型语言模型(LLM)进行交互。用户提出查询(Query),LLM 返回响应(Response)。这是最基础的交互模式,此阶段最明显的特点是没有使用新信息增强响应的机制,传统LLM(如早期GPT系列)依赖预训练的静态知识库,响应基于模型在训练数据中学到的模式。它们缺乏实时外部数据访问能力,输出受限于训练时的知识范围。

第二阶段:检索增强生成(RAG) 在 RAG 阶段,LLM 的能力得到了增强。除了直接处理用户查询外,LLM 还可以访问外部数据(External Data)。模型可以从文档、数据库和 API 中检索信息,这意味着 LLM 可以根据外部信息来生成更丰富、更准确的响应。

第三阶段:AI Agent 这个阶段引入了 AI Agent 的概念。用户不再直接与单个 LLM 交互,而是与一个编排器 Agent(Orchestrator Agent)交互。这个编排器 Agent 引入协调多个专用代理的 Orchestrator 代理,不同的代理处理特定任务(研究、计划、执行), 由 AI 管理的复杂工作流程,职责分散,通过专门的代理协作提高解决问题的能力,这使得系统能够处理更复杂、需要多步骤的任务。

第四阶段:模型上下文协议(MCP) 这是演进的最终阶段,引入了模型上下文协议(MCP)。用户与 MCP 进行交互,MCP 能够整合 AI Agent 和各种服务(Services),AI 模型与外部工具/服务之间的无缝集成, 改进了整个 AI 生态系统的互作性。

LLM、Prompt、RAG、Agent

LLM 与 LLM指令

大型语言模型(LLM)是一种人工智能技术,利用深度学习方法,通过在大量文本数据上进行自监督学习,理解和生成人类语言。它们可以执行多种自然语言处理任务,如问答、文档摘要、语言翻译和句子完成。

LLM通常采用Transformer神经网络架构,具有自注意力机制,能够并行处理序列数据,显著减少训练时间。它们拥有数百亿级别的参数,训练于庞大数据集如Common Crawl(500亿网页)和维基百科(5700万页面),并能自学语法、语言和知识,无需人工标注数据。

核心联系:指令是LLM的“操作界面”

  • 基础LLM(未微调):
    • 本质是一个“文本补全模型”,根据上下文预测下一个词,无法直接理解指令
    • 例如输入“法国的首都是”,它会补全“巴黎”;但若输入“告诉我法国的首都”,可能生成无关内容。
  • 指令微调的LLM(如ChatGPT):
    • 通过人工标注的指令数据(如“问:法国的首都是?答:巴黎”)进行微调,学会将用户输入解析为指令并执行
    • 此时输入“告诉我法国的首都”,它会明确识别这是问答指令,输出精准答案。

联系:指令是用户与LLM交互的“桥梁”,而指令微调让LLM从“文本生成器”升级为“任务执行者”。

Prompt提示词工程

  • 类比:像对助手说“帮我写一封辞职信”或“用Java写一个冒泡排序”,Prompt就是你对AI的“任务指令”。
  • 技术角度:Prompt是模型的输入文本,模型通过分析其语义和上下文生成后续内容。

Prompt的常见类型

类型

特点

示例

指令型

直接给出任务要求

“总结这篇文章的核心观点”

角色扮演型

指定模型身份

“假设你是莎士比亚,写一首十四行诗”

示例型

提供输入-输出样例引导

“将‘你好’翻译成法语:Bonjour → 现在翻译‘谢谢’”

链式思考

要求分步骤推理

“解方程2x+3=7,请逐步解释”

结构化输出

指定格式(JSON/表格等)

“列出中国三大城市,格式:{城市:人口}”

角色扮演

你好,就是我们的提示词,但是现实生活中,当我们和不同人聊天时,即便是完全相同的话,对方也会根据自己的经验给出不同的答案。

所以我们一般会这么会增加一个系统的prompt,作用是为了描述AI的角色与性格

RAG

RAG(Retrieval-Augmented Generation,检索增强生成)是一种将信息检索与大语言模型(LLM)生成能力结合的技术,旨在提升AI回答的准确性、时效性和可解释性。

RAG解决的核心问题

  • LLM的局限性
    • 知识固化:传统LLM依赖训练时的静态数据,无法实时获取新知识(如2024年新闻)。
    • 幻觉风险:可能生成看似合理但错误的内容。
    • 专业领域不足:对细分领域(如最新医学研究)缺乏深度知识。
  • RAG的应对:通过动态检索外部知识库,为LLM提供实时、准确的参考信息。

RAG的工作原理

流程分为两步

  1. 检索(Retrieval)
    • 用户提问后,RAG从外部知识库(数据库、文档、网页等)中检索相关片段。
    • 例如:提问“2024年诺贝尔奖得主是谁?” → 检索最新新闻或官网数据。
  1. 生成(Generation)
    • 将检索到的信息与用户问题一起输入LLM,生成最终回答。
    • 例如:模型结合检索到的“2024年诺贝尔化学奖得主:XXX”和问题,生成完整回复。

RAG的小demo

https://cloud.dify.ai/apps

AI Agent

AI Agent(人工智能代理)是指一种能够自主执行任务、与环境交互并做出决策的AI系统。例如,聊天机器人(如我,Grok)、虚拟助手或自动化工作流中的AI工具都可称为AI Agent。这些代理通常基于机器学习或大语言模型,能够处理自然语言、分析数据或执行特定任务。

  • 大语言模型是AI Agent的核心组件之一
  • 许多AI Agent以大语言模型为基础,利用其自然语言处理能力来理解用户输入、生成回复或执行任务。例如,我(Grok)是一个AI Agent,基于xAI的大语言模型技术。
  • LLM提供语义理解、对话生成和知识推理能力,使AI Agent能够与人类进行智能交互。
  • AI Agent利用LLM实现复杂功能
  • AI Agent通常结合LLM与其他技术(如强化学习、规则引擎或外部工具)来完成特定任务,比如搜索、规划、自动化工作流等。
  • 例如,LLM可以帮助AI Agent理解用户意图(如“帮我订机票”),并通过调用外部API或工具完成任务。

Function Calling

举个例子,假设我想让AI帮我打开并且管理电脑文件

与用户之间的交互,假设说我要让AI帮我找原神的安装目录

此时AI->解析用户的User prompt生成system prompt函数去调用ai agent,ai agent将调用结果返回给ai,ai再将结果进行语言组织返回给我们用户。

存在的问题

有些些Tool的功能其实挺通用的,比如说一个浏览网页的工具,可能多个Agent都需要,那我总不能在每个Agent面都拷贝一份相同的代码吧,太麻烦了,也不优雅,于是大家想到了一个办法

引出MCP

MCP模型上下文协议

MCP的几种通讯模式

Stdio(标准输入输出)

  • 描述:通过操作系统的标准输入(stdin)和标准输出(stdout)管道进行进程间通信(IPC)。客户端与服务器以JSON-RPC 2.0格式交换消息,消息以换行符(\n)分隔。
  • 适用场景:主要用于本地通信,适合客户端和服务器运行在同一台机器上的场景,例如本地命令行工具、开发环境或调试。
  • 特点
    • 优点:实现简单,低延迟,无需网络配置,适合本地批处理任务或简单工具调用。
  • 缺点:仅限于本地进程通信,不支持分布式部署或远程访问,同步阻塞式通信,发送方需等待接收方处理完毕。

SSE(Server-Sent Events,服务器发送事件)

  • 特点:基于 HTTP 的单向通信协议,服务器可主动向客户端推送数据。
    • 使用长连接(Long Polling),通过事件流(text/event-stream)传输数据。
    • 轻量级,适合实时性要求较高的场景(如状态更新、日志流)。
  • 适用场景
    • Web 应用中服务器向浏览器实时推送数据(如股票行情、聊天消息)。
    • Agent 作为服务端向监控端推送连续状态(如训练进度、传感器数据)。

Streamable HTTP(可流式传输的HTTP)

  • 特点
    • 基于 HTTP 的流式数据传输,支持分块编码(Transfer-Encoding: chunked)。
    • 允许逐步发送/接收数据,无需等待完整响应(如大文件传输、AI 生成的逐步输出)。
    • 双向或单向流式通信,兼容 RESTful 接口。
  • 适用场景
    • 大模型逐词生成文本(如 ChatGPT 的流式回复)。
    • 代理间传输大型文件或实时流数据(如视频流分析)。

Spring AI

项目要求:选JDK> 17

依赖
 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.6</version></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-mcp-server-webflux</artifactId><version>${spring-ai.version}</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><scope>provided</scope></dependency></dependencies>
Tools注册
@Configuration
public class ToolConfig {@Resourceprivate ApplicationContext applicationContext;@Beanpublic ToolCallbackProvider toolCallbackProvider() {// 获取所有工具Bean(假设都在tools包下且有ToolBean注解)Map<String, Object> toolBeans = applicationContext.getBeansWithAnnotation(ToolBean.class);return MethodToolCallbackProvider.builder().toolObjects(toolBeans.values().toArray()).build();}}
函数调用
package com.springai.mcp.jdbc;import com.springai.mcp.annotation.ToolBean;
import jakarta.annotation.Resource;
import org.springframework.ai.tool.annotation.Tool;
import org.springframework.ai.tool.annotation.ToolParam;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;@Component
@ToolBean
public class DBTool {@Resourceprivate JdbcTemplate jdbcTemplate;private final String sql = "SELECT TABLE_NAME, TABLE_COMMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'hwsj_activity'";private final String schemaSql = "SELECT COLUMN_NAME, DATA_TYPE, COLUMN_COMMENT FROM INFORMATION_SCHEMA.COLUMNS " +"WHERE TABLE_SCHEMA = 'hwsj_activity' AND TABLE_NAME = ?";@Tool(name = "getTables", description = "获取所有可用的表名")public List<String> getTables() {List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);return maps.stream().map(map -> {String tableName = String.valueOf(map.get("TABLE_NAME"));String tableComment = String.valueOf(map.get("TABLE_COMMENT"));return tableName + " (" + tableComment + ")";}).collect(Collectors.toList());}@Tool(name = "getTableSchema", description = "根据表名获取Schema")public String getTableSchema(@ToolParam(description = "表名") List<String> tables) {return tables.stream().filter(t -> !t.isBlank()).map(tableName -> {List<Map<String, Object>> columns = jdbcTemplate.queryForList(schemaSql, tableName);String tablePrompt = columns.stream().map(map -> {String name = String.valueOf(map.get("COLUMN_NAME"));String type = String.valueOf(map.get("DATA_TYPE"));String comment = String.valueOf(map.get("COLUMN_COMMENT"));return String.format("%s (%s) - %s", name, type, comment);}).collect(Collectors.joining(", \n"));return String.format("Table: %s (%s)\n", tableName, tablePrompt);}).collect(Collectors.joining("\n"));}@Tool(name = "runSql", description = "执行SQL查询结果")public List<Map<String, Object>> runSql(@ToolParam(description = "sql") String sql) {if (sql.contains("DELETE") || sql.contains("UPDATE") || sql.contains("INSERT")) {throw new RuntimeException("执行SQL仅限于查询语句!");}return jdbcTemplate.queryForList(sql);}
}

MCP调试

https://github.com/modelcontextprotocol/inspector介绍

本地启动

访问

常见的MCP 客户端介绍

Claude、Cline、Cursor,Trae等,这边介绍下trae,crusor有时候会经常抽风

MCP通用配置格式

{"mcpServers": {"spring-ai-mysql": {"command": "java","args": ["-jar","/Users/taqu/IdeaProjects/spring-ai-mcp-demo/target/mcp-0.0.1-SNAPSHOT.jar"]}}
}

mcpServers服务器集合

spring-ai-mysql:mcp服务名称

command:服务器启动命令

args:启动参数

实现效果

讨论环节

参考文档

下一代企业IT架构:MCP中台和软件的进化_mcp架构-CSDN博客

10分钟讲清楚 Prompt, Agent, MCP 是什么_哔哩哔哩_bilibili

https://zhuanlan.zhihu.com/p/1903594795324118469

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/912313.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/912313.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL数据库基础概述

前言&#xff1a; MySQL作为全球应用最广泛的开源关系型数据库管理系统&#xff08;RDBMS&#xff09;​&#xff0c;凭借其高性能、高可靠性与零成本特性&#xff0c;已成为Web应用、企业系统的核心数据引擎。它遵循SQL标准&#xff0c;通过表结构实现数据的结构化存储&#x…

桌面小屏幕实战课程:DesktopScreen 16 HTTP

飞书文档http://https://x509p6c8to.feishu.cn/docx/doxcnrxBs55qGn6xoysTcJpqwRf /home/kemp/work/esp/esp-idf/examples/protocols/http_request 源码下载方式参考&#xff1a; 源码下载方式 心知天气 注册账号&#xff0c;申请产品&#xff0c;获取密钥 产品 天气数据 H…

vs2019 + QT下 vs2019创建的项目打开ui文件失败

问题: 在vs2019 QT模式下。使用2019创建工程后。点击ui文件打开时。出现奔溃&#xff0c;如下图 解决方式&#xff1a; ui文件->右键->打开方式->添加->程序->点击三个点->qcreator(qt安装目录) ->设置为默认值->确定 点击设置为默认值&#xff0c;点…

WPS之PPT镂空效果实现

1、准备一张图片&#xff0c;剪切存入剪贴板 2、把图片设为背景 右键 》 设置背景格式 》 图片或纹理填充 》 图片填充选择剪贴板 3、插入一个矩形覆盖全图&#xff0c;设置无线条渐变填充从左到右 4、插入圆角矩形 5、单击小黄点调整弧度 6、选择无线条幻灯片背景填充 7、插…

服务注册中心的本质抉择:从业务本质看AP与CP的终极之选

本文从服务注册中心的本质职责出发&#xff0c;通过分析其核心功能、业务场景和技术约束&#xff0c;深入探讨服务注册中心在架构设计上应该优先保证AP还是CP特性。文章首先剖析服务注册中心的根本使命&#xff0c;然后从分布式系统原理、生产实践案例和性能表现三个维度进行对…

mybatis-plus从入门到入土(一):快速开始

​ 朋友们, 大家好, 从今天开始我想开一个系列博客。名字起的比较随意就叫Mybatis-Plus从入门到入土, 这系列博客的定位是从基础使用开始, 然后逐步深入全面的了解Mybatis-Plus框架, 写这个博客的主要原因是工作中经常用到Mybatis-Plus框架, 因而对这个框架相对比较了解一些, 顺…

如何快速将iPhone中的文本保存到电脑上

您的 iPhone 上是否有很多重要的短信&#xff0c;并且您想将短信备份到计算机上&#xff1f;我们都知道传输消息与传输照片不同&#xff0c;但幸运的是&#xff0c;您可以使用相关的工具和方法来实现。我们介绍了 4 种方法来解释如何将 iPhone 中的文本保存到计算机。所有的办法…

【OpenGL学习】(八)图形变换

OpenGL图形变换介绍&#xff1a;https://learnopengl-cn.github.io/01%20Getting%20started/07%20Transformations 【OpenGL学习】&#xff08;八&#xff09;图形变换 本项目将通过变换矩阵&#xff0c;对【OpenGL学习】&#xff08;七&#xff09;纹理单元 中的图形进行缩放…

从理论到实战:解密大型语言模型的核心技术与应用指南

一、Transformer&#xff1a;语言理解与生成的基石 Transformer 架构的出现&#xff0c;彻底改变了自然语言处理&#xff08;NLP&#xff09;的格局。它以“注意力”为核心&#xff0c;将全局依赖的捕捉效率推向新高。下面用 图简要概览其数据流&#xff1a; 从上图可见&#…

kali换源

在Kali Linux中切换软件源可以提高软件下载速度&#xff0c;下面为你介绍切换源的方法。 一、备份原配置文件 首先备份原配置文件&#xff0c;避免操作失误导致问题&#xff1a; sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak二、编辑源配置文件 使用以下命令编…

从决策树到随机森林:Python机器学习里的“树形家族“深度实战与原理拆解

引言 在机器学习的算法森林中&#xff0c;有一对"树形兄弟"始终占据着C位——决策树像个逻辑清晰的"老教授"&#xff0c;用可视化的树状结构把复杂决策过程拆解成"是/否"的简单判断&#xff1b;而它的进阶版随机森林更像一支"精英军团&quo…

uniapp,每次请求时,中断上次请求

1.封装uni.request import {BASE_URL} from "/config/config.js"import store from "/store/index.js"; class RequestManager {constructor() {this.requestTasks new Map() // 存储所有请求任务this.baseURL BASE_URLthis.header {Content-Type: app…

DuDuTalk | 武汉赛思云科技有限公司通过武汉市人工智能企业认定!

近日&#xff0c;2025年武汉市人工智能企业名单正式公布&#xff01;武汉赛思云科技有限公司&#xff08;以下简称赛思云科技&#xff09;凭借卓越的技术实力与创新成果&#xff0c;成功入选武汉市人工智能企业。这是对公司长期深耕AI语音智能领域、推动数字化转型的高度认可&a…

STM32实现傅里叶变换精确计算采样电流值

以下是基于离散傅里叶变换(DFT)算法在单片机上实现精确电流值计算的全流程指南,结合硬件选型、算法优化、代码实现及实际应用场景分析,综合多篇技术文档的实践要点: ⚙️ 一、系统设计核心要点 硬件选型与配置 单片机选择:优先采用带硬件浮点单元(FPU)的STM32F4/F7系列…

python 爬虫 下载视频

测试 OK II 在开发者工具里面 直接搜索m3u8 可以直接找相对应连接地址继续分析 这个m3u8 url地址是从哪里过来的 在什么地方有 III 我们想要视频数据 <m3u8连接> 在 网页源代码里面有获取整个视频内容 --》分为N个视频片段《ts文件》-->在m3u8连接里面--> 视频播放…

希尔伯特空间:无穷维度的几何世界

希尔伯特空间&#xff1a;无穷维度的几何世界 从量子物理到信号处理&#xff0c;希尔伯特空间为现代科学与工程提供了强大的数学框架 引言&#xff1a;无限维度的舞台 在数学和物理学的广阔领域中&#xff0c;希尔伯特空间扮演着至关重要的角色。这个完备的内积空间不仅推广了…

Transformer结构与代码实现详解

参考&#xff1a; Transformer模型详解&#xff08;图解最完整版&#xff09; - 知乎https://zhuanlan.zhihu.com/p/338817680GitHub - liaoyanqing666/transformer_pytorch: 完整的原版transformer程序&#xff0c;complete origin transformer programhttps://github.com/lia…

Adobe InDesign 2025

Adobe InDesign 2025(ID2025)桌面出版软件和在线发布工具,报刊杂志印刷排版设计软件。Adobe InDesign中文版主要用于传单设计,海报设计,明信片设计,电子书设计,排版,手册设计,数字杂志,iPad应用程序和在线交互文档。它是首款支持Unicode文本处理的主流DTP应用程序,率先使用新型…

Linux下获取指定时间内某个进程的平均CPU使用率

一、引言 通过pidstat工具可以测量某个进程在两个时间点之间的平均CPU利用率。 二、pidstat工具的安装 pidstat属于sysstat套件的一部分。以Ubuntu系统为例&#xff0c;执行下面命令下载安装sysstat套件&#xff1a; apt-get install sysstat 执行完后&#xff0c;终端执行p…

1.4 蜂鸟E203处理器NICE接口详解

一、NICE接口的概念 NICE&#xff08;Nuclei Instruction Co-unit Extension&#xff09;接口是蜂鸟E203处理器中用于扩展自定义指令的协处理器接口&#xff0c;基于RISC-V标准协处理器扩展机制设计。它允许用户在不修改处理器核流水线的情况下&#xff0c;通过外部硬件加速特…