Ubuntu TechHive

Pi Coding Agent - Architecture and Hands-on Guide

Pi Coding Agent - Architecture and Hands-on Guide

Pi é um agente de codificação de IA minimalista e extensível que roda principalmente no terminal.

Pi Coding Agent - Arquitetura e Guia Prático

O que é o Pi Coding Agent?

O Pi é um agente de codificação de IA minimalista e extensível que roda principalmente no terminal.

Ele permite que desenvolvedores usem grandes modelos de linguagem (LLMs) para interagir com seu ambiente de desenvolvimento local.

O Pi pode:

  • Ler e entender códigos existentes.
  • Criar novos arquivos e aplicações.
  • Modificar códigos existentes.
  • Executar comandos de terminal.
  • Rodar testes e depurar erros.
  • Gerenciar o histórico de conversas.
  • Conectar-se a diferentes provedores de LLM.
  • Estender suas capacidades com ferramentas e habilidades personalizadas.
  • Integrar serviços externos via MCP.

O Pi é um exemplo de um "Agent Harness" (infraestrutura de agente).

O que é um Agent Harness?

Um Agent Harness é a infraestrutura de software que envolve um modelo de linguagem, permitindo que ele execute ações.

A infraestrutura é responsável por:

  • Construir o contexto do modelo.
  • Comunicar-se com o LLM.
  • Fornecer ferramentas ao LLM.
  • Executar as chamadas de ferramentas solicitadas.
  • Retornar os resultados das ferramentas ao modelo.
  • Gerenciar conversas e sessões.
  • Controlar o ciclo de vida da execução.

O LLM fornece as capacidades de raciocínio.

A infraestrutura fornece o ambiente no qual esse raciocínio pode ser traduzido em ações.

Pi vs. um Chatbot Tradicional

Um chatbot tradicional geralmente segue este padrão:

flowchart LR
    A["Usuário"] --> B["Prompt"]
    B --> C["LLM"]
    C --> D["Resposta"]

Um agente de codificação de IA adiciona um ambiente de execução:

flowchart TD
    A["Usuário"] --> B["Agente Pi"]
    B --> C["LLM"]
    C --> D{"Ferramenta necessária?"}
    D -->|Sim| E["Executar Ferramenta"]
    E --> F["Retornar Resultado"]
    F --> C
    D -->|Não| G["Resposta Final"]

Exemplo:

Chatbot: "Aqui está o código Python que calcula despesas."

Pi: "Eu criei os arquivos Python, executei o programa, rodei os testes e corrigi um erro."

A diferença importante é a capacidade de interagir com um ambiente real.

Filosofia de Design do Pi

O Pi segue uma filosofia minimalista.

Em vez de fornecer todos os recursos possíveis como parte de sua implementação principal, ele enfatiza a extensibilidade.

A ideia norteadora é:

"Adapte o Pi ao seu fluxo de trabalho, não o contrário."

Princípios Fundamentais

Minimalismo:

  • Mantenha o núcleo relativamente pequeno.
  • Evite abstrações desnecessárias.
  • Construa sobre ferramentas existentes do sistema operacional.

Extensibilidade:

  • Crie ferramentas personalizadas.
  • Construa extensões.
  • Use habilidades reutilizáveis.
  • Conecte serviços externos.

Independência de Modelo:

  • Use diferentes provedores de LLM.
  • Troque de modelos dentro do mesmo ambiente.
  • Compare o comportamento dos modelos.

Transparência:

  • Observe as respostas do modelo.
  • Inspecione as execuções de ferramentas.
  • Revise as modificações.
  • Examine o histórico da sessão.

O que o Pi Não Requer

Uma configuração básica do Pi não requer:

  • Um banco de dados vetorial.
  • Um servidor de orquestração separado.
  • Kubernetes.
  • Docker.
  • Uma estrutura multi-agente complexa.
  • Uma aplicação de backend personalizada.

Para uma demonstração básica, um terminal, um LLM suportado e um diretório local são suficientes.

