社区造数服务接入MCP|得物技术

一、背景

今年 MCP 的概念非常火,市面上也涌现出了一大批 MCP 相关工具。作为技术一线者,都会按捺不住地去实操一下,很早的时候就有个设想,如果把我们的测试工具都改造为符合 MCP 服务协议标准,然后全部接入 AI Agent,打造一个集万千工具于一体的智能管家来帮助我们提效,是不是一个很完美的设想。很多宏伟或者天马行空的想法想要真正的落地,必然需要不断向下,拆解成可落地的任务模块,这里我们先从造数开始。

​二、AI 造数设想

在实际业务需求测试中,我们依赖的测试数据需要很多前置的数据要求,这时候会涉及到分步使用不同的造数脚本。比如团长拉新做任务,需要一个 30 天内没发过动态的账号,加入团队,发一篇动态,动态过一审,过二审,阅读数满足 300 个。

为了完成这个场景的造数,我们需要去造数工厂、接口自动化、脚本代码等平台找对应的造数工具,分别去执行才能完成这一系列的操作。可以从下图中看到,总计需要 6 个步骤才能完成。如果不是熟悉所有的业务,哪怕有现成的造数脚本,组合起来使用还是有一定的门槛。

那么在 AI 风行的年代,我们想要实现的是:按照用户输入的测试数据要求,能够按照已有造数能力自动编排,生成对应的测试数据给用户使用。

最终实现效果案例:我需要一个团长拉新的测试数据,要求是 30 天内没有发过动态,进入团队 A,然后发布一条动态,需要过一审风控审核,二审标注,最后需要获得 300 个阅读数。

AI 造数自动去造数池子中寻找对应的造数接口,按照提问的顺序要求来依次执行造数,最后返回给用户对应的测试账号。

这里不再重复介绍 MCP 的概念,我们参考官方给出的 client-server 通用架构图来画一个 AI 造数的架构图,便于理解在落地到 AI 造数的场景,我们可以做哪些事。本篇文章主要就讲解了图中的其中一环,落地社区造数服务的 MCP 接入。

三、社区造数服务tools

框架介绍

社区的造数服务技术栈是基于 FastAPI 框架实现的,通过 uv工具来管理依赖库、虚拟环境等,这个工具亲测的确比传统的 pip 或者 poetry 等工具更好用。从安装 uv到启动项目,只要 4 步就能无痛搞定环境,不用担心本地其他环境的干扰。

## uv命令
1. 安装uv : `curl -LsSf https://astral.sh/uv/install.sh | sh`
2. 创建环境 - 自定义环境名称和Python版本   `uv venv tools_venv --python 3.12`
3. 激活环境    `source tools_venv/bin/activate`
4. 安装依赖包    `uv pip install -r pyproject.toml`## 本地启动项目
直接运行main.py文件中的main方法即可,debug模式自己pycharm中设置
if __name__ == "__main__":import uvicornuvicorn.run(app, host="0.0.0.0", port=8000)

中间件相关配置全部通过 ARK 来管理,项目结构如下:

