


Membina Pelayan Protokol Konteks Model menggunakan Jina.ai dan FastMCP dalam Python
Jan 05, 2025 am 07:25 AMDalam 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.
Protokol Konteks Model
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.
apa
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.
Mengapa Kita Memerlukan MCP?
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:
- Cara piawai untuk mendedahkan alatan dan data kepada LLM
- Seni bina pelayan pelanggan yang selamat
- Antara muka yang konsisten tanpa mengira LLM yang mendasari
Bagaimana MCP Berfungsi?
MCP mengikut seni bina pelayan-pelanggan dengan tiga komponen utama:
-
Pelayan MCP: Perkhidmatan yang mendedahkan:
- Alat (fungsi yang LLM boleh panggil)
- Sumber (sumber data)
- Gesaan (arahan templat)
- Konteks (maklumat dinamik)
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:
- Pelayan MCP mendaftarkan keupayaannya (alat, sumber, dll.)
- Pelanggan menyambung ke pelayan
- LLM kemudiannya boleh menggunakan keupayaan ini melalui antara muka piawai
Protokol Pengangkutan
- Berbilang Mekanisme Pengangkutan
- SSE (Acara Dihantar Pelayan)
- Berkomunikasi melalui HTTP secara dwiarah, proses pelayan diasingkan daripada klien
- Stdio (Input/Output Standard)
- Berkomunikasi melalui paip Input/Output Standard, proses pelayan pada dasarnya adalah proses anak klien
- SSE (Acara Dihantar Pelayan)
Keselamatan
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.
SDK
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.
Bermula dengan FastMCP
jlowin
/
fastmcp
Cara pantas, Pythonic untuk membina pelayan Protokol Konteks Model ?
FastMCP ?
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.
Ciri utama:
- Pantas: Antara muka peringkat tinggi bermakna kurang kod dan pembangunan lebih pantas
- Mudah…
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.
Prasyarat
- uv
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 ?.
- Apl Desktop Claude
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.
ASRagab
/
mcp-jinaai-reader
Pelayan Protokol Konteks Model (MCP) untuk API Pembaca Jina.ai
Pelayan MCP untuk API Pembaca Jina.ai
Panduan Penuh di sini:
https://dev.to/asragab/building-a-model-context-protocol-server-using-jinaai-and-fastmcp-in-python-1od8
Persediaan Projek
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.
Kod Pelayan
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.
Alat pertama kami
# 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
Alat Kedua
fastmcp install demo.py
Dan itu sahaja...
Menguji dan Menyahpepijat
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
Inspektor
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.
Memasang Pelayan
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.
Menjalankannya
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.
Nota Akhir
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!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Python's Unittest and Pytest adalah dua kerangka ujian yang digunakan secara meluas yang memudahkan penulisan, penganjuran dan menjalankan ujian automatik. 1. Kedua -duanya menyokong penemuan automatik kes ujian dan menyediakan struktur ujian yang jelas: Unittest mentakrifkan ujian dengan mewarisi kelas ujian dan bermula dengan ujian \ _; Pytest lebih ringkas, hanya memerlukan fungsi bermula dengan ujian \ _. 2. Mereka semua mempunyai sokongan dakwaan terbina dalam: Unittest menyediakan kaedah AssertEqual, AssertTrue dan lain-lain, manakala PYTest menggunakan pernyataan menegaskan yang dipertingkatkan untuk memaparkan butiran kegagalan secara automatik. 3. Semua mempunyai mekanisme untuk mengendalikan penyediaan ujian dan pembersihan: un

Pythonisidealfordataanalysisysisduetonumpyandpandas.1) numpyexcelsatnumericalcomputationswithfast, multi-dimensiArarraySandvectorizedoperationsLikenp.sqrt ()

Pengaturcaraan Dinamik (DP) mengoptimumkan proses penyelesaian dengan memecahkan masalah kompleks ke dalam subproblem yang lebih mudah dan menyimpan hasilnya untuk mengelakkan pengiraan berulang. Terdapat dua kaedah utama: 1. Top-down (Hafalan): Recursif menguraikan masalah dan menggunakan cache untuk menyimpan hasil pertengahan; 2. Bottom-Up (Jadual): Bangun secara beransur-ansur dari keadaan asas. Sesuai untuk senario di mana nilai maksimum/minimum, penyelesaian optimum atau subproblem yang bertindih diperlukan, seperti urutan Fibonacci, masalah backpacking, dan lain -lain.

Untuk melaksanakan iterator tersuai, anda perlu menentukan kaedah __iter__ dan __Next__ di dalam kelas. ① Kaedah __iter__ mengembalikan objek iterator itu sendiri, biasanya diri sendiri, bersesuaian dengan persekitaran berulang seperti untuk gelung; ② Kaedah __Next__ mengawal nilai setiap lelaran, mengembalikan elemen seterusnya dalam urutan, dan apabila tidak ada lagi item, pengecualian hentian harus dibuang; ③ Status mesti dikesan dengan betul dan keadaan penamatan mesti ditetapkan untuk mengelakkan gelung tak terhingga; ④ Logik kompleks seperti penapisan talian fail, dan perhatikan pembersihan sumber dan pengurusan memori; ⑤ Untuk logik mudah, anda boleh mempertimbangkan menggunakan hasil fungsi penjana sebaliknya, tetapi anda perlu memilih kaedah yang sesuai berdasarkan senario tertentu.

Trend masa depan dalam Python termasuk pengoptimuman prestasi, jenis yang lebih kuat, peningkatan runtime alternatif, dan pertumbuhan berterusan bidang AI/ML. Pertama, Cpython terus mengoptimumkan, meningkatkan prestasi melalui masa permulaan yang lebih cepat, pengoptimuman panggilan fungsi dan operasi integer yang dicadangkan; Kedua, jenis petikan sangat terintegrasi ke dalam bahasa dan alat untuk meningkatkan pengalaman keselamatan dan pembangunan kod; Ketiga, runtime alternatif seperti Pyscript dan Nuitka menyediakan fungsi baru dan kelebihan prestasi; Akhirnya, bidang AI dan Sains Data terus berkembang, dan perpustakaan yang muncul mempromosikan pembangunan dan integrasi yang lebih cekap. Trend ini menunjukkan bahawa Python sentiasa menyesuaikan diri dengan perubahan teknologi dan mengekalkan kedudukan utama.

Modul soket Python adalah asas pengaturcaraan rangkaian, menyediakan fungsi komunikasi rangkaian peringkat rendah, sesuai untuk membina aplikasi klien dan pelayan. Untuk menyediakan pelayan TCP asas, anda perlu menggunakan socket.socket () untuk membuat objek, mengikat alamat dan port, panggilan. Listen () untuk mendengar sambungan, dan menerima sambungan klien melalui .accept (). Untuk membina klien TCP, anda perlu membuat objek soket dan panggilan .Connect () untuk menyambung ke pelayan, kemudian gunakan .sendall () untuk menghantar data dan .recv () untuk menerima respons. Untuk mengendalikan pelbagai pelanggan, anda boleh menggunakan 1. Threads: Mulakan benang baru setiap kali anda menyambung; 2. Asynchronous I/O: Sebagai contoh, Perpustakaan Asyncio dapat mencapai komunikasi yang tidak menyekat. Perkara yang perlu diperhatikan

Polimorfisme adalah konsep teras dalam pengaturcaraan berorientasikan objek Python, merujuk kepada "satu antara muka, pelbagai pelaksanaan", yang membolehkan pemprosesan bersatu pelbagai jenis objek. 1. Polimorfisme dilaksanakan melalui penulisan semula kaedah. Subkelas boleh mentakrifkan semula kaedah kelas induk. Sebagai contoh, kaedah bercakap () kelas haiwan mempunyai pelaksanaan yang berbeza dalam subkelas anjing dan kucing. 2. Penggunaan praktikal polimorfisme termasuk memudahkan struktur kod dan meningkatkan skalabilitas, seperti memanggil kaedah cabutan () secara seragam dalam program lukisan grafik, atau mengendalikan tingkah laku umum watak -watak yang berbeza dalam pembangunan permainan. 3. Polimorfisme pelaksanaan Python perlu memenuhi: Kelas induk mentakrifkan kaedah, dan kelas kanak -kanak mengatasi kaedah, tetapi tidak memerlukan warisan kelas induk yang sama. Selagi objek melaksanakan kaedah yang sama, ini dipanggil "jenis itik". 4. Perkara yang perlu diperhatikan termasuk penyelenggaraan

Jawapan teras kepada pengirim senarai Python adalah menguasai sintaks [Start: End: Step] dan memahami kelakuannya. 1. Format asas pengirim senarai adalah senarai [Mula: akhir: langkah], di mana permulaan adalah indeks permulaan (termasuk), akhir adalah indeks akhir (tidak termasuk), dan langkah adalah saiz langkah; 2. Omit Mula secara lalai bermula dari 0, endek akhir secara lalai hingga akhir, omite langkah secara lalai kepada 1; 3. Gunakan my_list [: n] untuk mendapatkan item n pertama, dan gunakan my_list [-n:] untuk mendapatkan item n yang terakhir; 4. Gunakan langkah untuk melangkau unsur -unsur, seperti my_list [:: 2] untuk mendapatkan angka, dan nilai langkah negatif dapat membalikkan senarai; 5. Kesalahpahaman biasa termasuk indeks akhir tidak
