广州市住房城乡建设局网站/荆门刚刚发布的

广州市住房城乡建设局网站,荆门刚刚发布的,以网站名为后缀的邮箱怎么做,国内优秀网站网址一个互联网技术玩家,一个爱聊技术的家伙。在工作和学习中不断思考,把这些思考总结出来,并分享,和大家一起交流进步。 一、MCP 介绍 1. 基本介绍 MCP(Model Context Protocol,模型上下文协议)是…

一个互联网技术玩家,一个爱聊技术的家伙。在工作和学习中不断思考,把这些思考总结出来,并分享,和大家一起交流进步。

一、MCP 介绍 

1. 基本介绍 

MCP(Model Context Protocol,模型上下文协议)是由 Anthropic 公司(Claude 大模型的创造者)于 2024 年 11 月推出的一种开放标准协议,旨在统一大型语言模型(LLM)与外部数据源和工具之间的通信方式。MCP 的核心目标是解决当前 AI 应用开发中的数据孤岛和碎片化集成问题。

2. 协议特点 

MCP 可以被理解为 AI 大模型的"万能接口",类似于 USB-C 接口在硬件领域的作用,它提供了一种标准化的方法,使 AI 模型能够与不同的数据源和工具进行无缝交互。通过 MCP,开发者可以更轻松地构建复杂的 AI 应用,而无需为每个工具或数据源编写专门的集成代码。

  1. MCP 是一个标准协议,如同电子设备的 Type C 协议(可以充电也可以传输数据),使 AI 模型能够与不同的 API 和数据源无缝交互。

  2. MCP 旨在替换碎片化的 Agent 代码集成,从而使 AI 系统更可靠,更有效。通过建立通用标准,服务商可以基于协议来推出它们自己服务的 AI 能力,从而支持开发者更快的构建更强大的 AI 应用。开发者也不需要重复造轮子,通过开源项目可以建立强大的 AI Agent 生态。

  3. MCP 可以在不同的应用/服务之间保持上下文,从而增强整体自主执行任务的能力。

可以理解为 MCP 是将不同任务进行分层处理,每一层都提供特定的能力、描述和限制。而 MCP Client 端根据不同的任务判断,选择是否需要调用某个能力,然后通过每层的输入和输出,构建一个可以处理复杂、多步对话和统一上下文的 Agent。

3. AI Agent 和 MCP 间的关系 

  1. AI Agent 是一个智能系统,它可以自主运行以实现特定目标。传统的 AI 聊天仅提供建议或者需要手动执行任务,AI Agent 则可以分析具体情况,做出决策,并自行采取行动。

  2. AI Agent 可以利用 MCP 提供的功能描述来理解更多的上下文,并在各种平台/服务自动执行任务。

4. MCP 如何工作 

