在這篇文章中,我們將討論模型上下文協議,為什麼它可能很重要,並逐步構建MCP 伺服器來幫助我們與Jina.ai 對話,並能夠在Claude 中添加網絡搜索和事實檢查功能使用Python和FastMCP 的桌面。
模型上下文協定
Anthropic去年感恩節前後宣布。儘管它引起了一些關注,但考慮到它可能是開發下一層人工智慧軟體堆疊的關鍵墊腳石,它所獲得的認可可能還不夠。
什麼
模型上下文協定(MCP)是專為大型語言模型(LLM)設計的標準化通訊協定。
將其視為「AI 的 HTTP」——就像 HTTP 標準化了 Web 瀏覽器與 Web 伺服器的通訊方式一樣,MCP 標準化了 LLM 應用程式與工具和資料來源的通訊方式。
為什麼我們需要 MCP?
目前LLM的發展面臨幾個障礙:
-
工具整合複雜度:每個LLM服務(如OpenAI、Anthropic等)都有其實現工具呼叫和函數呼叫的方式,使得建立可移植工具變得複雜。
上下文管理:法學碩士需要存取各種資料來源和工具,但安全有效地管理此存取權限一直具有挑戰性。
標準化:如果沒有標準協議,開發人員必須為他們想要支援的每個 LLM 平台重建整合層。
MCP 透過提供以下功能來解決這些挑戰:
- 向法學碩士公開工具和數據的標準化方法
- 安全的客戶端-伺服器架構
- 無論底層 LLM 如何,都有一致的介面
MCP 如何運作?
MCP 遵循客戶端-伺服器架構,有三個主要元件:
-
MCP 伺服器:公開的服務:
- 工具(LLM可以呼叫的函數)
- 資源(資料來源)
- 提示(範本說明)
- 上下文(動態資訊)
MCP 客戶端:應用程式連接到 MCP 伺服器並管理 LLM 和伺服器之間的通訊。客戶端支援還處於早期階段,到目前為止,只有少數工具可以實現協議規範的任何部分,並且尚無客戶端支援一些功能。
當然還有法學碩士...
工作流程很簡單:
- MCP 伺服器註冊其功能(工具、資源等)
- 客戶端連線到伺服器
- 法學碩士可以透過標準化介面使用這些功能
傳輸協定
- 多種運輸機制
- SSE(伺服器發送事件)
- 透過 HTTP 雙向通信,伺服器程序與客戶端隔離
- Stdio(標準輸入/輸出)
- 透過標準輸入/輸出管道進行通信,伺服器程序本質上是客戶端的子程序
- SSE(伺服器發送事件)
安全
安全局勢更加微妙。雖然使用 stdio 傳輸的伺服器通常與用戶端位於相同位置,因此 API 金鑰不一定會暴露在網路上。在我看來,它們確實似乎相當隨意地被傳播。
這些金鑰需要在伺服器啟動時載入到客戶端,以便將它們傳遞給子進程,它們甚至出現在桌面應用程式日誌中,這是…令人擔憂的。
API 金鑰的廣泛使用是影響 Gen AI 服務、平台和工具的更廣泛問題。 Okta 和 Auth0 等公司正在開發一種無需依賴金鑰即可管理和授權 Gen AI 的解決方案。
軟體開發工具包
Anthropic 官方支援 TypeScript、Python 和 Kotlin 的低階 SDK。最近創建的一些樣板包裝器已經涵蓋了一些樣板文件,並具有其他不錯的功能,例如用於調試、檢查和在客戶端上安裝伺服器的 CLI,以使開發 MCP 伺服器變得更容易。
FastMCP 入門
傑洛文
/
快速MCP
建構模型上下文協定伺服器的快速、Pythonic 方法?
FastMCP?
建構 MCP 伺服器的快速、Python 方式。
模型上下文協定 (MCP) 伺服器是一種為 LLM 提供上下文和工具的全新標準化方式,FastMCP 讓建置 MCP 伺服器變得簡單直觀。使用乾淨的 Python 程式碼建立工具、公開資源並定義提示:
# demo.py from fastmcp import FastMCP mcp = FastMCP("Demo ?") @<span>mcp.tool()</span> def add(a: int, b: int) -> int: """Add two numbers""" return a + b
就是這樣!透過執行以下命令授予 Claude 存取伺服器的權限:
fastmcp install demo.py
FastMCP 處理所有複雜的協定細節和伺服器管理,因此您可以專注於建立出色的工具。它被設計為高級且Pythonic - 在大多數情況下,裝飾一個函數就足夠了。
主要特點:
- 快速:進階介面意味著更少的程式碼和更快的開發
- 簡單…
FastMCP 就是這樣一個框架。我們現在將探討如何創建一個幾乎實用的工具來閱讀網站、透過網路回答搜尋查詢以及事實檢查資訊。我們將使用 Jina.ai。
這是一項非常巧妙的服務,提供了一個結合了“嵌入、重新排名和小語言模型”的“搜尋基礎平台”,以幫助企業建立 Gen AI 和多模式搜尋體驗。
先決條件
- 紫外線
您需要安裝 uv。這是建立和管理 Python 專案的推薦方法。它是一個相對較新但令人興奮的 Python 工具鏈 astral.sh 的一部分。我建議你檢查一下。
它的目標是成為管理專案、依賴項、虛擬環境、版本、linting 以及執行 Python 腳本和模組的一站式商店。它是用 Rust 寫的。你會用這些資訊做什麼?
- 克勞德桌面應用程式
您還需要安裝 Claude 桌面應用程式。就我們的目的而言,Claude 桌面應用程式將充當 MCP 用戶端,並且是 Anthropic 的關鍵目標用戶端。
阿斯拉加布
/
mcp-jinaai-閱讀器
Jina.ai Reader API 的模型上下文協定 (MCP) 伺服器
Jina.ai Reader API 的 MCP 伺服器
完整演練在這裡:
https://dev.to/asragab/building-a-model-context-protocol-server-using-jinaai-and-fastmcp-in-python-1od8
項目設定
使用 uv 您可以使用以下方式初始化項目:
# demo.py from fastmcp import FastMCP mcp = FastMCP("Demo ?") @<span>mcp.tool()</span> def add(a: int, b: int) -> int: """Add two numbers""" return a + b
這將建立一個名為 mcp-jinaai-reader 的資料夾和一個 .python-version 以及 pyproject.toml。
fastmcp install demo.py
這將創建一個與我們選擇的 python 版本相對應的虛擬環境。
建立環境後,它將提供有關如何為會話啟動它的說明。
uv init mcp-jinaai-reader --python 3.11
新增一個 src 目錄並安裝我們需要的一個依賴
cd mcp-jinaai-reader uv venv
在專案根目錄建立一個 .env 檔案並將您的 JINAAI_API_KEY 新增到該檔案中。您可以透過在 Jina 註冊來免費獲得一份。一般來說,您的伺服器需要執行的任何 API 金鑰或其他環境變數都會放入此文件中。
source .venv/bin/activate
在 src 目錄中,建立一個 server.py 檔案...我們應該可以取得程式碼。
伺服器程式碼
uv add fastmcp
從導入開始:httpx,將是我們在這裡用來發出 http 請求的函式庫;我們需要 urlparse 方法來幫助我們確定字串是否可能是有效的 URL。
JINAAI_API_KEY=jina_*************
這會初始化伺服器;第一個參數是工具的名稱。我不是 100% 確定為什麼 uvicorn 需要在這裡明確添加為依賴項,因為它是 FastMCP 的傳遞依賴項,但它似乎確實是必需的。
這可能是由於 fastmcp cli(稍後會詳細介紹)安裝伺服器的方式造成的。如果您還有其他依賴項,則必須在此處新增它們,以便客戶端知道您需要在執行客戶端之前安裝它們;我們稍後會看到它是如何運作的。
from fastmcp import FastMCP import httpx from urllib.parse import urlparse import os
您可能可以在這裡找出模式,但 Jina 使用不同的子網域來路由特定請求。搜尋端點需要一個查詢,讀取器端點需要一個 URL,而接地端點可以向 llm 提供特定的回應或答案。
接地是一個更大的主題,與 RAG 和微調等其他技術一起使用,以幫助法學碩士減少幻覺並改善決策。
我們的第一個工具
# Initialize the MCP server mcp = FastMCP("search", dependencies=["uvicorn"])
註釋@mcp.tool 完成了很多繁重的工作。庫中存在類似的資源和提示註釋。此註解提取函數簽名和傳回類型的詳細信息,以建立供 llm 呼叫該工具的輸入和輸出架構。它配置該工具,以便客戶端了解伺服器的功能。它還將函數呼叫註冊為已配置工具的處理程序。
接下來,您會注意到該函數是非同步的。不需要運行時配置,也不需要 asyncio.run 的東西。如果出於某種原因您需要將伺服器作為獨立服務運行,您確實需要自己處理其中的一些問題。 FastMCP 儲存庫中有一個範例說明如何執行此操作。
函數體相當無趣;它驗證是否正在接收 URL、設定適當的標頭、呼叫 Jina 端點並傳回文字。
# demo.py from fastmcp import FastMCP mcp = FastMCP("Demo ?") @<span>mcp.tool()</span> def add(a: int, b: int) -> int: """Add two numbers""" return a + b
第二個工具
fastmcp install demo.py
就是這樣...
測試與調試
uv init mcp-jinaai-reader --python 3.11
執行上述命令將啟動 mcp 檢查器,它是 sdk 提供的一個工具,用於測試和偵錯伺服器回應。 --with-editable 標誌可讓您對伺服器進行更改,而無需重新啟動檢查器(強烈建議)
你應該看到:
cd mcp-jinaai-reader uv venv
預設情況下,檢查器在連接埠 5173 上運行,而伺服器(您剛剛編寫的程式碼)將在連接埠 3000 上運行,您可以透過在呼叫前設定 SERVER_PORT 和 CLIENT_PORT 來變更此設定。
source .venv/bin/activate
督察
如果一切順利你應該看到類似下面的內容,在左側你可以添加你需要的環境變量,這裡 JINAAI_API_KEY 是唯一的。
如果您單擊頂部功能表列上的“工具”,然後單擊“列出工具”,您應該列出我們創建的工具,請注意文檔字串作為該工具的描述。
點擊特定工具將彈出文字框,供您輸入呼叫該工具所需的參數。
安裝伺服器
當您對一切按預期工作感到滿意後,您現在就可以在 Claude 桌面應用程式用戶端上安裝伺服器了。
uv add fastmcp
會這樣做,我相信將來它會支援其他客戶端,但現在,這就是你需要做的。 -f .env 會將環境變數傳遞給應用程式用戶端。
這在幕後的作用是更新 claude_desktop_config.json 並提供執行伺服器所需的命令和參數。預設情況下,這使用 uv ,它必須在您的 PATH 上可用。
如果您現在打開 Claude 桌面應用程序,然後轉到功能表列並單擊 Claude >設置,然後單擊開發人員,您應該會看到初始化伺服器時設置的工具的名稱。
點選它應該會顯示它的配置。您不僅可以了解它是如何執行的,而且在「進階選項」中將看到已設定的環境變數。
你也可以直接編輯這個配置,但我不一定在這裡推薦它。
運行它
如果一切順利,當您進入桌面應用程式時,您應該不會看到任何錯誤(如果出現錯誤,則轉到「設定」應該會為您提供一個按鈕來檢查日誌並從那裡進行調查) 。
此外,您應該會看到一個錘子符號,其中包含您可以使用的單個工具的數量(注意:除非您安裝了其他 MCP 伺服器,否則您的工具可能應該是兩個)
您不像平常那樣直接呼叫該工具,而是與應用程式聊天,當它遇到推斷該工具有幫助的情況時,它會詢問您是否要使用它。這裡不需要額外的程式碼或配置。
我認為它依賴工具名稱和描述來決定它是否合適,因此值得為該工具的功能製作一個清晰簡單的描述。
您將收到以下提示:
你可以與它“聊天”,不可否認,編寫的工具有時會遇到問題。有時它會決定無法上網,有時無法檢索結果,但有時您會得到以下結果:
這有一個自然的流程,它讀取頁面,提供摘要,然後你要求它轉到一篇特定的文章並閱讀該文章。
最後的註釋
希望這能讓您對 MCP 伺服器有一些了解。有很多內容可供閱讀和觀看,但我推薦的另一個網站是glama.ai,他們保留了一份相當全面的可用MCP 伺服器清單供下載和試用,其中包括比我們的玩具範例更可靠的其他網絡搜尋工具。看看吧,感謝您的關注。
以上是在 Python 中使用 Jina.ai 和 FastMCP 建構模型上下文協定伺服器的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Tomergelistsinpython,YouCanusethe操作員,estextMethod,ListComprehension,Oritertools

