← Voltar a AI Engineer — DEUS.ai

🟡 B — Python para AI Systems

AI Engineer — DEUS.ai

Apresentação

🐍 Python para AI Systems

A DEUS usa Python para praticamente tudo. Domina estes conceitos.


Core Python

Comprehensions

  • List: [x**2 for x in range(10)]
  • Dict: {k: v*2 for k, v in d.items()}

Generators

Funções com yield — lazy evaluation, memória eficiente.

Decorators

Funções que modificam outras funções. @cache, @retry, @validate.

Context Managers

with open(...) as f:__enter__ e __exit__. Gerir recursos.

Typing

typing, pydantic — type hints e validação.


Async Python

async/await

  • async def — coroutines
  • await — esperar I/O sem bloquear

asyncio

Event loop, asyncio.gather(), asyncio.create_task()

Concurrency vs Parallelism

  • Concurrency: múltiplas tarefas em progresso (I/O-bound)
  • Parallelism: múltiplos CPUs (CPU-bound)

Bibliotecas comuns

  • requests / httpx — HTTP (httpx suporta async)
  • pydantic — validação e schemas
  • dataclasses — classes de dados

Perguntas comuns

Threading vs Multiprocessing

  • Threading: threads na mesma memória, GIL limita CPU-bound
  • Multiprocessing: processos separados, bypass do GIL, para CPU-bound

O que é GIL?

Global Interpreter Lock — apenas uma thread executa bytecode Python de cada vez. Limita paralelismo CPU em threading.

Quando usar async?

I/O-bound: APIs, DB, ficheiros. Muitas conexões simultâneas sem threads.


Python em sistemas de AI — onde encaixa

  • Async para LLM APIs — chamadas a OpenAI/Claude são I/O-bound; asyncio.gather() para múltiplas chamadas em paralelo
  • Streaming — generators (yield) para stream de tokens do LLM sem carregar resposta completa em memória
  • Pydantic — validação de prompts, respostas estruturadas, schemas de tools
  • Context managers — gerir conexões a vector DBs, garantir cleanup

Erro comum: misturar sync e async

  • requests bloqueia o event loop — usar httpx.AsyncClient para chamadas HTTP async
  • Não chamar time.sleep() em código async — usar asyncio.sleep()
  • Bibliotecas síncronas em async: run_in_executor() para não bloquear

asyncio.gather vs create_task

  • gather: espera várias coroutines, devolve resultados em ordem. results = await asyncio.gather(task1(), task2())
  • create_task: agenda coroutine sem esperar. Útil para fire-and-forget ou quando precisas de controlo fino

Zona de prática

Sem perguntas. Clica em Editar para adicionar.