Αυτό το κεφάλαιο δείχνει πώς να φτιάξετε έναν πραγματικό AI agent που ενσωματώνεται με εξωτερικά APIs, διαχειρίζεται διάφορους τύπους δεδομένων, χειρίζεται σφάλματα και οργανώνει πολλά εργαλεία—όλα σε μορφή έτοιμη για παραγωγή. Θα δείτε:
- Ενσωμάτωση με εξωτερικά APIs που απαιτούν αυθεντικοποίηση
- Διαχείριση διαφορετικών τύπων δεδομένων από πολλαπλά endpoints
- Αξιόπιστη διαχείριση σφαλμάτων και στρατηγικές καταγραφής
- Οργάνωση πολλαπλών εργαλείων σε έναν server
Στο τέλος, θα έχετε πρακτική εμπειρία με πρότυπα και βέλτιστες πρακτικές απαραίτητες για προχωρημένες εφαρμογές AI και LLM.
Σε αυτό το μάθημα θα μάθετε πώς να δημιουργήσετε έναν προηγμένο MCP server και client που επεκτείνει τις δυνατότητες LLM με δεδομένα web σε πραγματικό χρόνο χρησιμοποιώντας το SerpAPI. Αυτή είναι μια κρίσιμη δεξιότητα για την ανάπτυξη δυναμικών AI agents που έχουν πρόσβαση σε ενημερωμένες πληροφορίες από το διαδίκτυο.
Στο τέλος αυτού του μαθήματος, θα μπορείτε να:
- Ενσωματώνετε εξωτερικά APIs (όπως το SerpAPI) με ασφάλεια σε έναν MCP server
- Υλοποιείτε πολλαπλά εργαλεία για αναζήτηση στο web, ειδήσεις, προϊόντα και Q&A
- Αναλύετε και μορφοποιείτε δομημένα δεδομένα για κατανάλωση από LLM
- Διαχειρίζεστε σφάλματα και περιορισμούς ρυθμού API αποτελεσματικά
- Δημιουργείτε και δοκιμάζετε τόσο αυτοματοποιημένους όσο και διαδραστικούς MCP clients
Αυτή η ενότητα παρουσιάζει την αρχιτεκτονική και τα χαρακτηριστικά του Web Search MCP Server. Θα δείτε πώς το FastMCP και το SerpAPI χρησιμοποιούνται μαζί για να επεκτείνουν τις δυνατότητες LLM με δεδομένα web σε πραγματικό χρόνο.
Αυτή η υλοποίηση περιλαμβάνει τέσσερα εργαλεία που δείχνουν την ικανότητα του MCP να χειρίζεται διάφορες, εξωτερικές API-driven εργασίες με ασφάλεια και αποδοτικότητα:
- general_search: Για ευρείες αποτελέσματα web
- news_search: Για πρόσφατους τίτλους ειδήσεων
- product_search: Για δεδομένα ηλεκτρονικού εμπορίου
- qna: Για αποσπάσματα ερωτήσεων και απαντήσεων
- Παραδείγματα Κώδικα: Περιλαμβάνει blocks κώδικα για Python (και εύκολη επέκταση σε άλλες γλώσσες) με αναδιπλούμενες ενότητες για μεγαλύτερη σαφήνεια
Python
# 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)Πριν τρέξετε τον client, είναι χρήσιμο να καταλάβετε τι κάνει ο server. Το server.py file implements the MCP server, exposing tools for web, news, product search, and Q&A by integrating with SerpAPI. It handles incoming requests, manages API calls, parses responses, and returns structured results to the client.
You can review the full implementation in server.py.
Εδώ ένα σύντομο παράδειγμα για το πώς ο server ορίζει και καταχωρεί ένα εργαλείο:
Python Server
# 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()- Ενσωμάτωση Εξωτερικού API: Δείχνει ασφαλή διαχείριση κλειδιών API και εξωτερικών αιτημάτων
- Ανάλυση Δομημένων Δεδομένων: Δείχνει πώς να μετατρέπετε τις απαντήσεις API σε μορφές φιλικές προς LLM
- Διαχείριση Σφαλμάτων: Αξιόπιστη διαχείριση σφαλμάτων με κατάλληλη καταγραφή
- Διαδραστικός Client: Περιλαμβάνει αυτοματοποιημένες δοκιμές και διαδραστική λειτουργία για δοκιμές
- Διαχείριση Συμφραζομένων: Χρησιμοποιεί MCP Context για καταγραφή και παρακολούθηση αιτημάτων
Πριν ξεκινήσετε, βεβαιωθείτε ότι το περιβάλλον σας έχει ρυθμιστεί σωστά ακολουθώντας τα παρακάτω βήματα. Αυτό θα διασφαλίσει ότι όλες οι εξαρτήσεις είναι εγκατεστημένες και τα API keys σας έχουν ρυθμιστεί σωστά για ομαλή ανάπτυξη και δοκιμές.
- Python 3.8 ή νεότερη
- Κλειδί SerpAPI (Κάντε εγγραφή στο SerpAPI - υπάρχει δωρεάν πακέτο)
Για να ξεκινήσετε, ακολουθήστε τα παρακάτω βήματα για να ρυθμίσετε το περιβάλλον σας:
- Εγκαταστήστε τις εξαρτήσεις χρησιμοποιώντας uv (προτεινόμενο) ή pip:
# Using uv (recommended)
uv pip install -r requirements.txt
# Using pip
pip install -r requirements.txt- Δημιουργήστε ένα αρχείο
.envστη ρίζα του έργου με το κλειδί SerpAPI σας:
SERPAPI_KEY=your_serpapi_key_here
Ο Web Search MCP Server είναι το βασικό συστατικό που εκθέτει εργαλεία για αναζήτηση στο web, ειδήσεις, προϊόντα και Q&A μέσω ενσωμάτωσης με το SerpAPI. Διαχειρίζεται εισερχόμενα αιτήματα, διαχειρίζεται κλήσεις API, αναλύει απαντήσεις και επιστρέφει δομημένα αποτελέσματα στον client.
Μπορείτε να δείτε την πλήρη υλοποίηση στο server.py.
Για να ξεκινήσετε τον MCP server, χρησιμοποιήστε την παρακάτω εντολή:
python server.pyΟ server θα τρέξει ως stdio-based MCP server που ο client μπορεί να συνδεθεί απευθείας.
Ο client (client.py) supports two modes for interacting with the MCP server:
- Normal mode: Runs automated tests that exercise all the tools and verify their responses. This is useful for quickly checking that the server and tools are working as expected.
- Interactive mode: Starts a menu-driven interface where you can manually select and call tools, enter custom queries, and see results in real time. This is ideal for exploring the server's capabilities and experimenting with different inputs.
You can review the full implementation in client.py.
Για να τρέξετε τις αυτοματοποιημένες δοκιμές (αυτό θα ξεκινήσει αυτόματα τον server):
python client.pyΉ εκτελέστε σε διαδραστική λειτουργία:
python client.py --interactiveΥπάρχουν αρκετοί τρόποι να δοκιμάσετε και να αλληλεπιδράσετε με τα εργαλεία που παρέχει ο server, ανάλογα με τις ανάγκες και τη ροή εργασίας σας.
Μπορείτε επίσης να φτιάξετε τα δικά σας σκριπτάκια δοκιμών χρησιμοποιώντας το MCP Python SDK:
Python
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 resultΣε αυτό το πλαίσιο, ένα "σκριπτ δοκιμών" σημαίνει ένα προσαρμοσμένο πρόγραμμα Python που γράφετε για να λειτουργεί ως client για τον MCP server. Αντί να είναι επίσημο unit test, αυτό το σκριπτ σας επιτρέπει να συνδεθείτε προγραμματιστικά στον server, να καλέσετε οποιοδήποτε από τα εργαλεία του με παραμέτρους που επιλέγετε και να ελέγξετε τα αποτελέσματα. Αυτή η προσέγγιση είναι χρήσιμη για:
- Πρωτοτυποποίηση και πειραματισμό με κλήσεις εργαλείων
- Επικύρωση της απόκρισης του server σε διαφορετικές εισόδους
- Αυτοματοποίηση επαναλαμβανόμενων κλήσεων εργαλείων
- Δημιουργία δικών σας ροών εργασίας ή ενσωματώσεων πάνω από τον MCP server
Μπορείτε να χρησιμοποιήσετε σκριπτάκια δοκιμών για να δοκιμάσετε γρήγορα νέες ερωτήσεις, να εντοπίσετε σφάλματα στη συμπεριφορά εργαλείων ή ακόμα και ως αφετηρία για πιο προχωρημένη αυτοματοποίηση. Παρακάτω είναι ένα παράδειγμα για το πώς να χρησιμοποιήσετε το MCP Python SDK για να δημιουργήσετε ένα τέτοιο σκριπτ:
Μπορείτε να χρησιμοποιήσετε τα παρακάτω εργαλεία που παρέχει ο server για να εκτελέσετε διάφορους τύπους αναζητήσεων και ερωτημάτων. Κάθε εργαλείο περιγράφεται παρακάτω με τις παραμέτρους και παραδείγματα χρήσης.
Αυτή η ενότητα παρέχει λεπτομέρειες για κάθε διαθέσιμο εργαλείο και τις παραμέτρους του.
Εκτελεί μια γενική αναζήτηση στο web και επιστρέφει μορφοποιημένα αποτελέσματα.
Πώς να καλέσετε αυτό το εργαλείο:
Μπορείτε να καλέσετε το general_search από το δικό σας σκριπτ χρησιμοποιώντας το MCP Python SDK, ή διαδραστικά μέσω του Inspector ή της διαδραστικής λειτουργίας του client. Εδώ ένα παράδειγμα κώδικα με το SDK:
Παράδειγμα Python
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)Εναλλακτικά, σε διαδραστική λειτουργία, επιλέξτε general_search from the menu and enter your query when prompted.
Parameters:
query(string): Το ερώτημα αναζήτησης
Παράδειγμα Αιτήματος:
{
"query": "latest AI trends"
}Αναζητά πρόσφατα άρθρα ειδήσεων σχετικά με ένα ερώτημα.
Πώς να καλέσετε αυτό το εργαλείο:
Μπορείτε να καλέσετε το news_search από το δικό σας σκριπτ χρησιμοποιώντας το MCP Python SDK, ή διαδραστικά μέσω του Inspector ή της διαδραστικής λειτουργίας του client. Εδώ ένα παράδειγμα κώδικα με το SDK:
Παράδειγμα Python
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)Εναλλακτικά, σε διαδραστική λειτουργία, επιλέξτε news_search from the menu and enter your query when prompted.
Parameters:
query(string): Το ερώτημα αναζήτησης
Παράδειγμα Αιτήματος:
{
"query": "AI policy updates"
}Αναζητά προϊόντα που ταιριάζουν με ένα ερώτημα.
Πώς να καλέσετε αυτό το εργαλείο:
Μπορείτε να καλέσετε το product_search από το δικό σας σκριπτ χρησιμοποιώντας το MCP Python SDK, ή διαδραστικά μέσω του Inspector ή της διαδραστικής λειτουργίας του client. Εδώ ένα παράδειγμα κώδικα με το SDK:
Παράδειγμα Python
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)Εναλλακτικά, σε διαδραστική λειτουργία, επιλέξτε product_search from the menu and enter your query when prompted.
Parameters:
query(string): Το ερώτημα αναζήτησης προϊόντος
Παράδειγμα Αιτήματος:
{
"query": "best AI gadgets 2025"
}Λαμβάνει άμεσες απαντήσεις σε ερωτήσεις από μηχανές αναζήτησης.
Πώς να καλέσετε αυτό το εργαλείο:
Μπορείτε να καλέσετε το qna από το δικό σας σκριπτ χρησιμοποιώντας το MCP Python SDK, ή διαδραστικά μέσω του Inspector ή της διαδραστικής λειτουργίας του client. Εδώ ένα παράδειγμα κώδικα με το SDK:
Παράδειγμα Python
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)Εναλλακτικά, σε διαδραστική λειτουργία, επιλέξτε qna from the menu and enter your question when prompted.
Parameters:
question(string): Η ερώτηση για να βρεθεί απάντηση
Παράδειγμα Αιτήματος:
{
"question": "what is artificial intelligence"
}Αυτή η ενότητα παρέχει αποσπάσματα κώδικα και αναφορές για τις υλοποιήσεις του server και του client.
Python
Δείτε το server.py and client.py για πλήρεις λεπτομέρειες υλοποίησης.
# Example snippet from server.py:
import os
import httpx
# ...existing code...Πριν ξεκινήσετε την κατασκευή, εδώ είναι μερικές σημαντικές προχωρημένες έννοιες που θα εμφανιστούν σε όλο το κεφάλαιο. Η κατανόησή τους θα σας βοηθήσει να ακολουθήσετε, ακόμα και αν είναι η πρώτη φορά που τις βλέπετε:
- Οργάνωση Πολλαπλών Εργαλείων: Αυτό σημαίνει ότι τρέχετε πολλά διαφορετικά εργαλεία (όπως αναζήτηση web, ειδήσεις, προϊόντα και Q&A) μέσα σε έναν MCP server. Σας επιτρέπει να διαχειρίζεστε ποικιλία εργασιών, όχι μόνο μία.
- Διαχείριση Περιορισμών Ρυθμού API: Πολλά εξωτερικά APIs (όπως το SerpAPI) περιορίζουν πόσα αιτήματα μπορείτε να κάνετε σε συγκεκριμένο χρόνο. Ο καλός κώδικας ελέγχει αυτούς τους περιορισμούς και τους χειρίζεται με ομαλό τρόπο, ώστε η εφαρμογή να μην σπάει αν ξεπεράσετε το όριο.
- Ανάλυση Δομημένων Δεδομένων: Οι απαντήσεις API είναι συχνά πολύπλοκες και φωλιασμένες. Αυτή η έννοια αφορά τη μετατροπή αυτών των απαντήσεων σε καθαρές, εύχρηστες μορφές φιλικές προς LLM ή άλλα προγράμματα.
- Ανάκτηση από Σφάλματα: Μερικές φορές κάτι πάει στραβά—ίσως το δίκτυο αποτύχει ή το API δεν επιστρέψει αυτά που περιμένετε. Η ανάκτηση από σφάλματα σημαίνει ότι ο κώδικάς σας μπορεί να χειριστεί αυτά τα προβλήματα και να δώσει χρήσιμα μηνύματα αντί να καταρρεύσει.
- Επικύρωση Παραμέτρων: Αυτό αφορά τον έλεγχο ότι όλες οι είσοδοι στα εργαλεία σας είναι σωστές και ασφαλείς για χρήση. Περιλαμβάνει τον ορισμό προεπιλεγμένων τιμών και τη διασφάλιση ότι οι τύποι είναι σωστοί, βοηθώντας στην αποφυγή σφαλμάτων και παρεξηγήσεων.
Αυτή η ενότητα θα σας βοηθήσει να διαγνώσετε και να λύσετε κοινά προβλήματα που μπορεί να αντιμετωπίσετε κατά τη δουλειά με τον Web Search MCP Server. Αν συναντήσετε σφάλματα ή απρόβλεπτη συμπεριφορά, αυτή η ενότητα αντιμετώπισης προβλημάτων παρέχει λύσεις στα πιο συχνά ζητήματα. Διαβάστε τις συμβουλές πριν ζητήσετε περαιτέρω βοήθεια—συχνά λύνονται γρήγορα έτσι.
Κατά τη δουλειά με τον Web Search MCP Server, μπορεί να συναντήσετε προβλήματα—αυτό είναι φυσιολογικό όταν αναπτύσσετε με εξωτερικά APIs και νέα εργαλεία. Αυτή η ενότητα παρέχει πρακτικές λύσεις στα πιο κοινά προβλήματα, ώστε να επιστρέψετε γρήγορα στη δουλειά. Αν αντιμετωπίσετε σφάλμα, ξεκινήστε από εδώ: οι παρακάτω συμβουλές καλύπτουν τα ζητήματα που συναντούν οι περισσότεροι χρήστες και συχνά λύνουν το πρόβλημά σας χωρίς επιπλέον βοήθεια.
Παρακάτω είναι μερικά από τα πιο συχνά προβλήματα που αντιμετωπίζουν οι χρήστες, μαζί με σαφείς εξηγήσεις και βήματα για την επίλυσή τους:
-
Λείπει το SERPAPI_KEY στο αρχείο .env
- Αν δείτε το σφάλμα
SERPAPI_KEY environment variable not found, it means your application can't find the API key needed to access SerpAPI. To fix this, create a file named.envin your project root (if it doesn't already exist) and add a line likeSERPAPI_KEY=your_serpapi_key_here. Make sure to replaceyour_serpapi_key_herewith your actual key from the SerpAPI website.
- Αν δείτε το σφάλμα
-
Module not found errors
- Errors such as
ModuleNotFoundError: No module named 'httpx'indicate that a required Python package is missing. This usually happens if you haven't installed all the dependencies. To resolve this, runpip install -r requirements.txtin your terminal to install everything your project needs.
- Errors such as
-
Connection issues
- If you get an error like
Error during client execution, it often means the client can't connect to the server, or the server isn't running as expected. Double-check that both the client and server are compatible versions, and thatserver.pyis present and running in the correct directory. Restarting both the server and client can also help.
- If you get an error like
-
SerpAPI errors
- Seeing
Search API returned error status: 401means your SerpAPI key is missing, incorrect, or expired. Go to your SerpAPI dashboard, verify your key, and update your.env, βεβαιωθείτε ότι το αρχείο.envυπάρχει και περιέχει το σωστό κλειδί. Αν το κλειδί σας είναι σωστό αλλά το σφάλμα συνεχίζει, ελέγξτε αν το δωρεάν πακέτο σας έχει εξαντληθεί.
- Seeing
Κανονικά, η εφαρμογή καταγράφει μόνο σημαντικές πληροφορίες. Αν θέλετε να δείτε περισσότερες λεπτομέρειες για το τι συμβαίνει (π.χ. για να διαγνώσετε δύσκολα ζητήματα), μπορείτε να ενεργοποιήσετε τη λειτουργία DEBUG. Αυτό θα σας δείξει πολύ περισσότερα για κάθε βήμα που κάνει η εφαρμογή.
Παράδειγμα: Κανονική Έξοδος
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) ...
Παράδειγμα: Έξοδος 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) ...
Αποποίηση ευθυνών:
Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης AI Co-op Translator. Παρόλο που προσπαθούμε για ακρίβεια, παρακαλούμε να γνωρίζετε ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν σφάλματα ή ανακρίβειες. Το πρωτότυπο έγγραφο στη γλώσσα του πρέπει να θεωρείται η επίσημη πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για οποιεσδήποτε παρεξηγήσεις ή λανθασμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης.