社區造數服務接入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
繁體地址,請注明出處:http://hk.pswp.cn/diannao/84894.shtml
英文地址,請注明出處:http://en.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…