Visão Geral da Arquitetura do Pi

O Pi contém várias camadas lógicas.

Arquitetura de Alto Nível

flowchart TB
    USER["Desenvolvedor"]

    subgraph PI["Pi Coding Agent"]
        UI["Interface de Terminal"]
        CORE["Runtime do Agente"]
        CONTEXT["Gerenciador de Contexto"]
        SESSION["Gerenciador de Sessão"]
        TOOLS["Execução de Ferramentas"]
        EXT["Extensões / Habilidades"]
        API["Abstração de API de LLM"]
    end

    subgraph MODELS["Provedores de LLM"]
        OPENAI["OpenAI"]
        ANTHROPIC["Anthropic"]
        GOOGLE["Google"]
        LOCAL["Modelos Locais"]
    end

    subgraph SYSTEM["Ambiente de Desenvolvimento"]
        FILES["Sistema de Arquivos"]
        BASH["Shell"]
        GIT["Git"]
        TESTS["Testes"]
    end

    USER <--> UI
    UI <--> CORE

    CORE <--> CONTEXT
    CORE <--> SESSION
    CORE <--> TOOLS
    CORE <--> API

    EXT --> CORE

    API <--> OPENAI
    API <--> ANTHROPIC
    API <--> GOOGLE
    API <--> LOCAL

    TOOLS <--> FILES
    TOOLS <--> BASH
    TOOLS <--> GIT
    TOOLS <--> TESTS

Esta é uma arquitetura conceitual, mostrando as principais responsabilidades em vez de cada dependência interna.

Pacotes Internos do Pi

O Pi é desenvolvido como uma coleção de pacotes TypeScript.

pi-ai

Uma interface unificada para trabalhar com diferentes provedores de LLM.

Responsabilidades:

  • Requisições de modelo.
  • Respostas de modelo.
  • Streaming.
  • Integrações específicas de provedores.
  • Representação de chamadas de ferramentas.

pi-agent-core

O runtime do agente.

Responsabilidades:

  • Loop de execução do agente.
  • Chamada de ferramentas.
  • Estado do agente.
  • Manipulação de mensagens.
  • Eventos de execução.

pi-coding-agent

A aplicação do agente de codificação.

Responsabilidades:

  • CLI.
  • Ferramentas de codificação.
  • Sessões.
  • Arquivos de contexto.
  • Extensões.
  • Habilidades.
  • Configuração do usuário.

pi-tui

Componentes da Interface de Usuário do Terminal.

Responsabilidades:

  • Renderização de terminal.
  • Manipulação de entrada.
  • Componentes interativos.
  • Exibição da atividade do agente.

Relacionamento entre Pacotes

flowchart TD
    USER["Desenvolvedor"]
    TUI["pi-tui"]
    CODING["pi-coding-agent"]
    CORE["pi-agent-core"]
    AI["pi-ai"]
    LLM["Provedores de LLM"]

    USER <--> TUI
    TUI <--> CODING
    CODING <--> CORE
    CORE <--> AI
    AI <--> LLM

    CODING --> FS["Ferramentas"]
    CODING --> SESSION["Sessões"]
    CODING --> EXT["Extensões"]

A mesma infraestrutura de agente também pode ser usada por meio de interfaces não interativas.

Como o Pi Funciona

O Pi segue um ciclo de interação repetido entre o usuário, o runtime do agente, o modelo de linguagem e as ferramentas.

Isso é comumente chamado de Loop do Agente.

Passo 1 - O Usuário Envia uma Solicitação

Exemplo:

"Crie uma aplicação Python que rastreie despesas."

O Pi recebe esta solicitação através de sua interface de terminal.

Passo 2 - Montagem do Contexto

Antes de contatar o LLM, o Pi prepara o contexto.

Isso pode incluir:

  • Instruções do sistema.
  • Solicitação do usuário.
  • Histórico de conversa ativo.
  • Ferramentas disponíveis.
  • Instruções de projeto do AGENTS.md.
  • Descrições de habilidades.
  • Conteúdo de arquivos relevantes.
  • Configuração do modelo.

O ramo da sessão ativa determina quais mensagens históricas são incluídas.

Passo 3 - Solicitação ao Modelo

O Pi envia a solicitação preparada para o provedor de LLM selecionado.

O LLM pode produzir:

  • Texto em linguagem natural.
  • Chamadas de ferramentas estruturadas.
  • Uma combinação de ambos.

Exemplo de solicitação de ferramenta:

Ferramenta: write Arquivo: expenses.py Conteúdo: Código-fonte Python

O LLM não escreve o arquivo diretamente.

Ele solicita que o Pi execute a operação.

Passo 4 - Execução da Ferramenta

O Pi recebe a chamada de ferramenta solicitada.

O executor de ferramentas realiza a ação.

Exemplos:

  • Ler um arquivo.
  • Escrever um arquivo.
  • Modificar código.
  • Executar um comando shell.

O Pi então captura o resultado.

Passo 5 - Retorno dos Resultados da Ferramenta

A saída é retornada ao runtime do agente.

Exemplo:

Ferramenta: bash Comando: python expenses.py

Resultado: Traceback: NameError …

O resultado torna-se parte do contexto disponível para o LLM.

Passo 6 - Continuar ou Finalizar

O LLM pode decidir:

  • Chamar outra ferramenta.
  • Modificar o código.
  • Rodar testes adicionais.
  • Fornecer uma resposta final.

O Pi repete o processo enquanto mais execução for necessária.

Esta interação é a base do comportamento agentico.

Diagrama Completo do Loop do Agente

flowchart TD
    START["Solicitação do Usuário"]
    CTX["Construir Contexto"]
    CALL["Chamar LLM"]
    RESPONSE["Receber Resposta do Modelo"]
    DECISION{"Chamadas de Ferramentas?"}
    EXEC["Executar Ferramentas"]
    RESULT["Coletar Resultados das Ferramentas"]
    FINISH["Resposta Final"]

    START --> CTX
    CTX --> CALL
    CALL --> RESPONSE
    RESPONSE --> DECISION

    DECISION -->|Sim| EXEC
    EXEC --> RESULT
    RESULT --> CALL

    DECISION -->|Não| FINISH

Diagrama de Sequência

sequenceDiagram
    autonumber
    actor Usuário
    participant Pi as Agente Pi
    participant LLM
    participant Tools as Ferramentas
    participant OS as Sistema Operacional

    Usuário->>Pi: Crie um rastreador de despesas
    Pi->>Pi: Montar contexto
    Pi->>LLM: Enviar prompt e definições de ferramentas

    LLM-->>Pi: Solicitar ferramenta write
    Pi->>Tools: write expenses.py
    Tools->>OS: Criar arquivo
    OS-->>Tools: Sucesso
    Tools-->>Pi: Resultado da ferramenta

    Pi->>LLM: Continuar com o resultado
    LLM-->>Pi: Solicitar ferramenta bash
    Pi->>Tools: Rodar programa Python
    Tools->>OS: Executar comando
    OS-->>Tools: Saída
    Tools-->>Pi: Resultado da execução

    Pi->>LLM: Continuar
    LLM-->>Pi: Resposta final
    Pi-->>Usuário: Tarefa concluída

Por que isso é importante

Três responsabilidades são separadas:

  1. LLM: Gera raciocínio e propõe ações.
  2. Agent Harness: Coordena a execução e gerencia o contexto.
  3. Ferramentas: Realizam operações no ambiente.

Esta arquitetura também é fundamental para muitas outras implementações de agentes de IA.

Ferramentas no Pi

A configuração de codificação minimalista do Pi usa quatro ferramentas fundamentais.

read

Ler o conteúdo de arquivos.

Exemplo de prompt:

"Leia app.py e explique sua estrutura."

write

