开源模型应用落地-模型上下文协议(MCP)-Resources-资源的使用逻辑
一、前言
在大型语言模型与外部世界交互的探索中,如何高效、灵活地接入多样化数据始终是核心命题。MCP(Model Context Protocol)协议中的Resources 机制,正是为这一问题提供了优雅的解决方案。通过URI(统一资源标识符)的抽象设计,MCP服务器能够将文件系统、数据库、API响应甚至实时系统日志等数据转化为LLM可理解的上下文。这种“无副作用”的读取方式不仅简化了数据调用逻辑,更通过应用层控制权的让渡,赋予客户端对资源访问的自主性与灵活性。
本文将深入解析MCP资源的使用逻辑,从协议规范到实战场景,探讨如何通过这一机制释放大模型的无限潜能。
二、术语介绍
2.1.MCP
MCP协议(Model Context Protocol,模型上下文协议)是由Anthropic公司于2024年11月推出的开放标准协议,旨在为大型语言模型(LLM)与外部数据源、工具之间建立统一的通信接口。其核心作用在于解决AI模型因数据孤岛限制难以发挥潜力的问题,通过标准化交互方式提升AI应用的扩展性和实用性。
一、MCP协议的核心定义
1.1. 协议定位
MCP被类比为AI领域的“USB-C接口”,通过解耦LLM与外部系统的集成,实现一次开发即可动态连接多种服务(如数据库、API、本地文件系统等)。例如,开发者无需为每个新工具单独定制接口,只需遵循MCP标准即可实现AI与工具的即插即用。
1.2. 技术架构
采用客户端-服务器模型,包含三个核心组件:
- MCP主机:运行AI模型的环境(如Claude桌面应用);
- MCP客户端:负责与服务器通信并转发请求;
- MCP服务器:提供具体功能服务的轻量级程序(如文件管理或API调用)。
二、MCP协议的核心作用
2.1. 统一交互标准
标准化JSON-RPC 2.0协议支持本地(标准输入输出)与远程(HTTP/SSE)通信,兼容Python、Java等多种编程语言,降低开发复杂度。例如,本地通信保障医疗数据安全传输,远程通信支持云端服务扩展。
2.2. 动态扩展能力
通过资源(Resource)、工具(Tool)、提示(Prompt)三大核心概念,AI模型可自动发现新工具并实时交互。例如连接GitHub时,AI可自动提交代码或修复BUG,无需人工预定义接口。
2.3. 安全与权限控制
内置权限验证机制,用户需手动批准敏感操作(如文件删除或邮件发送),确保数据隐私。在企业场景中,该特性尤为重要,如金融分析时需严格管控市场数据访问权限。
2.2.资源
代表服务器向客户端暴露的、可供读取的数据或内容原语。其主要作用是为大型语言模型提供交互所需的上下文信息。
具体特点包括:
1.数据类型多样性
- Resources 可以涵盖多种结构化或非结构化数据,例如文件内容、数据库记录、API响应、实时系统数据、日志文件、屏幕截图等。
2.只读性
- Resources 被设计为只读 实体,客户端只能检索数据而无法修改,确保数据的安全性和一致性。
3.上下文与应用控制
- 它们作为LLM交互的上下文来源,同时由应用程序(服务器端)控制,即客户端仅能按预设规则访问特定资源。
4.协议功能支撑
- Resources 是MCP协议三大核心能力之一(另两类为工具和提示),用于实现模型对本地或外部数据的定制化访问
三、前置条件
3.1.基础环境及前置条件
1. 操作系统:无限
3.2.MCP环境安装
参见:开源模型应用落地-模型上下文协议(MCP)-从数据孤岛到万物互联(一)_pycharm mcp-CSDN博客文章浏览阅读2.2w次,点赞57次,收藏50次。模型上下文协议(MCP)通过标准化的接口和交互语法,重新定义AI与物理世界的连接,提升人机协作的深度与广度。_pycharm mcphttps://charles.blog.csdn.net/article/details/147068018?spm=1011.2415.3001.5331
3.3.QWEN3推理环境准备
参见:
开源模型应用落地-qwen模型小试-Qwen3-8B-推理加速-vLLM(一)-CSDN博客文章浏览阅读8.9k次,点赞22次,收藏18次。解析Qwen3-8B与vLLM的技术协同逻辑,探讨其在复杂任务中的性能表现及落地价值。https://charles.blog.csdn.net/article/details/147718340?spm=1011.2415.3001.5331开源模型应用落地-qwen模型小试-Qwen3-8B-推理加速-vLLM-Docker(二)_docker 方式启动 vllm,运行qwen3-8b-fp8 参数详解-CSDN博客文章浏览阅读1.3w次,点赞25次,收藏19次。通过容器化技术整合高性能推理框架vLLM与Qwen3-8B模型,可实现资源高效利用、灵活部署及推理性能优化,为大模型本地化应用提供轻量化解决方案_docker 方式启动 vllm,运行qwen3-8b-fp8 参数详解
https://charles.blog.csdn.net/article/details/147719905?spm=1011.2415.3001.5331
四、技术实现
4.1.资源准备
文件名:广州的名称衍变.txt
楚庭是传说中广州最早的名称。关于“楚庭”之得名,有不同的说法:一说周夷王八年(公元前878年),南海臣服于楚国,因而建造楚庭。一说公元前600多年的春秋时期,楚成王熊恽平南方夷越之乱,在南海建楚庭。有研究者解释称,楚庭(又作楚亭)最早或是宫室,或是市集的意思,后来才慢慢被用作广州的代称。清代,人们将楚庭看作广州最早的名字,并建牌坊纪念。
“南武”也是记载中广州早期的名称。“南武”之得名也有多个说法,一说认为此名本为越国旧有地名,楚国灭越后,由公师隅在今天的广州所在地建城,并沿用了故国的名称;一说认为赵佗号为南越武帝,故将南海郡改称南武郡,以郡名为城市命名。不过,关于楚庭、南武的说法。
广州众多别名中,“羊城”“穗城”最广为人知。这两个别名源于五仙乘羊赠穗的美丽神话。相传周朝时,五个仙人骑五羊送来稻穗。五羊衔谷的传说最早见于晋人所著的《广州记》,书中称“五羊衔谷萃于楚庭”。在后来的古籍中,故事情节发展为五位仙人手里拿着一茎六出的谷穗,骑着五羊而来,并祝福此方土地永无饥荒。唐代以来,“五羊”“羊城”逐渐成为广州城的代称,诗人常用“羊城”代指广州,如高适写有“海对羊城阔,山连象郡高”之句,殷尧藩有“遐荒迢递五羊城,归兴浓消客里情”之句。
“广州”作为一个行政区域概念,距今已经有1796年历史,“广州”二字在历史上的地域含义因时而异。西汉年间,长江以南被划分为三个州:扬州、荆州、交州。交州属下设立九郡,广州就属于交州南海郡。汉武帝平定南越国后,颁布圣旨称:初开粤地,宜广布恩信,意思是希望地方官员以怀柔政策管理此地。州府所在地因此定名为“广信”(一说今广西梧州,一说今广东封开),“广州”之“广”因此得名。 “广州”这一地名出现在三国年间。226年,孙权考虑到岭南地区过于辽阔,不易管辖,又因交州刺史士燮势力太大,遂决定把交州一拆为二,史称“交广分治”,“广州”作为一个地名从此出现,合浦以西为交州,合浦以东为广州。广州辖区范围相当于今广东、广西之大部。
4.2.MCP Server实现
# -*- coding:utf-8 -*-
from mcp.server.fastmcp import FastMCP
import aiofilesDEAULT_TRANSPORT = "sse"# Create an MCP server
mcp = FastMCP("Demo", port=9999)@mcp.resource(uri="file://knowledge.txt",name="knowledge",description="获取广州名称的衍变历史信息",mime_type="text/plain"
)
async def knowledge_base():"""获取知了课堂的相关介绍信息"""async with aiofiles.open(r"E:\data\广州的名称衍变.txt", mode="r", encoding='utf-8') as fp:content = await fp.read()print(f'获取的内容:{content}')return contentif __name__ == "__main__":# Initialize and run the serverprint(f"start mcp server,transport: {DEAULT_TRANSPORT}...") # 记录服务启动日志mcp.run(transport=DEAULT_TRANSPORT)
需要安装aiofiles依赖:uv pip install aiofiles
调用:
直接在pycharm中运行
4.3.MCP Client实现
# -*- coding:utf-8 -*-
import asynciofrom openai import OpenAI
from mcp.client.sse import sse_client
from mcp import ClientSession
from contextlib import AsyncExitStackclass MCPClient:def __init__(self, api_key: str, llm_server_url: str, mcp_server_url):self.client = OpenAI(api_key=api_key, base_url=llm_server_url)models = self.client.models.list()self.model = models.data[0].idself.mcp_server_url = mcp_server_urlself.exit_stack = AsyncExitStack()self.resources = {}async def run(self, query):read_stream, write_stream = await self.exit_stack.enter_async_context(sse_client(self.mcp_server_url))session: ClientSession = await self.exit_stack.enter_async_context(ClientSession(read_stream, write_stream))# 初始化await session.initialize()# 获取可用的资源response = await session.list_resources()resources = response.resourcestools = []for resource in resources:uri = resource.uriname = resource.namedescription = resource.descriptionmime_type = resource.mimeTypetools.append({"type": "function","function": {"name": name,"description": description,"input_schema": None}})self.resources[name] = {"uri": uri,"name": name,"description": description,"mime_type": mime_type,}# 定义消息messages = [{"role": "user","content": query}]output = self.client.chat.completions.create(messages=messages,model=self.model,tools=tools,stream=False)print(f"首次调用响应: {output}")choice = output.choices[0]if choice.finish_reason == 'tool_calls':messages.append(output.choices[0].message.model_dump())print(f"更新消息历史: {messages}")tool_call = choice.message.tool_calls[0]tool_id = tool_call.idfunction = tool_call.functionfunction_name = function.namefunction_uri = self.resources[function_name]["uri"]print(f'function_name: {function_name},function_uri: {function_uri}')response = await session.read_resource(function_uri)result = response.contents[0].textprint(f"获取到内容: {result}")messages.append({"role": "tool","content": result,"tool_call_id": tool_id,"name": function_name})# 第二次调用:流式响应生成最终回答output = self.client.chat.completions.create(messages=messages,model=self.model,stream=True)print("\nAI助手:")for chunk in output:if chunk.choices and chunk.choices[0].delta.content:print(chunk.choices[0].delta.content, end='', flush=True)async def aclose(self):await self.exit_stack.aclose()async def main():# 环境配置openai_api_key = "EMPTY"openai_api_base = "http://localhost:9000/v1"mcp_server_url = "http://localhost:9999/sse"client = MCPClient(api_key=openai_api_key,llm_server_url=openai_api_base,mcp_server_url=mcp_server_url)try:await client.run("帮我查一下广州这个名称的由来")finally:await client.aclose()if __name__ == '__main__':asyncio.run(main())
调用:
server端输出
client端输出
首次调用响应: ChatCompletion(id='chatcmpl-677658b2f5284c9c8ad241791eae7359', choices=[Choice(finish_reason='tool_calls', index=0, logprobs=None, message=ChatCompletionMessage(content='<think>\n好的,用户让我帮忙查一下“广州”这个名称的由来。首先,我需要确定用户的需求是什么。他们可能对广州的历史感兴趣,或者是在学习中国城市名称的演变。接下来,我要看看有哪些工具可用。根据提供的工具,有一个名为“knowledge”的函数,可以获取广州名称的衍变历史信息,而且不需要参数。这说明直接调用这个函数就能得到所需的信息。\n\n然后,我需要确认这个函数是否可靠。因为描述中提到它能获取衍变历史,所以应该能提供关于“广州”名称起源的详细资料。用户的问题比较直接,所以调用这个函数应该就能满足需求。不需要额外的参数,所以工具调用会很直接。最后,我应该生成一个工具调用的JSON,指定函数名和空参数,然后等待结果返回给用户。这样处理应该能有效解决问题。\n</think>\n\n', refusal=None, role='assistant', annotations=None, audio=None, function_call=None, tool_calls=[ChatCompletionMessageToolCall(id='chatcmpl-tool-705aad63263c4485afbef6ec99ff131b', function=Function(arguments='{}', name='knowledge'), type='function')], reasoning_content=None), stop_reason=None)], created=1747295376, model='/Qwen3-8B', object='chat.completion', service_tier=None, system_fingerprint=None, usage=CompletionUsage(completion_tokens=201, prompt_tokens=138, total_tokens=339, completion_tokens_details=None, prompt_tokens_details=None), prompt_logprobs=None)
更新消息历史: [{'role': 'user', 'content': '帮我查一下广州这个名称的由来'}, {'content': '<think>\n好的,用户让我帮忙查一下“广州”这个名称的由来。首先,我需要确定用户的需求是什么。他们可能对广州的历史感兴趣,或者是在学习中国城市名称的演变。接下来,我要看看有哪些工具可用。根据提供的工具,有一个名为“knowledge”的函数,可以获取广州名称的衍变历史信息,而且不需要参数。这说明直接调用这个函数就能得到所需的信息。\n\n然后,我需要确认这个函数是否可靠。因为描述中提到它能获取衍变历史,所以应该能提供关于“广州”名称起源的详细资料。用户的问题比较直接,所以调用这个函数应该就能满足需求。不需要额外的参数,所以工具调用会很直接。最后,我应该生成一个工具调用的JSON,指定函数名和空参数,然后等待结果返回给用户。这样处理应该能有效解决问题。\n</think>\n\n', 'refusal': None, 'role': 'assistant', 'annotations': None, 'audio': None, 'function_call': None, 'tool_calls': [{'id': 'chatcmpl-tool-705aad63263c4485afbef6ec99ff131b', 'function': {'arguments': '{}', 'name': 'knowledge'}, 'type': 'function'}], 'reasoning_content': None}]
function_name: knowledge,function_uri: file://knowledge.txt/
获取到内容: 楚庭是传说中广州最早的名称。关于“楚庭”之得名,有不同的说法:一说周夷王八年(公元前878年),南海臣服于楚国,因而建造楚庭。一说公元前600多年的春秋时期,楚成王熊恽平南方夷越之乱,在南海建楚庭。有研究者解释称,楚庭(又作楚亭)最早或是宫室,或是市集的意思,后来才慢慢被用作广州的代称。清代,人们将楚庭看作广州最早的名字,并建牌坊纪念。
“南武”也是记载中广州早期的名称。“南武”之得名也有多个说法,一说认为此名本为越国旧有地名,楚国灭越后,由公师隅在今天的广州所在地建城,并沿用了故国的名称;一说认为赵佗号为南越武帝,故将南海郡改称南武郡,以郡名为城市命名。不过,关于楚庭、南武的说法。
广州众多别名中,“羊城”“穗城”最广为人知。这两个别名源于五仙乘羊赠穗的美丽神话。相传周朝时,五个仙人骑五羊送来稻穗。五羊衔谷的传说最早见于晋人所著的《广州记》,书中称“五羊衔谷萃于楚庭”。在后来的古籍中,故事情节发展为五位仙人手里拿着一茎六出的谷穗,骑着五羊而来,并祝福此方土地永无饥荒。唐代以来,“五羊”“羊城”逐渐成为广州城的代称,诗人常用“羊城”代指广州,如高适写有“海对羊城阔,山连象郡高”之句,殷尧藩有“遐荒迢递五羊城,归兴浓消客里情”之句。
“广州”作为一个行政区域概念,距今已经有1796年历史,“广州”二字在历史上的地域含义因时而异。西汉年间,长江以南被划分为三个州:扬州、荆州、交州。交州属下设立九郡,广州就属于交州南海郡。汉武帝平定南越国后,颁布圣旨称:初开粤地,宜广布恩信,意思是希望地方官员以怀柔政策管理此地。州府所在地因此定名为“广信”(一说今广西梧州,一说今广东封开),“广州”之“广”因此得名。 “广州”这一地名出现在三国年间。226年,孙权考虑到岭南地区过于辽阔,不易管辖,又因交州刺史士燮势力太大,遂决定把交州一拆为二,史称“交广分治”,“广州”作为一个地名从此出现,合浦以西为交州,合浦以东为广州。广州辖区范围相当于今广东、广西之大部。AI助手:
<think>
好的,用户让我查广州名称的由来,我之前已经调用了knowledge工具,现在需要整理这些信息。首先,我需要确认用户的需求是否被完全满足。他们可能对广州的历史名称演变感兴趣,包括楚庭、南武、羊城、穗城以及“广州”这一名称的起源。首先,用户可能想知道广州名称的多个来源,包括古代别名和现代名称。我需要将这些信息分门别类,确保每个名称的由来都清晰明了。比如,楚庭和南武的起源有不同的说法,需要分别说明。然后,羊城和穗城的神话故事也需要详细解释,尤其是五仙乘羊的传说,这是广州文化的重要部分。接下来是“广州”作为行政区域名称的起源,这部分涉及西汉和三国时期的历史,需要明确“广”字的由来,以及“广州”名称的正式出现时间。用户可能对历史事件和地名演变之间的关系感兴趣,所以需要将这些历史背景与名称变化结合起来。另外,用户可能没有明确说明是否需要更深入的细节,比如不同朝代的行政区划变化,或者现代广州名称的使用情况。不过根据之前的回答,已经涵盖了主要的历史阶段,所以可能不需要进一步扩展。需要注意的是,回答要结构清晰,分点说明,避免信息混杂。最后,检查是否有遗漏的信息,比如是否有其他别名或名称,但根据提供的工具响应,主要名称已经覆盖。确保回答准确,引用正确的历史事件和文献,如《广州记》和三国时期的分治事件。同时,保持语言简洁,易于理解,避免使用过于学术化的术语,让用户能够轻松理解广州名称的由来。
</think>广州名称的由来与历史演变可概括如下:### 一、早期名称
1. **楚庭**(传说中最早名称) - 周夷王八年(前878年)或春秋时期(约前600年),楚国平定南海后建楚庭,或为宫室、市集之意。清代文献将其视为广州最早名称。2. **南武**(早期行政名称) - 一说为越国旧地名,楚灭越后由公师隅建城沿用;另一说因赵佗称南越武帝,改南海郡为南武郡,后演变为城市名称。### 二、别名与神话
1. **羊城/穗城** - 源自“五仙乘羊赠穗”的传说:周朝五仙人骑五羊携稻穗降临楚庭,寓意土地丰饶。晋代《广州记》首次记载此传说,后成为广州的文化象征。### 三、行政名称“广州”的起源
1. **“广”字由来** - 西汉时期,交州下设九郡,广州属交州南海郡。汉武帝平定南越后,以“广布恩信”为由,将州府所在地命名为“广信”(今广西梧州或广东封开),取“广”字寓意。2. **“广州”名称正式出现** - 三国时期(226年),孙权为加强对岭南的管理,将交州分为交州(合浦以西)和广州(合浦以东),广州作为地名首次出现,辖区涵盖今广东、广西大部分地区。### 四、名称演变总结
- **楚庭→南武→广信→广州**:从传说名称到行政名称的演变。
- **羊城/穗城**:文化象征性别名,与历史传说紧密关联。
- **现代广州**:自三国分治后,“广州”作为行政区划名称沿用至今,成为城市的核心名称。这一名称体系既包含历史地理变迁,也融合了神话传说与文化认同,体现了广州作为岭南文化中心的深厚底蕴。
Process finished with exit code 0
相关文章:
开源模型应用落地-模型上下文协议(MCP)-Resources-资源的使用逻辑
一、前言 在大型语言模型与外部世界交互的探索中,如何高效、灵活地接入多样化数据始终是核心命题。MCP(Model Context Protocol)协议中的Resources 机制,正是为这一问题提供了优雅的解决方案。通过URI(统一资源标识符&…...
如何判断一个网站后端是用什么语言写的
判断一个网站的后端是用什么语言写的,可以从以下几个方面入手: 一、通过响应头(HTTP Response Headers) 使用浏览器开发者工具或工具如 curl 查看网站返回的响应头信息,有时可以看到蛛丝马迹: 示例&#…...
CertiK助力以太坊扩展战略,解析Pectra升级的变革与挑战
近期,美国知名金融科技媒体Benzinga发表文章,深入探讨以太坊Pectra升级的变革性影响,并特别引用了CertiK对潜在风险的权威分析,特别是EIP-7702引入的全新信任模型变化。此次升级不仅重新定义了EOA与智能合约的交互方式,…...
【C++】Module CPP:模块化编程 Demo
一、C20 模块简介 C20 模块是 C 语言发展史上的重要革新,它从根本上改变了代码组织方式。相比传统的头文件(#include)机制,模块具有以下核心优势: 隔离编译:模块独立编译,避免重复编译头文件符…...
mvc-service引入
什么是业务层 1)Model1(JSP)和Model2(模糊的mvc): MVC:Model(模型),View(视图),Controller(控制器) 视图层:用于数据展示以及用户交互的界…...
Linux线程互斥锁
1. 什么是互斥锁(Mutex)? 互斥锁(Mutex,Mutual Exclusion) 是一种用于多线程编程的同步机制,用于保护共享资源(如变量、内存、文件等),确保在同一时刻只有一…...
PINN Poisson 1d
📌 一、问题定义 我们要求解的微分方程是 d 2 u d x 2 f ( x ) \begin{equation} \frac{d^2 u}{d x^2} f(x) \end{equation} dx2d2uf(x) 其中: f ( x ) − 0.49 s i n ( 0.7 x ) − 2.25 c o s ( 1.5 x ) f(x) -0.49sin(0.7x) - 2.25cos(1.5x) f(x)−…...
国内优质沉金PCB厂家有哪些?
在高端电子制造领域,沉金工艺因其优异的抗氧化性、信号完整性和焊接可靠性,成为5G通信、AI服务器、新能源汽车等领域的核心需求。本文精选五家国内技术领先的沉金PCB厂家,从工艺精度、交付效率、品质管控等维度展开深度解析,助力企…...
【Trae插件】从0到1,搭建一个能够伪装成网页内容的小说阅读Chrome插件
【Trae插件】从0到1,搭建一个能够伪装成网页内容的小说阅读Chrome插件 最近,Trae 插件也迎来了更新,Trae 插件(原MarsCode 编程助手)Builder模式全面上线,同时支持 VS Code 、JetBrains IDEs,助…...
2025年5月AI科技领域周报(5.5-5.11):AGI研究进入关键验证期 具身智能开启物理世界交互新范式
2025年5月AI科技领域周报(5.5-5.11):AGI研究进入关键验证期 具身智能开启物理世界交互新范式 一、本周热点回顾1. OpenAI发布GPT-5多模态大模型 突破通用智能关键阈值2. 特斯拉Optimus机器人量产版发布 具身智能进入工业场景3. 百度文心ERNIE…...
UDP 多点通信
一、setsockopt/getsockopt 函数详解 1. 函数原型 c #include <sys/socket.h> int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen); int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen);…...
什么是TCP协议?它存在哪些安全挑战?
一、TCP协议概述 TCP(传输控制协议)是互联网中面向连接、可靠的传输层协议,主要负责在不可靠的IP层上实现数据的可靠传输。其核心特点包括: 面向连接:通信前需通过三次握手(SYN-SYN/ACK-ACK)建…...
《Python星球日记》 第80天:目标检测(YOLO、Mask R-CNN)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、目标检测简介1. 边界框(Bounding Box)与类别标签2. 两阶段 vs 单阶段检测器两阶段检测器特点:单阶段检测器特点:二、YOLO(You Only Lo…...
工业大数据的定义
目录 工业大数据的定义 工业大数据发展历程 工业大数据的特征 工业大数据的处理流程 工业大数据在处理上面临的挑战 工业大数据的有效处理方案 工业大数据处理相关案例 数益工联 x TDengine 中天钢铁 x TDengine 广州某企业工业互联网项目 x TDengine 格创东智 x TD…...
Cursor vs VS Code vs Zed
代码编辑器的世界已经迎来了创新的爆发。曾经由重量级IDE或基础文本编辑器主导的领域,如今开发者们发现自己正在探索全新一波聚焦于AI集成、协作和性能的工具。 在本文中,我们将深入探讨2025年三款流行的编辑器:Cursor、Visual Studio Code (VS Code)和Zed Code Editor。每…...
道通龙鱼系列-混合翼无人机:垂直起降+长时续航
道通龙鱼系列-混合翼无人机:垂直起降长时续航 道通龙鱼系列无人机采用独特的倾转翼尖设计,有效融合多旋翼垂直起降和固定翼长时续航的双重优势,机动、灵活,适应各种复杂起降条件;整机采用快拆和高效气动设计࿰…...
单片机-STM32部分:17、数码管
飞书文档https://x509p6c8to.feishu.cn/wiki/TOQqweKHWinugokUyqzcwb0fnTd 原理: 一个二极管等于八个LED组合在一起,想要显示什么形状,就点亮对应LED即可。 数码管根据其公共端所接的阳极和阴极的不同,分为了共阴极数码管和共阳…...
Web安全科普:构建数字世界的“防盗门”
目录 一、Web安全的核心挑战 二、六大核心威胁深度解析 三、安全防御体系构建 四、开发者必备工具包 五、法律合规要点 六、未来安全趋势 一、Web安全的核心挑战 1. 攻击者视角的入口 数据流动路径:用户 → 浏览器 → 网络 → 服务器 → 数据库 脆弱点分布&a…...
深入解析HTTP协议演进:从1.0到3.0的全面对比
HTTP协议作为互联网的基础协议,经历了多个版本的迭代演进。本文将详细解析HTTP 1.0、HTTP 1.1、HTTP/2和HTTP/3的核心特性与区别,帮助开发者深入理解网络协议的发展脉络。 一、HTTP 1.0:互联网的奠基者 核心特点: 短连接模式&am…...
【RAP】RAP动作与流行舞蹈/街舞
RAP动作与流行舞蹈风格的匹配性分析 Rap动作与各种流行舞蹈风格的匹配度如下: 最匹配 街舞(Hip-hop/Street Dance) 完美匹配程度:★★★★★原因:Rap和街舞同源于嘻哈文化,共享相同的文化根基特点:街舞的断点式动作、力量感和即兴性与Rap的节奏完美契合代表动作:Break…...
BUUCTF——web刷题第一页题解
共31题,admin那题没有,因为环境问题,我做的非常卡 目录 极客大挑战 2019]Havefun [HCTF 2018]WarmU [ACTF2020 新生赛]Include [ACTF2020 新生赛]Exec [GXYCTF2019]Ping Ping Ping [SUCTF 2019]EasySQL [极客大挑战 2019]LoveSQL [极…...
windows、Ubuntu、Debian 添加静态路由
1. windows 10 添加静态路由 快捷键win R: 输入 cmd ,打开命令行窗口 route print // 查看已经存在的路由 route add 192.168.3.0 mask 255.255.255.0 192.168.3.200 // 添加静态路由 192.168.3.200 为下一跳 route add -p 192.168.…...
服务器连接多客户端
一、epoll 核心函数详解 1. epoll_create/epoll_create1 - 创建 epoll 实例 c #include <sys/epoll.h> int epoll_create(int size); // Linux 2.6.8前需指定size(>1),后续版本可忽略 int epoll_create1(int flags); // 推荐使用…...
驿客时光影院酒店升级:雷克赛恩 Cyber Pro 1 如何重塑住宿观影体验
一、影院式酒店新趋势:当住宿邂逅沉浸式观影体验 (一)驿客时光的差异化突围 成都温江区的驿客时光影院酒店,凭借 “百寸巨幕观影 舒适住宿” 的差异化定位,成为年轻旅客打卡热点。其 20 间主题客房均配备独立投影设…...
Cinema4D 26.014
添加图片注释,不超过 140 字(可选) 软件概述 Cinema 4D是德国MAXON公司开发的一款专业的3D动画、建模、仿真和渲染软件解决方案,在3D设计领域应用广泛。 功能特点 强大的建模功能 多边形建模:提供了丰富的多边形建模…...
脚本语言Lua
本文来源 :腾讯元宝 Lua是一种轻量级、可嵌入的脚本语言,由巴西里约热内卢天主教大学的Roberto Ierusalimschy、Waldemar Celes和Luiz Henrique de Figueiredo于1993年开发。其设计目标是嵌入应用程序中,提供灵活的扩展和定制功能。 主要特性…...
106. 从中序与后序遍历序列构造二叉树
https://leetcode.cn/problems/construct-binary-tree-from-inorder-and-postorder-traversal/description/?envTypestudy-plan-v2&envIdtop-interview-150思路:我们知道后序的顺序是左右根,所以后序数组的最后一个一定是根节点,然后中序…...
全链路压测实战指南:从理论到高可用架构的终极验证
全链路压测实战指南:从理论到高可用架构的终极验证 引言:你的系统,真的准备好迎接洪峰了吗? 凌晨3点,某大型电商平台秒杀活动突袭上线。百万用户同时涌入,订单接口响应时间从200ms飙升到15秒,数据库连接池被瞬间耗尽,支付服务直接“熔断”,连锁反应导致库存混乱、物流…...
分布式AI推理的成功之道
随着AI模型逐渐成为企业运营的核心支柱,实时推理已成为推动这一转型的关键引擎。市场对即时、可决策的AI洞察需求激增,而AI代理——正迅速成为推理技术的前沿——即将迎来爆发式普及。德勤预测,到2027年,超半数采用生成式AI的企业…...
纯前端实现基于位置的天气和动态背景图片
如何为博客首页实现基于位置的天气和动态背景图片 引言 我为我的博客主页添加了根据用户所在位置显示当地天气、日出日落时间,并加载一张与天气和时间段匹配的高质量背景图片,可以显著提升用户体验。想象晴天时展示阳光普照的田野,雨天时呈现…...
1.1 认识编程与C++
认识编程与C教程 目标 理解程序、指令、数据的概念。了解C在现实中的应用场景。学会搭建编程环境,迈出第一步。 一、编程是什么?——给计算机写“魔法指令” 1. 基本概念 程序:一系列指令的集合,像一本“魔法食谱”。 &#x…...
代码随想录算法训练营第60期第三十七天打卡
大家好,今天我们算法训练营的第37天,首先为自己感到骄傲,居然坚持下来了,本来觉得自己可能坚持不下来,但是我硬是坚持下来了,好样的,同时也感谢那些看我的题解给我点赞的朋友,我在这…...
每周靶点:TIGIT、ICAM1及文献分享
本期精选了《抑制性受体TIGIT》《细胞粘附分子ICAM1》《真核蛋白表达:选择合适的条件进行》《文献分享:双特异性和多特异性抗体的可开发性评估》四篇文章。以下为各研究内容的概述: 抑制性受体TIGIT TIGIT是一种具有Ig和ITIM结构域的T细胞免…...
介绍一下什么是 AI、 AGI、 ASI
1. AI(人工智能):工具化的“窄域智能” 定义: AI 是能够执行特定任务的智能系统,依赖大量数据和预设规则,缺乏自主意识和跨领域通用性。 特点: 任务专用:如图像识…...
部署安装jenkins.war(2.508)
实验目的:部署jenkins,并与gitlab关联bulid 所需软件:jdk-17_linux-x64_bin.tar.gz jenkins.war apache-tomcat-10.1.40.tar.gz 实验主机:8.10具有java环境,内存最少为4G,cpu双核 目录 jdk安装 …...
【歌曲结构】2:小节与歌曲结构信息整合
歌曲小节与结构信息整合 我将为您整合小节信息与歌曲结构,创建一个更加详细的JSON数据结构。 处理方法 将小节时间与歌曲结构段落进行匹配为每个小节添加所属段落信息为小节添加格式化的时间戳为小节添加对应时间范围内的歌词{"song_title": "财神庙前许三亿…...
商城系统前端
商城系统的前端技术涉及多个层面的技术选型与架构设计,结合搜索结果中的信息,以下是商城系统前端技术的核心要点及实现方案: 一、基础技术栈 HTML5 & CSS3 功能定位:作为前端开发的基础,…...
OpenSSH 漏洞-SSH 服务器面临 MitM 攻击和拒绝服务攻击的风险
OpenSSH 发布了安全更新,修复了两个漏洞,一个是 MitM 攻击漏洞,另一个是拒绝服务漏洞,其中一个漏洞是在十多年前引入的。Qualys 发现了这两个漏洞,并向 OpenSSH 的维护人员展示了其可利用性。 OpenSSH(开放…...
PostgreSQL MCP 使用案例
## 概述 PostgreSQL MCP(PostgreSQL Multi-host Cluster Provisioning)是一种用于部署和管理多节点PostgreSQL集群的工具和架构。它提供了高效的数据库集群管理、高可用性保障和负载均衡功能。本文档将介绍PostgreSQL MCP的基本使用方法和常见应用场景。…...
什么是接口文档,如何使用,注意事项有哪些
一、接口文档的核心内容 基础信息 接口名称:明确功能(如“用户登录接口”)。 接口地址:URL 或 RPC 路径(如 /api/v1/login)。 请求方法:HTTP 方法(GET/POST/PUT/DELETE)…...
Swagger go中文版本手册
Swaggo(github.com/swaggo/swag)的注解语法是基于 OpenAPI 2.0 (以前称为 Swagger 2.0) 规范的,并添加了一些自己的约定。 主要官方文档: swaggo/swag GitHub 仓库: 这是最权威的来源。 链接: https://github.com/swaggo/swag重点关注: README.md: 包含了基本的安装、使用…...
[Java实战]Spring Boot + Netty 实现 TCP 长连接客户端及 RESTful 请求转发(二十六)
[Java实战]Spring Boot Netty 实现 TCP 长连接客户端及 RESTful 请求转发(二十六) 在现代微服务架构中,经常需要在不同服务之间进行高效、可靠的通信。本文将介绍如何使用 Spring Boot 结合 Netty 实现一个 TCP 长连接客户端,并…...
ProfibusDP主站转ModbusRTU/TCP与横河AXG电磁流量计通讯案例
ProfibusDP主站转ModbusRTU/TCP与横河AXG电磁流量计通讯案例 在当今数字化工业时代,智能仪表与控制系统的互联互通成为提高生产效率和管理水平的关键。横河AXG电磁流量计作为一款高性能的流量测量设备,在多个行业得到了广泛应用。而Profibus DP作为一种…...
鸿蒙OSUniApp开发的商品详情展示页面(鸿蒙系统适配版)#三方框架 #Uniapp
使用UniApp开发的商品详情展示页面(鸿蒙系统适配版) 前言 随着移动电商的普及,一个体验良好的商品详情页对于提高用户转化率至关重要。本文将分享我在使用UniApp开发商品详情页时的实践经验,并特别关注如何适配鸿蒙系统…...
VMware中快速安装与优化Ubuntu全攻略
准备工作 在开始安装之前,确保已经下载了VMware Workstation或VMware Player,并准备好Ubuntu的ISO镜像文件。VMware Workstation是一款功能强大的虚拟机软件,支持在Windows或Linux主机上运行多个操作系统。 创建虚拟机 打开VMware Worksta…...
本地 PC 使用Offset Explorer连接实体Ubuntu Kafka 【单机】超时问题解决
现状:本地 PC 使用Offset Explorer连接实体Ubuntu Kafka 超时 一、确认kafka是否在9092端口上运行 netstat -tulnp | grep 9092输出 tcp6 0 0 :::9092 :::* LISTEN 66113/java 使用jps查看进程66113的详细信息…...
CSS AI 通义灵码 VSCode插件安装与功能详解
简介 在前端开发领域,页面调试一直是个繁琐的过程,而传统开发中美工与前端的对接也常常出现问题。如今,阿里云技术团队推出的通义灵码智能编码助手,为前端开发者带来了新的解决方案,让开发者可以像指挥者一样…...
MUSE Pi Pro 使用TiTanTools烧录镜像
视频讲解: MUSE Pi Pro 使用TiTanTools烧录镜像 下载windows下的烧录工具 https://cloud.spacemit.com/prod-api/release/download/tools?tokentitantools_for_windows_X86_X64 下载镜像文件,zip后缀的即可 打开软件默认界面 按住FDL键,同时…...
嵌软面试每日一阅----通信协议篇(二)之TCP
一. TCP和UDP的区别 可靠性 TCP:✅ 可靠传输(三次握手 重传机制) UDP:❌ 不可靠(可能丢包) 连接方式 TCP:面向连接(需建立/断开连接) UDP:无连接࿰…...
开机自启动python程序_ubuntu22.04
一、没有设置开机自启动时 1、 conda activate yolo cd /home/orangepi/work_11.15/zipformer 2、 python app.py 二、设置开机自启动流程 1、新建一个文件.service文件 touch zipformer.service 2、最重要的找到你自己的环境路径 这个是我的 yolo的虚拟环境在ÿ…...