🧩 Exercícios: Tool Use e Function Calling em LLMs
Extra Inteligencia Artificial • Trilha Progressiva em 4 Níveis
🧭 Navegação Pedagógica
-
📖 Teoria do Capítulo 💻 Exemplos 📊 Slides 🧠 Quiz
🎯 Nível 1: Fundamentos
Problema 07.1 — Parser de Chamada de Função a partir de JSON de LLM
Contexto: Parser de Chamada de Função a partir de JSON de LLM no contexto de Tool Use e Function Calling em LLMs.
Requisitos de Execução:
- Escrever extrator que interprete o objeto
tool_callgerado por LLM e separe nome da função e argumentos.
Resultado Esperado
Tool Detectada: 'consultar_cotacao'
Argumentos: {'moeda': 'USD', 'base': 'BRL'}
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_09_1_SeuNome - Envie na tarefa:
Atividade Cap 09 - Tool Use e Function Calling em LLMs
🔑 Gabarito de Código & Solução Comentada
# function_call_parser.py
import json
def parse_tool_call(payload_json_str):
dados = json.loads(payload_json_str)
nome = dados.get("name")
args = dados.get("arguments", {})
if not nome: raise ValueError("Chamada de ferramenta sem nome")
return nome, args
resposta_llm = '{"name": "consultar_cotacao", "arguments": {"moeda": "USD", "base": "BRL"}}'
nome_tool, argumentos = parse_tool_call(resposta_llm)
print(f"Tool Detectada: '{nome_tool}'")
print(f"Argumentos : {argumentos}")
🔍 Nível 2: Prática
Problema 07.2 — Dispatcher de Ferramentas com Decorador @tool
Contexto: Dispatcher de Ferramentas com Decorador @tool no contexto de Tool Use e Function Calling em LLMs.
Requisitos de Execução:
- Criar registro centralizado de ferramentas com decorador Python e validação de existência.
Resultado Esperado
Executando ferramenta 'somar' -> Resultado: 42
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_09_2_SeuNome - Envie na tarefa:
Atividade Cap 09 - Tool Use e Function Calling em LLMs
🔑 Gabarito de Código & Solução Comentada
# tool_dispatcher.py
REGISTRO_TOOLS = {}
def tool(nome):
def decorador(func):
REGISTRO_TOOLS[nome] = func
return func
return decorador
@tool("somar")
def somar_numeros(a, b): return a + b
@tool("multiplicar")
def mult_numeros(a, b): return a * b
def despachar(nome_tool, args):
if nome_tool not in REGISTRO_TOOLS:
raise KeyError(f"Ferramenta '{nome_tool}' não registrada")
return REGISTRO_TOOLS[nome_tool](**args)
print("Resultado Tool:", despachar("somar", {"a": 20, "b": 22}))
⚡ Nível 3: Integração
Problema 07.3 — Orquestrador de Múltiplas Ferramentas em Paralelo
Contexto: Orquestrador de Múltiplas Ferramentas em Paralelo no contexto de Tool Use e Function Calling em LLMs.
Requisitos de Execução:
- Executar lista sequencial de tool calls (ex.: consultar saldo + consultar extrato) e agregar respostas em formato de observação para a LLM.
Resultado Esperado
2 ferramentas executadas com sucesso.
Observações agregadas: {'get_saldo': 1500, 'get_status': 'ATIVO'}
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_09_3_SeuNome - Envie na tarefa:
Atividade Cap 09 - Tool Use e Function Calling em LLMs
🔑 Gabarito de Código & Solução Comentada
# multi_tool_orchestrator.py
def get_saldo(conta_id): return 1500.0
def get_status(conta_id): return "CONTA_ATIVA"
catalogo = {"get_saldo": get_saldo, "get_status": get_status}
def orquestrar_chamadas(chamadas):
resultados = {}
for c in chamadas:
fn = catalogo.get(c["name"])
if fn:
resultados[c["name"]] = fn(**c["args"])
return resultados
chamadas_mock = [
{"name": "get_saldo", "args": {"conta_id": 101}},
{"name": "get_status", "args": {"conta_id": 101}}
]
print("Resultados Agregados:", orquestrar_chamadas(chamadas_mock))
🏆 Nível 4: Desafio Corporativo
Problema 07.4 — Validador Defensivo de Tipos de Argumentos em Tempo de Execução
Contexto: Validador Defensivo de Tipos de Argumentos em Tempo de Execução no contexto de Tool Use e Function Calling em LLMs.
Requisitos de Execução:
- Inspecionar as anotações de tipo dos parâmetros da função Python e validar se os tipos passados pela LLM são compatíveis antes de executar.
Resultado Esperado
Validação de Tipos: Parâmetro 'valor' (float) compatível | Parâmetro 'moeda' (str) compatível.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_09_4_SeuNome - Envie na tarefa:
Atividade Cap 09 - Tool Use e Function Calling em LLMs
🔑 Gabarito de Código & Solução Comentada
# tool_type_validator.py
import inspect
def transferir_fundos(valor: float, destino: str) -> bool:
print(f"Transferindo R$ {valor:.2f} para {destino}")
return True
def validar_e_executar(func, args):
sig = inspect.signature(func)
for param_name, param in sig.parameters.items():
if param_name in args:
tipo_esperado = param.annotation
val = args[param_name]
if tipo_esperado != inspect.Parameter.empty and not isinstance(val, tipo_esperado):
raise TypeError(f"Argumento '{param_name}' deve ser {tipo_esperado.__name__}, recebido {type(val).__name__}")
return func(**args)
args_validos = {"valor": 250.50, "destino": "chave_pix_123"}
validar_e_executar(transferir_fundos, args_validos)
| ⬅️ Voltar ao Índice de Exercícios | 📚 Sumário de Tópicos |