让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理
MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。
本文以本人开发的fetch_news MPC Server为例 ,该项目基于MCP(Model Control Protocol)框架开发的新闻获取和分析服务器,专门用于获取最新新闻、搜索特定主题的新闻,并对新闻内容进行情感分析和摘要生成。提供了一套完整的工具和资源,可用于快速检索和处理新闻数据。
核心功能(实际上就是提供的几个工具函数)
- 最新新闻获取:获取指定类别的最新新闻,支持科技、财经、体育、娱乐、社会等类别 get_latest_news, 对于新闻的获取我使用的是https://newsapi.org/提供的API
- 新闻搜索:根据关键词搜索最近一段时间内的新闻search_news
- 情感分析:分析新闻文本的情感倾向 analyze_sentiment
- 新闻摘要:为新闻内容生成简短摘要summarize_news
提出问题
我在Claude
中输入"给我看看今天的十条关于人工智能的新闻,给出链接和相关内容摘要和情感分析",大家可以看到它给出的结果"我很抱歉,我的知识截止到2024年10月,所以我无法提供今天(2025年3月19日)的最新人工智能新闻。此外,我没有直接的网络搜索功能来访问和提供当前新闻链接。"大模型的知识受限于训练数据。
其实同样,在CherryStudio
中调用qwen-max
时也不能给出最新的数据。
以下为Claude Desktop中安装了fetch_news的MPC server后,变得可以进行实时搜索。
MCP是什么?
简单来说,MCP是一个标准化的通信协议,旨在让大型语言模型与外部资源和工具实现顺畅的集成。它就像一座桥梁,连接了五个关键部分:主机(Host)、客户端(Client)、服务器(Server)、本地资源(Local Resources)和远程资源(Remote Resources)。这五个部分各司其职,但又必须遵守MCP的"游戏规则",才能协同工作。
以下为官方文档的架构图:
https://modelcontextprotocol.io/introduction
以下为官方对架构中各部分的描述
MCP Hosts: Programs like Claude Desktop, IDEs, or AI tools that want to access data through MCP
MCP Clients: Protocol clients that maintain 1:1 connections with servers
MCP Servers: Lightweight programs that each expose specific capabilities through the standardized Model Context Protocol
Local Data Sources: Your computer's files, databases, and services that MCP servers can securely access
Remote Services: External systems available over the internet (e.g., through APIs) that MCP servers can connect to
对这五个部分逐一解析:
MCP Hosts: Programs like Claude Desktop, IDEs, or AI tools
- 理解:“Hosts”,因为不同的程序(如Claude Desktop、VS Code、某个AI写作工具)都可以充当MCP的主机。每个主机是一个独立的应用程序,它们通过MCP协议访问外部数据或功能。
- 场景:
- 用户可能同时运行Claude Desktop和一个IDE,这两个程序都作为Host,通过MCP获取文件或API数据。
- 在企业环境中,多个AI工具可能并行工作,每个工具都是一个Host。
MCP Clients: Protocol clients that maintain 1:1 connections with servers
- 理解: “Clients”,因为每个Host内部可以嵌入一个或多个MCP客户端,每个客户端与一个特定的服务器建立一对一连接。系统中可能有多个Client实例,分别处理不同的任务。
- 场景:
- 一个IDE(Host)可能同时需要访问本地文件和远程API,它会创建两个Client:一个连接本地文件服务器,另一个连接API服务器。
- 在多用户场景中,每个用户的Host可能都有自己的Client实例。
MCP Servers: Lightweight programs that each expose specific capabilities
- 理解: “Servers”,因为MCP设计允许多个轻量级服务器程序运行,每个服务器负责暴露特定的功能(如文件读写、数据库查询、API调用)。这些服务器彼此独立,通过MCP协议服务于不同的Client。
- 场景:
- 用户电脑上可能同时运行一个文件服务器(暴露本地文件)和一个网络服务器(连接远程API),两者都是MCP Servers。
- 在分布式系统中,可以有多个Server分布在不同设备上,共同支持一个Host。
Local Data Sources: Your computer’s files, databases, and services
- 理解: “Sources”,因为本地数据源种类繁多(文件、数据库、服务等),而且同一类型的数据源可能有多个实例。MCP服务器可以连接多个本地数据源以满足不同需求。
- 场景:
- 一个Server可能同时访问你的文档文件夹(文件)和SQLite数据库,这两个都是Local Data Sources。
- 在复杂应用中,可能有多个文件目录或服务(如本地Web服务)需要被访问。
Remote Services: External systems available over the internet
- 理解:
“Services”,因为远程服务指的是互联网上的各种外部系统(如天气API、股票API、云存储)。MCP服务器可以连接多个远程服务,提供多样化的功能。 - 场景:
- 一个MCP Server可能同时调用天气API和GitHub API,这两个都是Remote Services。
- 在AI任务中,模型可能需要从多个云端服务获取数据,这些服务并存于系统中。
为什么需要MCP?
你可能会问:为什么不直接让模型自己去抓数据,或者干脆用现有的协议呢?答案在于AI应用的特殊需求和现实中的挑战。MCP的出现,正是为了解决这些问题:
-
打破孤岛,提升能力
大型语言模型很聪明,但它们天生是"孤岛"——只能依靠训练数据或用户输入。如果想让模型读你的文件、查实时天气,甚至调用代码工具,就需要一个标准化的接口。MCP填补了这个空白,让模型从"闭门造车"变成"开门迎客"。 -
安全第一
直接让模型访问本地文件或网络API,听起来很酷,但也很危险。万一模型误删文件,或者被恶意指令利用怎么办?MCP通过服务器的中介作用,加入了权限控制和数据隔离,确保交互既强大又安全。 -
标准化带来可扩展性
想象一下,如果每个AI工具都用自己的方式连接外部资源,开发者得多累啊?MCP提供了一个统一的框架,无论是本地文件还是云端服务,无论是Mac还是Windows,只要遵守MCP,就能轻松集成。这不仅减轻了开发负担,还让生态系统更具扩展性。 -
效率与灵活性并存
MCP基于JSON-RPC 2.0,轻量高效。它支持异步通知,意味着服务器可以在不打断客户端的情况下主动推送更新。这种灵活性特别适合实时性要求高的场景,比如实时协作工具或动态数据分析。
MCP 的工作流程
当用户说"给我看看今天的十条关于人工智能的新闻,给出链接、相关内容摘要及情感分析"时,整个系统是如何协同工作的?让我们通过一个流程图来详细了解:
#mermaid-svg-YpmZ4JKP5c5ITzTK {font-family:“trebuchet ms”,verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-YpmZ4JKP5c5ITzTK .error-icon{fill:#552222;}#mermaid-svg-YpmZ4JKP5c5ITzTK .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-YpmZ4JKP5c5ITzTK .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-YpmZ4JKP5c5ITzTK .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-YpmZ4JKP5c5ITzTK .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-YpmZ4JKP5c5ITzTK .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-YpmZ4JKP5c5ITzTK .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-YpmZ4JKP5c5ITzTK .marker{fill:#333333;stroke:#333333;}#mermaid-svg-YpmZ4JKP5c5ITzTK .marker.cross{stroke:#333333;}#mermaid-svg-YpmZ4JKP5c5ITzTK svg{font-family:“trebuchet ms”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-YpmZ4JKP5c5ITzTK .label{font-family:“trebuchet ms”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-YpmZ4JKP5c5ITzTK .cluster-label text{fill:#333;}#mermaid-svg-YpmZ4JKP5c5ITzTK .cluster-label span{color:#333;}#mermaid-svg-YpmZ4JKP5c5ITzTK .label text,#mermaid-svg-YpmZ4JKP5c5ITzTK span{fill:#333;color:#333;}#mermaid-svg-YpmZ4JKP5c5ITzTK .node rect,#mermaid-svg-YpmZ4JKP5c5ITzTK .node circle,#mermaid-svg-YpmZ4JKP5c5ITzTK .node ellipse,#mermaid-svg-YpmZ4JKP5c5ITzTK .node polygon,#mermaid-svg-YpmZ4JKP5c5ITzTK .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-YpmZ4JKP5c5ITzTK .node .label{text-align:center;}#mermaid-svg-YpmZ4JKP5c5ITzTK .node.clickable{cursor:pointer;}#mermaid-svg-YpmZ4JKP5c5ITzTK .arrowheadPath{fill:#333333;}#mermaid-svg-YpmZ4JKP5c5ITzTK .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-YpmZ4JKP5c5ITzTK .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-YpmZ4JKP5c5ITzTK .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-YpmZ4JKP5c5ITzTK .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-YpmZ4JKP5c5ITzTK .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-YpmZ4JKP5c5ITzTK .cluster text{fill:#333;}#mermaid-svg-YpmZ4JKP5c5ITzTK .cluster span{color:#333;}#mermaid-svg-YpmZ4JKP5c5ITzTK div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:“trebuchet ms”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-YpmZ4JKP5c5ITzTK :root{–mermaid-font-family:“trebuchet ms”,verdana,arial,sans-serif;}
数据层
工具层
主机层
用户层
1. 输入请求
2. 传递请求
3. 生成函数调用
4. 传递函数调用
5. 解析和执行函数
6. 调用API
7. 返回数据
8. 返回函数结果
9. 将结果提供给
10. 生成最终回答
11. 展示结果
外部服务
工具函数
LLM
函数调用请求
Host
用户
响应层
步骤分解:
我来结合刚才的流程图,详细解释当用户请求"给我看看今天的十条关于人工智能的新闻,给出链接、相关内容摘要及情感分析"时,整个系统如何协同工作的。按照流程图中的步骤进行详细描述。
用户层
步骤1: 用户输入请求
- 用户在界面上输入"给我看看今天的十条关于人工智能的新闻,给出链接、相关内容摘要及情感分析"
- 请求被发送到Host系统
主机层
步骤2: Host传递请求给LLM
- Host接收到用户的自然语言请求
- Host将这个请求转发给LLM(如Claude)进行处理
步骤3: LLM生成函数调用
- LLM分析用户请求,理解用户需要:
- 获取关于人工智能的最新新闻
- 生成内容摘要
- 进行情感分析
- LLM确定需要调用多个工具函数来完成这个任务
步骤4: LLM生成函数调用请求并传递给Host
-
LLM创建一个结构化的函数调用请求,类似于:
{
“function”: “search_news”,
“parameters”: {
“query”: “人工智能”,
“limit”: 10,
“days”: 1
}
}
工具层
步骤5: Host解析和执行函数
- Host接收到LLM生成的函数调用请求
- Host找到对应的
search_news
函数 - Host准备调用该函数,传入参数"人工智能"、限制10条、时间范围为1天
数据层
步骤6: 工具函数调用外部API
search_news
函数连接到新闻API服务- 函数发送请求获取最新的人工智能相关新闻
步骤7: 外部服务返回数据
- 新闻API返回10条与人工智能相关的最新新闻
- 返回的数据包含新闻标题、链接、发布日期等信息
响应层 (第一轮)
步骤8: 工具函数返回结果给Host
search_news
函数将获取到的新闻数据返回给Host
步骤9: Host将结果提供给LLM
- Host将新闻数据传递回LLM
- LLM接收到数据,分析后发现还需要进行摘要和情感分析
第二轮函数调用 (重复步骤3-9)
-
LLM为每条新闻生成进一步的函数调用
-
对每条新闻内容进行摘要生成:
{
“function”: “summarize_news”,
“parameters”: {
“news_text”: “新闻全文内容”,
“max_length”: 100
}
} -
对每条新闻进行情感分析:
{
“function”: “analyze_sentiment”,
“parameters”: {
“news_text”: “新闻全文内容”
}
} -
Host执行这些函数
-
外部服务进行摘要生成和情感分析
-
结果返回给Host,再传递给LLM
最终响应
步骤10: LLM生成最终回答
- LLM整合所有获取到的信息:
- 原始新闻数据
- 每条新闻的摘要
- 每条新闻的情感分析结果
- LLM将这些信息组织成结构化的回答
步骤11: Host展示结果给用户
- Host将LLM生成的最终回答呈现给用户
- 用户看到10条人工智能相关新闻,每条包含链接、摘要和情感分析
系统各组件如何协同工作(举例)
-
用户请求:用户要求获取人工智能相关新闻、摘要和情感分析
-
LLM解析请求:我(作为LLM)理解了需求,并开始生成函数调用
-
首次函数调用:调用
fetch_news_search
函数搜索人工智能相关新闻- 参数:查询词"人工智能"、最近5天、限制2条
- 结果:系统返回了2条相关新闻
-
后续函数调用:
- 对第一条新闻进行摘要(
summarize_news
) - 返回:简洁的新闻摘要
- 对第一条新闻进行情感分析(
analyze_sentiment
) - 返回:情感得分1.5(积极)
- 对第一条新闻进行摘要(
-
整合信息:我将所有获取到的信息(新闻、摘要、情感分析)整合成一个完整的回答
通过这个过程,我们可以看到MCP(Model Context Protocol)如何使LLM能够通过结构化函数调用与外部工具和数据源交互,从而提供更丰富、更实时的信息给用户。
新闻查询服务时序图
#mermaid-svg-Tu0EOpL0cp3LgsMS {font-family:“trebuchet ms”,verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Tu0EOpL0cp3LgsMS .error-icon{fill:#552222;}#mermaid-svg-Tu0EOpL0cp3LgsMS .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-Tu0EOpL0cp3LgsMS .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-Tu0EOpL0cp3LgsMS .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-Tu0EOpL0cp3LgsMS .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-Tu0EOpL0cp3LgsMS .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-Tu0EOpL0cp3LgsMS .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-Tu0EOpL0cp3LgsMS .marker{fill:#333333;stroke:#333333;}#mermaid-svg-Tu0EOpL0cp3LgsMS .marker.cross{stroke:#333333;}#mermaid-svg-Tu0EOpL0cp3LgsMS svg{font-family:“trebuchet ms”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-Tu0EOpL0cp3LgsMS .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-Tu0EOpL0cp3LgsMS text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-Tu0EOpL0cp3LgsMS .actor-line{stroke:grey;}#mermaid-svg-Tu0EOpL0cp3LgsMS .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-Tu0EOpL0cp3LgsMS .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-Tu0EOpL0cp3LgsMS #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-Tu0EOpL0cp3LgsMS .sequenceNumber{fill:white;}#mermaid-svg-Tu0EOpL0cp3LgsMS #sequencenumber{fill:#333;}#mermaid-svg-Tu0EOpL0cp3LgsMS #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-Tu0EOpL0cp3LgsMS .messageText{fill:#333;stroke:#333;}#mermaid-svg-Tu0EOpL0cp3LgsMS .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-Tu0EOpL0cp3LgsMS .labelText,#mermaid-svg-Tu0EOpL0cp3LgsMS .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-Tu0EOpL0cp3LgsMS .loopText,#mermaid-svg-Tu0EOpL0cp3LgsMS .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-Tu0EOpL0cp3LgsMS .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-Tu0EOpL0cp3LgsMS .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-Tu0EOpL0cp3LgsMS .noteText,#mermaid-svg-Tu0EOpL0cp3LgsMS .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-Tu0EOpL0cp3LgsMS .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-Tu0EOpL0cp3LgsMS .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-Tu0EOpL0cp3LgsMS .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-Tu0EOpL0cp3LgsMS .actorPopupMenu{position:absolute;}#mermaid-svg-Tu0EOpL0cp3LgsMS .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-Tu0EOpL0cp3LgsMS .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-Tu0EOpL0cp3LgsMS .actor-man circle,#mermaid-svg-Tu0EOpL0cp3LgsMS line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-Tu0EOpL0cp3LgsMS :root{–mermaid-font-family:“trebuchet ms”,verdana,arial,sans-serif;} 用户 主机/系统 大语言模型 工具函数 外部新闻API 请求人工智能新闻、摘要和情感分析 转发用户请求 生成search_news函数调用 执行search_news函数 请求人工智能相关新闻 返回10条新闻数据 返回新闻数据 提供新闻数据 生成summarize_news函数调用 执行summarize_news函数 返回新闻摘要 提供新闻摘要 生成analyze_sentiment函数调用 执行analyze_sentiment函数 返回情感分析结果 提供情感分析结果 loop [对每条新闻] 生成最终格式化回答 展示完整结果(新闻、摘要、情感分析) 用户 主机/系统 大语言模型 工具函数 外部新闻API
这个时序图详细展示了新闻查询服务的完整流程,从用户发起请求到最终获得结果的整个过程。以下是对时序图的关键环节解释:
- 初始请求阶段:
- 用户向主机系统发送请求,要求获取人工智能新闻、摘要和情感分析
- 主机将请求转发给大语言模型(LLM)进行处理
- 新闻搜索阶段:
- LLM分析用户意图后,生成
search_news
函数调用 - 主机执行该函数,通过工具层向外部新闻API发送请求
- API返回新闻数据,经过工具层处理后回传给主机
- 主机将新闻数据提供给LLM
- LLM分析用户意图后,生成
- 内容处理阶段(循环处理每条新闻):
- LLM生成
summarize_news
函数调用,请求生成摘要 - 摘要结果返回给LLM
- LLM生成
analyze_sentiment
函数调用,请求情感分析 - 情感分析结果返回给LLM
- LLM生成
- 最终响应阶段:
- LLM整合所有信息,生成结构化的最终回答
- 主机将完整结果展示给用户
这个时序图清晰地表现了系统各组件间的交互顺序和信息流动路径,特别是通过循环结构展示了对多条新闻的批量处理过程。图中的信息流向遵循了单向性原则,使整个流程更加清晰易懂。
读懂这两张图后应该就清楚了:当你输入 “给我看看今天的十条关于人工智能的新闻,给出链接、相关内容摘要及情感分析”,就能得知调用 MPC Server 的秘密。
小结:
MCP核心概念: 让LLM能够与外部工具和服务交互。
MCP (Model Context Protocol) 是一种标准化通信协议,它的核心目的是让大型语言模型能够安全、高效地与外部资源和工具进行交互。它就像AI世界中的"HTTP协议",定义了不同组件之间如何交换信息的规则,让语言模型摆脱"知识孤岛"的限制。
MCP Server 是实现MCP协议的服务器程序,它在整个生态系统中扮演着"翻译官"和"守门人"的角色。就像我们例子中的fetch_news服务器,它负责接收来自AI的请求,转化为对外部资源(如新闻API)的调用,然后将获取的数据安全地返回给模型。每个MCP Server通常专注于提供一种特定能力(如文件访问、API调用、数据分析等)。
简而言之,MCP是标准,MCP Server是实现。MCP定义了"游戏规则",而MCP Server则是遵循这些规则的"玩家"。这种分离设计带来了极大的灵活性和安全性,使AI应用生态系统能够像积木一样组合不同功能。
随着AI技术的普及,MCP有望成为连接AI与数字世界的重要桥梁,让语言模型不再局限于训练数据,而能实时获取和处理各类信息。未来,我们可能会看到更多专业化的MCP Server出现,形成一个丰富多彩的工具生态系统,大大扩展AI应用的边界。如果你对开发自己的MCP Server感兴趣,可以参考官方文档和开源项目,加入这个正在蓬勃发展的生态系统。
相关文章:

让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...

Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...

SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...
爬虫基础学习day2
# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...
Caliper 配置文件解析:config.yaml
Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...

多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...