0Pricing
AI Agents · Aula

De assistente a agente autônomo

O espectro entre chatbot e agente totalmente autônomo: o que muda em cada etapa.

De assistente a agente autônomo é uma aula grátis de AI Agents no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de AI Agents, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de AI Agents inclui 4 aulas no total.

O espectro da autonomia

Os sistemas de IA existem em um espectro que vai do totalmente reativo ao totalmente autônomo. Entender em que ponto desse espectro seu agente se encontra determina quais componentes arquiteturais ele precisa, quanta supervisão humana é necessária e quais modos de falha devem ser previstos.

Nível 1: Bot de conversa puro

Um bot de conversa puro responde às mensagens com texto. Ele não tem memória além da janela de contexto atual, não tem ferramentas nem objetivos e não consegue agir no mundo. Cada interação não mantém estado. Necessidade de supervisão humana: mínima — ele só pode produzir texto, não agir.

import anthropic

# Level 1: Pure chatbot — single turn, no memory, no tools
def pure_chatbot(user_message: str) -> str:
    client = anthropic.Anthropic(api_key='YOUR_API_KEY')
    response = client.messages.create(
        model='claude-opus-4-5',
        max_tokens=512,
        messages=[{'role': 'user', 'content': user_message}]
    )
    return response.content[0].text

# What it has:
#   - Language understanding
#   - Knowledge from training
# What it lacks:
#   - Memory (no history between sessions)
#   - Tools (cannot access external data)
#   - Goals (no objective to pursue)
#   - Proactivity (only responds, never initiates)

response = pure_chatbot('What is the capital of Australia?')
print(response)

Nível 2: Agente com ferramentas auxiliares

Um agente com ferramentas auxiliares acrescenta capacidades externas: pesquisa na Web, consultas a bancos de dados, execução de código e chamadas de API. Ele pode responder a perguntas que exigem dados atualizados. A memória pode persistir durante uma sessão. Necessidade de supervisão humana: moderada — ele pode read dados, mas as ações normalmente são somente de leitura ou apresentam baixo risco.

import anthropic

# Level 2: Tool-augmented agent
def tool_augmented_agent(user_message: str, conversation_history: list) -> str:
    client = anthropic.Anthropic(api_key='YOUR_API_KEY')

    tools = [
        {
            'name': 'search_web',
            'description': 'Search the web for current information',
            'input_schema': {'type': 'object',
                             'properties': {'query': {'type': 'string'}},
                             'required': ['query']}
        }
    ]

    conversation_history.append({'role': 'user', 'content': user_message})

    response = client.messages.create(
        model='claude-opus-4-5',
        max_tokens=1024,
        tools=tools,
        messages=conversation_history
    )

    # Handle tool use...
    return response.content[-1].text if response.stop_reason == 'end_turn' else '[tool called]'

# What changed vs Level 1:
#   + Tools (external data access)
#   + Session memory (conversation history)
# Still lacking:
#   - Persistent cross-session memory
#   - Goals (still reactive)
#   - Proactivity

Nível 3: Agente orientado por objetivos

Um agente orientado por objetivos persegue um objetivo definido ao longo de várias etapas, mantendo o estado entre as chamadas de ferramentas. Ele tem um planejador que divide o objetivo em subtarefas. Necessidade de supervisão humana: significativa — ele executa ações em várias etapas que podem produzir efeitos cumulativos no mundo real.

# Level 3: Goal-directed agent
class GoalDirectedAgent:
    def __init__(self, goal: str, tools: list, client):
        self.goal = goal
        self.tools = tools
        self.client = client
        self.memory = []  # persistent across steps
        self.plan = self._make_plan()

    def _make_plan(self) -> list:
        response = self.client.messages.create(
            model='claude-opus-4-5', max_tokens=512,
            messages=[{'role': 'user', 'content':
                f'Goal: {self.goal}\n'
                'Create a numbered list of steps to achieve this goal. '
                'Each step should be a single tool call or reasoning step.'
            }]
        )
        return response.content[0].text

    def step(self) -> str:
        # Execute next planned step
        return 'step executed'

