Ferramentas Brasileiras
Ferramentas nativas via function calling: CEP, CNPJ, legislação, acompanhamento processual e web search.
Visão Geral
A Polar oferece ferramentas nativas brasileiras que podem ser usadas via function calling. Estas ferramentas permitem que o modelo acesse informações em tempo real sobre endereços, empresas, legislação, processos judiciais e resultados de busca na web.
CEP Lookup
Busca de endereço a partir de um código postal (CEP) brasileiro.
Definição da Ferramenta
{
"type": "function",
"function": {
"name": "cep_lookup",
"description": "Busca endereço completo a partir de um CEP brasileiro",
"parameters": {
"type": "object",
"properties": {
"cep": {
"type": "string",
"description": "CEP no formato 00000-000 ou 00000000"
}
},
"required": ["cep"]
}
}
}Exemplo
from openai import OpenAI
client = OpenAI(
base_url="https://api.polarai.com.br/v1",
api_key="pk-sua-chave-aqui"
)
response = client.chat.completions.create(
model="urso-mabe",
messages=[
{"role": "user", "content": "Qual o endereço do CEP 01001-000?"}
],
tools=[{
"type": "function",
"function": {
"name": "cep_lookup",
"description": "Busca endereço completo a partir de um CEP brasileiro",
"parameters": {
"type": "object",
"properties": {
"cep": {"type": "string"}
},
"required": ["cep"]
}
}
}],
tool_choice="auto"
)
# O modelo chama a ferramenta automaticamente
tool_call = response.choices[0].message.tool_calls[0]
print(f"Ferramenta: {tool_call.function.name}")
print(f"Argumentos: {tool_call.function.arguments}")Resposta da Ferramenta
{
"cep": "01001-000",
"logradouro": "Praça da Sé",
"complemento": "lado ímpar",
"bairro": "Sé",
"localidade": "São Paulo",
"uf": "SP",
"ibge": "3550308",
"ddd": "11"
}CNPJ Query
Consulta de informações de empresas brasileiras pelo CNPJ.
Definição da Ferramenta
{
"type": "function",
"function": {
"name": "cnpj_query",
"description": "Consulta dados de uma empresa brasileira pelo CNPJ",
"parameters": {
"type": "object",
"properties": {
"cnpj": {
"type": "string",
"description": "CNPJ no formato 00.000.000/0000-00 ou apenas números"
}
},
"required": ["cnpj"]
}
}
}Exemplo
response = client.chat.completions.create(
model="urso-mabe",
messages=[
{"role": "user", "content": "Quais os dados da empresa com CNPJ 00.000.000/0001-91?"}
],
tools=[{
"type": "function",
"function": {
"name": "cnpj_query",
"description": "Consulta dados de uma empresa brasileira pelo CNPJ",
"parameters": {
"type": "object",
"properties": {
"cnpj": {"type": "string"}
},
"required": ["cnpj"]
}
}
}],
tool_choice="auto"
)Resposta da Ferramenta
{
"cnpj": "00.000.000/0001-91",
"razao_social": "Banco do Brasil S.A.",
"nome_fantasia": "BANCO DO BRASIL",
"situacao_cadastral": "ATIVA",
"data_abertura": "1966-08-01",
"natureza_juridica": "Sociedade de Economia Mista",
"porte": "DEMAIS",
"capital_social": 120000000000.00,
"endereco": {
"logradouro": "SAUN Quadra 5 Lote B",
"bairro": "Asa Norte",
"municipio": "Brasília",
"uf": "DF",
"cep": "70040-912"
},
"atividade_principal": {
"codigo": "64.22-1-00",
"descricao": "Bancos múltiplos, com carteira comercial"
}
}Legislation Search
Busca em legislação federal, estadual e municipal.
Definição da Ferramenta
{
"type": "function",
"function": {
"name": "legislation_search",
"description": "Busca artigos e leis na legislação brasileira",
"parameters": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Busca por texto, número da lei ou artigo específico"
},
"scope": {
"type": "string",
"enum": ["federal", "estadual", "municipal", "todos"],
"description": "Escopo da busca"
},
"law_type": {
"type": "string",
"enum": ["constituicao", "lei_ordinaria", "lei_complementar", "decreto", "medida_provisoria", "todos"],
"description": "Tipo de legislação"
}
},
"required": ["query"]
}
}
}Exemplo
response = client.chat.completions.create(
model="urso-mabe",
messages=[
{"role": "user", "content": "O que diz o artigo 5º da Constituição Federal?"}
],
tools=[{
"type": "function",
"function": {
"name": "legislation_search",
"description": "Busca artigos e leis na legislação brasileira",
"parameters": {
"type": "object",
"properties": {
"query": {"type": "string"},
"scope": {"type": "string"},
"law_type": {"type": "string"}
},
"required": ["query"]
}
}
}],
tool_choice="auto"
)Process Tracking
Acompanhamento de processos judiciais em tribunais brasileiros.
Definição da Ferramenta
{
"type": "function",
"function": {
"name": "process_tracker",
"description": "Consulta o andamento de processos judiciais brasileiros",
"parameters": {
"type": "object",
"properties": {
"case_number": {
"type": "string",
"description": "Número do processo no formato CNJ (0000000-00.0000.0.00.0000)"
},
"tribunal": {
"type": "string",
"description": "Sigla do tribunal (ex: TJSP, STJ, TST)"
}
},
"required": ["case_number"]
}
}
}Exemplo
response = client.chat.completions.create(
model="urso-mabe",
messages=[
{"role": "user", "content": "Qual o status do processo 1234567-89.2024.8.26.0100?"}
],
tools=[{
"type": "function",
"function": {
"name": "process_tracker",
"description": "Consulta o andamento de processos judiciais brasileiros",
"parameters": {
"type": "object",
"properties": {
"case_number": {"type": "string"},
"tribunal": {"type": "string"}
},
"required": ["case_number"]
}
}
}],
tool_choice="auto"
)Resposta da Ferramenta
{
"case_number": "1234567-89.2024.8.26.0100",
"tribunal": "TJSP",
"vara": "5ª Vara Cível",
"classe": "Procedimento Comum Cível",
"assunto": "Indenização por Dano Moral",
"status": "Em andamento",
"last_movement": {
"date": "2024-03-10",
"description": "Conclusos para sentença"
},
"parties": {
"autor": "João da Silva",
"reu": "Empresa XYZ Ltda"
}
}Web Search
Busca na web via SearXNG (motor de busca livre).
Definição da Ferramenta
{
"type": "function",
"function": {
"name": "web_search",
"description": "Busca na web em tempo real usando SearXNG",
"parameters": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Consulta de busca"
},
"language": {
"type": "string",
"description": "Idioma dos resultados (padrão: pt-BR)"
},
"limit": {
"type": "integer",
"description": "Número máximo de resultados (padrão: 5)"
}
},
"required": ["query"]
}
}
}Exemplo
response = client.chat.completions.create(
model="urso-mabe",
messages=[
{"role": "user", "content": "Quais as últimas notícias sobre reforma tributária?"}
],
tools=[{
"type": "function",
"function": {
"name": "web_search",
"description": "Busca na web em tempo real usando SearXNG",
"parameters": {
"type": "object",
"properties": {
"query": {"type": "string"},
"language": {"type": "string"},
"limit": {"type": "integer"}
},
"required": ["query"]
}
}
}],
tool_choice="auto"
)Usando Múltiplas Ferramentas
O modelo pode usar múltiplas ferramentas em uma única conversa:
all_tools = [
{"type": "function", "function": {"name": "cep_lookup", ...}},
{"type": "function", "function": {"name": "cnpj_query", ...}},
{"type": "function", "function": {"name": "legislation_search", ...}},
{"type": "function", "function": {"name": "process_tracker", ...}},
{"type": "function", "function": {"name": "web_search", ...}}
]
response = client.chat.completions.create(
model="urso-mabe",
messages=[
{
"role": "user",
"content": "Busque os dados do CNPJ 00.000.000/0001-91 e o endereço do CEP 70040-912"
}
],
tools=all_tools,
tool_choice="auto"
)
# O modelo pode chamar múltiplas ferramentas em paralelo
for tool_call in response.choices[0].message.tool_calls:
print(f"Ferramenta: {tool_call.function.name}")
print(f"Args: {tool_call.function.arguments}")Ferramentas Nativas vs Function Calling
As ferramentas brasileiras da Polar podem ser usadas de duas formas:
| Método | Descrição | Quando Usar |
|---|---|---|
| Ferramenta nativa | Execução automática pela Polar | Simplicidade, sem backend próprio |
| Function calling | Modelo sugere, você executa | Controle total, lógica customizada |
Para usar ferramentas nativas (a Polar executa automaticamente):
response = client.chat.completions.create(
model="urso-mabe",
messages=[{"role": "user", "content": "Busque o CEP 01001-000"}],
extra_body={
"native_tools": ["cep_lookup", "cnpj_query"]
}
)
# A resposta já inclui os dados do CEP