Como Construir um Sistema Inteligente para Filtrar Oportunidades e Gerar Propostas com Python e IA
Profissionais que dependem de plataformas de projetos e canais de contratação remota enfrentam um gargalo operacional comum: a triagem manual de centenas de publicações diárias e a elaboração individual de propostas direcionadas. Esse processo consome horas valiosas de trabalho técnico e muitas vezes resulta em propostas genéricas ou no envio tardio de respostas para projetos concorridos.
Neste artigo, você aprenderá como estruturar uma esteira de automação ponta a ponta com Python para monitorar novos projetos, calcular a compatibilidade semântica com o seu portfólio e gerar minutas de propostas contextuais e orientadas a resultados.
A Arquitetura da Solução
Para construir um fluxo resiliente e de baixo consumo de recursos, dividimos o sistema em quatro componentes principais:
- Camada de Ingestão de Dados: Coleta contínua de oportunidades via feeds RSS, webhooks ou APIs públicas de murais de projetos.
- Motor de Similaridade Semântica (Embeddings): Avaliação vetorial para comparar a descrição do projeto com o portfólio cadastrado.
- Módulo de Filtragem e Score: Descarte de projetos irrelevantes antes do acionamento de modelos generativos, minimizando custos de API.
- Gerador Contextual de Propostas: Execução de prompts com LLMs utilizando dados do projeto aprovado e dos estudos de caso mais relevantes.
│
▼
[Embeddings + Vetorização] ──► [Base de Conhecimento / Portfólio] │
▼
[Score de Compatibilidade > Limiar?] ├── Não ──► [Descarte silencioso] └── Sim ──► [LLM Pipeline] ──► [Proposta Personalizada no Notion/Slack]
Implementando a Triagem Vetorial em Python
A abordagem mais eficiente para filtrar projetos não envolve expressões regulares estáticas, mas sim busca semântica. Ao converter a descrição do projeto e cada item do seu portfólio em vetores densos, o sistema calcula a distância de cosseno entre eles.
1. Preparação do Portfólio e Cálculo de Similaridade
python
import numpy as np
from sentence_transformers import SentenceTransformer
Carregamento do modelo de embedding local e leve
model = SentenceTransformer(“all-MiniLM-L6-v2”)
portfolio_cases = [
{
“id”: 1,
“titulo”: “Pipeline ETL com PySpark e AWS”,
“conteudo”: “Construção de arquitetura de dados escalável para processamento de 2TB/dia com Airflow e Redshift.”
},
{
“id”: 2,
“titulo”: “Automação Web e Agentes de Extração”,
“conteudo”: “Desenvolvimento de scrapers distribuídos em Python com Scrapy, Playwright e tolerância a falhas.”
}
]
Vetorização do portfólio
for item in portfolio_cases:
item[“vetor”] = model.encode(item[“conteudo”])
def calcularcompatibilidade(descricaoprojeto: str, portfolio: list, limiar: float = 0.55):
vetorprojeto = model.encode(descricaoprojeto)
melhores_matches = []
for item in portfolio:
# Similaridade de cosseno
score = np.dot(vetor_projeto, item["vetor"]) / (
np.linalg.norm(vetor_projeto) * np.linalg.norm(item["vetor"])
)
if score >= limiar:
melhores_matches.append((score, item))
melhores_matches.sort(key=lambda x: x[0], reverse=True)
return melhores_matches
Com essa estratégia, projetos que demandam habilidades não dominadas são filtrados na borda, sem gastar tokens com chamadas a APIs pagas.
Geração Direcionada da Proposta
Assim que o projeto atinge o score mínimo e os casos de sucesso correlacionados são selecionados, montamos uma chamada contextual para um modelo de linguagem via API. A saída deve ser um rascunho acionável, destacando resolução de problemas anteriores.
python
import os
from openai import OpenAI
client = OpenAI(apikey=os.getenv(“OPENAIAPI_KEY”))
def gerarminutaproposta(projetotexto: str, casoreferencia: dict) -> str:
prompt_sistema = (
“Você é um assistente técnico sênior responsável por redigir propostas objetivas. “
“Não utilize jargões vagos nem elogios desnecessários. Foque na arquitetura proposta, “
“em prazos estimativos e em como o caso correlato resolve um problema análogo.”
)
prompt_usuario = f"""
Projeto Solicitado:
{projeto_texto}
Estudo de Caso do Meu Portfólio:
Título: {caso_referencia['titulo']}
Resumo: {caso_referencia['conteudo']}
Gere uma proposta direta em 3 seções curtas:
1. Entendimento do Desafio Técnico
2. Abordagem Proposta e Tecnologias
3. Prova de Execução (baseada no estudo de caso)
"""
resposta = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": prompt_sistema},
{"role": "user", "content": prompt_usuario}
],
temperature=0.3
)
return resposta.choices[0].message.content
Orquestração e Envio para Revisão
Como especialista em IA e engenharia de software, recomendo adotar o padrão Human-in-the-Loop antes de qualquer envio definitivo. Em vez de enviar automaticamente a proposta para a plataforma ou cliente, o sistema deve disparar uma notificação via webhook para ferramentas como Slack, Discord ou Telegram com botões de aprovação e edição rápida.
Esse formato combina a velocidade da extração e da síntese por IA com o julgamento crítico necessário para negociações de alto valor.
Próximos Passos: Da Automação Básica à Infraestrutura Robusta
Para transformar este script em um microsserviço de produção:
- Implemente PostgreSQL com pgvector para armazenar centenas de estudos de caso e projetos já processados, evitando duplicidade.
- Adicione Celery ou Redis Queue para processamento assíncrono das tarefas de scraping e geração de texto.
- Monitore o retorno financeiro relacionando as propostas enviadas com a taxa de conversão final para refinar o prompt.
Se a sua equipe ou consultoria precisa acelerar o ciclo de vendas técnicas e implementar uma infraestrutura customizada de triagem e geração de propostas com IA, entre em contato para estruturarmos uma solução alinhada ao seu fluxo de trabalho.


