Назад в блог

AI для новичковИнструкция

Вопрос ИИ про CSV: отправьте схему, а не всю таблицу

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

Автор: CheapTokens TeamОпубликовано 6 мин чтения

Строки кода: чтение CSV, типы столбцов и три строки, просьба вернуть одну строку pandas
Содержание
  1. Почему вставлять всю таблицу — плохая идея
  2. Отправляйте форму таблицы, а не саму таблицу
  3. Скрипт: спросить, прочитать строку, запустить
  4. Сколько это стоит: вставить всё или схема и 3 строки
  5. Проверьте число, прежде чем верить
  6. Если не работает

У вас файл sales.csv на 5 000 строк и один вопрос: какой товар лучше всего продавался в октябре? Не вставляйте файл в чат. Отправьте модели названия столбцов, их типы и три строки-образца, попросите одну строку 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 появляется из-за догадки о формате, которого в таблице никогда не было.

Вставка всех строк и отправка схемы с тремя строками
Один и тот же вопрос: левый запрос растёт вместе с таблицей, правый остаётся того же размера

Скрипт: спросить, прочитать строку, запустить#

Скрипт ниже собирает такой запрос из вашего файла, поэтому схему не нужно набирать руками. Он обращается к API CheapTokens через Python SDK от OpenAI: базовый адрес 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")      # для .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 токенов, так что вся разница лежит на входе — той стороне, что растёт вместе с таблицей (подробнее — входные и выходные токены).

Один вопрос про таблицу на 5 000 строк на DeepSeek-V4-Flash, ответ 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, чтобы увидеть вариант со схемой. У DeepSeek-V4-Flash в CheapTokens одна цена в любое время суток, без наценки в часы пик, а один баланс покрывает все модели, так что id модели можно сменить на zai-org/GLM-5.3-Flash (контекст 390K) без второго аккаунта. Актуальные цены — на странице тарифов.

Проверьте число, прежде чем верить#

Цикл всегда один. Проходите его каждый раз — и неверный ответ поймается на четвёртом шаге, а не в отчёте.

Расставьте по порядку

Расставьте шаги цикла по порядку

  1. Опишите таблицу: типы столбцов и 3 строки-образца
  2. Попросите одну строку pandas и больше ничего
  3. Прочитайте строку, затем запустите её на полном файле
  4. Проверьте результат вручную на нескольких строках
Цикл: таблица, схема и три строки, одна строка pandas, ваше число
Модель видит только средний шаг; полная таблица не покидает ваш компьютер

Четвёртый шаг дешёвый. Отфильтруйте файл до горстки строк (df[df['product'] == 'Cocoa'].head(10)), сложите их в уме или в таблице и сравните. Если строка модели неверна, ошибка обычно очевидная: она посчитала строки вместо суммы 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.