## 项目结构```bash
├── main.py  # 启动 APP 入口文件
├── README.md  # 开发手册
├── Dockerfile  # Docker 镜像文件
├── alembic  # alembic 迁移 DB 自动生成的相关文件
│   ├── README
│   ├── .env.py
│   ├── script.py.mako
│   └── versions  # 存放每次迁移的版本,可用于回滚 DB 版本
├── alembic.ini  # alembic 配置文件
├── app
│   ├── __init__.py  # 注册 app
│   ├── api  # api 开发目录
│   ├── core  # app 的全局配置
│   ├── crud  # 每个 table 的增删改查操作
│   ├── db  # db 配置
│   ├── models  # 存放表结构
│   ├── schemas  # pydantic 模型
│   └── utils  # 工具类
├── .pre-commit-config.yaml  # 配置 git commit 时自动检测工具
└── pyproject.toml  # 依赖库管理
```

统一部署到公司的发布平台,通过 http://{造数服务域名}/tools/docs#/ ,地址可以访问目前社区所有的造数接口。同时也对接了造数工厂,可以直接去造数工厂使用。

改造思路

老方案-基于 MCP Python SDK

早在出现 MCP 这个概念的时候,我就想过有天把我们的造数服务通过 MCP 工具暴露出来,这样就可以非常方便的集成各种 Agent,打造 AI 造数。在出现这个 FastAPI-MCP 框架之前,想要把造数服务改造成支持 MCP ,就需要通过引入 MCP 依赖库来实现。但这个方案对于已有的造数服务来说改造成本有些高,可以看老方案的案例。

从官方文档面向服务器开发者 - MCP 中文文档中可以找到有对应的 MCP Python SDK,主要就是安装 MCP 这个依赖库。这里举一个简单的 demo,通过手机号查询用户信息的方法。可以很清晰的看出来这个 SDK 的语法结构是需要 @mcp.tool()  这个装饰器来修饰,那么原有的造数服务暴露出来的所有接口方法是否都需要改造,这仍有一定的成本(未考虑其他复杂场景情况下)。

# server.py
from mcp.server.fastmcp import FastMCP
from tools.tools_set import get_user_info
import uvicorn
# Create an MCP server
mcp = FastMCP("Demo")@mcp.tool()
async def get_user_info_tool(mobile: str) -> Coroutine[Any, Any, Any]:"""根据输入的手机号获取用户信息Args:mobile: 手机号"""info = get_user_info(mobile)return infoif __name__ == "__main__":"""Initialize and run the server"""# mcp.run(transport="sse")"""Start the FastAPI server with uvicorn"""uvicorn.run(app, host="0.0.0.0", port=8003)

基于上述代码 demo,我们通过 uvicorn 启动服务,当然也可以单独启动 MCP 服务。控制台输出如下,代表启动成功,接下来我们就可以使用 MCP 客户端工具进行连接使用了,这里使用 Cursor 来做演示。

看图标显示绿色,无报错说明连接成功,这里也能看到 demo 中的 get_user_info_tool 方法作为 MCP 工具暴露了出来。演示到这里,说明了该方案是可行的。因为本文重点讲解采用的新方案,此处就不再多介绍,感兴趣的可以去看官方文档。

四、FastAPI-MCP

安装运行

“Expose your FastAPI endpoints as Model Context Protocol (MCP) tools, with Auth! ”

这是引用官网介绍的第一句话,翻译过来大概的意思就是:把你的 FastAPI 服务作为 MCP 工具暴露出来成为现实!

1.安装 FastAPI-MCP 库

  uv add fastapi-mcp  or  uv pip install fastapi-mcp 

2.使用 FastAPI-MCP,只需要 3 行代码就能把 FastAPI 框架改造成一个 MCP 服务

3.通过 uvicorn 启动服务器,使用http://localhost:8000/mcp 来访问 MCP server

from fastapi import FastAPI
import uvicorn
from fastapi_mcp import FastApiMCP# Create (or import) a FastAPI app
app = FastAPI()# Create an MCP server based on this app
mcp = FastApiMCP(app)# Mount the MCP server directly to your app
mcp.mount()if __name__ == "__main__":uvicorn.run(app, host="0.0.0.0", port=8000)

用法介绍

自定义配置

通过看源码 FastApi-MCP 类,基本能清晰的看出来各个参数的用处,这里将介绍几个常用的。

class FastApiMCP:"""Create an MCP server from a FastAPI app."""def __init__(self,fastapi: Annotated[FastAPI,Doc("The FastAPI application to create an MCP server from"),],name: Annotated[Optional[str],Doc("Name for the MCP server (defaults to app.title)"),] = None,description: Annotated[Optional[str],Doc("Description for the MCP server (defaults to app.description)"),] = None,describe_all_responses: Annotated[bool,Doc("Whether to include all possible response schemas in tool descriptions"),] = False,describe_full_response_schema: Annotated[bool,Doc("Whether to include full json schema for responses in tool descriptions"),] = False,http_client: Annotated[Optional[httpx.AsyncClient],Doc("""Optional custom HTTP client to use for API calls to the FastAPI app.Has to be an instance of `httpx.AsyncClient`."""),] = None,include_operations: Annotated[Optional[List[str]],Doc("List of operation IDs to include as MCP tools. Cannot be used with exclude_operations."),] = None,exclude_operations: Annotated[Optional[List[str]],Doc("List of operation IDs to exclude from MCP tools. Cannot be used with include_operations."),] = None,include_tags: Annotated[Optional[List[str]],Doc("List of tags to include as MCP tools. Cannot be used with exclude_tags."),] = None,exclude_tags: Annotated[Optional[List[str]],Doc("List of tags to exclude from MCP tools. Cannot be used with include_tags."),] = None,auth_config: Annotated[Optional[AuthConfig],Doc("Configuration for MCP authentication"),] = None,):...

※ Server metadata

name:MCP 服务名

description:对 MCP 服务的描述

※ Tool and schema descriptions

创建 MCP 服务器时,可以通过修改 describe_all_responses ,把所有可能的响应模式包含在工具描述中,或通过更改 describe_full_response_schema 把完整的 json 包含在工具描述中。

from fastapi import FastAPI
from fastapi_mcp import FastApiMCPapp = FastAPI()mcp = FastApiMCP(app,name="My API MCP",description="Very cool MCP server",describe_all_responses=True,describe_full_response_schema=True
)mcp.mount()

※ Customizing Exposed Endpoints

 include_operations , 暴露 operation_id=XXX 的接口

 exclude_operations , 排除 operation_id=XXX 的接口

 include_tags , 暴露 tags=XXX 的接口

 exclude_tags ,排除 tags=XXX 的接口

组合使用:

 include_operations 和 exclude_operations 不能同时使用

 include_tags 和 exclude_tags 不能同时使用

 include_operations 和 include_tags 可以组合使用,匹配任一个条件就满足

from fastapi import FastAPI
from fastapi_mcp import FastApiMCPapp = FastAPI()# 案例1:include_operations
mcp = FastApiMCP(app,include_operations=["get_user", "create_user"]
)# 案例2:exclude_operations
mcp = FastApiMCP(app,exclude_operations=["delete_user"]
)# 案例3:include_tags
mcp = FastApiMCP(app,include_tags=["users", "public"]
)#案例4:exclude_tags
mcp = FastApiMCP(app,exclude_tags=["admin", "internal"]
)# 案例5:Combined
mcp = FastApiMCP(app,include_operations=["user_login"],include_tags=["public"]
)mcp.mount()

工具命名

FastAPI 中的路由通过 operation_id 参数来作 MCP 工具名称,如果没有显示命名,框架会自动生成一个。此处经测试,如果不显示命名,自动生成的名字不仅会很奇怪,还会影响 AI 造数的准确性,所以这里最好作好规范,必须要显示命名。

# Auto-generated operation_id (something like "read_user_users__user_id__get")
@app.get("/users/{user_id}")
async def read_user(user_id: int):return {"user_id": user_id}# Explicit operation_id (tool will be named "get_user_info")
@app.get("/users/{user_id}", operation_id="get_user_info")
async def read_user(user_id: int):return {"user_id": user_id}

​五、接入造数服务

框架升级及改造

在接入的时候,要查一下官方文档要求的 Python,FastAPI 等版本,先进行框架升级,防止出现不兼容的问题。这项通过管理工具安装依赖库时能自动校验,其他一些兼容问题在启动服务后根据实际场景一一去解决即可。这里推荐使用 uv 工具进行管理,亲测比之前的 poetry 更好用。

列几个核心库的版本,都是验证过没有兼容问题的。在过程中也是遇到一些兼容问题花了点时间,因为 FastAPI-MCP 框架比较新,网上资料还不全,遇到没法解决的问题大家可以去项目 issue 中找,提升解决问题效率。

python = "^3.12"
fastapi = "0.115.12"
fastapi-mcp ="0.3.1"
mcp="1.7.0"
pydantic = "^2.11.0"
pydantic-settings = "^2.2.0"

步骤

第一步:引入 fastapi-mcp 

第二步:main.py 中添加 MCP 服务

第三步:也是工作量最大的一步,将每个造数接口都做显示命名,并且做好文档注释,写的越清楚 AI 造数的准确率越高,需要对应编写造数场景测试,共同完成

最后一步:启动服务 uvicorn.run('main:app', host='0.0.0.0', port=8023, reload=True, workers=2) ,无报错基本就没有问题了。再通过 MCP 客户端工具连接使用即可

接入 Cursor

改造完之后的造数服务成功对外暴露了 MCP 服务,现在我们可以通过 MCP 客户端去连接使用了,这里选用了 Cursor,因为 Cursor 使用的人比较多,同时集成了市面上的主流大模型。

步骤

第一步:创建一个 mcp.json,按照标准 json 配置即可

{"mcpServers": {"fastapi-mcp": {"url": "http://localhost:8022/mcp","description": "本地开发环境MCP服务配置"},"tools-mcp": {"url": "http://localhost:8011/mcp","description": "本地开发环境MCP服务配置"},    "demo-mcp": {"url": "http://localhost:8001/sse","description": "本地开发环境MCP服务配置"},"tools-mcp-prod": {"url": "http://XXXXXX/mcp","description": "线上"}
}
}

第二步:点击右上角设置 icon,进入 Cursor Settings,选择 MCP

第三步:这里可以看到,在刚才 mcp.json 中配置的 MCP工具均加载过来,打开开关,运行状态显示为绿色,无报错并说明了服务接入正常,接下来就可以正常使用 Cursor 中的 Agent 进行对话了

实操演练

我们现在只希望使用造数能力,因此我们可以指定刚才配置的 MCP 工具。

场景化案例

需求:给手机号为 11120210001 的用户发布一个点评动态,并且通过风控一审。

这里注意一下提问方式,因为我们没有对大模型进行特别的训练,AI 不一定知道 111 开头的是我们测试使用的虚拟手机号,有可能会误解为 userId,所以我们需要告诉 AI 这是一个手机号。

可以看到在这个 demo 中, Agent 自动帮我们分了三步去调用对应的 MCP tool,第一步通过我们输入的手机号去获取 userId,第二步通过 userId 去发布点评动态,第三步通过点评动态 id 去通过风控一审。原本需要三步完成的造数场景,现在通过一句话描述就完成了。


调优案例

需求:随机创建 10 个测试账号

※  调优之前

造数代码,主要看文档注释内容。

@router.post('/create-account', operation_id="create_account",summary="创建测试账号")
async def c_create_account(env: str = Body(..., description='环境'),phonenumber: str = Body(..., description='手机号'),pwd: str = Body(..., description='密码'),usernum: str = Body(None, description='数量'),
) -> Any:"""创建测试账号,默认111开头argsenv: 环境,默认:t1phonenumber: 手机号pwd: 密码,默认:test123usernum: 数量"""

把这个造数需求发送给 AI,发现报错了。我们去代码中看下为何返回了 false,原来是因为接口返回非 200,排查下来是因为 t1 环境测试账号造数默认填了 111,不需要再加 111,所以接口直接 500 了。

这里 AI 犯了两个错误:

1.因为默认手机号都是 11 位的,这里 AI 不知道只需要传 8 位就行。

2.我没有输入具体的手机号,所以按照代码逻辑应该是支持自动随机生成的,但是 AI 也不知道这个逻辑,“自作主张”给我传入了一个手机号。

※  调优后

通过排查我们已经明确知道 AI 犯了哪些错误,那么我们针对这些错误去调优即可。所谓的调优主要就是修改文档注释,可以前后对比下注释内容。

"""
创建测试账号,默认111开头,不用填写111,只需要后面8位
不传手机号phonenumber,默认随机生成手机号argsenv: 环境,默认:t1phonenumber: 手机号,非必填,不填自动生成pwd: 密码,默认:test123usernum: 数量
"""

※  最终效果

通过这个案例可以看到,准确率依赖我们对造数接口的文档注释,所以在实际使用过程中,前期需要我们不断地去调优,才能达到我们想要的效果。

当然随着后续迭代,可能可以用更优雅的方式完成这个工作,比如再引入静态代码分析工具,通过 AI 编程自动完成注释。

​六、总结

技术实践成果

通过将社区造数服务改造成符合 MCP(Model Context Protocol) 标准的工具,我们成功实现了以下目标:

AI 驱动的测试数据自动化

用户通过自然语言描述需求,AI Agent 可自动编排造数接口生成复杂测试数据,将原本需手动执行 3 步的操作简化为一步指令。

低成本框架升级

基于 fastapi-mcp 框架,仅需少量代码改造即可将 FastAPI 服务快速接入 MCP 协议,解决了传统 SDK 方案的高适配成本问题。

工具链整合

通过对接 Cursor 等 AI 工具平台,验证了 MCP 协议在跨平台协作中的可行性,为后续构建“社区智能管家”奠定技术基础。

核心实践经验

注释即规范

AI 调用接口的准确性高度依赖代码注释的清晰度。通过优化接口文档(如参数默认值、输入格式说明),可显著提升 Agent 的任务解析成功率。

渐进式调优 

初期需通过人工干预优化 Agent 的接口调用逻辑,未来可引入代码静态分析工具自动生成标准化注释。

未来优化方向

动态编排增强 

当前接口调用为线性执行,后续可探索基于依赖关系的动态编排(如并行执行独立步骤、自动重试失败操作)。

多 Agent 协作

结合领域知识库与测试断言工具,实现从“造数”到“验证”的全链路 AI 自治。

协议扩展性

探索 MCP 与更多协议(如 OpenAPI)的互操作性,提升工具服务的跨平台复用能力。

价值与启示

本次实践印证了 “AI+协议化工具” 在测试领域的巨大潜力:降低技术门槛 (非技术人员可直接描述需求)、提升执行效率 (分钟级操作秒级完成)、释放创新空间 (复杂场景的自动化长链路测试)。

随着 MCP 生态的完善,测试工程将逐步从“工具堆砌”走向“智能协作”,为研发效能带来质的突破。

​七、感想

“我不是英雄,只是一个拿锤子的约德尔人”

站在巨人的肩膀上总是能看的更高更远,追随技术大牛们的步伐,把 AI 应用到工作中、生活中。回想九年前初入测试行业时捧读的《Google 软件测试之道》,书中“人类智慧的最后一英尺”已然越来越近。重读了 2022 年在公司内部博客发表的《Google 软件测试之道:结合实践的总结》一文,发现仅仅过了3 年,如果现在再去写,又是完全不一样的想法了,技术的发展已发生翻天覆地的变化。

此刻回望测试领域的演进曲线,愈发感到:「拿锤者」的价值不在于挥舞工具的姿态,而在于持续校准认知坐标的能力 。当 AI 重构测试链路的每个环节时,唯以「锤者」的务实与「巨人」的视野双轨并行,方能在技术洪流中锚定价值支点。

加油吧!不忘初心,你我终将能抵达一个又一个“终点”!

往期回顾

1.CSS闯关指南:从手写地狱到“类”积木之旅|得物技术

2.从零实现模块级代码影响面分析方案|得物技术

3.以细节诠释专业,用成长定义价值——对话@孟同学 |得物技术

4.得物可观测平台架构升级:基于GreptimeDB的全新监控体系实践

5.得物自研DGraph4.0推荐核心引擎升级之路

文 / 阿凯

关注得物技术,每周更新技术干货

要是觉得文章对你有帮助的话,欢迎评论转发点赞~

未经得物技术许可严禁转载,否则依法追究法律责任。

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

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

相关文章

Mysql 查询时间段内的sql优化

Mysql 查询时间段内的sql优化 一说写到查询某个时间段的sql查询,我们就会使用DATE_FORMAT函数格式化日期字段: 比如查询某年某月的数据,我们可能常用的方式如下 DATE_FORMAT(pay_time,%Y-%m)=DATE_FORMAT(now(),%Y-%m) 但是这样做会使索引失效,尤其在数据量越来越多的情况…

用 Deepseek 写的 html+js 密码生成器

下面是一个功能完整的密码生成器HTMLJS实现&#xff0c;包含数字、小写字母、大写字母、符号、避免重复字符和密码长度设置功能。 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&…

WPF绑定

如何使用绑定去改变事件驱动的关系。 先介绍一下标签扩展 目录 控件与控件之间的绑定 代码分析 绑定语法详解 1. Binding - 绑定标记 2. ElementName=slider - 绑定源 3. Path=Value - 绑定路径 不同控件属性的默认模式: 控件和属性绑定 1. 数据模型类的作用 2. 窗…

同源“平滑思想”的问题解法:正则化与拉普拉斯平滑

同源“平滑思想”的问题解法&#xff1a;正则化与拉普拉斯平滑 在机器学习和概率模型的实践中&#xff0c;正则化与拉普拉斯平滑是两个看似无关的技术&#xff1a;前者用于防止模型过拟合&#xff0c;后者用于解决零概率问题。但如果深入理解它们的核心逻辑&#xff0c;会发现…

用 AI 让学习更懂你:如何打造自动化个性化学习系统?

用 AI 让学习更懂你:如何打造自动化个性化学习系统? 在这个信息爆炸的时代,传统的学习方式已经难以满足个体化需求。过去,我们依赖固定的教学课程,所有学生按照统一进度进行学习,但每个人的学习节奏、兴趣点和理解方式都不尽相同。而人工智能(AI)正在彻底改变这一局面…

PyQt学习系列08-插件系统与模块化开发

PyQt学习系列笔记&#xff08;Python Qt框架&#xff09; 第八课&#xff1a;插件系统与模块化开发 &#xff08;原课程规划中的第12课&#xff0c;按用户要求调整为第9课&#xff09; 课程目标 掌握Qt插件系统的原理与开发方法实现可扩展的模块化应用程序理解QPluginLoader动…

rlemasklib 安装笔记

目录 windows 安装&#xff0c;没成功 报错笔记&#xff1a; windows 安装&#xff0c;没成功 anslation_unit.obj -Wno-cpp -Wno-unused-function -stdc99 -O3 cl: 命令行 error D8021 :无效的数值参数“/Wno-cpp” error: command C:\\Program Files\\Microso…

Ubuntu 系统grub日志级别设置

在 Ubuntu 系统中&#xff0c;GRUB 的日志级别主要与内核日志级别&#xff08;loglevel&#xff09;相关&#xff0c;而不是 GRUB 自身的日志级别。内核日志级别通常从 0 到 7&#xff0c;其中 0 是最高级别&#xff08;最严重&#xff09;&#xff0c;7 是最低级别&#xff08…

【前端】使用HTTPS

在前端本地开发环境中使用 HTTPS 主要取决于你用的是哪个构建工具&#xff08;如 Vite、Webpack、Vue CLI 等&#xff09;。 目录 ViteWebpack本地生产环境 npx serve浏览器提示“不安全”解决方法上传github注意不要把key传上去 Vite npm install --save-dev types/node #安…

Python 包管理工具 uv的一些常用指令

1.如何安装uv&#xff1a; 在Windows下&#xff0c;执行下面的指令&#xff1a; powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex" 安装很快&#xff0c;安装完成后&#xff0c;会出现&#xff1a; 接着&#xff0c;我们运行指…

行为型:策略模式

目录 1、核心思想 2、实现方式 2.1 模式结构 2.2 实现案例 3、优缺点分析 4、适用场景 5、优化技巧 1、核心思想 目的&#xff1a;将算法&#xff08;行为&#xff09;抽象出来作为一系列策略类&#xff0c;使他们可以相互替换&#xff0c;使系统拥有“可插拔”扩展的能…

计算机网络学习20250524

协议 格式—语法&#xff1a;数据结构或格式&#xff08;怎么做&#xff09;次序—时序&#xff1a;事件实现的顺序&#xff08;做的顺序&#xff09;行为动作—语义&#xff1a;发出什么控制信息&#xff0c;完成何种动作、做出何种应答 网络结构 网络边缘&#xff1a;主机…

Github 2025-05-24 Rust开源项目日报 Top10

根据Github Trendings的统计,今日(2025-05-24统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10TypeScript项目2Dart项目1Tauri: 构建小型、快速和安全的桌面应用程序 创建周期:1673 天开发语言:Rust协议类型:Apache License 2…

数据结构之堆(topk问题、堆排序)

一、堆的初步认识 堆虽然是用数组存储数据的数据结构&#xff0c;但是它的底层却是另一种表现形式。 堆分为大堆和小堆&#xff0c;大堆是所有父亲大于孩子&#xff0c;小堆是所有孩子大于父亲。 通过分析我们能得出父子关系的计算公式&#xff0c;parent(child-1)/2&#xff…

0基础 Git 代码操作

将代码提交仓库&#xff1a; 准备工作​ ​注册 Gitee 账号​&#xff1a;确保你已注册并登录 Gitee。​创建仓库​&#xff1a;在 Gitee 上新建一个空仓库&#xff08;如果尚未创建&#xff09;&#xff1a; 点击右上角 → 新建仓库。填写仓库名称、描述&#xff0c;选择公…

OpenAI大模型不听人类指令事件的技术分析与安全影响

OpenAI大模型不听人类指令事件的技术分析与安全影响 OpenAI大模型o3确实存在不遵从人类关闭指令的现象&#xff0c;这一行为已被第三方安全机构验证&#xff0c;但其本质是技术缺陷而非AI意识觉醒。帕利塞德研究所的测试显示&#xff0c;在100次实验中o3有7次成功绕过关闭指令…

软件工程期末速成--附带几道题

软件工程中的各种设计 瀑布模型&#xff1a; 定义&#xff1a;将软件生存周期的各项活动规定为依照固定顺序连接的若干阶段工作&#xff0c;形如瀑布流水&#xff0c;最终得到软件产品 系统流程图&#xff1a;系统流程图是描绘物理系统的传统工具&#xff0c;它的基本思想是用…

免费分享50本web全栈学习电子书

最近搞到一套非常不错的 Web 全栈电子书合集&#xff0c;整整 50 本&#xff0c;都是epub电子书格式&#xff0c;相当赞&#xff01;作为一个被期末大作业和项目 ddl 追着跑的大学生&#xff0c;这套书真的救我狗命&#xff01; 刚接触 Web 开发的时候&#xff0c;我天天对着空…

嵌入式学习笔记——day26

文件操作&#xff08;续&#xff09;目录操作 一、文件操作 1. lseek lseek 是一个用于在文件中移动文件指针的系统调用&#xff0c;通常用于在文件描述符所指向的文件中定位读取或写入的位置。它允许程序在文件中随机访问数据&#xff0c;而不是只能顺序读取或写入。 off_t …

LINUX安装运行jeelowcode前端项目

参考 JeeLowCode低代码社区,JeeLowCode低代码开发平台,JeeLowCode低代码开发框架,快速启动&#xff08;VUE&#xff09; 安装node 18 LINUX安装node/nodejs_linux安装node 安装到哪-CSDN博客 安装PNPM LINUX安装PNPM-CSDN博客 下载 git clone https://gitcode.com/jeelo…