MCP 采用客户端-服务器架构,MCP 架构主要包含以下核心组件:

    MCP 的基本工作流程如下:

    1. 用户向 AI 模型(MCP 客户端)发送请求

    2. AI 模型分析请求,确定需要调用的外部工具或数据

    3. AI 模型通过 MCP 协议向相应的 MCP 服务器发送请求

    4. MCP 服务器处理请求并返回结果

    5. AI 模型整合结果,生成最终回复给用户

    二、cline 配置本地模型 

    我做测试使用的客户端是 vscode+cline,cline 在 vscode 的插件市场中直接安装即可。cline 对 MCP 的支持也是非常好的。因为要使用到大模型,所以这里还要给 cline 配置一个大模型。

    外网开放的免费模型一般都不太好用,所以我一般都是配置本地模型来测试,这里也介绍一下 cline 如何配置本地模型。

    我这里配置了 ollama 启动的 qwen2.5:14b 模型。如下图配置即可,这个配置过程比较简单。

    三、MCP 服务开发 

    1. 典型应用场景 

    1. 实时数据分析:LLM 通过 MCP 直接查询数据库生成动态报告(如销售数据可视化)。

    2. 跨平台自动化:结合本地文件读写和 API 调用,实现“读取文档 → 生成会议摘要 → 发送邮件”全流程自动化。

    3. 隐私敏感任务:医疗数据存储在本地 Server,模型处理时不外传,符合 GDPR 合规要求。

    4. 工具增强生成:例如代码编辑器中集成 MCP Server,根据用户需求调用图像生成工具自动插入图片。

    2. 案例开发 

    这部分代码参考了这篇文章:https://mp.weixin.qq.com/s/JmPxMBRZa8UhsIOQVgupLw ,这篇文章主要是一个按照时区获取时间的工具,我在测试 ok 之后扩展了一个天气获取的工具。

    天气接口使用的是腾讯云的接口,大家可以直接使用免费额度,代码也是直接从腾讯云 api 的介绍中拷贝过来的,这里做了简单的封装调用。

    下面的代码直接拷贝过去就可以使用,不过天气 api 的 key要替换成你自己的。

    package main
    import (	"context"	"crypto/hmac"	"crypto/sha1"	"encoding/base64"	"fmt"	"io"	"io/ioutil"	"net/http"	gourl "net/url"	"strings"	"time""github.com/mark3labs/mcp-go/mcp"	"github.com/mark3labs/mcp-go/server")
    func main() {	// GetWeaher("北京")	// Create MCP server	s := server.NewMCPServer("MCPDemo", "1.0.0")	// Add Get time tool	timetool := mcp.NewTool("current_time",		mcp.WithDescription("Get current time with timezone, Asia/Shanghai is default"),		mcp.WithString("timezone", mcp.Required(), mcp.Description("current time timezone")))	// Add tool handler	s.AddTool(timetool, currentTimeHandler)// add weather tool	weathertool := mcp.NewTool("current_weather",		mcp.WithDescription("Get current weather with city name, 北京 is default, 需要输入中文"),		mcp.WithString("city", mcp.Required(), mcp.Description("city name")))	// Add tool handler	s.AddTool(weathertool, weatherHandler)	// Start the stdio server	if err := server.ServeStdio(s); err != nil {		fmt.Printf("Server error: %v\n", err)	}}
    func currentTimeHandler(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) {	timezone, ok := request.Params.Arguments["timezone"].(string)	if !ok {		return mcp.NewToolResultError("timezone must be a string"), nil	}	loc, err := time.LoadLocation(timezone)	if err != nil {		return mcp.NewToolResultError(fmt.Sprintf("parse timezone with error: %v", err)), nil	}	return mcp.NewToolResultText(fmt.Sprintf(`current time is %s`, time.Now().In(loc))), nil}
    func weatherHandler(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) {	city, ok := request.Params.Arguments["city"].(string)	if !ok {		return mcp.NewToolResultError("city must be a string"), nil	} 	body, err := GetWeaher(city)	if err != nil {		return mcp.NewToolResultError(fmt.Sprintf("read response body with error: %v", err)), nil	}	return mcp.NewToolResultText(string(body)), nil}
    func calcAuthorization(source string, secretId string, secretKey string) (auth string, datetime string, err error) {	timeLocation, _ := time.LoadLocation("Etc/GMT")	datetime = time.Now().In(timeLocation).Format("Mon, 02 Jan 2006 15:04:05 GMT")	signStr := fmt.Sprintf("x-date: %s\nx-source: %s", datetime, source)// hmac-sha1	mac := hmac.New(sha1.New, []byte(secretKey))	mac.Write([]byte(signStr))	sign := base64.StdEncoding.EncodeToString(mac.Sum(nil))auth = fmt.Sprintf("hmac id=\"%s\", algorithm=\"hmac-sha1\", headers=\"x-date x-source\", signature=\"%s\"",		secretId, sign)return auth, datetime, nil}
    func urlencode(params map[string]string) string {	var p = gourl.Values{}	for k, v := range params {		p.Add(k, v)	}	return p.Encode()}
    func GetWeaher(city string) (ret string, err error) {	// 云市场分配的密钥Id	secretId := "xxx"	// 云市场分配的密钥Key	secretKey := "xxx"	source := "usagePlan-xxx"// 签名	auth, datetime, _ := calcAuthorization(source, secretId, secretKey)// 请求方法	method := "GET"	// 请求头	headers := map[string]string{"X-Source": source, "X-Date": datetime, "Authorization": auth}// 查询参数	queryParams := make(map[string]string)	queryParams["areaCn"] = city	queryParams["areaCode"] = ""	queryParams["ip"] = ""	queryParams["lat"] = ""	queryParams["lng"] = ""	queryParams["need1hour"] = ""	queryParams["need3hour"] = ""	queryParams["needIndex"] = ""	queryParams["needObserve"] = ""	queryParams["needalarm"] = ""	// body参数	bodyParams := make(map[string]string)// url参数拼接	url := "https://service-6drgk6su-1258850945.gz.apigw.tencentcs.com/release/lundear/weather1d"	if len(queryParams) > 0 {		url = fmt.Sprintf("%s?%s", url, urlencode(queryParams))	}bodyMethods := map[string]bool{"POST": true, "PUT": true, "PATCH": true}	var body io.Reader = nil	if bodyMethods[method] {		body = strings.NewReader(urlencode(bodyParams))		headers["Content-Type"] = "application/x-www-form-urlencoded"	}client := &http.Client{		Timeout: 5 * time.Second,	}	request, err := http.NewRequest(method, url, body)	if err != nil {		panic(err)	}	for k, v := range headers {		request.Header.Set(k, v)	}	response, err := client.Do(request)	if err != nil {		panic(err)	}	defer response.Body.Close()bodyBytes, err := ioutil.ReadAll(response.Body)	if err != nil {		panic(err)	}	fmt.Println(string(bodyBytes))	return string(bodyBytes), nil}

    四、Cline 上配置自己开发的 MCP 服务 

    在 Cline 上添加 MCP 服务点击右上角“+”号旁边的 4 个小方块按钮即可进入。

    里面有默认的服务市场和已经安装,我们在已经安装这个 tab 中选择 “Configure MCP Servers”,打开配置文件编辑,填写以下内容:

    {  "mcpServers": {    "helight-mcpServers": {      "command": "/Users/helightxu/aillm/mcpgolangtest/mcp-server",      "args": [],      "env": {},      "disabled": false,      "autoApprove": [        "current_weather",        "current_time"      ]    }  }}

    主要就是MCP 服务的名称,里面服务二进制地址等配置。这里还有一个“autoApprove”配置项,这个是在执行命令的时候是否需要人工二次确认还是自动确认。配置之后就可以看到下图的内容了。

    这里还可以点击下面的“Restart Server”,对服务进行重启,重启之后也会获取最新的服务工具信息。在你重新编译 MCP 服务之后,这里一般需要点击重启一下。

    五、案例测试 

    1. 时间获取案例 

    这里输入“当前东京的时间是多少”,执行过程如下,就会在大模型解析之后去调用我们的工具进行执行获取结果,并且会对工具返回的结果使用大模型进行再次组织。

    2. 天气获取案例 

    天气这里也是,提问:“深圳的天气怎么样”,在大模型分析之后就会调用我们的天气获取工具进行天气信息获取,获取之后再使用大模型进行信息组织和展示。

    这里是对信息的再次组织

    五、MCP 的优势和典型应用场景 

    1. MCP 的核心优势 

    从系统集成和开放集成的角度来看,我认为 MCP会带来以下的突破。

    1. 打破数据孤岛:通过统一协议连接异构系统(如本地文档、云服务),减少大量的适配代码开发量。

    2. 双向动态交互:支持实时请求-响应和主动通知(如 WebSocket),相比传统 API 的静态交互更灵活。

    3. 隐私与安全:

      1. 数据隔离:敏感操作(如医疗数据处理)在本地 Server 完成,无需向 LLM 提供商暴露密钥。

      2. 权限控制:Server 可自主定义访问范围,防止越权操作。

    4. 开发效率提升: 开发者只需关注业务逻辑,无需重复实现通信层,例如通过 Python SDK 快速构建天气查询服务。

    2. MCP 目前比较典型的应用场景 

    我认为目前 MCP 的一些典型应用场景会在以下几个方面,不过这个应该发展会很快,未来也许会有更为复杂的应用场景出现。

    1. 智能助手增强

    MCP 可以显著增强智能助手的能力,使其能够:

    • 访问实时信息(如天气、新闻、股票价格等)

    • 执行复杂计算

    • 查询和操作数据库

    • 控制外部设备和系统

    2. 企业知识管理

    在企业环境中,MCP 可以帮助:

    • 构建智能知识库

    • 实现跨部门数据共享

    • 自动化文档处理和分析

    • 提供个性化的员工支持

    六、总结 

    我认为这种模式应该是 AI 应用的趋势,不做大模型,而是做大模型、内容信息和工具之间的一种胶水层,是一种思考模式的实现。感觉未来大厂的这些工具都会向这个方向发展。在特定的领域之内,结合大模型、具体场景信息和相关工具,思考组织执行方式和流程,最终完成一个自动化大规模计算的复杂任务。比如复杂的 k8s 集群运维,复杂大规模的数据分析。

    多智能体协作系统应该是未来的大趋势。而 MCP 在多智能体系统中的应用是其最强大的特性之一。通过 MCP,多个 AI 智能体可以协同工作,各自负责不同的任务,并通过标准化的接口进行通信。

    多智能体可能的一个架构:

    多智能体系统
    多智能体系统├── 协调者智能体(Coordinator Agent)├── 专家智能体 1(Expert Agent 1)├── 专家智能体 2(Expert Agent 2)├── ...└── 专家智能体 N(Expert Agent N)

    六、参考 

    1. https://mp.weixin.qq.com/s/JmPxMBRZa8UhsIOQVgupLw
    2. https://guangzhengli.com/blog/zh/model-context-protocol/

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

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

    相关文章

    CES Asia 2025赛逸展:科技浪潮中的创新与商贸盛会

    在科技发展日新月异的当下,CES Asia 2025第七届亚洲消费电子技术贸易展(赛逸展)正积极筹备,将在北京举办,有望成为亚洲消费电子领域极具影响力的年度盛会。作为亚洲科技领域的重要展会,此次得到了数十家电子…

    Windows桌面采集技术

    在进入具体的方式讨论前,我们先看看 Windows 桌面图形界面的简化架构,如下图: 在 Windows Vista 之前,Windows 界面的复合画面经由 Graphics Device Interface(以下简称 GDI)技术直接渲染到桌面上。 在 Wi…

    ElementPlus 快速入门

    目录 前言 为什么要学习 ElementPlus? 正文 步骤 1 创建 一个工程化的vue 项目 ​2 安装 element-Plus :Form 表单 | Element Plus 1 点击 当前界面的指南 2 点击左边菜单栏上的安装,选择包管理器 3 运行该命令 demo(案例1 ) 步骤 …

    [蓝桥杯 2023 省 A] 异或和之和

    题目来自洛谷网站&#xff1a; 暴力思路&#xff1a; 先进性预处理&#xff0c;找到每个点位置的前缀异或和&#xff0c;在枚举区间。 暴力代码&#xff1a; #include<bits/stdc.h> #define int long long using namespace std; const int N 1e520;int n; int arr[N…

    python学习笔记--实现简单的爬虫(二)

    任务&#xff1a;爬取B站上最爱欢迎的编程课程 网址&#xff1a;编程-哔哩哔哩_bilibili 打开网页的代码模块&#xff0c;如下图&#xff1a; 标题均位于class_"bili-video-card__info--tit"的h3标签中&#xff0c;下面通过代码来实现&#xff0c;需要说明的是URL中…

    windows清除电脑开机密码,可保留原本的系统和资料,不重装系统

    前言 很久的一台电脑没有使用了&#xff0c;开机密码忘了&#xff0c;进不去系统 方法 1.将一个闲置u盘设置成pe盘&#xff08;注意&#xff0c;这个操作会清空原来u盘的数据&#xff0c;需要在配置前将重要数据转移走&#xff0c;数据无价&#xff0c;别因为配置这个丢了重…

    5.4 位运算专题:LeetCode 137. 只出现一次的数字 II

    1. 题目链接 LeetCode 137. 只出现一次的数字 II 2. 题目描述 给定一个整数数组 nums&#xff0c;其中每个元素均出现 三次&#xff0c;除了一个元素只出现 一次。请找出这个只出现一次的元素。 要求&#xff1a; 时间复杂度为 O(n)&#xff0c;空间复杂度为 O(1)。 示例&a…

    C语言:扫雷

    在编程的世界里&#xff0c;扫雷游戏是一个经典的实践项目。它不仅能帮助我们巩固编程知识&#xff0c;还能锻炼逻辑思维和解决问题的能力。今天&#xff0c;就让我们一起用 C 语言来实现这个有趣的游戏&#xff0c;并且通过图文并茂的方式&#xff0c;让每一步都清晰易懂 1. 游…

    【论文#目标检测】YOLO9000: Better, Faster, Stronger

    目录 摘要1.引言2.更好&#xff08;Better&#xff09;3.更快&#xff08;Faster&#xff09;4.更健壮&#xff08;Stronger&#xff09;使用 WordTree 组合数据集联合分类和检测评估 YOLO9000 5.结论 Author: Joseph Redmon; Ali Farhadi Published in: 2017 IEEE Conference …

    大数据运维实战之YARN任务内存泄露排查实战:从节点掉线到精准定位的完整指南

    1.问题背景&#xff1a;集群内存风暴引发的危机 最近某大数据集群频繁出现节点掉线事故&#xff0c;物理内存监控持续爆红。运维人员发现当节点内存使用率达到95%以上时&#xff0c;机器会进入不可响应状态&#xff0c;最终导致服务中断。这种"内存雪崩"现象往往由单…

    AI+金融 应用 使用DeepSeek、Qwen等大模型输入自然语言,得到通达信等行情软件公式代码,导入后使用

    AI金融 应用 使用DeepSeek、Qwen等大模型输入自然语言&#xff0c;得到通达信等行情软件公式代码&#xff0c;导入后使用。不会编程&#xff0c;也能行情软件中实现个性化条件选股&#xff0c;个性化技术指标。 AIbxm低估值趋势选股策略&#xff0c;参考提示词&#xff1a; 编…

    多语言语料库万卷·丝路2.0开源,数据模态全面升级,搭建文化交流互鉴AI桥梁

    3月22日&#xff0c;上海人工智能实验室&#xff08;上海AI实验室&#xff09;联合新华社新闻信息中心、上海外国语大学、外研在线等&#xff0c;发布全新升级的“万卷丝路2.0”多语言语料库&#xff0c;通过构建多语言开源数据底座&#xff0c;以人工智能赋能“一带一路”高质…

    多语言生成语言模型的少样本学习

    摘要 大规模生成语言模型&#xff0c;如GPT-3&#xff0c;是极具竞争力的少样本学习模型。尽管这些模型能够共同表示多种语言&#xff0c;但其训练数据以英语为主&#xff0c;这可能限制了它们的跨语言泛化能力。在本研究中&#xff0c;我们在一个涵盖多种语言的语料库上训练了…

    Linux运维篇-系统io调优

    目录 磁盘文件系统虚拟文件系统 文件系统的工作原理文件系统 I/OI/O 的分类缓冲与非缓冲 I/O直接与非直接 I/O阻塞与非阻塞 I/O同步与异步 I/O 查看文件系统容量目录项和索引节点缓存 通用块层I/O 栈磁盘性能指标磁盘 I/O 观测进程 I/O 观测I/O瓶颈的排查思路思路一思路二 I/O优…

    C语言笔记(鹏哥)上课板书+课件汇总(动态内存管理)--数据结构常用

    动态内存管理 引言&#xff1a;将内存升起一段空间存放数据有几种手段 创建变量&#xff1a;存放一个值创建数组&#xff1a;存放多个连续的一组值 以上开辟的内存空间是固定的&#xff0c;创建大了&#xff0c;空间浪费&#xff0c;创建小了&#xff0c;空间不够。并且一旦…

    本地安装deepseek大模型,并使用 python 调用

    首先进入 ollama 官网 https://ollama.com/点击下载 下载完成后所有都是下一步&#xff0c;就可以 点击搜索 Models &#xff1a; https://ollama.com/search然后点击下载&#xff1a; 选择后复制: ollama run deepseek-r1:32b例如&#xff1a; 让它安装完成后&#xff1…

    Linux wifi driver 注册和设备探测流程

    基础流程 wifi驱动加载&#xff08;insmod或者modprobe&#xff09; 设备驱动匹配探测&#xff08;我们常见的probe函数&#xff09; 整体流程 驱动加载 → 注册支持设备 → 设备插入 → 匹配驱动 → 初始化硬件 → 创建网络接口 明确两点 两个流程 驱动加载&#xf…

    【机器人】复现 GrainGrasp 精细指导的灵巧手抓取

    GrainGrasp为每个手指提供细粒度的接触指导&#xff0c;为灵巧手生成精细的抓取策略。 通过单独调整每个手指的接触来实现更稳定的抓取&#xff0c;从而提供了更接近人类能力的抓取指导。 论文地址&#xff1a;GrainGrasp: Dexterous Grasp Generation with Fine-grained Con…

    快速部署Samba共享服务器作为k8s后端存储

    由于Ceph Squid&#xff08;v19.2.1&#xff09;‌不原生支持直接导出 SMB 服务器‌&#xff0c;需通过手动集成 Samba 或其他第三方工具实现‌ 所以直接部署最简单的 安装软件包 apt install samba编辑配置文件 vim /etc/samba/smb.conf在最末尾添加以下 # cp /etc/samba/sm…

    【MYSQL】索引和事务

    &#x1f970;&#x1f970;&#x1f970;来都来了&#xff0c;不妨点个关注叭&#xff01; &#x1f449;博客主页&#xff1a;欢迎各位大佬!&#x1f448; 本期内容讲解 MySQL 中的索引和事务&#xff0c;在学习的过程中&#xff0c;我们需要经常问自己为什么 文章目录 1. 索…