Criar ou sobrescrever arquivos.

Exemplo de prompt:

"Crie um programa Python que imprima Hello TechHive."

edit

Modificar arquivos existentes.

Exemplo de prompt:

"Modifique o programa para aceitar um nome de usuário."

bash

Executar comandos shell.

Exemplo de prompt:

"Execute o programa e exiba o resultado."

Exemplo de Execução de Ferramenta

flowchart TD
    A["Usuário: Corrija o bug"]
    B["LLM analisa a solicitação"]
    C["read: Inspecionar código"]
    D["edit: Corrigir código"]
    E["bash: Rodar testes"]
    F{"Testes passaram?"}
    G["Resposta final"]

    A --> B
    B --> C
    C --> D
    D --> E
    E --> F
    F -->|Não| B
    F -->|Sim| G

Ferramentas integradas adicionais e extensões podem estar disponíveis dependendo da versão e configuração.

Gerenciamento de Contexto e Sessões

O que é Contexto?

Contexto é a informação fornecida ao LLM para uma solicitação de modelo.

Pode incluir:

  • Solicitação atual do usuário.
  • Histórico de conversa.
  • Resultados de ferramentas.
  • Instruções do sistema.
  • Instruções do projeto.
  • Descrições de habilidades.
  • Conteúdo de arquivos referenciados.

O Pi não carrega automaticamente todos os arquivos de um repositório para o contexto do LLM.

Ele seleciona e monta o contexto com base na sessão e nos recursos configurados.

AGENTS.md

AGENTS.md é um arquivo de instruções do projeto.

Exemplo:

# Instruções do Projeto

Este projeto é para um workshop de agente de codificação.

Diretrizes:
- Use Python.
- Prefira a biblioteca padrão.
- Mantenha o código simples.
- Escreva funções legíveis.
- Adicione testes para novos recursos.
- Explique mudanças importantes.

Essas instruções ajudam a guiar o comportamento do agente dentro do projeto.

Sessões

O Pi mantém sessões de conversa.

As sessões podem incluir:

  • Mensagens do usuário.
  • Mensagens do assistente.
  • Chamadas de ferramentas.
  • Resultados de ferramentas.
  • Mudanças de modelo.
  • Eventos de compactação de contexto.

Sessões persistentes usam arquivos JSONL.

Ramificação de Sessão

O Pi suporta uma estrutura de conversa baseada em árvore.

flowchart TD
    A["Iniciar Sessão"]
    B["Criar Aplicação"]
    C["Adicionar Armazenamento de Dados"]

    D["Abordagem CSV"]
    E["Abordagem SQLite"]

    F["Testar CSV"]
    G["Testar SQLite"]

    A --> B
    B --> C
    C --> D
    C --> E
    D --> F
    E --> G

Ramificações permitem a exploração de abordagens alternativas a partir de estados anteriores da conversa.

Compactação de Contexto

Conversas longas podem exceder a janela de contexto de um modelo.

O Pi pode resumir contextos mais antigos para reduzir a quantidade de informações enviadas em futuras solicitações de modelo.

Comando:

/compact

A compactação ajuda a gerenciar o tamanho do contexto, mas pode perder alguns detalhes de mensagens mais antigas.

As entradas originais da sessão podem permanecer no histórico de sessão armazenado.

Provedores de Modelo

O Pi pode trabalhar com múltiplos provedores de LLM.

Exemplos:

  • OpenAI.
  • Anthropic.
  • Google.
  • Outros provedores suportados.
  • Modelos locais configurados.

Independência de Modelo

flowchart TD
    USER["Desenvolvedor"]
    PI["Agente Pi"]
    API["Interface Unificada de Modelo"]

    USER --> PI
    PI --> API

    API --> A["OpenAI"]
    API --> B["Anthropic"]
    API --> C["Google"]
    API --> D["Modelo Local"]

Vantagens:

  • Flexibilidade.
  • Comparação de modelos.
  • Escolha de provedor.
  • Otimização de custos.
  • Experimentação.

