Pi Agent: Extension Basics
Última atualização: 2026-08-31
--- title: "Fundamentos de Extensoes" description: "Aprenda o mecanismo de extensoes do Pi Agent, entenda a arquitetura de extensoes, ciclo de vida, fluxo de desenvolvimento e publicacao." order: 14 lang: pt-br
Extensões levam o Pi Agent de "bom o bastante" para "excelente" — use as de outros ou publique as suas.
1. O que são Extensões
Extensões são o mecanismo de plugin do Pi Agent que podem:
- Adicionar novas ferramentas
- Adicionar novas skills
- Adicionar novos provedores de LLM
- Adicionar novos comandos
- Modificar o comportamento do Agent
TEXT
📖 Somente leitura
Extension Structure
├── manifest.yaml -> Metadata (name, version, dependencies)
├── tools/ -> Tool definitions
├── skills/ -> Skill definitions
├── providers/ -> Provider adapters
├── hooks/ -> Hook functions
└── templates/ -> Prompt templates
2. Instalando Extensões
(1) Do Repositório Oficial
BASH
pi-agent ext install github-tools
pi-agent ext install database-query
(2) De Repositório Git
BASH
pi-agent ext install git+https://github.com/user/pi-ext-custom.git
(3) De Diretório Local
BASH
pi-agent ext install ./my_extension
(4) Gerenciando Extensões
BASH
pi-agent ext list
pi-agent ext update github-tools
pi-agent ext remove github-tools
3. Criando Extensões
(1) Scaffold
BASH
pi-agent ext create my_extension
(2) manifest.yaml
YAML
name: my_extension
version: "1.0.0"
description: "My custom extension"
author: "Alice"
min_pi_agent_version: "0.8.0"
dependencies:
- requests>=2.28.0
tools:
- tools/my_tool.py
skills:
- skills/my_skill.yaml
entry_point: hooks.py
(3) Definir uma Ferramenta
PYTHON
# tools/my_tool.py
from pi_agent import tool
@tool(
name="weather_query",
description="Query weather for a city",
parameters={
"city": {"type": "string", "description": "City name"},
"unit": {"type": "string", "enum": ["celsius", "fahrenheit"], "default": "celsius"}
}
)
def weather_query(city: str, unit: str = "celsius") -> dict:
import requests
resp = requests.get(f"https://wttr.in/{city}?format=j1")
data = resp.json()
temp = data["current_condition"][0]["temp_C"]
if unit == "fahrenheit":
temp = int(temp) * 9 // 5 + 32
return {"city": city, "temperature": temp, "unit": unit}
4. Ciclo de Vida de Extensão
(1) Funções Hook
PYTHON
# hooks.py
from pi_agent import ExtensionHook
class MyExtension(ExtensionHook):
def on_load(self, agent):
print(f"Loaded my_extension for {agent.name}")
def on_tool_call(self, agent, tool_name, params):
print(f"Tool called: {tool_name}")
def on_tool_result(self, agent, tool_name, result):
print(f"Tool result: {tool_name}")
def on_error(self, agent, error):
print(f"Error: {error}")
def on_unload(self, agent):
print("my_extension unloaded")
5. Publicando Extensões
(1) Empacotar
BASH
pi-agent ext package my_extension
# Generates my_extension-1.0.0.tar.gz
(2) Publicar no Repositório Oficial
BASH
pi-agent ext publish my_extension
(3) Publicar no PyPI
BASH
cd my_extension
python -m build
twine upload dist/*
❓ Perguntas Frequentes
P: Extensão vs skill? R: Uma skill é uma unidade de capacidade única (combo de prompt + ferramenta). Uma extensão é um pacote de plugin completo (múltiplas ferramentas, skills, provedores, hooks). P: Dependências de extensão? R: Declare em dependencies do manifest.yaml. Pi Agent resolve e instala automaticamente. P: Revisão de segurança para extensões? R: Extensões do repositório oficial são revisadas. Extensões de terceiros precisam de sua própria avaliação de risco. Teste em sandbox primeiro.
❓ Resumo
- Extensões são o mecanismo de plugin do Pi Agent para ferramentas, skills, provedores, comandos
- Instale com
pi-agent ext install, crie compi-agent ext create - manifest.yaml define metadados; tools/ e skills/ armazenam funcionalidades
- Funções hook tratam eventos de ciclo de vida
- Publique no repositório oficial ou PyPI
📝 Exercícios
- Básico (Dificuldade: ⭐): Instale uma extensão oficial e use sua ferramenta.
- Intermediário (Dificuldade: ⭐⭐): Crie uma extensão simples de consulta de clima com ferramenta e skill.
- Avançado (Dificuldade: ⭐⭐⭐): Crie uma extensão completa com ferramenta, skill, hooks e testes unitários.