Skip to content

Repository files navigation

Chatbot DevCareer


1. Visão Geral do Projeto

O DevCareer é um chatbot inteligente projetado para atuar como um mentor de carreira na área de tecnologia. Desenvolvido utilizando a linguagem Python e o framework LangChain, o sistema foi arquitetado para auxiliar profissionais e estudantes a navegarem pelo universo tech, oferecendo orientações personalizadas sobre aprendizado, áreas de atuação e preparação para processos seletivos.

A aplicação expõe suas funcionalidades por meio de uma API RESTful, permitindo fácil integração com interfaces web, aplicativos móveis ou outros sistemas. A stack tecnológica principal é composta por FastAPI para a camada de transporte, LangChain para a orquestração da lógica da aplicação, e o modelo de linguagem Llama 3.1 (hospedado via Groq) como o motor de inteligência artificial.


2. Arquitetura e Escolhas de Design

A arquitetura do DevCareer adota uma abordagem modular e baseada em padrões de orquestração modernos do ecossistema LangChain. Abaixo, detalhamos as decisões de design mais importantes.

2.1 Roteamento Inteligente (Router Chain)

O coração da aplicação reside em seu sistema de roteamento. Ao invés de direcionar todas as perguntas do usuário para um único modelo monolítico, o sistema implementa um Router Chain que classifica a intenção da pergunta antes de processá-la.

Para essa classificação, o projeto utiliza o PydanticOutputParser do LangChain. O modelo de LLM é instruído a analisar a query do usuário e o histórico da conversa para mapear a intenção para uma das cinco categorias predefinidas. A escolha de utilizar uma temperatura de 0.0 para o modelo classificador é fundamental, pois garante que a saída seja determinística e livre de alucinações criativas, focando exclusivamente na categorização estruturada.

Categoria Descrição
1 Linguagens de Programação e Frameworks
2 Áreas de Desenvolvimento (Front-end, Back-end, etc.)
3 Preparação para Entrevistas e Processos Seletivos
4 Recursos de Estudo e Metodologias
5 Tópicos Gerais sobre o Mercado de Trabalho

Após a classificação, o sistema utiliza a estrutura de pattern matching (match/case) do Python para despachar a requisição para a chain especializada correspondente.

2.2 Separação por Responsabilidade (Chains Especializadas)

Uma das escolhas arquiteturais mais elegantes do projeto é a separação de concerns por meio de chains independentes. O repositório contém cinco módulos distintos (como chain_programming_language.py e chain_interview_preparation.py), cada um representando um domínio específico de conhecimento.

Cada chain é uma pipeline do LangChain composta por um ChatPromptTemplate (com um system prompt altamente especializado para aquele tópico), o modelo de LLM e um StrOutputParser. Essa abordagem permite que cada domínio tenha seu próprio "persona" e regras de negócio embutidas no prompt, sem a necessidade de instruções condicionais complexas dentro de um único prompt gigante. Isso facilita a manutenção, o ajuste fino de cada área e o isolamento de testes.

2.3 Gestão de Memória e Histórico

Para garantir que o chatbot mantenha o contexto de conversas anteriores, o sistema implementa um gerenciador de memória robusto. A escolha do banco de dados SQLite (via aiosqlite para operações assíncronas) demonstra uma preferência por leveza e facilidade de deployment.

O projeto utiliza RunnableWithMessageHistory para encapsular a cadeia principal. Além disso, implementa uma estratégia de truncamento inteligente do histórico utilizando trim_messages(strategy="last", max_tokens=10). Isso é crucial para aplicações com modelos de janela de contexto limitada, pois evita erros de "out-of-bounds" e controla custos, mantendo sempre as mensagens mais recentes na memória.

2.4 Composição Funcional com LCEL

A orquestração do fluxo de dados é realizada utilizando LangChain Expression Language (LCEL). O código no arquivo main.py demonstra uma composição declarativa elegante:

