Bloga dön

Yeni başlayanlar için AIKılavuz

Bir LLM'e CSV hakkında soru sorun: tabloyu değil, şemayı gönderin

Sütun adlarını, türlerini ve 3 örnek satırı gönderin, tek bir pandas satırı alın, tam dosya üzerinde çalıştırın. Satır yapıştırmaktan daha ucuz ve sayıyı kontrol edebilirsiniz.

Yazan: CheapTokens TeamYayınlanma tarihi: 6 dk okuma

Bir CSV'yi okuyan, sütun türlerini ve üç satırı alan ve tek bir pandas satırı isteyen kod satırları
Bu sayfada
  1. Tüm tabloyu yapıştırmak neden yanlış gider
  2. Tabloyu değil, tablonun şeklini gönderin
  3. Betik: sor, satırı oku, çalıştır
  4. Maliyeti: her şeyi yapıştırmak vs şema + 3 satır
  5. Sayıya güvenmeden önce kontrol edin
  6. İşe yaramazsa

Elinizde 5.000 satırlık bir sales.csv ve tek bir soru var: Ekim ayında en çok hangi ürün satıldı? Dosyayı sohbete yapıştırmayın. Modele sütun adlarını, türlerini ve üç örnek satırı gönderin, tek satır pandas kodu isteyin ve o satırı tam dosya üzerinde kendiniz çalıştırın. Model 5.000 satırınızı asla okumaz, istem küçük kalır ve elde ettiğiniz sayı yeniden çalıştırabileceğiniz koddan gelir.

Bunun neden daha iyi çalıştığını, istemin nasıl göründüğünü, kopyalayabileceğiniz bir betiği ve her şeyi yapıştırma yöntemine kıyasla maliyetini burada bulacaksınız.

Tüm tabloyu yapıştırmak neden yanlış gider#

Tanıdık gelebilecek bir hikaye. Birisi 200 satırlık masrafı sohbete yapıştırıp toplamı sorar. Cevap kendinden emin, kuruşu kuruşuna gelir. Aynı zamanda yanlıştır ve ekranda bunu size söyleyen hiçbir şey yoktur.

Model metni parça parça tahmin eder (bu parçalar tokenlardır). 200 sayının toplamı, içinde hesap makinesi olmayan 200 küçük adımdır ve kayan tek bir rakam doğru bir cevap gibi görünür. Kod farklı davranır: df['amount'].sum() her seferinde tüm satırları toplar ve ikinci çalıştırmada aynı sonucu verir.

İkinci bir sorun daha var, o da boyutla ilgili. Bir tablo bağlam penceresini hızla tüketir ve her soruda her satır için ödeme yaparsınız. Aynı dosya hakkında on soru, tüm tablonun on kopyasının girdi olarak gönderilmesi demektir.

Hızlı kontrol

Bir pandas satırı, modelden toplam istemekten neden daha güvenlidir?

Cevabı göster

Cevap: Bilgisayarınız kodu her satırda çalıştırır ve yeniden çalıştırıp kontrol edebilirsiniz

Model yine de yanlış bir satır yazabilir. Fark şu ki bir satır görünür ve tekrarlanabilirdir: okursunuz, çalıştırırsınız ve sonucu birkaç satırla elle karşılaştırırsınız.

Tabloyu değil, tablonun şeklini gönderin#

Modelin kodu yazmak için verilerinize ihtiyacı yok. Tablonun neye benzediğini bilmesi gerekir: hangi sütunlar var, ne tür değerler tutuyorlar ve bir satır nasıl yazılıyor. Bu, şema artı birkaç satırdır.

Diyelim ki sales.csv dört sütunlu. İstemin tamamı şu:

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.

df[df['date'].str.startswith('2026-10')].groupby('product')['units'].sum().idxmax() şeklinde bir yanıt bekleyin. Tam ifade her çalıştırmada farklıdır, bu yüzden satırı çalıştırmadan önce okuyun.

Neden sadece sütun adları değil de üç satır? Tarih yüzünden. Tür sütunu object der, bu sadece metin anlamına gelir. Örnek satırlar tarihin 2026-10-01 olarak yazıldığını gösterir, böylece model 10/2026 veya bir ay adıyla değil, 2026-10 metniyle eşleşmesi gerektiğini bilir. Yanlış pandas satırlarının çoğu, tablonun hiç sahip olmadığı bir biçimi tahmin etmekten kaynaklanır.

Her satırı yapıştırmak ile şema ve üç satır göndermek
Aynı soru: soldaki istem tabloyla büyür, sağdaki aynı boyutta kalır

Betik: sor, satırı oku, çalıştır#

Aşağıdaki betik bu istemi dosyanızdan oluşturur, böylece şemayı elle yazmazsınız. CheapTokens API'sini OpenAI Python SDK'sı üzerinden çağırır: temel URL https://api.cheaptokens.dev/v1, model kimliği deepseek-ai/DeepSeek-V4-Flash-0731. Anahtarı dosyada değil, bir ortam değişkeninde tutun.

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}))

Son blok, yeni başlayanların atladığı kısımdır. eval modelin yazdığı metni makinenizde çalıştırır, bu yüzden betik import veya __ içeren satırları ve kesilmiş yanıtları (stop dışında finish_reason; bir yanıtın neden cümle ortasında durduğunu görün) reddeder. Ve yine de önce yazdırılan satırı okursunuz. Dosyalara, ağa veya sormadığınız herhangi bir şeye dokunuyorsa çalıştırmayın.

