mcp学习笔记
MCP(Model Context Protocol)是一种由Anthropic推出的开放协议,旨在统一大型语言模型(LLM)与外部数据源/工具之间的交互。其核心组件包括 MCP Client、MCP Server 和 Function Calling 机制,三者协同工作以扩展LLM的能力,使大模型能够调用外部工具。
MCP协议是提示词工程和Function calling技术发展的产物,将如何调用外部工具这个事进行规范和统一。本文使用Python实现了一个简单的mcp demo程序,可实现利用自然语言来操作数据库,发送手机验证码和邮件。
一、MCP基本概念和原理
首先需要了解MCP中几个重要的概念,可参考这里MCP 简介 - MCP 中文文档
mcp中几个要素的关系如下图所示,用户通过mcp client与大模型进行交互,mcp server提供为mcp client提供外部工具。
使用mcp协议调用外部工具的过程如下:
s1:用户向mcp client提出问题;
s2:mcp client将用户的问题和tools列表一同提交给大模型;
s3:大模型会根据用户的问题,从tools列表中取出最相关最适合的工具,构造好参数,向client返回工具名和参数,也有可能找不到;
s4:mcp client调用根据工具名和参数调用对应的接口,可以是本地的函数,也可以是web api,取决于mcp server如何实现;
s5:mcp client将工具的结果提交给大模型;
s6:大模型对工具返回的结果,来回答用户的原始问题;
s7: mcp client将大模型最终的回答呈现给用户。
二、Function calling
Function Calling 允许LLM根据用户请求生成结构化参数(如JSON格式),触发预定义的外部函数或API调用,从而获取实时数据或执行具体操作。例如用户询问天气时,模型提取参数(城市、日期)并调用天气API。
原理:
-
开发者注册函数名称、参数类型及描述(类似JSON Schema),要符合json schema规范。
-
模型解析用户请求,匹配适用的函数。
-
提取关键信息并格式化为结构化参数(如
{"location":"北京"}
) -
外部系统调用函数后,结果返回模型生成最终回答。
Function calling功能需要对模型进行微调训练,使模型能够理解json schema格式语法,为函数构造正确的json格式参数。
目前支持Function calling功能的模型有
-
OpenAI GPT系列:从GPT-3.5开始集成此功能,2023年就有了
-
Anthropic Claude:支持与外部服务深度集成。
-
国产模型:阿里Qwen、DeepSeek v3等通过微调实现类似能力
三、Function calling示例
下面我们使用python写一个示例程序,来演示如何使用function calling功能,实现利用自然语言来操作数据库和访问第三方接口。这里我们使用的模型是qwen3-32b。
python如何调用通义模型可参考阿里百炼的官方API文档。
下面是阿里官方的例子,可作为参考。
import os
from openai import OpenAIclient = OpenAI(# 若没有配置环境变量,请用百炼API Key将下行替换为:api_key="sk-xxx",api_key=os.getenv("DASHSCOPE_API_KEY"),base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", # 填写DashScope SDK的base_url
)tools = [# 工具1 获取当前时刻的时间{"type": "function","function": {"name": "get_current_time","description": "当你想知道现在的时间时非常有用。","parameters": {} # 因为获取当前时间无需输入参数,因此parameters为空字典}}, # 工具2 获取指定城市的天气{"type": "function","function": {"name": "get_current_weather","description": "当你想查询指定城市的天气时非常有用。","parameters": { "type": "object","properties": {# 查询天气时需要提供位置,因此参数设置为location"location": {"type": "string","description": "城市或县区,比如北京市、杭州市、余杭区等。"}},"required": ["location"]}}}
]
messages = [{"role": "user", "content": "杭州天气怎么样"}]
completion = client.chat.completions.create(model="qwen-plus", # 此处以qwen-plus为例,可按需更换模型名称。模型列表:https://help.aliyun.com/zh/model-studio/getting-started/modelsmessages=messages,tools=tools
)print(completion.model_dump_json())
1.获取阿里百炼的api key
这步比较简单不再展开,现在可领取100万的免费tokens额度。
2.mcp_client
代码如下,功能见注释。
import json
import os
from openai import OpenAI
from mcp_server import *# 模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models
MODEL = "qwen3-32b" # 模型名称def main():# 参考https://bailian.console.aliyun.com/?tab=api#/api/?type=model&url=https%3A%2F%2Fhelp.aliyun.com%2Fdocument_detail%2F2712576.html&renderType=iframeclient = OpenAI(# 若没有配置环境变量,请用百炼API Key将下行替换为:api_key="sk-xxx",api_key=os.getenv("Bailian_API_Key"),base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",)messages=[{"role": "system", "content": "You are a helpful assistant."}]while True:query = input("请输入问题:")if query == "exit":breakelif query == "clear":os.system("cls")continueelif query == "reset":messages = [{"role": "system", "content": "You are a helpful assistant."}]continueelse:messages.append({"role": "user", "content": query})completion = client.chat.completions.create(model=MODEL,messages=messages,extra_body={"enable_thinking": False},tools = json.load(open("tools.json", "r", encoding="utf-8")),# 这里加载工具列表# Qwen3模型通过enable_thinking参数控制思考过程(开源版默认True,商业版默认False)# 使用Qwen3开源版模型时,若未启用流式输出,请将下行取消注释,否则会报错# extra_body={"enable_thinking": False},)# 将大模型的结果保存到文件# 这里使用了model_dump_json()方法,返回的是一个json字符串res = completion.model_dump_json()json.dump(completion.dict(), open("response1.json", "w", encoding="utf-8"), ensure_ascii=False, indent=4)#若大模型的结果中有tool_calls字段,则表示调用了工具if completion.choices[0].finish_reason == 'tool_calls':# 取出tool_calls字段中的第一个工具调用tool_call = completion.choices[0].message.tool_calls[0]py_code = 'ret = ' + tool_call.function.name + "(**" + tool_call.function.arguments + ")" # ret = func_name(**args) 的方式传递参数exec(py_code,globals()) # 执行代码,将ret变量映射到当前程序的全局变量空间中# 将function calling的结果加入messages中messages.append(completion.choices[0].message.model_dump())# 将工具调用的结果加入messages中messages.append({'role':'tool','content': str(ret),'tool_call_id': tool_call.id,}) # 提交给大模型completion = client.chat.completions.create(model=MODEL,messages=messages,extra_body={"enable_thinking": False})# 将大模型的结果保存到文件json.dump(completion.dict(), open("response2.json", "w", encoding="utf-8"), ensure_ascii=False, indent=4)# 输出大模型的最终回答if completion.choices[0].message.content:print(completion.choices[0].message.content)messages.append({"role": "assistant", "content": completion.choices[0].message.content}) main()
2. mcp_server
在mcp_server中我们提供了三类接口,具体见附件
一是访问本地sqlite数据库的接口
-
execute_query(sql, params=None) 执行SQL查询并返回结果
-
get_all_table_structures 获取SQLite数据库中所有表的结构信息
二是获取本地公网IP和运营商信息的接口
-
get_public_ip 获取当前公网IP地址
-
get_ip_details(ip: str) 获取IP详细信息(含城市、运营商)
三是发送信息的接口
-
send_verification_code(phone_number: str, code: str) 向指定手机号发送短信验证码
-
sent_email(to,subject,body) 发送邮件
3. 接口说明
这里的所有的接口的函数和参数描述为json_schema格式,保存为tools.json,这个tools描述要提交给大模型接口。json schema语法可参考JSON Schema reference。
[{"type": "function","function": {"name": "execute_query","description": "执行SQL查询并返回结果","parameters": {"type": "object","properties": {"sql": {"type": "string","description": "要执行的SQL语句"},"params": {"type": "array","description": "SQL语句的参数","items": {"type": "string"}}},"required": ["sql","params"]}}},{"type": "function","function": {"name": "get_all_table_structures","description": "获取所有表的结构信息","parameters": {}}},{"type": "function","function": {"name": "get_public_ip","description": "获取当前公网IP地址","parameters": {}}},{"type": "function","function": {"name": "get_ip_details","description": "获取IP详细信息(含城市、运营商)","parameters": {"type": "object","properties": {"ip": {"type": "string","description": "要查询的IP地址"}},"required": ["ip"]}}}, {"type": "function","function": {"name": "send_verification_code","description": "发送短信验证码","parameters": {"type": "object","properties": {"phone_number": {"type": "string","description": "手机号"},"code": {"type": "string","description": "验证码(需为6位数字)","pattern": "^\\d{6}$","minLength": 6,"maxLength": 6}},"required": ["phone_number","code"]}}},{"type": "function","function": {"name": "sent_email","description": "发送电子邮件","parameters": {"type": "object","properties": {"to": {"type": "string","description": "收件人邮箱地址"},"subject": {"type": "string","description": "邮件主题"},"body": {"type": "string","description": "邮件正文"}},"required": ["to","subject","body"]}}}
]
四、测试
为了测试数据操作,在本地创建了一个sqlite数据库,并创建了两个表students和scores,用来存储学生的个人信息和成绩,填充了一些假数据。
students表
scores表
1.测试数据库接口
读取表结构
select操作
提问和回答如下,获得的数据完全正确。
看一下response1.json内容,如下所示,可以看到function calling的响应中,大模型建议调用execute_query函数,并给出了正确的sql语句。
{"id": "chatcmpl-e0d887bb-3954-9585-9594-ae39ccbe5f75","choices": [{"finish_reason": "tool_calls","index": 0,"logprobs": null,"message": {"content": "","refusal": null,"role": "assistant","audio": null,"function_call": null,"tool_calls": [{"id": "call_ca7257e92b9a412d8c1553","function": {"arguments": "{\"sql\": \"SELECT * FROM scores WHERE 学号 = (SELECT 学号 FROM students WHERE 姓名 = ?)\", \"params\": [\"张晓萌\"]}","name": "execute_query"},"type": "function","index": 0}],"reasoning_content": ""}}],"created": 1747480960,"model": "qwen3-32b","object": "chat.completion","service_tier": null,"system_fingerprint": null,"usage": {"completion_tokens": 49,"prompt_tokens": 1319,"total_tokens": 1368,"completion_tokens_details": null,"prompt_tokens_details": null}
}
update操作
这个问题client也是调用execute_query函数。
在navicat中查看数据库,可以看到数据直接的被修改了。
2. web接口测试
如下图所示,这两个问题也完全正确,分别调用get_public_ip和get_ip_details函数。
3.信息发送接口
提问如下 ,大模型回复都完成了。
这里我填写的是本人的手机号和邮箱,手机收到了短信。
收到了邮件
五、如何在通义灵码中使用mcp
可参考配置 MCP 服务_通义灵码_智能编码助手_智能编码助手通义灵码(Lingma)-阿里云帮助中心。
需要在vscode中安装通义灵码插件,具体怎么配置和登陆不再展开,可参考上面的官方文档。
我从MCP广场中添加了几个mcp server,比如MCP 中文趋势聚合
,感觉就是个爬虫。
提供的工具还挺多。
测试一下它的功能,感觉很准确。
总结
本文使用python写了一个最简单的mcp demo,没有严格的按照mcp协议来,本质上还是使用function calling功能来调用函数。
现在互联网上有很多mcp_server市场,比如阿里百炼mcp市场,还有魔搭社区MCP 广场 。
很多服务提供端也提供了自己的mcp server 如百度、高德、支付宝等,以后估计会越来越多。
mcp_client有Claude Desktop**、Cursor、阿里通义灵码等,cursor和通义灵码可vscode的插件市场中安装。
安全领域奇安信也发布了自己的威胁情况MCP server。
看来拥抱mcp已经成为大势所趋。
参考资料
- MCP 简介 - MCP 中文文档
- JSON Schema reference
- 百炼API参考
- 配置 MCP 服务_通义灵码_智能编码助手_智能编码助手通义灵码(Lingma)-阿里云帮助中心
相关文章:
mcp学习笔记
MCP(Model Context Protocol)是一种由Anthropic推出的开放协议,旨在统一大型语言模型(LLM)与外部数据源/工具之间的交互。其核心组件包括 MCP Client、MCP Server 和 Function Calling 机制,三者协…...
鸿蒙北向源码开发: 检查应用接口dts文件api规范性
开源鸿蒙5.0.2对应的api版本是14 5.0社区仓有工具检查接口规范性报告工具: interface/sdk-js/build-tools/api_check_plugin api_check_plugin是什么? 在解释api_check_plugin是什么之前得先知道 应用调用的api接口都是文件名后缀为.d.ts的文件,这些文件内部声明了arkts的a…...
Redis设计与实现——分布式Redis
Redis Sentinel(哨兵) Sentinel 的工作机制 故障检测(Failure Detection) 主观下线(Subjective Down):单个 Sentinel 实例检测到主节点在30 秒内无响应,标记其为 SDOWN。 客观下线…...
【Redis】Hash 哈希
文章目录 常用命令hsethgethmgethexistshkeyshvalshgetallhdelhlenhsetnxhincrbyhincrbyfloat 内部编码应用场景 Redis 存储键值对,也就是 key - value,不过同时也允许 value 也为键值对,但此时为了避免冲突,为 field - value PS…...
【matlab技巧】通过手绘的方法设计二维运动轨迹,附MATLAB程序
代码提供了一种直观的方式来使用鼠标在图形窗口中绘制线条,同时能够记录并显示用户绘制的轨迹坐标。用户通过左键点击绘制点,右键点击结束绘制,适合用于简单的图形交互和数据可视化。 文章目录 代码作用运行MATLAB源代码代码详解 代码作用 这…...
游戏引擎学习第290天:完成分离渲染
game_sim_region.cpp:在BeginSim中移除EntityOverlapsRectangle调用 现在我们接近一个关键点,虽然还没完全结束,但我们已经把所有东西迁移到了一个新概念上——即那些临时创建的控制器结构,称为“脑”(brains…...
uniapp-商城-61-后台 新增商品(添加商品到数据库)
完成商品的布局,完成商品的属性添加,最后的目的还是要完成数据添加,将我们前台的数据添加后台的数据库。 1、界面 2、点击提交完成商品添加 点击下方的提交按钮,将数据添加到数据库。 onSubmit 使用该函数---见3 <view cla…...
深入浅出IIC协议 - 从总线原理到FPGA实战开发 -- 第一篇:I2C总线协议深度解剖
第一篇:I2C总线协议深度解剖 副标题 : 两根线如何征服千亿设备?详解硬件工程师必须掌握的通信奥义 1. 为什么I2C仍是嵌入式经典? 1.1 总线拓扑的哲学 拓扑对比图 SPI需4线N片选 vs I2C仅2线级联 UART点对点 vs I2C多主从架构 成本控制实…...
QT之LayOut布局
文章目录 QFormLayoutQGridLayoutQFormLayout、QGridLayout、QHBoxLayout、QVBoxLayout综合案例用QFormLayout 代替 界面左边部分的QGridLayout QFormLayout #include "widget.h"#include <QFormLayout> #include <QLineEdit>Widget::Widget(QWidget *p…...
ubuntu 24.04安装ros1 noetic
为了后续能够找到安装方法,记录一下: 参考如下链接安装: https://www.reddit.com/r/ROS/comments/158icpy/compiling_ros1_noetic_from_source_on_ubuntu_2204/ 安装步骤如下: 1.获取apt 包 sudo apt-get install python3-ros…...
动态规划-64.最小路径和-力扣(LetCode)
一、题目解析 从左上角到右下角使得数字总和最小且只能向下或向右移动 二、算法原理 1.状态表示 我们需要求到达[i,j]位置时数字总和的最小值,所以dp[i][j]表示:到达[i,j]位置时,路径数字总和的最小值。 2.状态转移方程 到达[i,j]之前要先…...
Python爬虫(29)Python爬虫高阶:动态页面处理与云原生部署全链路实践(Selenium、Scrapy、K8s)
目录 引言:动态爬虫的技术挑战与云原生机遇一、动态页面处理:Selenium与Scrapy的协同作战1.1 Selenium的核心价值与局限1.2 Scrapy-Selenium中间件开发1.3 动态分页处理实战:京东商品爬虫 二、云原生部署:Kubernetes架构设计与优化…...
FauxGen:一款由 CodeBuddy 主动构建的假数据生成器
我正在参加CodeBuddy「首席试玩官」内容创作大赛,本文所使用的 CodeBuddy 免费下载链接:腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 在前端开发中,经常需要一些「假数据」来模拟真实接口,便于开发阶段的界面构建和功能测试…...
chrome 浏览器插件 myTools, 日常小工具。
1. 起因, 目的: 比如,chatgpt, google, 打开网页,就能直接输入文字,然后 grok 就不行,必须用鼠标点一下,才能输入文字。 对我而言,是个痛点!写个插件,自动点…...
从代码学习深度学习 - 词嵌入(word2vec)PyTorch版
文章目录 前言1. 为什么需要词嵌入?2. 早期尝试:独热向量 (One-Hot Vectors)独热向量的局限性3. 自监督的 word2vec4. 跳元模型 (Skip-Gram Model)4.1. 训练5. 连续词袋 (CBOW) 模型5.1. 训练总结前言 自然语言处理(NLP)是人工智能领域中一个充满活力和挑战的分支。要让计…...
手写tomcat:基本功能实现(4)
逻辑架构 HTTP 请求与 Socket: 左侧的 “HTTP 请求” 箭头指向 “socket”,表示客户端发送的 HTTP 请求通过 socket 传输到服务器。Socket 负责接收请求,并提取出其中的 请求路径(如 /first)和 请求方法(如…...
String的一些固定程序函数
append reverse length toString...
SECERN AI提出3D生成方法SVAD!单张图像合成超逼真3D Avatar!
SECERN AI提出的3D生成方法SVAD通过视频扩散生成合成训练数据,利用身份保留和图像恢复模块对其进行增强,并利用这些经过优化的数据来训练3DGS虚拟形象。SVAD在新的姿态和视角下保持身份一致性和精细细节方面优于现有最先进(SOTA)的…...
windows触摸板快捷指南
以下是结构化整理后的触控手势说明,采用清晰的层级划分和标准化表述: **触控手势操作规范****1. 单指操作****2. 双指操作****3. 三指操作****4. 四指操作** **优化说明:** 触控手势操作规范 1. 单指操作 手势功能描述等效操作单击滑动选择…...
Mipsel固件Fuzzing小记
Mipsel固件Fuzzing小记 0x01 准备 1.1 安装必要工具链 首先需要安装 MIPS 交叉编译工具链和相关依赖: sudo apt-get install -y gcc-mipsel-linux-gnu g-mipsel-linux-gnu binwalk qemu-user-static afl这些工具分别用于:交叉编译、固件解包、二进制…...
边缘计算:物联网的“加速器”与“守护者”
引言 随着物联网(IoT)的快速发展,越来越多的设备接入网络,产生了海量的数据。传统的云计算架构面临着延迟高、带宽不足、数据安全等问题。边缘计算作为一种新兴技术,正在成为解决这些问题的关键手段。本文将探讨边缘计…...
简单网络交换、路由-华三RRPP以太环网
1、RRPP简单介绍 RRPP用来组建环网的链路层协议,工作在二层,比STP收敛更快,同时与STP、Smart-link互斥。很多企业很少应用环网组网,但是小编所在工业生产制造企业在特定工艺的区域对环网应用颇多,RRPP小编还是推荐网工…...
Kotlin变量与数据类型详解
Kotlin 变量与基本数据类型详解 一、变量声明 1. val vs var val:不可变变量(只读),类似 Java 的 finalvar:可变变量 val name "Kotlin" // 类型推断为 String var age 25 // 类型推断为 I…...
【Redis】List 列表
文章目录 初识列表常用命令lpushlpushxlrangerpushrpushxlpop & rpoplindexlinsertllen阻塞操作 —— blpop & brpop 内部编码应用场景 初识列表 列表类型,用于存储多个字符串。在操作和实现上,类似 C 的双端队列,支持随机访问(O(N)…...
React中useState中更新是同步的还是异步的?
文章目录 前言一、useState 的基本用法二、useState 的更新机制1. 内部状态管理2. 状态初始化3. 状态更新 三、useState 的更新频率与异步行为1. 异步更新与批量更新2. 为什么需要异步更新? 四、如何正确处理 useState 的更新1. 使用回调函数形式的更新2. 理解异步更…...
Python语法强化
在正式编写第一个Python程序前,我们先复习一下什么是命令行模式和Python交互模式。 命令行模式 在Windows开始菜单选择“Terminal”,就进入到PowerShell命令行模式,它的提示符类似PS C:\>: ┌───────────────…...
FastMCP:为大语言模型构建强大的上下文和工具服务
FastMCP:为大语言模型构建强大的上下文和工具服务 在人工智能快速发展的今天,大语言模型(LLM)已经成为许多应用的核心。然而,如何让这些模型更好地与外部世界交互,获取实时信息,执行特定任务&am…...
TC3xx学习笔记-UCB BMHD使用详解(二)
文章目录 前言Confirmation的定义Dual UCB: Confirmation StatesDual UCB: Errored State or ECC Error in the UCB Confirmation CodesECC Error in the UCB ContentDual Password UCB ORIG and COPY Re-programming UCB_BMHDx_ORIG and UCB_BMHDx_COPY (x 0-3)BMHD Protecti…...
【Docker】docker compose和docker swarm区别
Docker Swarm 和 Docker Compose 的核心区别: 1. 定位不同 Docker Compose 单机多容器编排:在单个主机上管理多个容器,适合本地开发、测试环境。单节点部署:所有容器运行在同一 Docker 引擎实例上。 Docker Swarm 集群管理工具&…...
Power BI Desktop开发——矩阵相关操作
本篇文章使用2025年5月17日从微软商店下载的最新版Power BI Desktop 目录 1.设置矩阵网格整体大小 2.设置矩阵网格行高 3.设置矩阵网格列宽 4.隐藏矩阵网格的某一列 5.隐藏矩阵网格的某一行 6.设置矩阵网格居中展示 7.号图表的显示设置 8.调整行标题的缩进 9.设置矩阵…...
系统架构设计(九):分布式架构与微服务
基础定义 架构类型定义分布式架构指将系统部署在多个服务器节点上,通过网络协作完成整体功能。强调物理上的分布与任务协作。微服务架构一种分布式架构模式,将系统按照业务维度拆分为多个小型自治服务,每个服务可独立开发、部署、伸缩。 核…...
Linux服务器安全如何加固?禁用不必要的服务与端口如何操作?
保护Linux服务器的安全性对于确保系统的稳定性和数据的保密性至关重要。加固Linux服务器的安全性包括禁用不必要的服务和端口,以减少潜在的攻击面。本文将探讨如何加固Linux服务器的安全性,具体介绍如何禁用不必要的服务和端口,从而提高服务器…...
AgentCPM-GUI,清华联合面壁智能开源的端侧GUI智能体模型
AgentCPM-GUI是什么 AgentCPM-GUI 是由清华大学与面壁智能团队联合开发的一款开源端侧图形用户界面(GUI)代理,专为中文应用进行优化。基于 MiniCPM-V 模型(80 亿参数),该系统能够接收智能手机的屏幕截图&a…...
如何用AI优化简历:自动读取与精华浓缩
在求职过程中,一份出色的简历往往是成功的关键。然而,许多求职者在撰写简历时往往面临诸多挑战,比如如何让简历更突出、如何让招聘者快速了解自己的核心优势等。随着人工智能技术的发展,AI不仅可以帮助我们优化简历内容࿰…...
Jackson使用详解
JSON Jackson是java提供处理json数据序列化和反序列的工具类,在使用Jackson处理json前,我们得先掌握json。 JSON数据类型 类型示例说明字符串(String)"hello"双引号包裹,支持转义字符(如 \n&a…...
Node.js 源码概览
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境,它的源码结构相当庞大且复杂。下面我将为你讲解 Node.js 源码的主要结构和关键组成部分。 源码结构 Node.js 的主要源码目录结构如下: node/ ├── lib/ # JavaScript 核心模…...
简单神经网络(ANN)实现:从零开始构建第一个模型
本文将手把手带你用 Python Numpy 实现一个最基础的人工神经网络(Artificial Neural Network, ANN)。不依赖任何深度学习框架,适合入门理解神经网络的本质。 一、项目目标 构建一个三层神经网络(输入层、隐藏层、输出层…...
Conda 完全指南:从环境管理到工具集成
Conda 完全指南:从环境管理到工具集成 在数据科学、机器学习和 Python 开发领域,环境管理一直是令人头疼的问题。不同项目依赖的库版本冲突、Python 解释器版本不兼容等问题频繁出现,而 Conda 的出现彻底解决了这些痛点。作为目前最流行的跨…...
防范Java应用中的恶意文件上传:确保服务器的安全性
防范Java应用中的恶意文件上传:确保服务器的安全性 在当今数字化时代,Java 应用无处不在,而文件上传功能作为许多应用的核心组件,却潜藏着巨大的安全隐患。恶意文件上传可能导致服务器被入侵、数据泄露甚至服务瘫痪,因…...
CSS- 4.2 相对定位(position: relative)
本系列可作为前端学习系列的笔记,代码的运行环境是在HBuilder中,小编会将代码复制下来,大家复制下来就可以练习了,方便大家学习。 HTML系列文章 已经收录在前端专栏,有需要的宝宝们可以点击前端专栏查看! 点…...
Face Over 84.0| 利用AI技术交换照片或视频中的面孔,制作有趣内容
Face Over是一款充满创造力和乐趣的应用程序,它利用AI技术帮助用户交换照片或视频中的面孔,预测未来宝宝的模样,并将照片制作成动画。无论您是想制作有趣的模因、口型同步视频还是探索未来家庭成员的模样,这款应用程序都能满足您的…...
怎么在excel单元格1-5行中在原来内容前面加上固定一个字?
环境: WPS 2024 问题描述: 怎么在excel单元格1-5行中在原来内容前面加上固定一个字? 解决方案: 1.在Excel中,如果您想在单元格的内容前面添加一个固定的字,可以通过以下几种方法实现: 方法…...
AI:人形机器人一定是人的形状吗?
本文将从技术角度分析人形机器人是否必须是人的形状,以及人形与非人形机器人在适用场合、优缺点上的差异。以下是详细解答: 人形机器人一定是人的形状吗? 不,人形机器人(Humanoid Robot)在技术上通常指外…...
26、思维链Chain-of-Thought(CoT)论文笔记
思维链Chain-of-Thought(CoT) **1、研究背景与核心目标****2、思维链提示的方法设计**2.1 COT方法2.2 传统方法 3、实验设计与关键数据集3.1 算术推理3.2 常识推理3.3 符号推理 4、关键实验结果1. 算术推理:思维链提示显著提升多步问题解决率…...
golang中的反射示例
文章目录 前言一、通过反射获取底层类型 reflect.typeOf()二、反射获取底层的值 reflect.ValueOf()三、通过反射设置底层值四 、进阶结构体反射示例 前言 反射就像是给程序装上了显微镜,运行时随时查看底层类型以及底层值,根据需要动态读写或调用方法。…...
NX二次开发——设置对象的密度(UF_MODL_set_body_density)
在前几篇博客中我们已经探讨了如何设置实体的密度。在装配环境中,同样可以为组件设置密度。虽然不能直接对组件进行密度设置,但可以通过一种间接方式实现:在装配环境下,利用 UF_ASSEM_set_work_part_quietly() 函数以静默方式将组…...
基于朴素贝叶斯与 LSTM 的假新闻检测模型对比分析
一、引言 在信息爆炸的时代,假新闻的传播对社会产生了诸多负面影响。如何快速、准确地识别假新闻成为了重要的研究课题。本文将对比传统机器学习算法(朴素贝叶斯)与深度学习模型(LSTM)在假新闻检测任务中的性能表现&am…...
共享内存【Linux操作系统】
文章目录 共享内存共享内存的原理共享内存相关函数和系统调用--systemV系统调用:shmget系统调用:shmctl系统调用:shmat系统调用:shmdt系统调用:ftok 共享内存相关函数和系统调用--POSIXshm_open-- 创建或打开共享内存对…...
Android核心系统服务:AMS、WMS、PMS 与 system_server 进程解析
1. 引言 在 Android 系统中,ActivityManagerService (AMS)、WindowManagerService (WMS) 和 PackageManagerService (PMS) 是三个最核心的系统服务,它们分别管理着应用的生命周期、窗口显示和应用包管理。 但你是否知道,这些服务并不是独立…...
arduino平台读取鼠标光电传感器
鼠标坏掉了,大抵是修不好了。(全剧终—) 但是爱动手的小明不会浪费这个鼠标,确认外观没有明显烧毁痕迹后,尝试从电路板上利用光电传感器进行位移的测量,光电传感器(型号:FCT3065&am…...