# What changed vs Level 2:
#   + Goal: has an objective to pursue
#   + Planning: decomposes goal into sub-tasks
#   + Persistent memory across steps
# Still lacking:
#   - Self-directed (still initiated by human)
#   - Self-improvement

if __name__ == '__main__':
    class FakeContent:
        def __init__(self, text):
            self.text = text

    class FakeResponse:
        def __init__(self, text):
            self.content = [FakeContent(text)]

    class FakeMessages:
        def create(self, **kwargs):
            return FakeResponse('1. Search web for topic\n2. Summarize findings\n3. Draft report')

    class FakeClient:
        def __init__(self):
            self.messages = FakeMessages()

    agent = GoalDirectedAgent(goal='Write a market report', tools=[], client=FakeClient())
    print('Goal:', agent.goal)
    print('Plan:')
    print(agent.plan)

Nível 4: Agente autodirigido

Um agente autodirigido define seus próprios subobjetivos, monitora o ambiente em busca de eventos relevantes e inicia ações sem ser solicitado por uma pessoa. Ele tem memória de longo prazo, um modelo do mundo e pode replanejar quando as circunstâncias mudam. Necessidade de supervisão humana: alta — ele inicia ações de forma autônoma.

import time

# Level 4: Self-directed agent (simplified sketch)
class SelfDirectedAgent:
    def __init__(self, mission: str, client):
        self.mission = mission
        self.client = client
        self.goals_queue = []
        self.long_term_memory = []
        self.running = False

    def start(self):
        self.running = True
        self._generate_initial_goals()
        while self.running:
            self._observe_environment()
            self._prioritise_goals()
            if self.goals_queue:
                goal = self.goals_queue.pop(0)
                self._pursue_goal(goal)
            time.sleep(60)  # autonomous monitoring loop

    def _observe_environment(self):
        # Agent monitors for events without being asked
        print('Observing environment...')

    def _generate_initial_goals(self):
        # Agent decomposes its mission into actionable goals
        self.goals_queue = ['Monitor inbox', 'Check project status']

    def _prioritise_goals(self):
        # Agent re-orders goals based on new observations
        pass

    def _pursue_goal(self, goal: str):
        print(f'Pursuing: {goal}')

if __name__ == '__main__':
    agent = SelfDirectedAgent(mission='Manage my inbox proactively', client=None)
    agent._generate_initial_goals()
    print('Initial goals:', agent.goals_queue)
    agent._observe_environment()
    goal = agent.goals_queue.pop(0)
    agent._pursue_goal(goal)

O que muda em cada nível: memória

Os requisitos de memória aumentam conforme o nível de autonomia. O nível 1 usa apenas a janela de contexto (memória da sessão). O nível 2 acrescenta um histórico persistente da sessão. O nível 3 acrescenta o estado estruturado da tarefa. O nível 4 exige memória episódica (o que aconteceu), memória semântica (o que o agente sabe) e memória procedural (como fazer as coisas).

MEMORY_BY_LEVEL = {
    'L1_chatbot': {
        'scope': 'context_window_only',
        'persistence': 'none',
        'implementation': 'messages list in current API call'
    },
    'L2_tool_augmented': {
        'scope': 'session',
        'persistence': 'in-memory (lost on restart)',
        'implementation': 'conversation_history list'
    },
    'L3_goal_directed': {
        'scope': 'task',
        'persistence': 'persists for task duration',
        'implementation': 'SQLite or Redis with task state'
    },
    'L4_self_directed': {
        'scope': 'long_term',
        'persistence': 'indefinite',
        'implementation': 'vector DB (episodic) + structured DB (semantic) + prompt cache (procedural)'
    }
}

for level, info in MEMORY_BY_LEVEL.items():
    print(f'{level}: {info["implementation"]}')

O que muda em cada nível: planejamento

Os requisitos de planejamento também aumentam conforme a autonomia. O nível 1 não faz planejamento. O nível 2 pode realizar raciocínio em uma única etapa. O nível 3 usa planejamento em várias etapas (Cadeia de pensamento, ReAct). O nível 4 exige planejamento hierárquico, com novo planejamento quando ocorre uma falha.

