بلاگ پر واپس جائیں

نئے سیکھنے والوں کے لیے AIگائیڈ

CSV کے بارے میں LLM سے پوچھیں: اسکیما بھیجیں، ٹیبل نہیں

کالم کے نام، اقسام اور 3 نمونہ قطاریں بھیجیں، pandas کی ایک لائن واپس لیں، اسے پوری فائل پر چلائیں۔ قطاریں پیسٹ کرنے سے سستا، اور آپ نمبر جانچ سکتے ہیں۔

از CheapTokens Teamشائع شدہ 8 منٹ کا مطالعہ

کوڈ کی لائنیں جو CSV پڑھتی ہیں، اس کے کالم کی اقسام اور تین قطاریں لیتی ہیں، اور pandas کی ایک لائن طلب کرتی ہیں
اس صفحہ پر
  1. پوری ٹیبل پیسٹ کرنا کیوں غلط ہوتا ہے
  2. ٹیبل کی ساخت بھیجیں، ٹیبل نہیں
  3. اسکرپٹ: پوچھیں، لائن پڑھیں، چلائیں
  4. لاگت کیا ہے: سب کچھ پیسٹ کرنا بمقابلہ اسکیما + 3 قطاریں
  5. نمبر پر بھروسہ کرنے سے پہلے اسے جانچیں
  6. اگر یہ کام نہ کرے

آپ کے پاس 5,000 قطاروں والی sales.csv ہے اور ایک سوال: اکتوبر میں سب سے زیادہ کون سی پروڈکٹ بکی؟ فائل کو چیٹ میں پیسٹ نہ کریں۔ ماڈل کو کالم کے نام، ان کی اقسام اور تین نمونہ قطاریں بھیجیں، pandas کی ایک لائن طلب کریں، اور وہ لائن خود پوری فائل پر چلائیں۔ ماڈل آپ کی 5,000 قطاریں کبھی نہیں پڑھتا، پرامپٹ چھوٹا رہتا ہے، اور جو نمبر آپ کو ملتا ہے وہ ایسے کوڈ سے آتا ہے جسے آپ دوبارہ چلا سکتے ہیں۔

یہاں یہ ہے کہ یہ کیوں بہتر کام کرتا ہے، پرامپٹ کیسا دکھتا ہے، ایک اسکرپٹ جسے آپ کاپی کر سکتے ہیں، اور سب کچھ پیسٹ کرنے والے طریقے کے مقابلے میں اس کی لاگت کیا ہے۔

پوری ٹیبل پیسٹ کرنا کیوں غلط ہوتا ہے#

یہاں ایک کہانی ہے جو آپ کو آشنا لگ سکتی ہے۔ کوئی شخص 200 قطاروں کے اخراجات چیٹ میں پیسٹ کرتا ہے اور کل رقم پوچھتا ہے۔ جواب پراعتماد انداز میں آتا ہے، سینٹ سمیت۔ یہ غلط بھی ہے، اور اسکرین پر کچھ بھی آپ کو اس کی نشاندہی نہیں کرتا۔

ماڈل متن کو ٹکڑوں میں پیش گوئی کرتا ہے (وہ ٹکڑے ٹوکنز ہیں)۔ 200 نمبروں کا مجموعہ 200 چھوٹے قدم ہیں جن میں کوئی کیلکولیٹر نہیں، اور ایک پھسلتا ہوا ہندسہ بالکل درست جواب جیسا دکھتا ہے۔ کوڈ مختلف طریقے سے برتاؤ کرتا ہے: df['amount'].sum() ہر بار تمام قطاریں جمع کرتا ہے، اور دوسری بار چلانے پر بھی وہی نتیجہ دیتا ہے۔

ایک دوسرا مسئلہ ہے، اور یہ سائز کے بارے میں ہے۔ ٹیبل کانٹیکسٹ ونڈو کو تیزی سے کھا جاتا ہے، اور آپ ہر سوال پر ہر قطار کی قیمت ادا کرتے ہیں۔ ایک ہی فائل کے بارے میں دس سوالات کا مطلب ہے پوری ٹیبل کی دس کاپیاں بطور ان پٹ بھیجنا۔

