Tässä luvussa näytetään, miten rakennetaan käytännön AI-agentti, joka yhdistyy ulkoisiin API-rajapintoihin, käsittelee erilaisia tietotyyppejä, hallitsee virheitä ja ohjaa useita työkaluja – kaikki tuotantovalmiissa muodossa. Näet:
- Yhdistäminen ulkoisiin API-rajapintoihin, jotka vaativat todennuksen
- Erilaisten tietotyyppien käsittely useista päätepisteistä
- Vankka virheenkäsittely ja lokitusstrategiat
- Monityökalujen orkestrointi yhdessä palvelimessa
Lopuksi sinulla on käytännön kokemusta malleista ja parhaista käytännöistä, jotka ovat olennaisia kehittyneissä AI- ja LLM-pohjaisissa sovelluksissa.
Tässä oppitunnissa opit rakentamaan kehittyneen MCP-palvelimen ja -asiakkaan, joka laajentaa LLM:n kykyjä reaaliaikaisella verkkodatan haulla SerpAPI:n avulla. Tämä on tärkeä taito dynaamisten AI-agenttien kehittämiseen, jotka pystyvät hakemaan ajantasaista tietoa verkosta.
Oppitunnin lopussa osaat:
- Integroimaan ulkoisia API-rajapintoja (kuten SerpAPI) turvallisesti MCP-palvelimeen
- Toteuttamaan useita työkaluja web-, uutis-, tuotehakuun ja kysymys-vastaus-toimintoihin
- Jäsentämään ja muotoilemaan rakenteellista dataa LLM:n käyttöön sopivaksi
- Käsittelemään virheitä ja hallitsemaan API-kutsujen rajoituksia tehokkaasti
- Rakentamaan ja testaamaan sekä automatisoituja että interaktiivisia MCP-asiakkaita
Tässä osiossa esitellään Web Search MCP Serverin arkkitehtuuri ja ominaisuudet. Näet, miten FastMCP ja SerpAPI toimivat yhdessä laajentaen LLM:n kykyjä reaaliaikaisella verkkodatalla.
Tämä toteutus sisältää neljä työkalua, jotka demonstroivat MCP:n kykyä käsitellä monipuolisia, ulkoisiin API-rajapintoihin perustuvia tehtäviä turvallisesti ja tehokkaasti:
- general_search: Laaja verkkohaku
- news_search: Viimeaikaiset uutisotsikot
- product_search: Verkkokaupan tiedot
- qna: Kysymys-vastaus-pätkät
- Koodiesimerkit: Sisältää kielikohtaisia koodilohkoja Pythonille (ja helposti laajennettavissa muihin kieliin) selkeyden vuoksi
# 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)Ennen kuin ajat asiakasta, on hyödyllistä ymmärtää, mitä palvelin tekee. server.py -tiedosto toteuttaa MCP-palvelimen, joka tarjoaa työkaluja web-, uutis-, tuotehakuun ja kysymys-vastaus-toimintoihin SerpAPI:n integroinnin kautta. Se käsittelee saapuvat pyynnöt, hallitsee API-kutsut, jäsentää vastaukset ja palauttaa rakenteelliset tulokset asiakkaalle.
Voit tutustua koko toteutukseen tiedostossa server.py.
Tässä on lyhyt esimerkki siitä, miten palvelin määrittelee ja rekisteröi työkalun:
# 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()- Ulkoisen API:n integrointi: Näyttää, miten API-avaimia ja ulkoisia pyyntöjä käsitellään turvallisesti
- Rakenteellisen datan jäsentäminen: Kuvaa, miten API-vastaukset muunnetaan LLM:lle sopiviksi muodoiksi
- Virheenkäsittely: Vankka virheenkäsittely asianmukaisella lokituksella
- Interaktiivinen asiakas: Sisältää sekä automatisoidut testit että interaktiivisen tilan testausta varten
- Kontekstinhallinta: Hyödyntää MCP Contextia lokitukseen ja pyyntöjen seurantaan
Ennen aloittamista varmista, että ympäristösi on oikein asetettu seuraavien ohjeiden mukaisesti. Tämä varmistaa, että kaikki riippuvuudet on asennettu ja API-avaimesi on konfiguroitu oikein sujuvaa kehitystä ja testausta varten.
- Python 3.8 tai uudempi
- SerpAPI API-avain (Rekisteröidy osoitteessa SerpAPI – ilmainen taso saatavilla)
Aloittaaksesi seuraa näitä ohjeita ympäristösi pystyttämiseksi:
- Asenna riippuvuudet käyttämällä uv:tä (suositeltu) tai pip:iä:
# Using uv (recommended)
uv pip install -r requirements.txt
# Using pip
pip install -r requirements.txt- Luo projektin juureen
.env-tiedosto, johon lisäät SerpAPI-avaimesi:
SERPAPI_KEY=your_serpapi_key_here
Web Search MCP Server on keskeinen komponentti, joka tarjoaa työkaluja web-, uutis-, tuotehakuun ja kysymys-vastaus-toimintoihin SerpAPI:n integroinnin kautta. Se käsittelee saapuvat pyynnöt, hallitsee API-kutsut, jäsentää vastaukset ja palauttaa rakenteelliset tulokset asiakkaalle.
Voit tutustua koko toteutukseen tiedostossa server.py.
Käynnistääksesi MCP-palvelimen, käytä seuraavaa komentoa:
python server.pyPalvelin toimii stdio-pohjaisena MCP-palvelimena, johon asiakas voi yhdistää suoraan.
Asiakas (client.py) tukee kahta tilaa MCP-palvelimen kanssa kommunikointiin:
- Normaali tila: Suorittaa automatisoituja testejä, jotka käyttävät kaikkia työkaluja ja tarkistavat niiden vastaukset. Tämä on kätevä tapa nopeasti varmistaa, että palvelin ja työkalut toimivat odotetusti.
- Interaktiivinen tila: Käynnistää valikkopohjaisen käyttöliittymän, jossa voit manuaalisesti valita ja kutsua työkaluja, syöttää omia kyselyjä ja nähdä tulokset reaaliajassa. Tämä on ihanteellinen tapa tutkia palvelimen ominaisuuksia ja kokeilla erilaisia syötteitä.
Voit tutustua koko toteutukseen tiedostossa client.py.
Suorittaaksesi automatisoidut testit (käynnistää palvelimen automaattisesti):
python client.pyTai aja interaktiivisessa tilassa:
python client.py --interactiveTyökaluja voi testata ja käyttää monin eri tavoin tarpeidesi ja työnkulkujesi mukaan.
Voit myös rakentaa omia testiskriptejä MCP Python SDK:n avulla:
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 resultTässä yhteydessä "testiskripti" tarkoittaa omaa Python-ohjelmaa, jonka kirjoitat MCP-palvelimen asiakkaaksi. Sen sijaan, että kyseessä olisi virallinen yksikkötesti, tämä skripti antaa sinun ohjelmallisesti yhdistää palvelimeen, kutsua mitä tahansa sen työkaluista haluamillasi parametreilla ja tarkastella tuloksia. Tämä lähestymistapa on hyödyllinen:
- Prototyyppien ja kokeilujen tekemiseen työkalukutsuilla
- Palvelimen vastausten validointiin eri syötteillä
- Toistuvien työkalukutsujen automatisointiin
- Omien työnkulkujen tai integraatioiden rakentamiseen MCP-palvelimen päälle
Voit käyttää testiskriptejä nopeasti kokeillaksesi uusia kyselyjä, virheiden selvittämiseen tai jopa lähtökohtana kehittyneemmälle automaatiolle. Alla on esimerkki MCP Python SDK:n käytöstä tällaisen skriptin luomiseen:
Voit käyttää palvelimen tarjoamia työkaluja erilaisiin haku- ja kyselytarkoituksiin. Jokainen työkalu on kuvattu alla parametreineen ja esimerkkikäytöineen.
Tässä osiossa kerrotaan yksityiskohtaisesti jokaisesta käytettävissä olevasta työkalusta ja niiden parametreista.
Suorittaa yleisen verkkohakukyselyn ja palauttaa muotoillut tulokset.
Työkalun kutsuminen:
Voit kutsua general_search-työkalua omasta skriptistäsi MCP Python SDK:n avulla tai interaktiivisesti Inspectorin tai interaktiivisen asiakastilan kautta. Tässä esimerkki SDK:n käytöstä:
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)Vaihtoehtoisesti interaktiivisessa tilassa valitse valikosta general_search ja syötä kysely, kun sitä pyydetään.
Parametrit:
query(merkkijono): Hakukysely
Esimerkkipyyntö:
{
"query": "latest AI trends"
}Hakee viimeisimpiä uutisartikkeleita kyselyyn liittyen.
Työkalun kutsuminen:
Voit kutsua news_search-työkalua omasta skriptistäsi MCP Python SDK:n avulla tai interaktiivisesti Inspectorin tai interaktiivisen asiakastilan kautta. Tässä esimerkki SDK:n käytöstä:
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)Vaihtoehtoisesti interaktiivisessa tilassa valitse valikosta news_search ja syötä kysely, kun sitä pyydetään.
Parametrit:
query(merkkijono): Hakukysely
Esimerkkipyyntö:
{
"query": "AI policy updates"
}Hakee tuotteita, jotka vastaavat kyselyä.
Työkalun kutsuminen:
Voit kutsua product_search-työkalua omasta skriptistäsi MCP Python SDK:n avulla tai interaktiivisesti Inspectorin tai interaktiivisen asiakastilan kautta. Tässä esimerkki SDK:n käytöstä:
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)Vaihtoehtoisesti interaktiivisessa tilassa valitse valikosta product_search ja syötä kysely, kun sitä pyydetään.
Parametrit:
query(merkkijono): Tuotehakukysely
Esimerkkipyyntö:
{
"query": "best AI gadgets 2025"
}Hakee suoria vastauksia kysymyksiin hakukoneista.
Työkalun kutsuminen:
Voit kutsua qna-työkalua omasta skriptistäsi MCP Python SDK:n avulla tai interaktiivisesti Inspectorin tai interaktiivisen asiakastilan kautta. Tässä esimerkki SDK:n käytöstä:
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)Vaihtoehtoisesti interaktiivisessa tilassa valitse valikosta qna ja syötä kysymys, kun sitä pyydetään.
Parametrit:
question(merkkijono): Kysymys, johon etsitään vastausta
Esimerkkipyyntö:
{
"question": "what is artificial intelligence"
}Tässä osiossa on koodiesimerkkejä ja viitteitä palvelimen ja asiakkaan toteutuksista.
Katso täydelliset toteutustiedot tiedostoista server.py ja client.py.
# Example snippet from server.py:
import os
import httpx
# ...existing code...Ennen rakentamisen aloittamista tässä on joitakin tärkeitä edistyneitä käsitteitä, jotka esiintyvät läpi luvun. Niiden ymmärtäminen auttaa sinua pysymään mukana, vaikka ne olisivat sinulle uusia:
- Monityökalujen orkestrointi: Tämä tarkoittaa useiden erilaisten työkalujen (kuten web-haku, uutishaku, tuotehaku ja kysymys-vastaus) ajamista yhdessä MCP-palvelimessa. Se mahdollistaa palvelimesi käsittelevän monenlaisia tehtäviä, ei vain yhtä.
- API-kutsujen rajoitusten hallinta: Monet ulkoiset API:t (kuten SerpAPI) rajoittavat, kuinka monta pyyntöä voit tehdä tietyn ajan sisällä. Hyvä koodi tarkistaa nämä rajat ja käsittelee ne sujuvasti, jotta sovelluksesi ei kaadu, jos raja ylittyy.
- Rakenteellisen datan jäsentäminen: API-vastaukset ovat usein monimutkaisia ja sisäkkäisiä. Tämä käsite tarkoittaa näiden vastausten muuntamista siisteiksi, helposti käytettäviksi muodoiksi, jotka sopivat LLM:lle tai muille ohjelmille.
- Virheiden palautuminen: Joskus tapahtuu virheitä – esimerkiksi verkko pettää tai API ei palauta odotettua. Virheiden palautuminen tarkoittaa, että koodisi pystyy käsittelemään nämä ongelmat ja antamaan hyödyllistä palautetta sen sijaan, että kaatuisi.
- Parametrien validointi: Tämä tarkoittaa, että kaikki työkalujen syötteet tarkistetaan oikeiksi ja turvallisiksi käyttää. Se sisältää oletusarvojen asettamisen ja tyyppien varmistamisen, mikä auttaa estämään virheitä ja sekaannuksia.
Tämä osio auttaa sinua diagnosoimaan ja ratkaisemaan yleisiä ongelmia, joita saatat kohdata työskennellessäsi Web Search MCP Serverin kanssa. Jos kohtaat virheitä tai odottamatonta käyttäytymistä, tämä vianmääritysohje tarjoaa ratkaisuja yleisimpiin ongelmiin. Tutustu näihin vinkkeihin ennen lisäavun hakemista – ne usein ratkaisevat ongelmat nopeasti.
Työskennellessäsi Web Search MCP Serverin kanssa saatat toisinaan kohdata ongelmia – tämä on normaalia ulkoisten API:en ja uusien työkalujen kanssa työskennellessä. Tämä osio tarjoaa käytännön ratkaisuja yleisimpiin ongelmiin, jotta pääset nopeasti takaisin raiteille. Jos kohtaat virheen, aloita tästä: alla olevat vinkit käsittelevät yleisimpiä käyttäjien kohtaamia ongelmia ja voivat usein ratkaista ongelmasi ilman lisäapua.
Alla on joitakin yleisimpiä ongelmia, joita käyttäjät kohtaavat, selkeine selityksineen ja ratkaisuohjeineen:
-
SERPAPI_KEY puuttuu .env-tiedostosta
- Jos näet virheen
SERPAPI_KEY environment variable not found, se tarkoittaa, että sovelluksesi ei löydä SerpAPI-avainta. Korjataksesi tämän, luo projektin juureen.env-tiedosto (jos sitä ei vielä ole) ja lisää riviSERPAPI_KEY=oma_serpapi_avaimesi. Muista korvataoma_serpapi_avaimesioikealla avaimellasi SerpAPI:n sivustolta.
- Jos näet virheen
-
Moduulia ei löydy -virheet
- Virheet kuten
ModuleNotFoundError: No module named 'httpx'tarkoittavat, että tarvittava Python-kirjasto puuttuu. Tämä tapahtuu yleensä, jos et ole asentanut kaikkia riippuvuuksia. Korjaa tämä ajamalla terminaalissapip install -r requirements.txt, jolloin kaikki projektin tarvitsemat paketit asennetaan.
- Virheet kuten
-
Yhteysongelmat
- Jos saat virheen kuten
Error during client execution, se tarkoittaa usein, että asiakas ei pysty yhdistämään palvelimeen tai palvelin ei ole käynnissä odotetusti. Tarkista, että sekä asiakas että palvelin ovat yhteensopivia versioita ja ettäserver.pyon olemassa ja käynnissä oikeassa hakemistossa. Palvelimen ja asiakkaan uudelleenkäynnistys voi myös auttaa.
- Jos saat virheen kuten
-
SerpAPI-virheet
- Virhe
Search API returned error status: 401tarkoittaa, että SerpAPI-avaimesi puuttuu, on virheellinen tai vanhentunut. Mene SerpAPI-hallintapaneeliisi, varmista avain ja päivitä tarvittaessa.env-tiedosto. Jos avain on oikein mutta virhe jatkuu, tarkista, onko ilmainen käyttöoikeutesi loppunut.
- Virhe
Oletuksena sovellus kirjaa vain tärkeimmät tiedot. Jos haluat nähdä enemmän yksityiskohtia tapahtumista (esim. vaikeiden ongelmien diagnosointiin), voit ottaa DEBUG-tilan käyttöön. Tämä näyttää paljon enemmän tietoa jokaisesta sovelluksen suorittamasta vaiheesta.
Esimerkki: Normaali tulostus
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) ...
Esimerkki: DEBUG-tulostus
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) ...
Huomaa, että DEBUG-
DEBUG-tilan aktivoimiseksi aseta lokitustaso DEBUG-arvoksi client.py- tai server.py-tiedoston alkuun:
# 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"
)Vastuuvapauslauseke:
Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua Co-op Translator. Vaikka pyrimme tarkkuuteen, huomioithan, että automaattikäännöksissä saattaa esiintyä virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäiskielellä tulee pitää virallisena lähteenä. Tärkeissä asioissa suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa tämän käännöksen käytöstä aiheutuvista väärinymmärryksistä tai tulkinnoista.