As capacidades e a compatibilidade dos modelos podem variar.

Estendendo o Pi

O Pi pode ser personalizado sem modificar seu núcleo.

AGENTS.md

Instruções específicas do projeto.

Modelos de Prompt

Prompts reutilizáveis para atividades recorrentes.

Exemplos:

  • Revisão de código.
  • Documentação.
  • Geração de testes.
  • Refatoração.

Habilidades

Instruções reutilizáveis e recursos de suporte para fluxos de trabalho especializados.

Exemplos:

  • Fluxo de trabalho de testes em Python.
  • Fluxo de trabalho de implantação.
  • Geração de documentação.
  • Desenvolvimento de API.

Extensões

Personalização baseada em TypeScript.

As extensões podem:

  • Definir ferramentas personalizadas.
  • Registrar comandos.
  • Reagir a eventos de ciclo de vida.
  • Integrar serviços externos.
  • Personalizar o comportamento interativo.

Integração MCP

MCP significa Model Context Protocol (Protocolo de Contexto de Modelo).

Ele fornece uma maneira padronizada para aplicações acessarem ferramentas e recursos externos.

Versões modernas do Pi fornecem suporte nativo ao MCP.

Exemplos de integrações:

  • GitHub.
  • Bancos de dados.
  • Aplicações internas.
  • Serviços remotos.

Arquitetura de Extensão

flowchart TD
    PI["Agente Pi"]

    PI --> A["AGENTS.md"]
    PI --> B["Modelos de Prompt"]
    PI --> C["Habilidades"]
    PI --> D["Extensões"]
    PI --> E["MCP"]

    D --> F["Comandos Personalizados"]
    D --> G["Ferramentas Personalizadas"]
    D --> H["Manipuladores de Eventos"]

    E --> I["Serviços Externos"]

Modos de Execução do Pi

O Pi suporta múltiplas interfaces.

Interativo

Inicie a interface de terminal.

pi

Modo de Impressão

Execute um prompt e imprima sua resposta.

pi -p "Explique decoradores Python"

Modo JSON

Transmita eventos estruturados do agente.

pi --mode json -p "Explique este projeto"

Modo RPC

Controle o Pi usando mensagens JSONL através de entrada e saída padrão.

SDK

Incorpore as capacidades do agente Pi em aplicações TypeScript.

flowchart TD
    CORE["Runtime do Agente Pi"]

    CORE --> A["TUI Interativa"]
    CORE --> B["Imprimir / JSON"]
    CORE --> C["RPC"]
    CORE --> D["SDK TypeScript"]

    A --> E["Desenvolvedor"]
    B --> F["Scripts de Automação"]
    C --> G["Aplicação Externa"]
    D --> H["Aplicação de Agente Personalizada"]

Instalação e Configuração Mínima

Instalar o Pi

macOS / Linux:

curl -fsSL https://pi.dev/install.sh | sh

Windows PowerShell:

irm https://pi.dev/install.ps1 | iex

Alternativa usando npm:

npm install -g --ignore-scripts @earendil-works/pi-coding-agent

A instalação via npm requer Node.js 22.19 ou mais recente.

Verificar Instalação

pi --version

Criar um Projeto

mkdir pi-techhive-demo
cd pi-techhive-demo
git init

Iniciar o Pi

pi

Configurar Autenticação

Dentro do Pi:

/login

Selecione um provedor suportado e autentique-se.

Então:

/model

Selecione o modelo que você deseja usar.

Comandos Essenciais

Comando Propósito
/login Autenticar um provedor de modelo
/model Selecionar um modelo
/thinking Definir nível de raciocínio
/settings Abrir configurações
/new Iniciar nova sessão
/resume Retomar sessão
/session Informações da sessão
/tree Navegar no histórico de conversa
/fork Ramificar a partir de mensagem anterior
/compact Compactar contexto
/mcp Gerenciar servidores MCP
/reload Recarregar recursos
/export Exportar sessão
/share Compartilhar sessão
/quit Sair do Pi

