AI для новичковИнструкция
Вопрос ИИ про CSV: отправьте схему, а не всю таблицу
Отправьте названия столбцов, типы и 3 строки-образца, получите одну строку pandas и запустите её на всём файле. Дешевле, чем вставлять строки, и число можно проверить.

Содержание
У вас файл sales.csv на 5 000 строк и один вопрос: какой товар лучше всего продавался в октябре? Не вставляйте файл в чат. Отправьте модели названия столбцов, их типы и три строки-образца, попросите одну строку pandas и запустите её на полном файле сами. Модель не читает ваши 5 000 строк, запрос остаётся крошечным, а число вы получаете из кода, который можно перезапустить.
Дальше: почему так надёжнее, как выглядит запрос, готовый скрипт и сколько это стоит рядом со способом «вставить всё».
Почему вставлять всю таблицу — плохая идея#
История, которую многие узнают. Кто-то вставляет в чат 200 строк расходов и просит сумму. Ответ приходит уверенный, с копейками. И он неверный, а на экране об этом ни слова.
Модель дописывает текст кусочек за кусочком (эти кусочки — токены). Сумма 200 чисел — это 200 мелких шагов без калькулятора внутри, и одна съехавшая цифра выглядит точно так же, как верный ответ. Код ведёт себя иначе: df['amount']. складывает все строки, каждый раз, и при втором запуске даёт тот же результат.
Есть и вторая беда — размер. Таблица быстро съедает контекстное окно, а платите вы за каждую строку при каждом вопросе. Десять вопросов про один файл — это десять копий всей таблицы на входе.
Быстрая проверка
Почему строка pandas надёжнее, чем просьба «посчитай итог» к модели?
Показать ответ
Ответ: Код выполняет ваш компьютер на всех строках, и результат можно перезапустить и проверить
Модель всё равно может написать неверную строку. Разница в том, что строку видно и она воспроизводима: вы читаете её, запускаете и сверяете результат с несколькими строками вручную.
Отправляйте форму таблицы, а не саму таблицу#
Для написания кода модели не нужны ваши данные. Ей нужно знать, как таблица устроена: какие есть столбцы, какие значения в них лежат и как записана строка. Это схема плюс несколько строк.
Допустим, в sales.csv четыре столбца. Вот весь запрос:
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'].. Точная формулировка от запуска к запуску меняется, поэтому прочитайте строку, прежде чем запускать.
Зачем три строки, а не одни названия столбцов? Из-за даты. Тип object значит только «текст». Строки-образцы показывают, что дата записана как 2026-10-01, и модель понимает, что искать нужно текст 2026-10, а не 10/2026 и не название месяца. Большинство неверных строк pandas появляется из-за догадки о формате, которого в таблице никогда не было.

Скрипт: спросить, прочитать строку, запустить#
Скрипт ниже собирает такой запрос из вашего файла, поэтому схему не нужно набирать руками. Он обращается к API CheapTokens через Python SDK от OpenAI: базовый адрес https:/, id модели deepseek-. Ключ храните в переменной окружения, а не в файле.
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") # для .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- занимает около 20 токенов. Это допущение: оно зависит от токенизатора модели и ваших столбцов, а подсчёт токенов до отправки покажет ваше настоящее число. При 20 токенах на строку 5 000 строк — это 5 000 × 20 = 100 000 входных токенов. Запрос со схемой и тремя строками — около 300 токенов вместе с инструкцией. Ответ в обоих случаях короткий, скажем 60 токенов, так что вся разница лежит на входе — той стороне, что растёт вместе с таблицей (подробнее — входные и выходные токены).
Обе суммы в долларах малы, и это честно: на дешёвой модели даже расточительный способ по карману. Растёт именно разрыв. Задайте 20 вопросов в день — и «вставить всё» уйдёт 20 раз. Таблица вдвое больше — и стоимость вдвое выше, а запрос со схемой не меняется. Есть и жёсткая стена: при контекстном окне 380K токенов 380 000 ÷ 20 = 19 000 строк — максимум, что можно вставить, ещё не оставив места под ответ. Выгрузка на 50 000 строк просто не влезет. Запрос со схемой влезет при любом размере таблицы.
Подставьте свою таблицу и посмотрите суточную стоимость:
Калькулятор стоимости
Ваша таблица целиком: 20 вопросов в день
Входные токены на запрос: 100 000 · Выходные токены на запрос: 60 · Запросов в день: 20
| Модель | В день | В месяц |
|---|---|---|
| GLM-5.3-Flash$0.02$0.04 | $0.04 | $1.20 |
| DeepSeek-V4-Flash$0.015$0.10 | $0.0301 | $0.904 |
| MiniMax-M2.7$0.05$0.15 | $0.10 | $3.01 |
Поставьте in равным 300, чтобы увидеть вариант со схемой. У DeepSeek-V4-Flash в CheapTokens одна цена в любое время суток, без наценки в часы пик, а один баланс покрывает все модели, так что id модели можно сменить на zai- (контекст 390K) без второго аккаунта. Актуальные цены — на странице тарифов.
Проверьте число, прежде чем верить#
Цикл всегда один. Проходите его каждый раз — и неверный ответ поймается на четвёртом шаге, а не в отчёте.
Расставьте по порядку
Расставьте шаги цикла по порядку
Перетащите элементы или используйте стрелки
- Опишите таблицу: типы столбцов и 3 строки-образца
- Попросите одну строку pandas и больше ничего
- Прочитайте строку, затем запустите её на полном файле
- Проверьте результат вручную на нескольких строках

Четвёртый шаг дешёвый. Отфильтруйте файл до горстки строк (df[df['product'] == 'Cocoa'].), сложите их в уме или в таблице и сравните. Если строка модели неверна, ошибка обычно очевидная: она посчитала строки вместо суммы units или взяла не тот месяц.
Больше таких привычек — в статье почему ИИ выдумывает и 4 привычки, которые это снижают.
Если не работает#
KeyError: 'Date'. Модель написала название столбца с другими заглавными. Вставьте в запрос настоящую строку заголовков — три строки-образца это уже делают — и добавьте «используй названия столбцов точно как в образце».- Перед кодом в ответе есть предложение.
evalпадает сSyntaxError. Повторите «ОДНА строка кода pandas, без пояснений» в конце запроса: последняя инструкция весит больше всех. - В ответе таблица, а не число. Скажите, какая форма нужна: «верни одно число» или «верни Series, отсортированный по убыванию».
- Даты распознаны неверно. Строки-образцы показывают настоящий формат. Если у вас даты вида
14/10/2026, модель должна это увидеть; добавьте в запросpd.как способ, которым вы хотите читать даты.to_ datetime(df['date'], dayfirst=True) finish_reasonравенlength. Ответ обрезан поmax_tokens. Одна строка помещается в 500 токенов, так что проверьте запрос: возможно, модель пишет длинные пояснения.
Весь путь к первому запросу, от ключа до ответа, описан в документации CheapTokens.



