Voltar ao blog

IA para iniciantesGuia

Pergunte a um LLM sobre um CSV: envie o schema, não a tabela

Envie nomes de colunas, tipos e 3 linhas de exemplo, receba uma linha de pandas de volta, execute-a no arquivo completo. Mais barato do que colar linhas, e você pode verificar o número.

Por CheapTokens TeamPublicado em 7 min de leitura

Linhas de código que leem um CSV, pegam seus tipos de coluna e três linhas, e pedem uma linha de pandas
Nesta página
  1. Por que colar a tabela inteira dá errado
  2. Envie a forma da tabela, não a tabela
  3. O script: pergunte, leia a linha, execute
  4. Quanto custa: colar tudo vs schema + 3 linhas
  5. Verifique o número antes de confiar nele
  6. Se não funcionar

Você tem um sales.csv com 5.000 linhas e uma pergunta: qual produto vendeu mais em outubro? Não cole o arquivo em um chat. Envie ao modelo os nomes das colunas, seus tipos e três linhas de exemplo, peça uma linha de pandas e execute essa linha no arquivo completo você mesmo. O modelo nunca lê suas 5.000 linhas, o prompt fica minúsculo, e o número que você obtém vem de um código que você pode executar novamente.

Aqui está por que isso funciona melhor, como o prompt fica, um script que você pode copiar e quanto custa em comparação com a abordagem de colar tudo.

Por que colar a tabela inteira dá errado#

Aqui está uma história que você talvez reconheça. Alguém cola 200 linhas de despesas em um chat e pede o total. A resposta volta confiante, com centavos e tudo. Também está errada, e nada na tela te avisa disso.

O modelo prevê texto peça por peça (essas peças são tokens). Uma soma de 200 números são 200 pequenos passos sem calculadora embutida, e um dígito trocado parece exatamente com uma resposta correta. Código se comporta diferente: df['amount'].sum() soma todas as linhas, sempre, e dá o mesmo resultado em uma segunda execução.

Há um segundo problema, e é sobre tamanho. Uma tabela consome a janela de contexto rápido, e você paga por cada linha em cada pergunta. Dez perguntas sobre o mesmo arquivo significa dez cópias da tabela inteira enviadas como entrada.

Verificação rápida

Por que uma linha de pandas é mais segura do que pedir o total ao modelo?

Mostrar resposta

Resposta: Seu computador executa o código em cada linha, e você pode executar novamente e verificar

O modelo ainda pode escrever uma linha errada. A diferença é que uma linha é visível e repetível: você a lê, executa e compara o resultado com algumas linhas manualmente.

Envie a forma da tabela, não a tabela#

O modelo não precisa dos seus dados para escrever o código. Ele precisa saber como a tabela se parece: quais colunas existem, que tipo de valores elas contêm e como uma linha é escrita. Isso é o schema mais algumas linhas.

Digamos que seu sales.csv tenha quatro colunas. Este é o prompt inteiro:

text
A pandas DataFrame named df has these columns and types:
date        object
product     object
units        int64
price      float64

First 3 rows (CSV):
date,product,units,price
2026-10-01,Oat latte mix,12,4.50
2026-10-01,Cocoa,7,3.20
2026-10-02,Oat latte mix,9,4.50

Question: Which product sold the most units in October 2026?

Reply with ONE line of pandas code that computes the answer from df.
No explanation, no markdown, no imports.

Espere uma resposta no formato df[df['date'].str.startswith('2026-10')].groupby('product')['units'].sum().idxmax(). A redação exata varia de execução para execução, então leia a linha antes de executá-la.

Por que três linhas e não apenas os nomes das colunas? Por causa da data. A coluna de tipo diz object, o que significa apenas texto. As linhas de exemplo mostram que a data está escrita 2026-10-01, então o modelo sabe que deve corresponder ao texto 2026-10, não a 10/2026 ou a um nome de mês. A maioria das linhas de pandas erradas vem de adivinhar um formato que a tabela nunca teve.

Colar cada linha versus enviar o schema e três linhas
A mesma pergunta: o prompt da esquerda cresce com a tabela, o da direita permanece do mesmo tamanho

O script: pergunte, leia a linha, execute#

O script abaixo monta esse prompt a partir do seu arquivo, para que você não digite o schema manualmente. Ele chama a API CheapTokens através do SDK Python da OpenAI: URL base https://api.cheaptokens.dev/v1, id do modelo deepseek-ai/DeepSeek-V4-Flash-0731. Mantenha a chave em uma variável de ambiente, não no arquivo.

python
import os
import pandas as pd
from openai import OpenAI

client = OpenAI(
    base_url="https://api.cheaptokens.dev/v1",
    api_key=os.environ["CHEAPTOKENS_API_KEY"],
)

df = pd.read_csv("sales.csv")      # for .xlsx: pd.read_excel("sales.xlsx")

schema = df.dtypes.to_string()
sample = df.head(3).to_csv(index=False)
question = "Which product sold the most units in October 2026?"

prompt = f"""A pandas DataFrame named df has these columns and types:
{schema}

First 3 rows (CSV):
{sample}
Question: {question}

Reply with ONE line of pandas code that computes the answer from df.
No explanation, no markdown, no imports."""

resp = client.chat.completions.create(
    model="deepseek-ai/DeepSeek-V4-Flash-0731",
    messages=[{"role": "user", "content": prompt}],
    max_tokens=500,
)

text = resp.choices[0].message.content.strip()
code = text.removeprefix("```python").removeprefix("```").removesuffix("```").strip()
print("Model's line:", code)
print("Tokens in/out:", resp.usage.prompt_tokens, resp.usage.completion_tokens)