فوری جانچ

pandas کی لائن ماڈل سے کل رقم پوچھنے سے زیادہ محفوظ کیوں ہے؟

جواب دکھائیں

جواب: آپ کا کمپیوٹر کوڈ کو ہر قطار پر چلاتا ہے، اور آپ اسے دوبارہ چلا کر جانچ سکتے ہیں

ماڈل پھر بھی غلط لائن لکھ سکتا ہے۔ فرق یہ ہے کہ لائن نظر آتی ہے اور دہرائی جا سکتی ہے: آپ اسے پڑھتے ہیں، چلاتے ہیں، اور نتیجے کا چند قطاروں سے ہاتھ سے موازنہ کرتے ہیں۔

ٹیبل کی ساخت بھیجیں، ٹیبل نہیں#

کوڈ لکھنے کے لیے ماڈل کو آپ کے ڈیٹا کی ضرورت نہیں۔ اسے جاننا ہوتا ہے کہ ٹیبل کیسا دکھتا ہے: کون سے کالم موجود ہیں، ان میں کس قسم کی قدریں ہیں، اور ایک قطار کیسے لکھی جاتی ہے۔ یہ اسکیما کے علاوہ چند قطاریں ہیں۔

فرض کریں آپ کے sales.csv میں چار کالم ہیں۔ یہ پورا پرامپٹ ہے:

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() جیسی شکل میں جواب کی توقع رکھیں۔ درست الفاظ ہر بار مختلف ہوتے ہیں، اس لیے چلانے سے پہلے لائن پڑھیں۔

تین قطاریں کیوں اور صرف کالم کے نام کیوں نہیں؟ تاریخ کی وجہ سے۔ قسم کا کالم object کہتا ہے، جس کا مطلب صرف متن ہے۔ نمونہ قطاریں دکھاتی ہیں کہ تاریخ 2026-10-01 کی شکل میں لکھی گئی ہے، اس لیے ماڈل جانتا ہے کہ متن 2026-10 سے میچ کرنا ہے، نہ کہ 10/2026 یا مہینے کے نام سے۔ زیادہ تر غلط pandas لائنیں ایسی شکل کا اندازہ لگانے سے آتی ہیں جو ٹیبل میں کبھی نہیں تھی۔

ہر قطار پیسٹ کرنا بمقابلہ اسکیما اور تین قطاریں بھیجنا
وہی سوال: بائیں پرامپٹ ٹیبل کے ساتھ بڑھتا ہے، دائیں والا ایک ہی سائز رہتا ہے

اسکرپٹ: پوچھیں، لائن پڑھیں، چلائیں#

نیچے دیا گیا اسکرپٹ آپ کی فائل سے وہ پرامپٹ بناتا ہے، تاکہ آپ اسکیما ہاتھ سے نہ لکھیں۔ یہ OpenAI Python SDK کے ذریعے CheapTokens API کو کال کرتا ہے: بیس URL https://api.cheaptokens.dev/v1، ماڈل id deepseek-ai/DeepSeek-V4-Flash-0731۔ کلید کو ماحول کے متغیر میں رکھیں، فائل میں نہیں۔

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

آخری بلاک وہ حصہ ہے جو ابتدائی افراد چھوڑ دیتے ہیں۔ eval ماڈل کا لکھا ہوا کوئی بھی متن آپ کی مشین پر چلاتا ہے، اس لیے اسکرپٹ import یا __ والی لائنیں اور کٹے ہوئے جوابات (finish_reason جو stop کے علاوہ ہو؛ دیکھیں جواب درمیان میں کیوں رک جاتا ہے) مسترد کر دیتا ہے۔ اور آپ پھر بھی پہلے پرنٹ شدہ لائن پڑھیں۔ اگر یہ فائلوں، نیٹ ورک یا کسی ایسی چیز کو چھوتا ہے جو آپ نے نہیں پوچھی، تو اسے نہ چلائیں۔