RunnablePassthrough.assign(history=itemgetter("history") | trimmer) | RunnableParallel({"input": itemgetter("input"), "history": itemgetter("history"), "option": chain_classifier}) | RunnableLambda(classify_route)

Essa cadeia conecta a recuperação do histórico, a poda de tokens, a execução paralela do classificador e a execução da chain especializada escolhida. O uso de LCEL torna o código mais legível e facilita a adição de operações futuras (como logging ou callbacks) sem alterar a lógica de negócios.

2.5 Exposição como API REST

A camada de serviço é construída sobre FastAPI, utilizando o pacote langserve para expor a chain como uma API pronta para produção. O arquivo api.py é extremamente conciso, configurando o aplicativo FastAPI e adicionando as rotas automaticamente na rota /chat. Isso fornece suporte nativo para Server-Sent Events (SSE), permitindo que o frontend implemente o streaming das respostas do modelo.


3. Pontos Positivos Destacados

A análise do repositório revela diversas boas práticas de engenharia de software e arquitetura de LLMs:

  1. Modularidade e Baixo Acoplamento: A decisão de separar o classificador das chains de resposta e dividir cada domínio em seu próprio arquivo Python torna a base de código altamente modular. É trivial adicionar uma nova categoria ou modificar o comportamento de uma existente sem arriscar regressões em outras áreas.
  2. Segurança de Tipos (Type Safety): O uso da estrutura PydanticOutputParser para o roteamento garante que o sistema lide com dados estruturados, eliminando a necessidade de processamento de texto bruto (regex) para determinar a intenção do usuário.
  3. Eficiência de Custos e Performance: A escolha do modelo llama-3.1-8b-instant via Groq oferece um excelente custo-benefício. É um modelo rápido e suficientemente inteligente para tarefas de classificação e mentoria geral, mantendo a latência baixa.
  4. Gestão de Contexto: O uso de truncamento de histórico demonstra uma preocupação real com a escalabilidade e os limites técnicos dos modelos de linguagem, garantindo que a aplicação não falhe em conversas longas.
  5. Simplicidade Operacional: A infraestrutura necessária para rodar o projeto é mínima (apenas Python, dependências e o SQLite), facilitando o onboarding de novos desenvolvedores e o deployment em ambientes de produção.

4. Passo a Passo de Execução

Para colocar o Chatbot DevCareer em funcionamento em seu ambiente local, siga as instruções abaixo.

Pré-requisitos

  • Python: Versão 3.10 ou superior instalada no sistema.
  • Git: Para clonar o repositório.
  • Chave de API Groq: Você precisará de uma conta na plataforma Groq e uma API Key gerada em console.groq.com.

1. Clonagem do Repositório

Abra seu terminal e clone o projeto para a sua máquina local:

git clone https://github.com/Gsn00/api-chatbot-devcareer.git
cd api-chatbot-devcareer

2. Configuração das Variáveis de Ambiente

O projeto utiliza a biblioteca python-dotenv para gerenciar segredos. Você deve criar um arquivo .env na raiz do projeto com sua chave da API Groq.

echo "GROQ_API_KEY=gsk_sua_chave_api_aqui" > .env

3. Instalação de Dependências

É altamente recomendado utilizar um ambiente virtual para isolar as dependências.

# Criação do ambiente virtual (opcional, mas recomendado)
python -m venv venv

# Ativação do ambiente virtual
# No Linux/Mac:
source venv/bin/activate
# No Windows:
# .\venv\Scripts\activate

# Instalação das dependências
pip install -r requirements.txt

4. Execução do Servidor

O projeto já inclui o arquivo api.py configurado para o FastAPI. Para iniciar o servidor, execute o seguinte comando via Uvicorn:

uvicorn api:app --reload

Por padrão, o servidor será iniciado na porta 8000 e o LangServe disponibilizará uma interface web interativa para testes no endereço: http://localhost:8000/chat/playground/

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages