<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Erickson Lopes on Medium]]></title>
        <description><![CDATA[Stories by Erickson Lopes on Medium]]></description>
        <link>https://medium.com/@ericksonlopes?source=rss-9ea87c24d2f8------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*Fr6AH_QJ6XG5oL5gSN0iDA.jpeg</url>
            <title>Stories by Erickson Lopes on Medium</title>
            <link>https://medium.com/@ericksonlopes?source=rss-9ea87c24d2f8------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Tue, 19 May 2026 23:44:23 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@ericksonlopes/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[Construindo um RAG Simples com AGNO e OpenAI]]></title>
            <link>https://medium.com/@ericksonlopes/construindo-um-rag-simples-com-agno-e-openai-f3b5cd9320dd?source=rss-9ea87c24d2f8------2</link>
            <guid isPermaLink="false">https://medium.com/p/f3b5cd9320dd</guid>
            <dc:creator><![CDATA[Erickson Lopes]]></dc:creator>
            <pubDate>Sat, 09 Aug 2025 14:46:33 GMT</pubDate>
            <atom:updated>2025-08-09T14:47:00.278Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*mDuQmFsVMqP62Hd86ZVuLg.png" /></figure><p>Integração de conhecimento em PDFs com um agente de IA utilizando AGNO</p><h4>Introdução</h4><p>No mundo da inteligência artificial, a capacidade de recuperar informações de maneira eficaz é crucial. Neste artigo, vamos explorar como construir um sistema de Recuperação-Augmentada de Geração (RAG) simples utilizando a biblioteca AGNO, a API da OpenAI e um banco de dados vetorial LanceDB. Vamos focar na extração de informações a partir de documentos PDF, permitindo que um agente de IA responda a perguntas baseadas no conteúdo desses documentos.</p><h4>O que é RAG?</h4><p>Recuperação-Augmentada de Geração (RAG) é um modelo que combina técnicas de recuperação de informações e geração de texto. Ele permite que um agente de IA busque dados relevantes em fontes externas e os utilize para gerar respostas mais precisas e informativas. No nosso caso, utilizaremos um PDF como fonte de conhecimento.</p><h4>Pré-requisitos</h4><p>Antes de começarmos, precisamos instalar algumas bibliotecas essenciais. Execute o seguinte comando para instalar as dependências necessárias:</p><pre>pip install agno openai lancedb pandas pypdf</pre><h4>Configurando o Ambiente</h4><p>Primeiro, vamos importar as bibliotecas necessárias e configurar a chave da API da OpenAI:</p><pre>import os<br>from agno.agent import Agent<br>from agno.embedder.openai import OpenAIEmbedder<br>from agno.knowledge.pdf import PDFKnowledgeBase<br>from agno.models.openai import OpenAIChat<br>from agno.vectordb.lancedb import LanceDb<br>os.environ[&quot;OPENAI_API_KEY&quot;] = &quot;sua chave_api_openai&quot;</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*mDuQmFsVMqP62Hd86ZVuLg.png" /></figure><p>Certifique-se de substituir `sua chave_api_openai` pela sua chave real da API da OpenAI.</p><h4>Criando a Base de Conhecimento</h4><p>Agora, vamos criar uma base de conhecimento a partir de um documento PDF. Para isso, utilizaremos a classe `PDFKnowledgeBase` e configuraremos um banco de dados vetorial com o LanceDB:</p><pre>knowledge_base = PDFKnowledgeBase(<br> path=&quot;sample_data/livro_da_minha_vida.pdf&quot;,<br> vector_db=LanceDb(<br> table_name=&quot;content&quot;,<br> uri=&quot;tmp/lancedb&quot;,<br> embedder=OpenAIEmbedder(id=&quot;text-embedding-3-small&quot;)<br> ),<br>)<br><br># Carrega o conteúdo do PDF na base de conhecimento<br>knowledge_base.load()</pre><p>Neste exemplo, o caminho para o PDF é `sample_data/livro_da_minha_vida.pdf`. Você pode substituir isso pelo caminho do seu próprio arquivo PDF.</p><h4>Criando o Agente</h4><p>Com a base de conhecimento carregada, agora podemos criar um agente que utilizará este conhecimento para responder perguntas:</p><pre>agent = Agent(<br> model=OpenAIChat(id=&quot;gpt-4o&quot;),<br> knowledge=knowledge_base,<br> add_references=True,<br> search_knowledge=False,<br> markdown=True<br>)</pre><p>Aqui, estamos utilizando o modelo GPT-4 da OpenAI e configurando o agente para adicionar referências e usar a formatação Markdown nas respostas.</p><h4>Fazendo Perguntas ao Agente</h4><p>Agora que tudo está configurado, podemos fazer perguntas ao nosso agente. Vamos perguntar sobre o dia do nosso nascimento:</p><pre><br>agent.print_response(<br> &quot;Qual é o dia do meu nascimento?&quot;, stream=True<br>)</pre><p>Esta linha de código enviará a pergunta ao agente, que utilizará o conhecimento extraído do PDF para gerar uma resposta.</p><h4>Boas Práticas</h4><p>1. <strong>Gerenciamento de Erros</strong>: Sempre implemente tratamentos de exceção para lidar com possíveis erros ao carregar documentos ou fazer chamadas à API.<br>2. <strong>Documentação</strong>: Mantenha uma documentação clara do seu código e das bibliotecas utilizadas.<br>3. <strong>Segurança</strong>: Nunca exponha sua chave API. Utilize variáveis de ambiente ou arquivos de configuração seguros.</p><h4>Conclusão</h4><p>Neste artigo, construímos um sistema simples de RAG utilizando a biblioteca AGNO e a API da OpenAI. Essa abordagem permite que você crie agentes mais inteligentes e informativos, capazes de responder a perguntas baseadas em documentos PDF.</p><p>Experimente adaptá-lo para suas próprias necessidades e explore as possibilidades que a integração de IA pode oferecer!</p><h4><strong>Exemplos de Código</strong></h4><pre><br>pip install agno openai lancedb pandas pypdf<br></pre><pre>python<br>import os<br><br>from agno.agent import Agent<br>from agno.embedder.openai import OpenAIEmbedder<br>from agno.knowledge.pdf import PDFKnowledgeBase<br>from agno.models.openai import OpenAIChat<br>from agno.vectordb.lancedb import LanceDb<br><br>os.environ[&quot;OPENAI_API_KEY&quot;] = &quot;sua chave_api_openai&quot;<br>knowledge_base = PDFKnowledgeBase(<br> path=&quot;sample_data/livro_da_minha_vida.pdf&quot;,<br> vector_db=LanceDb(<br> table_name=&quot;content&quot;,<br> uri=&quot;tmp/lancedb&quot;,<br> embedder=OpenAIEmbedder(id=&quot;text-embedding-3-small&quot;)<br> ),<br>)<br>knowledge_base.load()<br>agent = Agent(<br> model=OpenAIChat(id=&quot;gpt-4o&quot;),<br> knowledge=knowledge_base,<br> add_references=True,<br> search_knowledge=False,<br> markdown=True<br>)<br>agent.print_response(<br> &quot;Qual é o dia do meu nascimento?&quot;, stream=True<br>)</pre><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=f3b5cd9320dd" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Criando Ferramentas para Seu Agente de IA com CrewAI]]></title>
            <link>https://medium.com/@ericksonlopes/criando-ferramentas-para-seu-agente-de-ia-com-crewai-6d189619c2b9?source=rss-9ea87c24d2f8------2</link>
            <guid isPermaLink="false">https://medium.com/p/6d189619c2b9</guid>
            <dc:creator><![CDATA[Erickson Lopes]]></dc:creator>
            <pubDate>Tue, 27 May 2025 12:07:03 GMT</pubDate>
            <atom:updated>2025-05-27T12:07:03.697Z</atom:updated>
            <content:encoded><![CDATA[<h3>Aprenda a personalizar a interação do seu agente de IA com ferramentas simples.</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*j-vJNXA3CsA6xiArT0ONGw.png" /></figure><p>No mundo em constante evolução da inteligência artificial, criar agentes personalizados que possam interagir de forma eficaz com os usuários é uma tarefa cada vez mais relevante. Neste artigo, vamos explorar como criar ferramentas (tools) para seu agente de IA utilizando a biblioteca CrewAI. Veremos que, com alguns passos simples, é possível adicionar funcionalidades personalizadas ao seu agente.</p><h3>O que é o CrewAI?</h3><p>CrewAI é uma biblioteca que facilita a criação e gestão de agentes de IA. Com ela, você pode definir o papel do agente, suas responsabilidades e até mesmo construir ferramentas que o agente pode usar para interagir com os usuários de maneira mais eficaz.</p><h3>Passo a Passo para Criar uma Ferramenta</h3><h3>Passo 1: Instalação da Biblioteca</h3><p>Primeiramente, precisamos instalar a biblioteca CrewAI. Isso pode ser feito facilmente utilizando o pip:</p><pre>pip install crewai</pre><h3>Passo 2: Criar uma Ferramenta Personalizada</h3><p>Vamos começar criando uma ferramenta simples que retornará uma saudação personalizada. Para isso, utilizaremos o decorador @tool fornecido pela biblioteca CrewAI:</p><pre>from crewai.tools import tool<br><br>@tool<br>def saudacao(nome: str) -&gt; str:<br>    &quot;&quot;&quot;Retorna uma saudação personalizada.&quot;&quot;&quot;<br>    return f&quot;Olá, {nome}! Bem-vindo à CrewAI!&quot;</pre><p>Neste exemplo, a função saudacao recebe um nome como parâmetro e retorna uma saudação formatada.</p><h3>Passo 3: Criar um Agente</h3><p>Agora que temos nossa ferramenta, podemos criar um agente que utilizará essa ferramenta. O agente pode ser definido da seguinte maneira:</p><pre>from crewai import Agent<br><br>meu_agente = Agent(<br>    role=&quot;Agente de Boas-Vindas&quot;,<br>    goal=&quot;Cumprimentar o usuário de forma personalizada&quot;,<br>    backstory=&quot;Este agente adora receber novos usuários e deixá-los confortáveis.&quot;,<br>    tools=[saudacao]<br>)</pre><h3>Explicação dos Parâmetros</h3><ul><li>role: Define o papel do agente. Neste caso, é um agente de boas-vindas.</li><li>goal: O objetivo do agente. Aqui, o agente tem a tarefa de cumprimentar o usuário.</li><li>backstory: Um pequeno contexto sobre a personalidade do agente, que pode ajudar na interação.</li><li>tools: A lista de ferramentas que o agente pode utilizar, incluindo a nossa função saudacao.</li></ul><h3>Passo 4: Criar uma Tarefa</h3><p>Em seguida, vamos criar uma tarefa que o agente deve realizar. Essa tarefa descreverá o que o agente deve fazer:</p><pre>from crewai import Task<br><br>tarefa_cumprimentar = Task(<br>    description=&quot;Cumprimente o usuário chamado João utilizando sua ferramenta.&quot;,<br>    expected_output=&quot;Uma saudação personalizada para João.&quot;,<br>    agent=meu_agente<br>)</pre><p>A tarefa inclui uma descrição e a saída esperada, que neste caso é a saudação personalizada para o usuário chamado João.</p><h3>Passo 5: Criar e Executar a Crew</h3><p>Finalmente, podemos criar uma equipe (Crew) que inclui nosso agente e a tarefa que ele deve realizar:</p><pre>from crewai import Crew<br><br>equipe = Crew(<br>    agents=[meu_agente],<br>    tasks=[tarefa_cumprimentar]<br>)</pre><p>Agora, vamos executar a equipe com o input necessário:</p><pre>resultado = equipe.kickoff(inputs={&quot;nome&quot;: &quot;João&quot;})<br>print(resultado)</pre><p>Isso resultará na execução da tarefa e, como saída, teremos a saudação personalizada para João.</p><h3>Conclusão</h3><p>Neste artigo, mostramos como é simples criar uma ferramenta personalizada para um agente de IA utilizando a biblioteca CrewAI. Com apenas algumas linhas de código, você pode aumentar a interatividade e a personalização do seu agente, tornando a experiência do usuário muito mais agradável.</p><h3>Boas Práticas</h3><ul><li>Sempre documente suas ferramentas e agentes para facilitar o entendimento futuro.</li><li>Mantenha suas funções de ferramenta simples e focadas em uma única responsabilidade.</li><li>Teste suas implementações para garantir que o agente se comporte conforme o esperado.</li></ul><h3>Dicas</h3><ul><li>Explore outras funcionalidades da biblioteca CrewAI para expandir as capacidades do seu agente.</li><li>Considere criar múltiplas ferramentas e atribuí-las a diferentes agentes para interações mais ricas.</li></ul><p>Esses passos simples podem levar você a criar agentes de IA altamente eficazes e personalizados utilizando o CrewAI!</p><h3>Exemplos de Código</h3><pre>pip install crewai</pre><pre>from crewai import Agent, Task, Crew<br>from crewai.tools import tool<br><br>@tool<br>def saudacao(nome: str) -&gt; str:<br>    &quot;&quot;&quot;Retorna uma saudação personalizada.&quot;&quot;&quot;<br>    return f&quot;Olá, {nome}! Bem-vindo à CrewAI!&quot;<br><br><br>meu_agente = Agent(<br>    role=&quot;Agente de Boas-Vindas&quot;,<br>    goal=&quot;Cumprimentar o usuário de forma personalizada&quot;,<br>    backstory=&quot;Este agente adora receber novos usuários e deixá-los confortáveis.&quot;,<br>    tools=[saudacao]<br>)<br><br>tarefa_cumprimentar = Task(<br>    description=&quot;Cumprimente o usuário chamado João utilizando sua ferramenta.&quot;,<br>    expected_output=&quot;Uma saudação personalizada para João.&quot;,<br>    agent=meu_agente<br>)<br><br>equipe = Crew(<br>    agents=[meu_agente],<br>    tasks=[tarefa_cumprimentar]<br>)<br><br><br>resultado = equipe.kickoff(inputs={&quot;nome&quot;: &quot;João&quot;})<br>print(resultado)</pre><p><em>Sinta-se à vontade para experimentar o CrewAI e personalizar seus agentes da maneira que preferir!</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=6d189619c2b9" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Conectando seu Agente de IA via MCP com CrewAI]]></title>
            <link>https://medium.com/@ericksonlopes/conectando-seu-agente-de-ia-via-mcp-com-crewai-151d257222ad?source=rss-9ea87c24d2f8------2</link>
            <guid isPermaLink="false">https://medium.com/p/151d257222ad</guid>
            <category><![CDATA[crew-ai]]></category>
            <category><![CDATA[mcp-protocol]]></category>
            <category><![CDATA[python]]></category>
            <category><![CDATA[agents]]></category>
            <category><![CDATA[model-context-protocol]]></category>
            <dc:creator><![CDATA[Erickson Lopes]]></dc:creator>
            <pubDate>Mon, 26 May 2025 13:15:22 GMT</pubDate>
            <atom:updated>2025-05-26T13:15:22.568Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*zlC2JfOHEQjr2AXOrAlhUA.png" /></figure><p>Neste artigo, vamos explorar como conectar um agente de IA utilizando o Multi-Command Protocol (MCP) com a biblioteca CrewAI. Vamos usar um exemplo prático que interage com o Airbnb, permitindo ao agente buscar e analisar informações sobre acomodações.</p><h3>Pré-requisitos</h3><p>Antes de começarmos, você precisará ter o Python instalado em seu sistema, além de algumas bibliotecas que utilizaremos em nosso projeto.</p><h3>Configurando o Ambiente</h3><p>Primeiro, crie um ambiente virtual para isolar suas dependências:</p><pre>python -m venv venv<br>source venv/bin/activate  # Para Linux/Mac<br>venv\Scripts\activate  # Para Windows</pre><p>Agora, instale as bibliotecas necessárias:</p><pre>pip install crewai &quot;crewai-tools[mcp]&quot;</pre><h3>Estrutura do Código</h3><p>Vamos analisar o código em partes, explicando o que cada seção faz.</p><h3>1. Importando Bibliotecas e Configurando a Chave API</h3><pre>from crewai import Agent, Task, Crew<br>from crewai_tools import MCPServerAdapter<br>from mcp import StdioServerParameters<br>import os<br><br>os.environ[&quot;OPENAI_API_KEY&quot;] = &quot;SUA_CHAVE_API_OPENAI&quot;</pre><p>Nesta seção, estamos importando as bibliotecas necessárias e configurando a chave API da OpenAI. Lembre-se de substituir SUA_CHAVE_API_OPENAI pela sua chave real.</p><h3>2. Configuração dos Parâmetros do Servidor MCP</h3><pre>server_params = StdioServerParameters(<br>    command=&quot;npx&quot;,<br>    args=[&quot;-y&quot;, &quot;@openbnb/mcp-server-airbnb&quot;, &quot;--ignore-robots-txt&quot;],<br>)</pre><p>Aqui, estamos configurando os parâmetros do servidor MCP. Utilizamos o comando npx para executar o servidor MCP do Airbnb, que irá buscar as informações de acomodações. O argumento --ignore-robots-txt permite que o agente ignore as restrições do arquivo robots.txt do site.</p><h3>3. Criando o Agente</h3><pre>with MCPServerAdapter(server_params) as tools:<br>    agent = Agent(<br>        role=&quot;Especialista em Busca do Airbnb&quot;,<br>        goal=&quot;Buscar e analisar informações de acomodações no Airbnb&quot;,<br>        backstory=&quot;Um especialista em encontrar as melhores opções de acomodações no Airbnb&quot;,<br>        tools=tools,<br>        verbose=True,<br>    )</pre><p>Neste trecho, estamos criando o agente que irá interagir com o MCP. O agente é configurado com um papel, um objetivo e uma história de fundo, o que ajuda a definir seu comportamento durante as interações.</p><h3>4. Criando uma Tarefa</h3><pre>task = Task(<br>    description=&quot;Buscar informações de acomodações no Airbnb no capão dedondo com preço máximo de 100 reais por noite&quot;,<br>    expected_output=&quot;Lista de acomodações disponíveis com detalhes&quot;,<br>    agent=agent,<br>)</pre><p>Aqui, criamos uma tarefa para o agente. A descrição detalha o que o agente deve fazer, e a saída esperada informa como o resultado deve ser formatado.</p><h3>5. Criando e Executando a Crew</h3><pre>crew = Crew(<br>      agents=[agent],<br>      tasks=[task],<br>      verbose=True,<br>  )<br>result = crew.kickoff()<br>print(result)</pre><p>Finalmente, criamos uma Crew que contém o agente e a tarefa. O método kickoff() inicia a execução do agente, e o resultado é impresso na tela.</p><h3>Conclusão</h3><p>Neste artigo, cobrimos como conectar um agente de IA via MCP utilizando a biblioteca CrewAI. Com o exemplo prático, você pode adaptar e expandir esta funcionalidade para atender a diferentes necessidades. A interação com o Airbnb é apenas uma das muitas possibilidades que você pode explorar com esse setup.</p><p>Com isso, você está pronto para começar a trabalhar com agentes de IA e explorar o potencial do MCP com CrewAI!</p><h3>Códigos de Exemplo</h3><h3>Exemplo 1</h3><pre>pip install crewai &quot;crewai-tools[mcp]&quot;</pre><h3>Exemplo 2</h3><pre>from crewai import Agent, Task, Crew<br>from crewai_tools import MCPServerAdapter<br>from mcp import StdioServerParameters<br>import os<br><br>os.environ[&quot;OPENAI_API_KEY&quot;] = &quot;SUA_CHAVE_API_OPENAI&quot;<br><br>server_params = StdioServerParameters(<br>    command=&quot;npx&quot;,<br>    args=[&quot;-y&quot;, &quot;@openbnb/mcp-server-airbnb&quot;, &quot;--ignore-robots-txt&quot;],<br>)<br><br>with MCPServerAdapter(server_params) as tools:<br>    agent = Agent(<br>        role=&quot;Especialista em Busca do Airbnb&quot;,<br>        goal=&quot;Buscar e analisar informações de acomodações no Airbnb&quot;,<br>        backstory=&quot;Um especialista em encontrar as melhores opções de acomodações no Airbnb&quot;,<br>        tools=tools,<br>        verbose=True,<br>    )<br><br>    task = Task(<br>            description=&quot;Buscar informações de acomodações no Airbnb no capão dedondo com preço máximo de 100 reais por noite&quot;,<br>            expected_output=&quot;Lista de acomodações disponíveis com detalhes&quot;,<br>            agent=agent,<br>        )<br>    <br>    crew = Crew(<br>            agents=[agent],<br>            tasks=[task],<br>            verbose=True,<br>        )<br>    result = crew.kickoff()<br>    print(result)</pre><p><em>Este artigo foi escrito para ajudar desenvolvedores a entender a integração de agentes de IA utilizando o CrewAI e MCP.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=151d257222ad" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Tutorial: Faça Seu Primeiro MCP Usando FastMCP e LangChain em Python]]></title>
            <link>https://medium.com/@ericksonlopes/tutorial-criando-aplica%C3%A7%C3%B5es-mcp-com-fastmcp-e-langchain-em-python-f8d9eb19fb76?source=rss-9ea87c24d2f8------2</link>
            <guid isPermaLink="false">https://medium.com/p/f8d9eb19fb76</guid>
            <category><![CDATA[ai]]></category>
            <category><![CDATA[model-context-protocol]]></category>
            <category><![CDATA[langchain]]></category>
            <category><![CDATA[fastmcp]]></category>
            <category><![CDATA[python]]></category>
            <dc:creator><![CDATA[Erickson Lopes]]></dc:creator>
            <pubDate>Wed, 21 May 2025 13:42:07 GMT</pubDate>
            <atom:updated>2025-05-21T13:46:09.774Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*lgwD5ufWvQ8W0WvUtuPZOg.png" /></figure><p>Este guia explica como desenvolver uma aplicação usando o padrão Model-Controller-Presenter (MCP) integrado às poderosas bibliotecas FastMCP e LangChain em Python.</p><h3>📋 Pré-requisitos</h3><p>Antes de começar, certifique-se de instalar todas as dependências necessárias:</p><h4>Criando um Ambiente Virtual</h4><p><strong>Linux</strong>:</p><pre>python3 -m venv .venv<br>source .venv/bin/activate</pre><p><strong>Windows</strong>:</p><pre>python -m venv .venv<br>.venv\Scripts\activate</pre><h4>Instalando Dependências</h4><pre>pip install fastmcp langchain langchain-community langchain-openai</pre><h3>📂 Organização do Projeto</h3><p>O projeto será estruturado em dois arquivos principais:</p><ul><li>server.py: Responsável por configurar e executar o servidor MCP.</li><li>client.py: Realiza requisições ao servidor utilizando LangChain com um modelo de linguagem OpenAI.</li></ul><h3>🔧 Desenvolvendo o Servidor MCP (server.py)</h3><p>O servidor MCP é responsável por gerenciar funções específicas expostas como ferramentas (tools).</p><pre>from fastmcp import FastMCP<br><br># Criação do servidor MCP<br>server = FastMCP(&quot;Servidor de Teste&quot;)<br>server.dependencies = []  # Nenhuma dependência externa inicializada<br><br># Define uma ferramenta para somar dois números inteiros<br>@server.tool()<br>def somar(a: int, b: int) -&gt; int:<br>    &quot;&quot;&quot;Soma dois números inteiros. Exemplo de entrada: &#39;8 10&#39;&quot;&quot;&quot;<br>    if not isinstance(a, int) or not isinstance(b, int):<br>        raise ValueError(&quot;Os parâmetros devem ser números inteiros.&quot;)<br>    return a + b<br><br>if __name__ == &quot;__main__&quot;:<br>    server.run()</pre><h3>Explicação Detalhada</h3><ul><li>FastMCP: Classe utilizada para criar um servidor MCP.</li><li>@server.tool(): Decorador que transforma funções Python em ferramentas acessíveis remotamente.</li><li>Validações internas garantem a integridade dos dados.</li></ul><h3>💻 Desenvolvendo o Cliente com LangChain (client.py)</h3><p>O cliente interage com o servidor MCP e usa o modelo de linguagem OpenAI através do LangChain para processamento inteligente das solicitações.</p><pre>import os<br>import subprocess<br>from langchain.agents import initialize_agent, AgentType<br>from langchain.chat_models import ChatOpenAI<br>from langchain.tools import Tool<br><br># Configure a chave da API da OpenAI<br>os.environ[&quot;OPENAI_API_KEY&quot;] = &quot;sua-chave-api-aqui&quot;<br><br># Função que interage com o servidor MCP através de subprocessos<br>def chamar_mcp_ferramenta(input_str: str) -&gt; str:<br>    process = subprocess.Popen(<br>        [&#39;python&#39;, &#39;server.py&#39;],<br>        stdin=subprocess.PIPE,<br>        stdout=subprocess.PIPE,<br>        stderr=subprocess.PIPE,<br>        text=True<br>    )<br>    stdout, stderr = process.communicate(input_str)<br>    return stdout.strip()<br><br># Definição das ferramentas que o LangChain pode acessar<br>tools = [<br>    Tool(<br>        name=&quot;Somar&quot;,<br>        func=lambda x: chamar_mcp_ferramenta(f&quot;somar {x}&quot;),<br>        description=&quot;Soma dois números inteiros. Exemplo: &#39;8 10&#39;&quot;<br>    )<br>]<br><br># Inicialização do modelo de linguagem e do agente LangChain<br>llm = ChatOpenAI(temperature=0)<br>agent = initialize_agent(<br>    tools,<br>    llm,<br>    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,<br>    verbose=True<br>)<br><br># Exemplo prático do agente respondendo a uma pergunta<br>if __name__ == &quot;__main__&quot;:<br>    pergunta = &quot;Qual é a soma de 10 e 4?&quot;<br>    resposta = agent.run(pergunta)<br>    print(&quot;\n🤖 Resposta:&quot;, resposta)</pre><h3>Explicação Detalhada</h3><ul><li>Usa subprocess para comunicação inter-processos (IPC) com o servidor MCP.</li><li>Define ferramentas do LangChain que encapsulam chamadas ao servidor.</li><li>O modelo ChatOpenAI responde perguntas utilizando processamento de linguagem natural.</li></ul><h3>🚀 Executando a Aplicação</h3><p>Siga estes passos para executar o projeto:</p><p><strong>1. Inicie o servidor MCP:</strong></p><pre>fastmcp install .\server.py<br>fastmcp dev .\server.py</pre><p><strong>2. Em outro terminal, rode o cliente LangChain:</strong></p><pre>python3 .\client.py</pre><p>Você verá o agente realizar chamadas ao servidor MCP e retornar resultados processados pelo modelo de linguagem OpenAI.</p><h3>📖 Por que usar MCP e LangChain?</h3><ul><li><strong>Estrutura organizada e clara:</strong> Separação eficiente entre camadas do projeto.</li><li><strong>Reutilização facilitada:</strong> Ferramentas definidas no servidor podem ser reutilizadas e expandidas.</li><li><strong>Integração poderosa com IA:</strong> LangChain permite integrar facilmente modelos de IA avançados para tarefas complexas.</li><li><strong>Escalabilidade:</strong> Facilidade para expandir a aplicação conforme as necessidades aumentam.</li></ul><h3>📌 Conclusão</h3><p>Este guia proporcionou uma visão abrangente de como implementar uma aplicação robusta usando MCP, FastMCP e LangChain. Com esta base, você poderá criar projetos inovadores, eficientes e escaláveis.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=f8d9eb19fb76" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Padrão MVC com FastAPI]]></title>
            <link>https://medium.com/@ericksonlopes/padr%C3%A3o-mvc-com-fastapi-b726308f091?source=rss-9ea87c24d2f8------2</link>
            <guid isPermaLink="false">https://medium.com/p/b726308f091</guid>
            <category><![CDATA[fastapi]]></category>
            <category><![CDATA[mvc-architecture]]></category>
            <category><![CDATA[mvc]]></category>
            <category><![CDATA[python]]></category>
            <category><![CDATA[design-patterns]]></category>
            <dc:creator><![CDATA[Erickson Lopes]]></dc:creator>
            <pubDate>Mon, 27 Feb 2023 02:19:32 GMT</pubDate>
            <atom:updated>2023-09-18T15:03:55.920Z</atom:updated>
            <content:encoded><![CDATA[<p>O padrão MVC é usado em muitos tipos de aplicativos, como aplicativos web, desktop e móveis. Ele ajuda a separar a lógica de negócios da interface do usuário, tornando o código mais organizado e fácil de entender e manter. O padrão MVC também ajuda a promover a reutilização de código, pois as diferentes camadas podem ser desenvolvidas separadamente.</p><figure><img alt="view , controller, model" src="https://cdn-images-1.medium.com/max/380/1*K7aWuJAYlzmlmc0krbpZFw.gif" /></figure><p>A arquitetura de sistema com FastAPI pode conduzir um padrão de arquitetura MVC (Model-View-Controller) ou similar, onde a lógica de negócios (Model) é separada da interface do usuário (View) e controlada por um controlador (Controller).</p><figure><img alt="FastAPI MVC" src="https://cdn-images-1.medium.com/max/443/1*m8aL6GIZ88_sJ58mXSPXjA.png" /></figure><h3><strong><em>Models</em></strong></h3><blockquote>Representa os dados e as regras de negócios relacionadas a eles</blockquote><p>Responsável por lidar com a lógica de negócios do aplicativo e acessar os dados. Ela pode ser implementada usando uma biblioteca de ORM, como SQLAlchemy ou Tortoise ORM. Com o ORM, você pode definir os seus modelos de banco de dados como classes Python e, em seguida, interagir com o banco de dados usando essas classes.</p><pre># /models/car.py<br>from pydantic import BaseModel  <br>  <br>  <br>class Car(BaseModel):  <br>    id: str  <br>    name: str</pre><h3><strong><em>Controller</em></strong>:</h3><blockquote>Lida com a lógica de controle e gerencia as interações entre o modelo e a visualização.</blockquote><p>A camada do controlador é responsável por controlar o fluxo de dados entre o modelo e a visualização. Ela pode ser implementada como uma camada intermediária que recebe solicitações da visualização, chama a camada do modelo para obter dados e, em seguida, retorna uma resposta adequada à visualização.</p><pre># /controller/car_controller.py<br>from models.Car import Car  <br>  <br>  <br>class CarController:  <br>    @classmethod  <br>    async def get(cls) -&gt; Car:  <br>        return Car(id=&quot;1&quot;, name=&quot;BMW&quot;)</pre><h3><strong><em>Views</em></strong></h3><blockquote>Responsável pela apresentação dos dados ao usuário.</blockquote><p>É responsável por receber solicitações do cliente e retornar uma resposta adequada. Ela pode ser implementada usando rotas FastAPI que correspondem às URLs da API. A view pode chamar a camada do modelo para obter dados e, em seguida, usar um esquema FastAPI para serializar a resposta em um formato adequado, como JSON.</p><pre># /views/car_view.py<br>from fastapi import APIRouter  <br>  <br>from controllers.car_controller import CarController  <br>from models.Car import Car  <br>  <br><br>router_car = APIRouter()  <br>  <br><br>@router_car.get(&quot;/car&quot;, response_model=Car, summary=&quot;Get car&quot;)  <br>async def get_todos() -&gt; Car:  <br>    return await CarController().get()</pre><p>O arquivo main.py é o ponto de entrada para a aplicação FastAPI e configura o servidor e as rotas para todas as visualizações da API.</p><pre># main.py<br>from fastapi import FastAPI  <br>  <br>from views.car_view import router_car  <br>  <br>app = FastAPI()  <br>  <br>app.router.include_router(router_car, prefix=&quot;/api/v1&quot;, tags=[&quot;car&quot;])  <br>  <br>if __name__ == &quot;__main__&quot;:  <br>    import uvicorn  <br>  <br>    uvicorn.run(app, host=&quot;localhost&quot;, port=8000)</pre><p>Em resumo, o padrão MVC é uma maneira eficaz de organizar o código em sua aplicação FastAPI, separando a lógica de negócios (Model), as rotas e funções de manipulação de solicitações HTTP (Controller) e a exibição dos dados (View).</p><figure><img alt="Isso é tudo pessoal !" src="https://cdn-images-1.medium.com/max/498/1*Cx7ShkZZf-nWi6mYuTxqIQ.gif" /></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=b726308f091" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>