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.
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.
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.
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.
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.
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.
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.
A análise do repositório revela diversas boas práticas de engenharia de software e arquitetura de LLMs:
- 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.
- Segurança de Tipos (Type Safety): O uso da estrutura
PydanticOutputParserpara 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. - Eficiência de Custos e Performance: A escolha do modelo
llama-3.1-8b-instantvia 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. - 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.
- 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.
Para colocar o Chatbot DevCareer em funcionamento em seu ambiente local, siga as instruções abaixo.
- 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.
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-devcareerO 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É 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.txtO projeto já inclui o arquivo api.py configurado para o FastAPI. Para iniciar o servidor, execute o seguinte comando via Uvicorn:
uvicorn api:app --reloadPor 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/