Ta poglavje prikazuje, kako zgraditi resničnega AI agenta, ki se povezuje z zunanjimi API-ji, obdeluje različne vrste podatkov, upravlja napake in usklajuje več orodij — vse v produkcijsko pripravljenem formatu. Videli boste:
- Integracija z zunanjimi API-ji, ki zahtevajo avtentikacijo
- Obdelava različnih vrst podatkov iz več končnih točk
- Robustno upravljanje napak in strategije beleženja
- Usklajevanje več orodij v enem strežniku
Na koncu boste pridobili praktične izkušnje s vzorci in najboljšimi praksami, ki so ključne za napredne AI in aplikacije, ki temeljijo na LLM.
V tej lekciji se boste naučili, kako zgraditi napredni MCP strežnik in odjemalca, ki razširjata zmogljivosti LLM z uporabo podatkov iz spleta v realnem času preko SerpAPI. To je ključna veščina za razvoj dinamičnih AI agentov, ki lahko dostopajo do ažurnih informacij iz spleta.
Na koncu te lekcije boste znali:
- Varnostno integrirati zunanje API-je (kot je SerpAPI) v MCP strežnik
- Implementirati več orodij za spletno, novičarsko, produktno iskanje in vprašanja-odgovore
- Razčleniti in oblikovati strukturirane podatke za uporabo v LLM
- Učinkovito upravljati napake in omejitve hitrosti API-ja
- Zgraditi in testirati tako avtomatizirane kot interaktivne MCP odjemalce
Ta razdelek predstavlja arhitekturo in funkcionalnosti MCP strežnika za spletno iskanje. Videli boste, kako FastMCP in SerpAPI skupaj razširjata zmogljivosti LLM z uporabo podatkov iz spleta v realnem času.
Ta implementacija vključuje štiri orodja, ki prikazujejo sposobnost MCP za varno in učinkovito upravljanje različnih nalog, ki temeljijo na zunanjih API-jih:
- general_search: Za široke spletne rezultate
- news_search: Za najnovejše naslove novic
- product_search: Za podatke o e-trgovanju
- qna: Za izseke vprašanj in odgovorov
- Primeri kode: Vključuje jezikovno specifične kode za Python (in enostavno razširljive na druge jezike) z uporabo kodnih blokov za jasnost
# Example usage of the general_search tool
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
async def run_search():
server_params = StdioServerParameters(
command="python",
args=["server.py"],
)
async with stdio_client(server_params) as (reader, writer):
async with ClientSession(reader, writer) as session:
await session.initialize()
result = await session.call_tool("general_search", arguments={"query": "open source LLMs"})
print(result)Pred zagonom odjemalca je koristno razumeti, kaj strežnik počne. Datoteka server.py implementira MCP strežnik, ki izpostavlja orodja za spletno, novičarsko, produktno iskanje in vprašanja-odgovore z integracijo SerpAPI. Obdeluje dohodne zahteve, upravlja klice API-ja, razčlenjuje odgovore in vrača strukturirane rezultate odjemalcu.
Celotno implementacijo si lahko ogledate v server.py.
Tukaj je kratek primer, kako strežnik definira in registrira orodje:
# server.py (excerpt)
from mcp.server import MCPServer, Tool
async def general_search(query: str):
# ...implementation...
server = MCPServer()
server.add_tool(Tool("general_search", general_search))
if __name__ == "__main__":
server.run()- Integracija zunanjih API-jev: Prikazuje varno upravljanje API ključev in zunanjih zahtevkov
- Razčlenjevanje strukturiranih podatkov: Prikazuje, kako pretvoriti odgovore API-ja v formate, prijazne LLM
- Upravljanje napak: Robustno upravljanje napak z ustreznim beleženjem
- Interaktivni odjemalec: Vključuje tako avtomatizirane teste kot interaktivni način za testiranje
- Upravljanje konteksta: Izrablja MCP Context za beleženje in sledenje zahtevam
Preden začnete, poskrbite, da je vaše okolje pravilno nastavljeno z naslednjimi koraki. Tako boste zagotovili, da so vse odvisnosti nameščene in da so vaši API ključi pravilno konfigurirani za nemoten razvoj in testiranje.
- Python 3.8 ali novejši
- SerpAPI API ključ (registrirajte se na SerpAPI - na voljo brezplačni paket)
Za začetek sledite tem korakom za nastavitev okolja:
- Namestite odvisnosti z uporabo uv (priporočeno) ali pip:
# Using uv (recommended)
uv pip install -r requirements.txt
# Using pip
pip install -r requirements.txt- Ustvarite datoteko
.envv korenu projekta z vašim SerpAPI ključem:
SERPAPI_KEY=your_serpapi_key_here
MCP strežnik za spletno iskanje je osrednja komponenta, ki izpostavlja orodja za spletno, novičarsko, produktno iskanje in vprašanja-odgovore z integracijo SerpAPI. Obdeluje dohodne zahteve, upravlja klice API-ja, razčlenjuje odgovore in vrača strukturirane rezultate odjemalcu.
Celotno implementacijo si lahko ogledate v server.py.
Za zagon MCP strežnika uporabite naslednji ukaz:
python server.pyStrežnik bo tekel kot MCP strežnik, ki temelji na stdio, in se mu bo odjemalec lahko neposredno povezal.
Odjemalec (client.py) podpira dva načina za interakcijo z MCP strežnikom:
- Normalni način: Izvede avtomatizirane teste, ki preizkusijo vsa orodja in preverijo njihove odgovore. To je uporabno za hitro preverjanje, ali strežnik in orodja delujejo kot pričakovano.
- Interaktivni način: Zažene meni, kjer lahko ročno izbirate in kličete orodja, vnašate lastne poizvedbe in v realnem času vidite rezultate. Idealno za raziskovanje zmogljivosti strežnika in eksperimentiranje z različnimi vnosi.
Celotno implementacijo si lahko ogledate v client.py.
Za zagon avtomatiziranih testov (to bo samodejno zagnalo tudi strežnik):
python client.pyAli za zagon v interaktivnem načinu:
python client.py --interactiveObstaja več načinov za testiranje in interakcijo z orodji, ki jih strežnik ponuja, odvisno od vaših potreb in delovnega toka.
Lahko tudi ustvarite svoje testne skripte z uporabo MCP Python SDK:
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
async def test_custom_query():
server_params = StdioServerParameters(
command="python",
args=["server.py"],
)
async with stdio_client(server_params) as (reader, writer):
async with ClientSession(reader, writer) as session:
await session.initialize()
# Call tools with your custom parameters
result = await session.call_tool("general_search",
arguments={"query": "your custom query"})
# Process the resultV tem kontekstu "testna skripta" pomeni lasten Python program, ki ga napišete kot odjemalca za MCP strežnik. Namesto formalnega enotnega testa vam ta skripta omogoča, da se programsko povežete s strežnikom, pokličete katerokoli orodje z izbranimi parametri in pregledate rezultate. Ta pristop je uporaben za:
- Prototipiranje in eksperimentiranje z orodji
- Preverjanje, kako strežnik odgovarja na različne vnose
- Avtomatizacijo ponavljajočih se klicev orodij
- Gradnjo lastnih delovnih tokov ali integracij na vrhu MCP strežnika
Testne skripte lahko uporabite za hitro preizkušanje novih poizvedb, odpravljanje napak v orodjih ali kot izhodišče za bolj napredno avtomatizacijo. Spodaj je primer, kako uporabiti MCP Python SDK za ustvarjanje takšne skripte:
Za izvajanje različnih vrst iskanj in poizvedb lahko uporabite naslednja orodja, ki jih ponuja strežnik. Vsako orodje je opisano spodaj skupaj z njegovimi parametri in primeri uporabe.
Ta razdelek podaja podrobnosti o vsakem razpoložljivem orodju in njihovih parametrih.
Izvede splošno spletno iskanje in vrne oblikovane rezultate.
Kako poklicati to orodje:
general_search lahko pokličete iz lastne skripte z uporabo MCP Python SDK ali interaktivno preko Inspectorja ali interaktivnega načina odjemalca. Tukaj je primer kode z uporabo SDK:
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
async def run_general_search():
server_params = StdioServerParameters(
command="python",
args=["server.py"],
)
async with stdio_client(server_params) as (reader, writer):
async with ClientSession(reader, writer) as session:
await session.initialize()
result = await session.call_tool("general_search", arguments={"query": "latest AI trends"})
print(result)Alternativno, v interaktivnem načinu izberite general_search iz menija in vnesite poizvedbo, ko boste pozvani.
Parametri:
query(niz): Iskalna poizvedba
Primer zahteve:
{
"query": "latest AI trends"
}Išče najnovejše novice, povezane s poizvedbo.
Kako poklicati to orodje:
news_search lahko pokličete iz lastne skripte z uporabo MCP Python SDK ali interaktivno preko Inspectorja ali interaktivnega načina odjemalca. Tukaj je primer kode z uporabo SDK:
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
async def run_news_search():
server_params = StdioServerParameters(
command="python",
args=["server.py"],
)
async with stdio_client(server_params) as (reader, writer):
async with ClientSession(reader, writer) as session:
await session.initialize()
result = await session.call_tool("news_search", arguments={"query": "AI policy updates"})
print(result)Alternativno, v interaktivnem načinu izberite news_search iz menija in vnesite poizvedbo, ko boste pozvani.
Parametri:
query(niz): Iskalna poizvedba
Primer zahteve:
{
"query": "AI policy updates"
}Išče izdelke, ki ustrezajo poizvedbi.
Kako poklicati to orodje:
product_search lahko pokličete iz lastne skripte z uporabo MCP Python SDK ali interaktivno preko Inspectorja ali interaktivnega načina odjemalca. Tukaj je primer kode z uporabo SDK:
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
async def run_product_search():
server_params = StdioServerParameters(
command="python",
args=["server.py"],
)
async with stdio_client(server_params) as (reader, writer):
async with ClientSession(reader, writer) as session:
await session.initialize()
result = await session.call_tool("product_search", arguments={"query": "best AI gadgets 2025"})
print(result)Alternativno, v interaktivnem načinu izberite product_search iz menija in vnesite poizvedbo, ko boste pozvani.
Parametri:
query(niz): Poizvedba za iskanje izdelkov
Primer zahteve:
{
"query": "best AI gadgets 2025"
}Pridobi neposredne odgovore na vprašanja iz iskalnikov.
Kako poklicati to orodje:
qna lahko pokličete iz lastne skripte z uporabo MCP Python SDK ali interaktivno preko Inspectorja ali interaktivnega načina odjemalca. Tukaj je primer kode z uporabo SDK:
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
async def run_qna():
server_params = StdioServerParameters(
command="python",
args=["server.py"],
)
async with stdio_client(server_params) as (reader, writer):
async with ClientSession(reader, writer) as session:
await session.initialize()
result = await session.call_tool("qna", arguments={"question": "what is artificial intelligence"})
print(result)Alternativno, v interaktivnem načinu izberite qna iz menija in vnesite vprašanje, ko boste pozvani.
Parametri:
question(niz): Vprašanje, na katerega želite najti odgovor
Primer zahteve:
{
"question": "what is artificial intelligence"
}Ta razdelek vsebuje odlomke kode in reference za implementacije strežnika in odjemalca.
Celotne podrobnosti implementacije si oglejte v server.py in client.py.
# Example snippet from server.py:
import os
import httpx
# ...existing code...Preden začnete z gradnjo, so tukaj nekateri pomembni napredni koncepti, ki se bodo pojavljali skozi celotno poglavje. Razumevanje teh vam bo pomagalo slediti, tudi če ste z njimi novi:
- Usklajevanje več orodij: To pomeni, da v enem MCP strežniku teče več različnih orodij (kot so spletno iskanje, novičarsko iskanje, produktno iskanje in vprašanja-odgovori). To omogoča, da strežnik obvladuje različne naloge, ne le eno.
- Upravljanje omejitev hitrosti API-ja: Veliko zunanjih API-jev (kot je SerpAPI) omejuje, koliko zahtevkov lahko naredite v določenem času. Dobra koda preverja te omejitve in jih obravnava na eleganten način, da aplikacija ne crkne, če doseže omejitev.
- Razčlenjevanje strukturiranih podatkov: Odgovori API-jev so pogosto kompleksni in gnezdeni. Ta koncept pomeni pretvorbo teh odgovorov v čiste, enostavne formate, ki so prijazni LLM ali drugim programom.
- Obnova po napaki: Včasih gre kaj narobe — morda omrežje odpove ali API ne vrne pričakovanih podatkov. Obnova po napaki pomeni, da vaša koda zna te težave obravnavati in še vedno nuditi uporabne povratne informacije, namesto da bi se zrušila.
- Preverjanje parametrov: Gre za preverjanje, da so vsi vnosi v vaša orodja pravilni in varni za uporabo. Vključuje nastavljanje privzetih vrednosti in preverjanje tipov, kar pomaga preprečiti napake in zmedo.
Ta razdelek vam bo pomagal diagnosticirati in rešiti pogoste težave, na katere lahko naletite pri delu z MCP strežnikom za spletno iskanje. Če naletite na napake ali nepričakovano vedenje, ta razdelek za odpravljanje težav ponuja rešitve za najpogostejše težave. Preden poiščete dodatno pomoč, preglejte te nasvete — pogosto hitro odpravijo težave.
Pri delu z MCP strežnikom za spletno iskanje se lahko občasno pojavijo težave — to je običajno pri razvoju z zunanjimi API-ji in novimi orodji. Ta razdelek ponuja praktične rešitve za najpogostejše težave, da se lahko hitro vrnete na pravo pot. Če naletite na napako, začnite tukaj: spodnji nasveti obravnavajo težave, s katerimi se največ uporabnikov srečuje, in pogosto rešijo vaš problem brez dodatne pomoči.
Spodaj so nekatere najpogostejše težave, s katerimi se uporabniki srečujejo, skupaj z jasnimi razlagami in koraki za rešitev:
-
Manjka SERPAPI_KEY v datoteki .env
- Če vidite napako
SERPAPI_KEY environment variable not found, to pomeni, da vaša aplikacija ne najde API ključa, potrebnega za dostop do SerpAPI. Za rešitev ustvarite datoteko.envv korenu projekta (če še ne obstaja) in dodajte vrstico, kot jeSERPAPI_KEY=your_serpapi_key_here. Poskrbite, da bosteyour_serpapi_key_herezamenjali z dejanskim ključem s spletne strani SerpAPI.
- Če vidite napako
-
Napake "Module not found"
- Napake, kot je
ModuleNotFoundError: No module named 'httpx', kažejo, da manjka potrebna Python knjižnica. To se običajno zgodi, če niste namestili vseh odvisnosti. Za rešitev zaženitepip install -r requirements.txtv terminalu, da namestite vse, kar projekt potrebuje.
- Napake, kot je
-
Težave s povezavo
- Če dobite napako, kot je
Error during client execution, to pogosto pomeni, da se odjemalec ne more povezati s strežnikom ali strežnik ne teče kot pričakovano. Preverite, da sta odjemalec in strežnik združljivi različici in da jeserver.pyprisoten ter teče v pravilni mapi. Ponovni zagon strežnika in odjemalca lahko prav tako pomaga.
- Če dobite napako, kot je
-
Napake SerpAPI
- Napaka
Search API returned error status: 401pomeni, da vaš SerpAPI ključ manjka, je napačen ali je potekel. Obiščite svojo nadzorno ploščo SerpAPI, preverite ključ in po potrebi posodobite datoteko.env. Če je ključ pravilen, a napaka še vedno obstaja, preverite, ali vam je potekel brezplačni paket.
- Napaka
Privzeto aplikacija beleži le pomembne informacije. Če želite videti več podrobnosti o dogajanju (na primer za diagnosticiranje težav), lahko omogočite način DEBUG. Ta način vam bo prikazal veliko več o vsakem koraku, ki ga aplikacija izvaja.
Primer: običajen izpis
2025-06-01 10:15:23,456 - __main__ - INFO - Calling general_search with params: {'query': 'open source LLMs'}
2025-06-01 10:15:24,123 - __main__ - INFO - Successfully called general_search
GENERAL_SEARCH RESULTS:
... (search results here) ...
Primer: izpis v načinu DEBUG
2025-06-01 10:15:23,456 - __main__ - INFO - Calling general_search with params: {'query': 'open source LLMs'}
2025-06-01 10:15:23,457 - httpx - DEBUG - HTTP Request: GET https://serpapi.com/search ...
2025-06-01 10:15:23,458 - httpx - DEBUG - HTTP Response: 200 OK ...
2025-06-01 10:15:24,123 - __main__ - INFO - Successfully called general_search
GENERAL_SEARCH RESULTS:
... (search results here) ...
Opazite, da način DEBUG vključuje dodatne vrstice o HTTP zahtevah, odgovorih in drugih notranjih podrobnostih. To je lahko zelo koristno pri odpravljanju težav.
Za omogočanje načina DEBUG nastavite raven beleženja na DEBUG na vrhu vaše datoteke client.py ali server.py:
# At the top of your client.py or server.py
import logging
logging.basicConfig(
level=logging.DEBUG, # Change from INFO to DEBUG
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s"
)Omejitev odgovornosti:
Ta dokument je bil preveden z uporabo storitve za avtomatski prevod AI Co-op Translator. Čeprav si prizadevamo za natančnost, vas opozarjamo, da lahko avtomatski prevodi vsebujejo napake ali netočnosti. Izvirni dokument v njegovem izvirnem jeziku velja za avtoritativni vir. Za pomembne informacije priporočamo strokovni človeški prevod. Za morebitna nesporazume ali napačne interpretacije, ki izhajajo iz uporabe tega prevoda, ne odgovarjamo.