PLANNING_BY_LEVEL = {
    'L1': 'None — single response',
    'L2': 'Single-step tool selection (which tool to call now)',
    'L3': 'Multi-step plan (goal -> ordered sub-tasks -> tool calls)',
    'L4': 'Hierarchical plan (mission -> goals -> tasks -> actions) + replan on failure'
}

# L3 multi-step planning example:
def plan_goal(goal: str, client) -> list:
    import anthropic
    response = client.messages.create(
        model='claude-opus-4-5', max_tokens=512,
        messages=[{'role': 'user', 'content':
            f'Break this goal into 3-5 concrete steps:\nGoal: {goal}\n'
            'Return JSON: {"steps": [{"step": int, "action": str, "tool": str}]}'
        }]
    )
    import json
    return json.loads(response.content[0].text)

for lvl, desc in PLANNING_BY_LEVEL.items():
    print(f'{lvl}: {desc}')

Requisitos de supervisão humana por nível

À medida que a autonomia aumenta, também aumenta a necessidade de mecanismos de supervisão humana. O nível 1 quase não precisa deles. O nível 4 exige uma arquitetura explícita de supervisão: etapas de aprovação, registros de ações, mecanismos de interrupção e detecção de anomalias.

OVERSIGHT_BY_LEVEL = {
    'L1_chatbot': [
        'None required (output only)'
    ],
    'L2_tool_augmented': [
        'Review tool permissions (read-only vs write)',
        'Audit logs of tool calls'
    ],
    'L3_goal_directed': [
        'Human approval before irreversible actions',
        'Plan review before execution starts',
        'Progress checkpoints',
        'Full audit trail'
    ],
    'L4_self_directed': [
        'Human approval before high-impact actions',
        'Real-time action streaming to oversight dashboard',
        'Emergency stop mechanism',
        'Anomaly detection on goal drift',
        'Regular review of long-term memory state',
        'Corrigibility: agent must accept shutdown'
    ]
}

for level, requirements in OVERSIGHT_BY_LEVEL.items():
    print(f'{level}:')
    for req in requirements:
        print(f'  - {req}')

Proatividade: a mudança fundamental

A mudança mais fundamental de assistente para agente autônomo é a proatividade. Um assistente espera. Um agente inicia. Isso significa que o agente precisa monitorar o ambiente, reconhecer eventos relevantes e decidir quando agir, tudo sem ser solicitado.

# Proactive monitoring pattern
import asyncio
from datetime import datetime

class ProactiveMonitor:
    def __init__(self, agent_fn, check_fn, interval_seconds: int = 60):
        self.agent_fn = agent_fn
        self.check_fn = check_fn
        self.interval = interval_seconds

    async def run(self):
        print(f'Proactive monitor started, checking every {self.interval}s')
        while True:
            try:
                events = await self.check_fn()
                for event in events:
                    print(f'[{datetime.utcnow().isoformat()}] Event: {event}')
                    await self.agent_fn(event)
            except Exception as e:
                print(f'Monitor error: {e}')
            await asyncio.sleep(self.interval)

# Example: agent monitors for new emails every 5 minutes
# and proactively drafts replies or flags urgent ones
async def example_setup():
    monitor = ProactiveMonitor(
        agent_fn=lambda e: print(f'Agent handling: {e}'),
        check_fn=lambda: [],  # replace with real inbox check
        interval_seconds=300
    )
    # await monitor.run()

if __name__ == '__main__':
    import asyncio

    async def demo():
        async def check_fn():
            return ['New email from boss@example.com']

        async def agent_fn(event):
            print(f'Agent drafting reply for: {event}')

        monitor = ProactiveMonitor(agent_fn=agent_fn, check_fn=check_fn, interval_seconds=1)
        try:
            await asyncio.wait_for(monitor.run(), timeout=0.3)
        except asyncio.TimeoutError:
            pass

    asyncio.run(demo())

Recuperação de erros por nível

Os requisitos de recuperação de erros também aumentam conforme o nível. Um bot de conversa apenas pede desculpas. Um agente com ferramentas tenta novamente a chamada da ferramenta. Um agente orientado por objetivos refaz o planejamento contornando a etapa que falhou. Um agente autodirigido detecta, categoriza e encaminha erros de forma autônoma, atualizando seu modelo do mundo para evitar a mesma falha no futuro.