پہلا رن تین چیزیں پرنٹ کرتا ہے: ماڈل کی لائن، اس ایک درخواست کے ٹوکن کی گنتی، اور جواب۔ ٹوکن کی گنتی اگلے حصے کے لیے آپ کا پیمانہ ہے۔

لاگت کیا ہے: سب کچھ پیسٹ کرنا بمقابلہ اسکیما + 3 قطاریں#

موازنہ کرنے کے لیے، ہمیں ایک قطار کا سائز چاہیے۔ فرض کریں 2026-10-01,Oat latte mix,12,4.50 جیسی ایک قطار تقریباً 20 ٹوکن لیتی ہے۔ یہ ایک مفروضہ ہے: یہ ماڈل کے ٹوکنائزر اور آپ کے کالموں پر منحصر ہے، اور بھیجنے سے پہلے ٹوکن گننا آپ کا اصل نمبر دکھاتا ہے۔ 20 ٹوکن فی قطار کے ساتھ، 5,000 قطاریں 5,000 × 20 = 100,000 ان پٹ ٹوکن ہیں۔ اسکیما اور تین قطاروں والا پرامپٹ ہدایات سمیت تقریباً 300 ٹوکن ہے۔ جواب دونوں صورتوں میں مختصر ہے، فرض کریں 60 ٹوکن، اس لیے فرق مکمل طور پر ان پٹ کی طرف ہے، وہی جو آپ کی ٹیبل کے ساتھ بڑھتا ہے (مزید ان پٹ بمقابلہ آؤٹ پٹ ٹوکنز میں)۔

DeepSeek-V4-Flash پر 5,000 قطاروں والی ٹیبل کے بارے میں ایک سوال، 60 ٹوکن جواب
  • تمام 5,000 قطاریں پیسٹ کریں$0.0015
  • اسکیما + 3 قطاریں$0.000011

دونوں نمبر ڈالر میں چھوٹے ہیں، اور یہ ایمانداری ہے: سستا ماڈل فضول طریقے کو بھی سستی بنا دیتا ہے۔ فرق وہ ہے جو بڑھتا ہے۔ دن میں 20 سوال پوچھیں اور سب کچھ پیسٹ کرنے والا پرامپٹ 20 بار بھیجا جاتا ہے۔ ٹیبل دوگنا کریں اور اس کی لاگت دوگنی ہو جاتی ہے، جبکہ اسکیما پرامپٹ نہیں ہلتا۔ اور ایک سخت دیوار ہے: 380K ٹوکن کی کانٹیکسٹ ونڈو کے ساتھ، 380,000 ÷ 20 = 19,000 قطاریں سب سے زیادہ ہیں جو آپ کبھی پیسٹ کر سکتے ہیں، جواب کے لیے کوئی جگہ چھوڑنے سے پہلے۔ 50,000 قطاروں کی ایکسپورٹ بس فٹ نہیں ہوتی۔ اسکیما پرامپٹ فٹ ہو جاتا ہے، ٹیبل کا سائز جو بھی ہو۔

اپنی ٹیبل ڈالیں اور روزانہ کی لاگت دیکھیں:

لاگت کیلکولیٹر

آپ کی ٹیبل پوری پیسٹ: دن میں 20 سوال

فی درخواست ان پٹ ٹوکنز: 100,000 · فی درخواست آؤٹ پٹ ٹوکنز: 60 · فی دن درخواستیں: 20

ماڈلفی دنفی ماہ
GLM-5.3-Flash$0.04$1.20
DeepSeek-V4-Flash$0.0301$0.904
MiniMax-M2.7$0.10$3.01

اسکیما والا طریقہ دیکھنے کے لیے in کو 300 میں تبدیل کریں۔ CheapTokens پر DeepSeek-V4-Flash کی کسی بھی وقت ایک قیمت ہے، کوئی پیک ٹائم سرچارج نہیں، اور ایک بیلنس ہر ماڈل کو کور کرتا ہے، اس لیے آپ دوسرے اکاؤنٹ کے بغیر ماڈل id کو zai-org/GLM-5.3-Flash (390K کانٹیکسٹ) سے بدل سکتے ہیں۔ موجودہ قیمتیں قیمتوں کے صفحے پر ہیں۔

