Rumah >pembangunan bahagian belakang >Tutorial Python >Membina Pelayan Protokol Konteks Model menggunakan Jina.ai dan FastMCP dalam Python
Dalam siaran ini, kami akan membincangkan Protokol Konteks Model, mengapa ia mungkin penting dan berjalan melalui pembinaan Pelayan MCP untuk membantu kami bercakap dengan Jina.ai dan dapat menambahkan carian web dan fungsi semakan fakta dalam Claude Desktop menggunakan Python dan FastMCP.
Anthropic diumumkan sekitar Thanksgiving tahun lepas. Walaupun ia mendapat sedikit perhatian, pengiktirafan yang diterima mungkin tidak mencukupi, memandangkan ia boleh menjadi batu loncatan penting dalam membangunkan lapisan seterusnya tindanan perisian AI.
Protokol Konteks Model (MCP) ialah protokol komunikasi piawai yang direka khusus untuk model bahasa besar (LLM).
Anggap ia sebagai "HTTP AI"—sama seperti HTTP menyeragamkan cara pelayar web berkomunikasi dengan pelayan web, MCP menyeragamkan cara aplikasi LLM berkomunikasi dengan alatan dan sumber data.
landskap semasa pembangunan LLM menghadapi beberapa halangan:
Kerumitan Integrasi Alat: Setiap perkhidmatan LLM (seperti OpenAI, Anthropic, dll.) mempunyai caranya untuk melaksanakan panggilan alat dan panggilan fungsi, menjadikannya rumit untuk membina alatan mudah alih.
Pengurusan Konteks: LLM memerlukan akses kepada pelbagai sumber dan alatan data, tetapi mengurus akses ini dengan selamat dan cekap sememangnya mencabar.
Penstandardan: Tanpa protokol standard, pembangun mesti membina semula lapisan integrasi untuk setiap platform LLM yang mereka mahu sokong.
MCP menyelesaikan cabaran ini dengan menyediakan:
MCP mengikut seni bina pelayan-pelanggan dengan tiga komponen utama:
Pelayan MCP: Perkhidmatan yang mendedahkan:
Pelanggan MCP: Aplikasi bersambung ke pelayan MCP dan mengurus komunikasi antara LLM dan pelayan. Sokongan pelanggan berada di peringkat awal, dengan hanya segelintir alat yang melaksanakan mana-mana bahagian spesifikasi protokol setakat ini dan beberapa fungsi yang belum disokong oleh pelanggan.
Dan, sudah tentu, LLM...
Aliran kerja adalah mudah:
Situasi keselamatan lebih bernuansa. Walaupun pelayan yang menggunakan pengangkutan stdio biasanya dikolokasikan dengan klien, dan oleh itu kunci API tidak semestinya terdedah kepada internet. Mereka nampaknya diedarkan secara santai, IMO.
Kunci ini perlu dimuatkan ke dalam klien apabila pelayan bermula supaya ia boleh dihantar ke proses anak, malah ia muncul dalam log apl desktop, yang...berkenaan.
Penggunaan kunci API secara meluas ialah isu yang lebih luas yang mempengaruhi perkhidmatan, platform dan perkakas Gen AI. Syarikat seperti Okta dan Auth0 sedang mengusahakan penyelesaian untuk mengurus dan membenarkan Gen AI tanpa bergantung pada kunci.
Anthropic secara rasmi menyokong SDK peringkat rendah untuk TypeScript, Python dan Kotlin. Beberapa pembungkus boilerplate yang baru dibuat telah meliputi beberapa boilerplate dan mempunyai ciri lain yang bagus, seperti CLI untuk penyahpepijatan, pemeriksaan dan pemasangan pelayan pada klien untuk memudahkan pembangunan pelayan MCP.
Cara pantas, Pythonic untuk membina pelayan MCP.
Pelayan Model Konteks Protokol (MCP) ialah cara baharu yang standard untuk menyediakan konteks dan alatan kepada LLM anda, dan FastMCP menjadikan pembinaan pelayan MCP mudah dan intuitif. Cipta alatan, dedahkan sumber dan tentukan gesaan dengan kod Pythonic yang bersih:
# 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
Itu sahaja! Beri Claude akses kepada pelayan dengan menjalankan:
fastmcp install demo.py
FastMCP mengendalikan semua butiran protokol dan pengurusan pelayan yang kompleks, supaya anda boleh menumpukan pada membina alatan yang hebat. Ia direka bentuk untuk tahap tinggi dan Pythonic - dalam kebanyakan kes, menghiasi fungsi adalah semua yang anda perlukan.
FastMCP ialah satu rangka kerja sedemikian. Kami kini akan meneroka cara mencipta alat yang hampir praktikal untuk membaca tapak web, menjawab pertanyaan carian melalui web dan maklumat semakan fakta. Kami akan menggunakan Jina.ai.
Ia adalah perkhidmatan yang sangat licik yang menyediakan "platform Asas Carian" yang menggabungkan "Pembenaman, Penarafan Semula dan Model Bahasa Kecil" untuk membantu perniagaan dalam membina pengalaman carian Gen AI dan Multimodal.
Anda perlu dipasang uv. Ia adalah cara yang disyorkan untuk mencipta dan mengurus projek Python. Ia adalah sebahagian daripada rangkaian alat Python yang agak baru tetapi menarik yang dipanggil astral.sh. Saya mengesyorkan anda menyemaknya.
Ia bertujuan untuk menjadi kedai sehenti untuk mengurus projek, kebergantungan, persekitaran maya, versi, linting dan melaksanakan skrip dan modul Python. Ia ditulis dalam Rust. Lakukan dengan maklumat itu apa yang anda akan ?.
Anda juga perlu memasang Apl Desktop Claude. Untuk tujuan kami, Apl Desktop Claude akan berfungsi sebagai Klien MCP dan merupakan Klien sasaran utama untuk Anthropic.
Panduan Penuh di sini:
https://dev.to/asragab/building-a-model-context-protocol-server-using-jinaai-and-fastmcp-in-python-1od8
Menggunakan uv anda boleh memulakan projek dengan:
# 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
Ini akan mencipta folder yang dipanggil mcp-jinaai-reader dan versi .python bersama-sama dengan pyproject.toml.
fastmcp install demo.py
Ini akan mencipta env maya yang sepadan dengan versi python yang kami pilih.
Selepas mencipta persekitaran, ia akan memberikan arahan tentang cara mengaktifkannya untuk sesi.
uv init mcp-jinaai-reader --python 3.11
Tambah direktori src dan pasang satu pergantungan yang kami perlukan
cd mcp-jinaai-reader uv venv
Buat fail .env pada akar projek dan tambah JINAAI_API_KEY anda pada fail. Anda boleh mendapatkannya secara percuma dengan mendaftar di Jina. Secara umum, sebarang kunci API atau pembolehubah env lain yang perlu dijalankan oleh pelayan anda akan masuk ke dalam fail ini.
source .venv/bin/activate
Dalam direktori src, cipta fail server.py...dan kita sepatutnya boleh mendapatkan kod tersebut.
uv add fastmcp
Bermula dengan import: httpx, akan menjadi perpustakaan yang kami gunakan di sini untuk membuat permintaan http; kami memerlukan kaedah urlparse untuk membantu kami menentukan sama ada rentetan mungkin URL yang sah.
JINAAI_API_KEY=jina_*************
Ini memulakan pelayan; hujah pertama ialah nama alat. Saya tidak pasti 100% mengapa uvicorn perlu ditambah secara eksplisit sebagai pergantungan di sini kerana ia adalah pergantungan transitif FastMCP tetapi ia nampaknya diperlukan.
Ia berkemungkinan disebabkan oleh cara cli fastmcp (lebih lanjut mengenainya sebentar lagi) memasang pelayan. Jika anda mempunyai tanggungan lain, anda mesti menambahkannya di sini supaya pelanggan tahu anda perlu memasangnya sebelum menjalankan klien; kita akan lihat bagaimana ia berfungsi sebentar lagi.
from fastmcp import FastMCP import httpx from urllib.parse import urlparse import os
Anda mungkin boleh melihat corak di sini, tetapi Jina menggunakan subdomain yang berbeza untuk menghalakan permintaan tertentu. Titik akhir carian menjangkakan pertanyaan, titik akhir pembaca menjangkakan URL dan titik akhir asas boleh memberikan respons atau jawapan khusus kepada llm.
Grounding ialah topik yang lebih besar dan digunakan dengan teknik lain, seperti RAG dan penalaan halus, untuk membantu LLM dalam mengurangkan halusinasi dan menambah baik pembuatan keputusan.
# Initialize the MCP server mcp = FastMCP("search", dependencies=["uvicorn"])
Anotasi @mcp.tool banyak melakukan pengangkatan berat. Anotasi serupa untuk sumber dan gesaan wujud dalam perpustakaan. Anotasi mengekstrak butiran tandatangan fungsi dan jenis pemulangan untuk mencipta skema input dan output untuk llm memanggil alat. Ia mengkonfigurasi alat supaya pelanggan memahami keupayaan pelayan. Ia juga mendaftarkan panggilan fungsi sebagai pengendali untuk alat yang dikonfigurasikan.
Seterusnya, anda akan dapati bahawa fungsi itu tidak segerak. Tiada konfigurasi masa jalan diperlukan dan tiada bahan asyncio.run juga. Jika anda perlu, atas sebab tertentu, menjalankan pelayan sebagai perkhidmatan kendiri, anda perlu mengendalikan sebahagian daripada ini sendiri. Terdapat contoh dalam repo FastMCP untuk cara melakukan ini.
Badan fungsi agak tidak menarik; ia mengesahkan sama ada ia menerima URL, menetapkan pengepala yang sesuai, memanggil titik akhir Jina dan mengembalikan teks.
# 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
Dan itu sahaja...
uv init mcp-jinaai-reader --python 3.11
Menjalankan arahan di atas akan memulakan pemeriksa mcp ia adalah alat yang disediakan oleh sdk untuk menguji dan menyahpepijat respons pelayan. Bendera --with-editable membolehkan anda membuat perubahan pada pelayan, tanpa perlu melancarkan semula pemeriksa (sangat, SANGAT disyorkan)
Anda sepatutnya melihat:
cd mcp-jinaai-reader uv venv
Secara lalai pemeriksa berjalan pada port 5173, dan pelayan (kod yang anda baru tulis) akan berjalan pada port 3000, anda boleh menukar ini dengan menetapkan SERVER_PORT dan CLIENT_PORT sebelum penyembahan.
source .venv/bin/activate
Jika semuanya berjalan lancar, anda akan melihat sesuatu seperti berikut, di sebelah kiri anda boleh menambah pembolehubah persekitaran yang anda perlukan, di sini JINAAI_API_KEY adalah satu-satunya.
Jika anda mengklik pada Alat pada bar menu atas, dan kemudian Senaraikan Alat anda harus menggunakan alatan yang kami cipta, perhatikan bahawa docstring berfungsi sebagai penerangan untuk alat tersebut.
Mengklik pada alat tertentu akan memaparkan kotak teks untuk anda memasukkan parameter yang diperlukan untuk memanggil alat tersebut.
Selepas anda berpuas hati semuanya berfungsi seperti yang diharapkan, anda kini bersedia untuk memasang pelayan pada klien Apl Desktop Claude.
uv add fastmcp
Akan melakukan ini, saya pasti pada masa akan datang ia akan menyokong pelanggan lain, tetapi buat masa ini, ini sahaja yang anda perlu lakukan. -f .env akan menghantar pembolehubah env kepada klien aplikasi.
Apa yang dilakukan di bawah tudung ialah mengemas kini claude_desktop_config.json dan menyediakan arahan serta hujah yang diperlukan untuk menjalankan pelayan. Secara lalai ini menggunakan uv yang mesti tersedia pada PATH anda.
Jika anda kini membuka Apl Desktop Claude, dan pergi ke Bar Menu dan Klik Claude > Tetapan dan kemudian klik pada Pembangun anda harus melihat nama alat anda yang anda tetapkan semasa memulakan pelayan.
Mengklik padanya akan memaparkan konfigurasinya. Anda bukan sahaja akan cara ia dilaksanakan, tetapi dalam Pilihan Lanjutan anda akan melihat pembolehubah env yang telah ditetapkan.
Anda juga boleh mengedit konfigurasi ini secara terus, tetapi saya tidak semestinya mengesyorkannya di sini.
Jika semuanya berjalan lancar apabila anda menggunakan Apl Desktop, anda sepatutnya tidak melihat ralat (jika anda melakukannya, pergi ke Tetapan akan memberi anda butang untuk menyemak log dan menyiasat dari sana).
Selain itu, anda harus melihat simbol tukul dengan bilangan alatan individu yang anda miliki (nota: anda mungkin perlu dua melainkan anda telah memasang pelayan MCP lain)
Daripada menggunakan alat secara terus, anda bersembang dengan apl seperti biasa, dan apabila ia menghadapi situasi di mana ia menyimpulkan bahawa alat itu membantu ia akan bertanya sama ada anda mahu menggunakannya. Tiada kod atau konfigurasi tambahan di sini diperlukan.
Saya fikir ia bergantung pada kedua-dua nama alat dan huraian untuk menentukan sama ada ia sesuai, jadi ia berbaloi untuk membuat penerangan ringkas yang jelas tentang perkara yang alat itu lakukan.
Anda akan mendapat gesaan seperti berikut:
Dan anda hanya boleh "berbual" dengannya, memanglah alat seperti yang ditulis kadangkala menghadapi masalah. Kadangkala ia memutuskan bahawa ia tidak boleh mengakses internet, kadangkala ia gagal mendapatkan hasil, tetapi kadangkala anda mendapat ini:
Ini mempunyai aliran semula jadi, di mana ia membaca halaman, memberikan ringkasan, dan anda memintanya pergi ke artikel tertentu dan membacanya.
Mudah-mudahan ini memberi anda sedikit cerapan tentang Pelayan MCP. Terdapat banyak untuk dibaca dan ditonton tetapi satu lagi tapak yang saya akan cadangkan ialah glama.ai mereka menyimpan senarai yang agak komprehensif bagi Pelayan MCP yang tersedia untuk dimuat turun dan dicuba, termasuk alat carian web lain yang lebih dipercayai daripada contoh mainan kami. Tontonnya dan terima kasih kerana mengikuti bersama.
Atas ialah kandungan terperinci Membina Pelayan Protokol Konteks Model menggunakan Jina.ai dan FastMCP dalam Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!