Construa um servidor de ferramentas de raspagem na web com API FastMCP e Zyte
Os grandes modelos de idiomas (LLMs) são incrivelmente poderosos, mas têm uma limitação fundamental: estão presos no passado. O conhecimento deles é congelado no momento de sua última execução de treinamento e, muitas vezes, eles não podem acessar as informações dinâmicas e ao vivo na Internet, devido a proibições e à necessidade de usar os navegadores para acessar alguns dados. Então, como você conecta sua IA ao mundo real? Como você o capacita a buscar preços de produtos em tempo real, baixar os artigos mais recentes ou analisar o HTML atual do site? Você dá ferramentas. Neste guia, examinaremos a criação de um servidor MCP robusto usando o FastMCP. Este servidor exporá poderosos recursos de eliminação da Web da API Zyte, dando efetivamente à sua IA a capacidade de navegar e entender a Web ao vivo em seu nome. Você precisará de uma chave da API ZYTE para isso. Siga este link para se inscrever e obter crédito gratuito. O que é um servidor MCP e por que sua IA precisa de um? Pense em um LLM como um cérebro brilhante em uma jarra. Pode raciocinar, escrever e acessar uma vasta biblioteca interna de conhecimento, mas não pode interagir facilmente com o mundo exterior. Um servidor MCP (Model Context Protocol) é o corpo robótico que você constrói para esse cérebro. Cada função que você adiciona ao servidor é como uma mão ou um sensor – uma ferramenta que o cérebro pode usar para executar ações. Essa arquitetura, muitas vezes parte de um sistema para agentes de geração de recuperação upmentada (RAG) ou IA, funciona assim: você faz à IA uma pergunta que requer dados ao vivo, como: “Qual é o preço do novo iPhone no site da Apple?” A IA, sabendo que não pode responder da memória, analisa suas ferramentas disponíveis. Ele vê uma ferramenta chamada Extract_Product com a descrição “Extrair dados do produto de um determinado URL”. Entende que esta é a ferramenta certa para o trabalho. A IA liga para o seu servidor MCP, pedindo para executar a ferramenta Extract_Product com o URL para o iPhone. Seu servidor executa o código, raspa os dados usando a API Zyte e retorna informações limpas e estruturadas (preço, disponibilidade etc.). A IA recebe esses novos dados e o usa para fornecer uma resposta precisa e atualizada. Ao construir um servidor MCP, você não está apenas fazendo perguntas de IA; Você está direcionando um agente poderoso que pode reunir e processar ativamente informações do mundo para você. A arquitetura: construindo uma cinta de ferramentas de nível profissional antes de criarmos as ferramentas, precisamos construir uma base sólida. Um script simples não o cortará; Estamos construindo um serviço confiável. Isso significa estruturar nosso código para maior clareza, reutilização e segurança. _O código completo está na parte inferior deste artigo. A Fundação: Um cliente da API dedicado em vez de espalhar solicitações. Esta é uma melhor prática de engenharia de software que encapsula toda a lógica para interagir com a API Zyte em um só lugar. Limpo e reutilizável: todos os detalhes – o URL básico, a autenticação e as configurações de tempo limite – são tratados dentro da classe. Se a API mudar, você só precisará atualizá -la em um local. Métodos especializados: criamos métodos específicos como Extract_Product e Extract_Html. Cada método é responsável por criar a carga útil correta do JSON por sua tarefa específica, tornando o código da ferramenta incrivelmente simples mais tarde. Classe zyteApiclient: def __init __ (self, api_key: str, timeout: int = 30): self.api_key = api_key self.base_url = “self.timeout = timeout self.session = requests.session () def _make_request (self)[str, Any]) -> ZyteApiresponse: # … (lógica de solicitação completa aqui) Digite Modo de tela completa Sair Modo de tela cheia O plano: Pydantic for Data Integrity O que acontece se um site não tiver um preço ou a resposta da API mudar ligeiramente? Nosso programa pode travar. Para evitar isso, usamos o Pydantic para definir modelos de dados. Pense nos modelos pydantic como um inspetor de controle de qualidade para seus dados. Eles definem a “forma” (ou esquema) dos dados que esperamos receber. Validação: se a API retornar dados que não correspondem ao nosso esquema de produção de produção, o Pydantic levantará um erro, impedindo que dados ruins corrompem nosso sistema. Previsibilidade: ao usar esses modelos, garantimos que os dados que fluem através de nosso aplicativo sejam sempre estruturados corretamente. Isso torna nossas ferramentas confiáveis e seguras para a IA usar. Classe ProductResponse (Basemodel): Nome: Opcional[str] = Nenhum preço: opcional[str] = Nenhuma moeda: opcional[str] = Nenhum # … (outros campos de produto) Classe ZyteApiresponse (Basemodel): Produto: Opcional[ProductResponse] = Nenhum Httproponsebody: opcional[str] = Nenhum BrowSerHtml: Opcional[str] = Ninguém digite o modo de tela cheia de saída de tela cheia, forjando as ferramentas com o FastMCP agora que nossa base é sólida, podemos criar as ferramentas para a nossa IA. É aqui que o FastMCP torna as coisas incrivelmente simples. O decorador @mcp.tool é a varinha mágica que transforma instantaneamente qualquer função python em um terminal de API seguro e chamável para sua IA. mcp = fastmcp (“zyte-mcp-server”) zyte_client = zyteapiclient (api_key) @mcp.tool def extraCT_Product (url: str)-> dict: “” “Extrair dados do produto de um dado url usando zyte api” “” “” “” ” Modo de tela completa Sair do modo de tela cheia A parte mais importante deste código é o docstring: “” “extrai dados do produto de um determinado URL …” “”. Este não é apenas um comentário para outros desenvolvedores. O docstring é o manual de instruções da IA. O LLM lê essa descrição para entender o que a ferramenta faz e quando deve ser usada. Um docstring claro, conciso e descritivo é a chave para criar um agente de IA eficaz. Criamos mais duas ferramentas para extrair HTML bruto e renderizado ao navegador, cada uma com um DocString claro. Atirando o servidor com nosso cliente, modelos de dados e ferramentas definidas, a última etapa é dar vida ao nosso servidor. Essa linha única de código informa ao FastMCP para iniciar um servidor da Web, que ouve solicitações recebidas de uma IA e executa a ferramenta apropriada. Se __name__ == “__Main__”: mcp.run () insira modo de tela cheia de tela cheia, seu servidor MCP agora está online e sua IA possui um novo conjunto de superpotores de redação da web, prontos para serem chamados. O código completo aqui está o script completo pronto para ser executado. De FastMcp Importar FastMCP Importar solicitações da base64 Importar B64Decode de digitar o Dict de importação, qualquer, opcional, lista de pydantic importar basemodel importar o logm importar os # — 1. Modelos pydantic para validação de dados — Class produttResponse (Basemodel): Nome: opcional[str] = Nenhum preço: opcional[str] = Nenhuma moeda: opcional[str] = Nenhuma disponibilidade: opcional[str] = Nenhum sku: opcional[str] = Nenhuma marca: opcional[Dict[str, Any]]= Nenhuma imagens: opcional[List[Dict[str, Any]]]= Nenhum descrição: opcional[str] = Nenhum URL: opcional[str] = Nenhuma classe htmlResponse (basemodel): html: str classe zyteApiresponse (basemodel): produto: opcional[ProductResponse] = Nenhum Httproponsebody: opcional[str] = Nenhum BrowSerHtml: Opcional[str] = Nenhum # — 2. Cliente de API dedicado para lógica limpa e reutilizável — Classe ZyteApiclient: def __init __ (self, api_key: str, timeout: int = 30): self.api_key = api_key self.base_url = “self.timeout = timeoust.Session = sPYStion ().[str, Any]) -> zyteApiresponse: logging.info (f “fazendo solicitação para {self.base_url} para url: {payload.get.get (‘url’, ‘desconhecido’)}”) resposta = self.session.post (self.base_url, auth = (self.api_key, “), json” {Response.status_code} “) Response.raise_for_status () retorna zyteApiresponse (** Response.json ()) def Extact_Product (self, url: str) -> productSponse: Payload = {” url “: url,” produto “: true,} resposta =._make: Extract_html (self, url: str) -> htmlResponse: payload = {“url”: url, “httproponsebody”: true,} resposta = self._make_request (carga pago) se resposta.httPropSonse: htttp_ensonsonse_body = b64dt) HtmlResponse (html = http_response_body.decode (“utf -8”)) return htmlResponse (html = “”) def Extact_browser_html (self, url: str) -> htmlRESPOnse: Payload = {“url”: url: url: htmlRESPOnse: Payload = {“url”: url: url: htmlRESPOnse: Payload = {“url”: url: str) -> htmlRESPONS: self._make_request (carga paga) Retornar htmlResponse (html = resposta.browSerHtml ou “”) # — 3. Definições de servidor e ferramenta fastmcp — mcp = fastmcp (“zyte-mcp-server”) api_key = os.tenv (“zyte_api_api_” A variável de ambiente não está definida “) zyte_client = zyteapiclient (api_key) @mcp.tool def Extact_Product (url: str) -> dict:” “” Extrai os dados do produto estruturado (Nome, Price, SKU, etc.) de uma determinada página do produto “. Response.model_dump () @mcp.tool def Extact_html (url: str) -> dict: “” “extrai o conteúdo html estático bruto de uma página de um determinado url. Use isso para sites simples ou quando você precisar do código -fonte antes do javascript. @mcp.tool def Extract_html_with_browser (url: str) -> dict: “” “extrai o conteúdo HTML de uma página depois de ter sido totalmente renderizado em um navegador da web, incluindo o conteúdo gerado por javascript. Use este sites dinâmicos e complexos. Response.model_dump () # — 4. Execute o servidor — se __name__ == “__Main__”: mcp.run () digite o modo de saída de tela cheia de tela cheia
Fonte