Skip to content

API de Chat com Agente de IA (Ollama) e Ferramentas Matemáticas. Desenvolvido com FastAPI e Clean Architecture para o desafio técnico da DreamSquad.

Notifications You must be signed in to change notification settings

skyzinha-chan/dream-agent-api

Repository files navigation

🧠 DreamSquad AI Agent Challenge

Este projeto implementa uma API de Chat inteligente utilizando FastAPI e um Agente de IA local (via Ollama) capaz de decidir autonomamente quando utilizar ferramentas externas (Calculadora).

Desenvolvido como parte do processo seletivo para a DreamSquad.

🚀 Tecnologias Utilizadas

  • Python 3.10+
  • FastAPI: Framework web moderno e de alta performance.
  • Ollama: Para execução de LLMs (Large Language Models) localmente.
  • Strands Agents SDK (Simulado): Orquestração do agente.
  • Pydantic: Validação de dados e settings management.

📂 Arquitetura do Projeto

O projeto segue princípios de Clean Architecture para garantir escalabilidade e fácil manutenção:

dream-agent-api/
├── app/
│   ├── __init__.py
│   ├── main.py             # Ponto de entrada da aplicação (FastAPI app)
│   ├── api/
│   │   ├── __init__.py
│   │   └── routes.py       # Definição do endpoint /chat
│   ├── core/
│   │   ├── __init__.py
│   │   └── config.py       # Carregamento de variáveis de ambiente (.env)
│   ├── agent/
│   │   ├── __init__.py
│   │   ├── engine.py       # Configuração do Agente Strands e conexão com Ollama
│   │   └── tools.py        # A lógica da Tool de Cálculo Matemático
│   └── schemas/
│       ├── __init__.py
│       └── chat.py         # Modelos Pydantic (Input/Output JSON)
├── .env                    # Chaves e configurações (NÃO SOBE PRO GIT)
├── teste_conexao.py
├── teste_api.py
├── .gitignore              # Arquivos ignorados 
├── requirements.txt        # Dependências do projeto 
└── README.md               # Instruções de uso

🔄 Fluxo de Dados

O diagrama abaixo ilustra como o Agente decide entre responder diretamente ou usar a ferramenta de cálculo:

sequenceDiagram
    participant User as Usuário
    participant API as FastAPI Endpoint
    participant Agent as Dream Agent
    participant Tool as Calculadora (Tool)
    participant LLM as Ollama (Llama 3.2)

    User->>API: POST /chat ("Quanto é 10 * 10?")
    API->>Agent: Processar Mensagem
    Agent->>LLM: Analisa intenção
    alt Precisa de Cálculo
        LLM-->>Agent: Solicita uso da Tool (CALC: 10 * 10)
        Agent->>Tool: Executa cálculo
        Tool-->>Agent: Retorna "100"
        Agent->>LLM: Gera resposta final com o resultado
    else Conversa Normal
        LLM-->>Agent: Resposta direta
    end
    Agent-->>API: Resposta Final
    API-->>User: JSON Response
Loading

⚙️ Pré-requisitos

  • Python 3.10 ou superior instalado.

  • Ollama instalado e rodando.

Configuração do Ollama (Obrigatório). O projeto depende do modelo llama3.2.

Execute no seu terminal:

# 1. Baixe e instale o Ollama em [https://ollama.com/](https://ollama.com/)
# 2. No terminal, baixe o modelo:
ollama run llama3.2
# 3. Mantenha o serviço do Ollama rodando em segundo plano.

🎨 Interface Gráfica (Front-end)

Além da API, o projeto inclui uma interface de chat interativa desenvolvida com Streamlit.

Para rodar a interface:

  1. Mantenha a API rodando em um terminal (uvicorn app.main:app).
  2. Em um novo terminal, execute:
    streamlit run app/frontend.py

🛠️ Instalação e Execução

  1. Clone o repositório (ou extraia os arquivos)
git clone https://github.com/skyzinha-chan/dream-agent-api.git
cd dream-agent-api
  1. Crie o Ambiente Virtual
# Windows
python -m venv venv
.\venv\Scripts\activate

# Linux/Mac/Git Bash
python -m venv venv
source venv/bin/activate (ou source venv/Scripts/activate no Git Bash)
  1. Instale as Dependências
pip install -r requirements.txt
  1. Configure as Variáveis de Ambiente Crie um arquivo .env na raiz do projeto com base no exemplo abaixo:
PROJECT_NAME="DreamSquad AI Agent"
VERSION="1.0.0"
OLLAMA_BASE_URL="http://localhost:11434"
OLLAMA_MODEL="llama3.2"
  1. Execute a API
uvicorn app.main:app --reload

Acesse a documentação automática (Swagger) em: http://localhost:8000/docs

🧪 Como Testar

Você pode testar usando o Swagger UI (/docs) ou via cURL:

Cenário 1: Conversa Geral

curl -X POST "http://localhost:8000/chat" \
     -H "Content-Type: application/json" \
     -d '{"message": "Quem foi Albert Einstein?"}'

Cenário 2: Uso de Tool (Cálculo) O agente identificará a necessidade matemática e usará a tool calculate_tool.

curl -X POST "http://localhost:8000/chat" \
     -H "Content-Type: application/json" \
     -d '{"message": "Quanto é 1234 * 5678?"}'

🔮 Roadmap e Melhorias Futuras

Se este projeto fosse para produção em larga escala na DreamSquad, estas seriam as próximas etapas de evolução que eu implementaria:

  1. Containerização (Docker):

    • Criar um Dockerfile para garantir que a aplicação rode igual em qualquer máquina ou servidor.
  2. Deploy em Nuvem (AWS):

    • Como a aplicação é Stateless, seria ideal hospedá-la na AWS usando ECS (Elastic Container Service) ou App Runner.
    • Para o modelo de IA, poderíamos migrar do Ollama local para o Amazon Bedrock, aproveitando a infraestrutura gerenciada de IA da AWS.
  3. Implementação de RAG (Retrieval-Augmented Generation):

    • Expandir as capacidades do Agente para consultar bases de dados internas (ex: PDFs ou Manuais da empresa) antes de responder, conectando o Agente a um Banco Vetorial (como FAISS ou Pinecone).
  4. Testes Automatizados:

    • Implementar testes unitários com pytest para garantir a estabilidade das Tools e da API.

About

API de Chat com Agente de IA (Ollama) e Ferramentas Matemáticas. Desenvolvido com FastAPI e Clean Architecture para o desafio técnico da DreamSquad.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published