Digite / na interface do terminal para descobrir os comandos disponíveis na versão instalada.

Demonstração Prática: Rastreador de Despesas

Criar um Diretório de Projeto

mkdir expense-tracker
cd expense-tracker
git init
pi

Explorar o Projeto

Prompt:

Inspecione o diretório atual.

Explique quais arquivos estão presentes.

Não modifique nada.

Conceito: Exploração do sistema de arquivos e operações de leitura.

Gerar uma Aplicação

Prompt:

Crie um rastreador de despesas Python simples.

Requisitos:
- Adicionar uma despesa.
- Listar despesas.
- Calcular o total de despesas.
- Armazenar despesas em um arquivo CSV.
- Use apenas a biblioteca padrão do Python.

Mantenha a implementação simples.

Conceito: Geração de código e criação de arquivos.

Executar o Programa

Prompt:

Execute a aplicação.

Crie três exemplos de despesas.

Verifique se o total é calculado corretamente.

Conceito: Execução de shell e observação de resultados.

Adicionar Testes Automatizados

Prompt:

Crie testes unitários usando unittest do Python.

Teste a criação de despesas e o cálculo do total.

Execute os testes e corrija quaisquer erros.

Conceito: Testes autônomos e correção iterativa.

Estender a Aplicação

Prompt:

Adicione um recurso para agrupar despesas por categoria.

Exiba o total para cada categoria.

Atualize os testes e execute-os.

Conceito: Modificação de código e retenção de contexto.

Explorar o Gerenciamento de Sessão

Comandos:

/session /tree /model

Conceito: Histórico de sessão, ramificação e troca de modelo.

Considerações de Segurança

O Pi pode executar comandos com as permissões disponíveis para seu processo em execução.

Ele não solicita necessariamente aprovação antes de cada chamada de ferramenta.

Práticas recomendadas:

  • Trabalhe dentro de um diretório de projeto dedicado.
  • Use Git antes de modificar códigos importantes.
  • Evite expor credenciais.
  • Inspecione o código gerado.
  • Revise extensões externas.
  • Não use dados sensíveis em demonstrações públicas.
  • Use contêineres ou sandboxes para tarefas não confiáveis.
  • Revise o conteúdo da sessão antes de compartilhá-lo.

Um agente de codificação de IA não substitui as práticas de segurança e revisão de código.

Pi Comparado com Outras Ferramentas

Pi

Infraestrutura de agente de codificação minimalista e extensível.

Pontos fortes:

  • Personalização.
  • Múltiplos provedores de LLM.
  • Execução de ferramentas.
  • Gerenciamento de sessão.
  • Extensibilidade.

Claude Code

Agente de codificação com um conjunto integrado de ferramentas de desenvolvimento e fluxos de trabalho.

Codex CLI

Agente de codificação projetado para trabalhar com bases de código, comandos de terminal e fluxos de trabalho de desenvolvimento.

LangChain / LangGraph

Frameworks para desenvolver aplicações de LLM personalizadas e fluxos de trabalho agenticos.

O Pi é principalmente uma infraestrutura de agente pronta para uso e extensível, em vez de um framework de fluxo de trabalho de propósito geral.

Principais Conclusões

  1. O Pi é uma infraestrutura de agente, não um LLM.
  2. O LLM propõe ações; o Pi coordena a execução.
  3. O Loop do Agente permite a execução de tarefas em várias etapas.
  4. Ferramentas permitem que o Pi interaja com um ambiente de desenvolvimento.
  5. Contexto e sessões mantêm a continuidade da conversa.
  6. O Pi não está vinculado a um único provedor de LLM.
  7. Extensões e Habilidades permitem a personalização.
  8. Arquiteturas minimalistas ainda podem suportar fluxos de trabalho agenticos sofisticados.
  9. A supervisão humana e o isolamento apropriado continuam importantes.