Provavelmente, você já ouviu falar sobre CursorCopilotCodex ou qualquer editor que utilize agentes e se pegou pensando em como aquilo funciona. Bom, a melhor forma de entender algo é fazendo!

O mundo é dos fazedores

O que vamos codificar?

A ideia é desenvolver uma Command Line Interface (CLI) que funcionará como uma interface conversacional e de execução de tarefas, interagindo com um Large Language Model (LLM). O funcionamento se dará da seguinte forma:

graph TD
	A[Usuário: Faz um pedido] --> B(LLM: Cria um plano de ação);
	B --> C{Plano completo?};
	C -- Não --> D[LLM: Seleciona uma ferramenta];

	subgraph FERRAMENTAS
		direction LR
			E1[Analisar diretório]
			E2[Ler arquivo]
			E3[Escrever arquivo]
			E4[Executar programa]
	end

	D --> F[Executa a ação];
	F --> G{Verifica resultado da tarefa};
	G -- Sucesso --> C;
	G -- Falha --> D;
	C -- Sim --> H[FIM];

O primeiro passo

AAntes de mais nada, precisamos decidir qual linguagem iremos utilizar. Eu vou seguir na minha zona de conforto e prosseguir com Python. Escolha a qual você quiser! Tudo poderá ser replicado em outras linguagens, afinal, teremos todos os desenhos arquiteturais definidos.

Criando nosso projeto e configurando o ambiente

Para iniciarmos o projeto, usaremos o uv:

uv init xabironelson-codex
cd xabironelson-codex

Agora, para criarmos nosso ambiente virtual:

uv venv

Calma lá, capitão

Pô, ninguém nunca tinha me avisado para não colocar o venv no .gitignore. O resultado? O repositório atingiu quatro giba e foi só dor e sofrimento. Para não cometer o mesmo erro do amigo, repita comigo: Sempre coloque o venv no .gitignore!

Ativemos nosso ambiente:

source .venv/bin/activate

Verifique se o ambiente está ativo. Estando tudo certo, vamos adicionar as dependências:

uv add python-dotenv
uv add pydantic
uv add typer

Abençoando o role

Bom, dado que criamos o nosso ambiente virtual, o ativamos e adicionamos algumas dependências agora é só rodar

uv run main.py

Se tudo estiver certo, você verá

Hello from Xabironelson Codex