İlk çalıştırma üç şey yazdırır: modelin satırı, bu tek istek için token sayıları ve yanıt. Token sayıları bir sonraki bölüm için sayacınızdır.

Maliyeti: her şeyi yapıştırmak vs şema + 3 satır#

Karşılaştırmak için bir satırın boyutuna ihtiyacımız var. Diyelim ki 2026-10-01,Oat latte mix,12,4.50 gibi bir satır yaklaşık 20 token tutuyor. Bu bir varsayım: modelin tokenizer'ına ve sütunlarınıza bağlıdır ve göndermeden önce token saymak gerçek sayınızı gösterir. Satır başına 20 token ile 5.000 satır 5.000 × 20 = 100.000 girdi token'ıdır. Şema ve üç satır istemi, talimatlar dahil, yaklaşık 300 token'dır. Yanıt her iki durumda da kısadır, diyelim 60 token, yani fark tamamen girdi tarafında, tablonuzla büyüyen tarafta oturur (girdi vs çıktı token'ları hakkında daha fazlası).

DeepSeek-V4-Flash üzerinde 5.000 satırlık bir tablo hakkında bir soru, 60 token yanıt
  • 5.000 satırın tamamını yapıştır$0.0015
  • Şema + 3 satır$0.000011

Her iki sayı da dolar cinsinden küçüktür ve bu dürüsttür: ucuz bir model, savurgan yolu bile karşılanabilir kılar. Büyüyen şey aradaki farktır. Günde 20 soru sorun, her şeyi yapıştırma istemi 20 kez gönderilir. Tabloyu ikiye katlayın, maliyeti ikiye katlanır, şema istemi ise yerinden kımıldamaz. Ve sert bir duvar vardır: 380K token'lık bir bağlam penceresiyle, 380.000 ÷ 20 = 19.000 satır, yanıt için hiç yer bırakmadan yapıştırabileceğiniz en fazla satırdır. 50.000 satırlık bir dışa aktarım kısaca sığmaz. Şema istemi ise tablo boyutu ne olursa olsun sığar.

Kendi tablonuzu girin ve günlük maliyeti görün:

Maliyet hesaplayıcı

Tablonuzun tamamı yapıştırılmış: günde 20 soru

İstek başına giriş token'ı: 100.000 · İstek başına çıkış token'ı: 60 · Günlük istek sayısı: 20

ModelGünlükAylık
GLM-5.3-Flash$0.04$1.20
DeepSeek-V4-Flash$0.0301$0.904
MiniMax-M2.7$0.10$3.01

Şema yöntemini görmek için in değerini 300 yapın. CheapTokens üzerindeki DeepSeek-V4-Flash her saatte tek fiyata sahiptir, yoğun saat ek ücreti yoktur ve tek bakiye her modeli kapsar, böylece ikinci bir hesap açmadan model kimliğini zai-org/GLM-5.3-Flash (390K bağlam) ile değiştirebilirsiniz. Güncel fiyatlar fiyatlandırma sayfasında.

Sayıya güvenmeden önce kontrol edin#

Döngü her zaman aynıdır. Her seferinde yapın, yanlış bir cevap bir raporda değil dördüncü adımda yakalanır.

Sıraya koy

Döngüyü sıraya koyun

  1. Tabloyu tanımlayın: sütun türleri ve 3 örnek satır
  2. Tek bir pandas satırı isteyin, başka bir şey değil
  3. Satırı okuyun, sonra tam dosya üzerinde çalıştırın
  4. Sonucu birkaç satırda elle kontrol edin
Döngü: tablo, şema ve üç satır, tek pandas satırı, sayınız
Model yalnızca orta adımı görür; tam tablo bilgisayarınızdan asla ayrılmaz

Dördüncü adım ucuzdur. Dosyayı birkaç satıra indirin (df[df['product'] == 'Cocoa'].head(10)), kafanızda veya bir elektronik tabloda toplayın ve karşılaştırın. Modelin satırı yanlışsa, genellikle bariz bir şekilde yanlıştır: units toplamak yerine satırları saymıştır veya yanlış ayı seçmiştir.

Bunun gibi daha fazla alışkanlık için yapay zekanın neden uydurduğunu ve bunu azaltan 4 istem alışkanlığını görün.

İşe yaramazsa#

  • KeyError: 'Date'. Model bir sütun adını farklı büyük/küçük harflerle yazdı. Gerçek başlık satırını isteme yapıştırın, ki üç örnek satır bunu zaten yapıyor, ve "sütun adlarını tam gösterildiği gibi kullan" ekleyin.
  • Yanıtta koddan önce bir cümle var. eval bir SyntaxError ile başarısız olur. İstemin sonunda "TEK satır pandas kodu, açıklama yok" ifadesini tekrarlayın, son talimat en çok sayılır.
  • Cevap bir sayı değil, bir tablo. İstediğiniz şekli söyleyin: "tek bir sayı döndür" veya "azalan sıralı bir Series döndür".
  • Tarihler yanlış çıkıyor. Örnek satırlar gerçek biçimi gösterir. Tarihleriniz 14/10/2026 ise, modelin bunu görmesi gerekir; tarihlerin okunmasını istediğiniz şekil olarak isteme pd.to_datetime(df['date'], dayfirst=True) ekleyin.
  • finish_reason length. Yanıt max_tokens tarafından kesildi. Tek bir satır 500 token'a sığar, bu yüzden istemi kontrol edin: model uzun uzun açıklıyor olabilir.

İlk isteğiniz için tam kurulum, anahtardan yanıta kadar, CheapTokens belgelerinde.