if resp.choices[0].finish_reason != "stop" or "import" in code or "__" in code:
    raise SystemExit("Not running this one. Read the line above and decide.")

print("Answer:", eval(code, {"df": df, "pd": pd}))

O último bloco é a parte que os iniciantes pulam. eval executa qualquer texto que o modelo escreveu, na sua máquina, então o script recusa linhas com import ou __ e respostas que foram cortadas (finish_reason diferente de stop; veja por que uma resposta para no meio da frase). E você ainda lê a linha impressa primeiro. Se ela tocar em arquivos, na rede ou em qualquer coisa que você não pediu, não a execute.

A primeira execução imprime três coisas: a linha do modelo, as contagens de tokens para esta única requisição e a resposta. As contagens de tokens são seu medidor para a próxima seção.

Quanto custa: colar tudo vs schema + 3 linhas#

Para comparar, precisamos de um tamanho para uma linha. Digamos que uma linha como 2026-10-01,Oat latte mix,12,4.50 leve cerca de 20 tokens. Isso é uma suposição: depende do tokenizador do modelo e das suas colunas, e contar tokens antes de enviar mostra seu número real. Com 20 tokens por linha, 5.000 linhas são 5.000 × 20 = 100.000 tokens de entrada. O prompt de schema e três linhas tem cerca de 300 tokens, instruções incluídas. A resposta é curta nos dois casos, digamos 60 tokens, então a diferença está inteiramente no lado da entrada, o que cresce com sua tabela (mais sobre isso em tokens de entrada vs saída).

Uma pergunta sobre uma tabela de 5.000 linhas no DeepSeek-V4-Flash, 60 tokens de resposta
  • Colar todas as 5.000 linhas$0.0015
  • Schema + 3 linhas$0.000011

Ambos os números são pequenos em dólares, e isso é honesto: um modelo barato torna até a forma desperdiçadora acessível. A diferença é o que cresce. Faça 20 perguntas por dia e o prompt de colar tudo é enviado 20 vezes. Dobre a tabela e seu custo dobra, enquanto o prompt de schema não se move. E há uma parede rígida: com uma janela de contexto de 380K tokens, 380.000 ÷ 20 = 19.000 linhas é o máximo que você poderia colar, antes de deixar qualquer espaço para a resposta. Uma exportação de 50.000 linhas simplesmente não cabe. O prompt de schema cabe, qualquer que seja o tamanho da tabela.

Coloque sua própria tabela e veja o custo diário:

Calculadora de custos

Sua tabela colada inteira: 20 perguntas por dia

Tokens de entrada por solicitação: 100.000 · Tokens de saída por solicitação: 60 · Solicitações por dia: 20

ModeloPor diaPor mês
GLM-5.3-Flash$0.04$1.20
DeepSeek-V4-Flash$0.0301$0.904
MiniMax-M2.7$0.10$3.01

Mude in para 300 para ver a forma com schema. O DeepSeek-V4-Flash na CheapTokens tem um preço a qualquer hora, sem sobretaxa de horário de pico, e um saldo cobre todos os modelos, então você pode trocar o id do modelo por zai-org/GLM-5.3-Flash (contexto de 390K) sem uma segunda conta. Os preços atuais estão na página de preços.

Verifique o número antes de confiar nele#

O ciclo é sempre o mesmo. Faça isso toda vez, e uma resposta errada é pega no passo quatro em vez de em um relatório.

Colocar em ordem

Coloque o ciclo em ordem

  1. Descreva a tabela: tipos de coluna e 3 linhas de exemplo
  2. Peça uma linha de pandas, nada mais
  3. Leia a linha, depois execute-a no arquivo completo
  4. Verifique o resultado manualmente em algumas linhas
O ciclo: tabela, schema e três linhas, uma linha de pandas, seu número
O modelo só vê o passo do meio; a tabela completa nunca sai do seu computador

O passo quatro é barato. Filtre o arquivo para um punhado de linhas (df[df['product'] == 'Cocoa'].head(10)), some-as de cabeça ou em uma planilha e compare. Se a linha do modelo estiver errada, geralmente está errada de forma óbvia: contou linhas em vez de somar units, ou escolheu o mês errado.

Para mais hábitos como este, veja por que a IA inventa coisas e 4 hábitos de prompt que reduzem isso.

Se não funcionar#

  • KeyError: 'Date'. O modelo escreveu um nome de coluna com maiúsculas diferentes. Cole a linha de cabeçalho real no prompt, o que as três linhas de exemplo já fazem, e adicione "use os nomes das colunas exatamente como mostrado".
  • A resposta tem uma frase antes do código. Seu eval falha com um SyntaxError. Repita "UMA linha de código pandas, sem explicação" no final do prompt, a última instrução conta mais.
  • A resposta é uma tabela, não um número. Diga qual formato você quer: "retorne um único número" ou "retorne uma Series ordenada em ordem decrescente".
  • As datas saem erradas. As linhas de exemplo mostram o formato real. Se suas datas são 14/10/2026, o modelo precisa ver isso; adicione pd.to_datetime(df['date'], dayfirst=True) ao prompt como a forma que você gostaria que as datas fossem lidas.
  • finish_reason é length. A resposta foi cortada por max_tokens. Uma única linha cabe em 500 tokens, então verifique o prompt: o modelo pode estar explicando longamente.

A configuração completa para sua primeira requisição, da chave à resposta, está na documentação da CheapTokens.