在Python3中,可以通過多種方法連接兩個列表:1)使用 運算符,適用於小列表,但對大列表效率低;2)使用extend方法,適用於大列表,內存效率高,但會修改原列表;3)使用*運算符,適用於合併多個列表,不修改原列表;4)使用itertools.chain,適用於大數據集,內存效率高。

使用join()方法是Python中從列表連接字符串最有效的方法。 1)使用join()方法高效且易讀。 2)循環使用 運算符對大列表效率低。 3)列表推導式與join()結合適用於需要轉換的場景。 4)reduce()方法適用於其他類型歸約,但對字符串連接效率低。完整句子結束。

pythonexecutionistheprocessoftransformingpypythoncodeintoExecutablestructions.1)InternterPreterReadSthecode,ConvertingTingitIntObyTecode,whepythonvirtualmachine(pvm)theglobalinterpreterpreterpreterpreterlock(gil)the thepythonvirtualmachine(pvm)

Python的關鍵特性包括:1.語法簡潔易懂,適合初學者;2.動態類型系統,提高開發速度;3.豐富的標準庫,支持多種任務;4.強大的社區和生態系統,提供廣泛支持;5.解釋性,適合腳本和快速原型開發;6.多範式支持,適用於各種編程風格。

Python是解釋型語言,但也包含編譯過程。 1)Python代碼先編譯成字節碼。 2)字節碼由Python虛擬機解釋執行。 3)這種混合機制使Python既靈活又高效,但執行速度不如完全編譯型語言。

UseeAforloopWheniteratingOveraseQuenceOrforAspecificnumberoftimes; useAwhiLeLoopWhenconTinuingUntilAcIntiment.forloopsareIdealForkNownsences,而WhileLeleLeleLeleLeleLoopSituationSituationsItuationsItuationSuationSituationswithUndEtermentersitations。

pythonloopscanleadtoerrorslikeinfiniteloops,modifyingListsDuringteritation,逐個偏置,零indexingissues,andnestedloopineflinefficiencies


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SublimeText3 Linux新版
SublimeText3 Linux最新版

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。