نمبر پر بھروسہ کرنے سے پہلے اسے جانچیں#

لوپ ہمیشہ ایک جیسا ہے۔ اسے ہر بار کریں، اور غلط جواب چوتھے مرحلے پر پکڑا جائے گا، رپورٹ میں نہیں۔

ترتیب دیں

لوپ کو ترتیب دیں

  1. ٹیبل بیان کریں: کالم کی اقسام اور 3 نمونہ قطاریں
  2. pandas کی ایک لائن طلب کریں، اور کچھ نہیں
  3. لائن پڑھیں، پھر اسے پوری فائل پر چلائیں
  4. نتیجے کو چند قطاروں پر ہاتھ سے جانچیں
لوپ: ٹیبل، اسکیما اور تین قطاریں، pandas کی ایک لائن، آپ کا نمبر
ماڈل صرف درمیانی مرحلہ دیکھتا ہے؛ پوری ٹیبل کبھی آپ کا کمپیوٹر نہیں چھوڑتی

چوتھا مرحلہ سستا ہے۔ فائل کو چند قطاروں تک فلٹر کریں (df[df['product'] == 'Cocoa'].head(10))، انہیں ذہن میں یا اسپریڈ شیٹ میں جمع کریں، اور موازنہ کریں۔ اگر ماڈل کی لائن غلط ہے، تو یہ عام طور پر واضح طریقے سے غلط ہوتی ہے: اس نے units جمع کرنے کے بجائے قطاریں گنیں، یا اس نے غلط مہینہ چنا۔

اس جیسی مزید عادات کے لیے، دیکھیں AI چیزیں کیوں گھڑتا ہے اور 4 پرامپٹ عادات جو اسے کم کرتی ہیں۔

اگر یہ کام نہ کرے#

  • KeyError: 'Date'۔ ماڈل نے مختلف بڑے حروف کے ساتھ کالم کا نام لکھا۔ اصل ہیڈر قطار پرامپٹ میں پیسٹ کریں، جو تین نمونہ قطاریں پہلے ہی کر رہی ہیں، اور شامل کریں "کالم کے نام بالکل ویسے ہی استعمال کریں جیسے دکھائے گئے ہیں"۔
  • جواب میں کوڈ سے پہلے ایک جملہ ہے۔ آپ کا eval SyntaxError کے ساتھ ناکام ہوتا ہے۔ پرامپٹ کے آخر میں "pandas کوڈ کی ایک لائن، کوئی وضاحت نہیں" دہرائیں، آخری ہدایت سب سے زیادہ اہمیت رکھتی ہے۔
  • جواب ایک ٹیبل ہے، نمبر نہیں۔ بتائیں کہ آپ کون سی شکل چاہتے ہیں: "ایک واحد نمبر واپس کریں" یا "نزولی ترتیب میں ترتیب دی گئی Series واپس کریں"۔
  • تاریخیں غلط آتی ہیں۔ نمونہ قطاریں اصل شکل دکھاتی ہیں۔ اگر آپ کی تاریخیں 14/10/2026 ہیں، تو ماڈل کو یہ دیکھنے کی ضرورت ہے؛ پرامپٹ میں pd.to_datetime(df['date'], dayfirst=True) شامل کریں کہ آپ تاریخیں کیسے پڑھنا چاہتے ہیں۔
  • finish_reason length ہے۔ جواب max_tokens سے کٹ گیا۔ ایک لائن 500 ٹوکن میں فٹ ہو جاتی ہے، اس لیے پرامپٹ چیک کریں: ماڈل شاید تفصیل سے وضاحت کر رہا ہے۔

آپ کی پہلی درخواست کی مکمل سیٹ اپ، کلید سے جواب تک، CheapTokens دستاویزات میں ہے۔