# Error recovery strategies by autonomy level

def chatbot_error_recovery(error: Exception) -> str:
    return 'I\'m sorry, I encountered an error. Please try again.'

def tool_agent_error_recovery(tool_name: str, error: Exception, retries: int) -> str:
    if retries < 3:
        return f'Retrying {tool_name} ({retries+1}/3)'
    return f'Tool {tool_name} unavailable after 3 retries, skipping'

def goal_agent_error_recovery(failed_step: dict, plan: list, client) -> list:
    import anthropic, json
    client_obj = anthropic.Anthropic(api_key='YOUR_API_KEY')
    response = client_obj.messages.create(
        model='claude-opus-4-5', max_tokens=256,
        messages=[{'role': 'user', 'content':
            f'Step failed: {failed_step}\nRemaining plan: {plan}\n'
            'Revise the remaining plan to work around the failure. Return JSON plan.'
        }]
    )
    return json.loads(response.content[0].text)

print('Error recovery patterns defined for each autonomy level')

Escolha do nível adequado

Nem todo caso de uso precisa do nível 4. Comece pelo nível mais baixo que atenda aos seus requisitos e só acrescente complexidade quando necessário. Mais autonomia significa mais complexidade, uma carga maior de supervisão e mais possibilidades de comportamento inesperado.

def recommend_autonomy_level(requirements: dict) -> str:
    needs_realtime = requirements.get('realtime_data', False)
    needs_multistep = requirements.get('multi_step_tasks', False)
    needs_unsupervised = requirements.get('runs_unsupervised', False)
    needs_initiative = requirements.get('initiates_actions', False)

    if needs_initiative and needs_unsupervised:
        return 'L4_self_directed (high oversight required)'
    if needs_multistep:
        return 'L3_goal_directed (plan review recommended)'
    if needs_realtime:
        return 'L2_tool_augmented (audit logs required)'
    return 'L1_chatbot (minimal oversight)'

# Examples:
print(recommend_autonomy_level({
    'realtime_data': True, 'multi_step_tasks': False,
    'runs_unsupervised': False, 'initiates_actions': False
}))
print(recommend_autonomy_level({
    'realtime_data': True, 'multi_step_tasks': True,
    'runs_unsupervised': True, 'initiates_actions': True
}))

Verificação de conhecimentos

Qual é a diferença de capacidade mais fundamental entre um agente orientado por objetivos (nível 3) e um agente autodirigido (nível 4)?

Recapitulação: de assistente a agente autônomo

Excelente! Eis o que você aprendeu:

  • Bot de conversa L1: reativo, somente texto, sem memória e sem necessidade de supervisão
  • Agente com ferramentas auxiliares L2: memória da sessão, chamadas de ferramentas e supervisão moderada
  • Agente orientado por objetivos L3: planejamento em várias etapas, memória limitada ao escopo da tarefa e etapas de aprovação
  • Agente autodirigido L4: proativo, com memória de longo prazo, planejamento hierárquico e alta necessidade de supervisão
  • Regra prática: comece pelo nível mais baixo que atenda aos requisitos

A seguir: modelos do mundo e planejamento preditivo — como os agentes simulam antes de agir.

Perguntas Frequentes

A aula “De assistente a agente autônomo” é grátis?

Sim — o texto completo de “De assistente a agente autônomo” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de AI Agents, atualize para CoddyKit PRO. O curso de AI Agents inclui 4 aulas no total.

O que vou aprender em “De assistente a agente autônomo”?

O espectro entre chatbot e agente totalmente autônomo: o que muda em cada etapa. Você pratica AI Agents com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar AI Agents?

Nenhuma experiência prévia é necessária. AI Agents no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.

Quanto tempo leva a aula “De assistente a agente autônomo”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de AI Agents?

Sim. Cada aula de AI Agents inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. De assistente a agente autônomo
  2. Modelos do mundo e planejamento preditivo
  3. Desafios de alinhamento em agentes autônomos
  4. Fronteiras da pesquisa: AGI e além
← Voltar para AI Agents