Содержание
  1. Как писать код с DeepSeek: границы веб-чата и проверенного API-примера
  2. Небольшой CSV-проект и исходная ошибка с десятичной запятой
  3. Готовый промпт на исправление кода с тестами
  4. Исправленная функция и запуск воспроизводимых тестов
  5. Как дать модели traceback и критерии успеха
  6. Варианты запроса для написания и проверки кода
  7. Как проверить зависимости, безопасность и результаты самостоятельно
  8. Частые вопросы
Гайды

Дипсик код: как писать и проверять программы

8 октября 2026 · 9 минут чтения

Материал редакции Зерокодера. Счёт по выдаче снят собственным прогоном 8 октября 2026 года; цитаты источников приведены дословно. Обновлено: октябрь 2026.

Дипсик код пишет в веб-чате и через API, но это два разных пути с разными границами. В чате вы получаете текст ответа и копируете его руками; через API ответ приходит программно, и его можно сразу прогнать тестами. Ниже — рабочий пример: CSV с десятичной запятой, падение на float('120,50'), исправленная функция и три воспроизводимых теста. Мы скачали топ-10 выдачи DuckDuckGo (ru-RU) по запросу «дипсик код»: текст отдали 6 из 10.

Как писать код с DeepSeek: границы веб-чата и проверенного API-примера

В веб-чате вы передаёте исходный код и условие текстом. Для этой статьи предлагается сохранить ответ в локальный файл и проверить его своим интерпретатором. Возможности конкретного интерфейса проверяйте в своём аккаунте: наше испытание не проводилось в веб-чате.

В официальной документации DeepSeek описан программный запрос к API. Наш пример использует другой транспорт — OpenRouter API через штатный вызов редакционного конвейера, модель deepseek/deepseek-v4.1-flash. Среда проверки — Python 3.14.3. Это точное обозначение проверенного вызова; результат нельзя приписывать другим моделям или всему веб-приложению.

Сохранённый ответ модели содержал функцию. Редактор запускал её локально и сравнивал вывод тестов до и после замены реализации. API сам по себе не доказывает работоспособность кода: полученный текст нужно сохранить и исполнить в подготовленном окружении. Так же поступайте с кодом, скопированным из чата.

До отправки запроса определите вход, выход и границы изменения. Для учебного примера вход — текст CSV с колонкой amount, выход — сумма. Разделитель дробной части может быть точкой либо запятой; число с запятой заключено в кавычки CSV. Отдельно проверяется файл с заголовком без строк. Возможности нынешних версий, тарифы и сравнение скорости моделей здесь не измерялись.

Небольшой CSV-проект и исходная ошибка с десятичной запятой

Задача маленькая и типичная: посчитать сумму по колонке amount в CSV-файле. Исходная функция выглядит так:

PYTHON4 строки
import csv
from io import StringIO
def total_revenue(text):
    return sum(float(r['amount']) for r in csv.DictReader(StringIO(text)))

Она падает на данных, где десятичный разделитель — запятая. Тест test_decimal_comma подаёт строку amount\n"120,50"\n"79,50"\n и получает:

КОД
ValueError: could not convert string to float: '120,50'

Причина в одной строке: float('120,50') не понимает запятую. В документации Python по модулю csv прямо сказано, что «differences can make it annoying to process CSV files from multiple sources» — различия форматов мешают обрабатывать файлы из разных источников. Запятая как десятичный разделитель — ровно такой случай: файл сгенерирован таблицей, а парсер ждёт точку.

Обратите внимание на поведение остальных тестов. test_decimal_point с точкой проходит, test_empty с заголовком CSV без строк данных тоже проходит. То есть ошибка не в логике суммы, а в нормализации одного поля. Это типичная картина: функция работает на «своих» данных и ломается на чужих.

Запишите формат входа и ошибку без секретных данных. В этом примере не нужно присылать настоящую выгрузку: короткая строка CSV воспроизводит отказ. Учебная сумма не подтверждает точность финансовых расчётов; для денег отдельно определите правила округления и подходящий числовой тип.

Готовый промпт на исправление кода с тестами

Ниже — редакционный запрос для повторения задачи. Он очищен от технического вывода первого ошибочного тестового файла и не является дословным логом платного вызова. В фактическом запросе модель получила исходную функцию и задачу исправления; файл тестов тогда содержал неверно экранированные строки. Точный исходный запрос сохранён в редакционном комплекте, а обстоятельства исправления тестов описаны ниже.

ТЕКСТ13 строк
Исправь функцию total_revenue(text) на Python.
Она принимает CSV с заголовком amount и возвращает сумму значений.
Значения могут иметь десятичную точку или запятую. Поля с запятой заключены в кавычки CSV.
Файл с заголовком без строк должен давать 0.0.
Не добавляй внешние зависимости.
Исходный код:
import csv
from io import StringIO
def total_revenue(text):
    return sum(float(r['amount']) for r in csv.DictReader(StringIO(text)))
Пример входа: amount, затем две строки с числами 120,50 и 79,50 в кавычках CSV.
При запуске исходной функции возникает ValueError на строке преобразования в float.
Предложи минимальное изменение и объясни его. Проверка будет выполняться локально по тестам из статьи.

Под другую задачу замените функцию, описание входа и ожидаемый результат. Не переносите требования CSV на JSON или табличный файл другого формата. Укажите ограничения на библиотеки и публичный интерфейс функции: иначе предложенная переработка может потребовать изменений в вызывающем коде.

Сначала убедитесь, что короткий вход воспроизводит отказ. Если traceback показывает ошибку импорта самого тестового файла, это другая стадия: функция ещё не выполнялась. Исправьте тестовую обвязку и повторите запуск исходной реализации. Только после этого можно сравнивать результат предложенной правки.

Исправленная функция и запуск воспроизводимых тестов

Модель вернула такую функцию:

PYTHON13 строк
import csv
from io import StringIO

def total_revenue(text):
    total = 0.0
    for row in csv.DictReader(StringIO(text)):
        value = (row.get('amount') or '').strip()
        if not value:
            continue
        if ',' in value:
            value = value.replace(',', '.')
        total += float(value)
    return total

Изменений четыре: накопление в переменной вместо генератора, row.get('amount') вместо прямого доступа, пропуск пустых значений, замена запятой на точку перед float. Замена запятой закрывает показанную ошибку. Использование row.get и пропуск пустых значений — дополнительные изменения; их поведение отдельными тестами здесь не проверялось.

Тесты:

PYTHON7 строк
import unittest
from revenue import total_revenue
class RevenueTest(unittest.TestCase):
    def test_decimal_comma(self): self.assertAlmostEqual(total_revenue('amount\n"120,50"\n"79,50"\n'),200.0)
    def test_decimal_point(self): self.assertAlmostEqual(total_revenue('amount\n120.50\n79.50\n'),200.0)
    def test_empty(self): self.assertEqual(total_revenue('amount\n'),0.0)
if __name__=='__main__': unittest.main()

Порядок запуска: сохранить функцию в revenue.py, тесты в test_revenue.py, выполнить python test_revenue.py. До правки функции три теста дают FAILED (errors=1), после — OK, три теста пройдены.

Здесь есть редакционная деталь, которую стоит знать. В первом прогоне тестовая строка была экранирована неверно, и модуль тестов не импортировался: Python выдавал SyntaxError ещё до исполнения test_decimal_comma. Экранирование поправил редактор, повторного платного вызова не было. Функция модели не менялась: исправленные тесты падали на исходной реализации и прошли на сохранённом ответе DeepSeek. Это ровно тот случай, когда «модель ошиблась» и «тест написан криво» выглядят одинаково, пока не посмотришь traceback.

Как дать модели traceback и критерии успеха

Traceback показывает место и тип отказа. Перед отправкой удалите токены, личные пути и сведения клиентов. Сохраните строки, необходимые для понимания ошибки: имя функции, проблемное преобразование и короткий вход. Для нашей задачи достаточно сообщения ValueError при преобразовании десятичной запятой.

Критерии формулируйте проверяемо. Файл с заголовком без строк возвращает ноль; числа с точкой и с запятой должны давать одинаковую сумму в приведённом примере. Каждый критерий проверяется отдельным тестом. При расширении требований добавьте новые тесты: текущий набор не проверяет разделители тысяч, неверные строки и денежное округление.

Можно попросить сначала описать предлагаемое изменение, затем показать код. Сравните план с исходной ошибкой. Убедительность объяснения не подтверждает правильность реализации, поэтому даже подходящий план требует запуска тестов. Если код падает, отправьте новый traceback и уточните, какое условие нарушено.

Для долгой задачи сохраняйте промежуточные версии. В записи должны быть исходный код, запрос, ответ и результаты локальной проверки. Успех короткого примера показывает исход приведённых входов. Безопасность и корректность для других данных требуют дополнительных проверок.

Варианты запроса для написания и проверки кода

Ниже — собственные редакционные варианты. Они не запускались отдельными вызовами модели и не являются примерами полученных ответов.

ТЕКСТ4 строки
Проверь функцию split_tags(text): она возвращает text.split(',').
Учебный вход: красный, синий, , зелёный.
Требуется список непустых тегов без пробелов по краям. Порядок сохранить.
Предложи изменение и тесты на пробелы, пустые элементы и пустую строку.
ТЕКСТ3 строки
Напиши функцию count_labels(rows). rows — список строк: архив, новый, архив.
Результат — словарь количества каждого значения. Внешние библиотеки не использовать.
Дай код и тесты для повторов и пустого списка. Не меняй регистр входных значений.
ТЕКСТ3 строки
Нужно сравнить два подхода поиска дублей в списке: вложенные циклы и множество.
Исходные условия: порядок дублей не важен, элементы — строки, память ограничена условиями окружения, точный лимит не задан.
Объясни свойства подходов, перечисли вопросы перед выбором. Не выдумывай время исполнения: замеры не проводились.

Для первого запроса проверяйте результат по списку тегов; для второго — суммы счётчика и пустой вход; для третьего — ясность условий и отсутствие выдуманного бенчмарка. Запрос на сравнение алгоритмов не заменяет профилирование в вашем окружении. Измеряйте длительность отдельно, сохраняя вход и версию программы.

Как проверить зависимости, безопасность и результаты самостоятельно

Порядок проверки после получения кода:

  1. Зависимости. Список импортов в ответе сверьте с тем, что установлено. csv и io входят в стандартную библиотеку, ставить ничего не нужно. Если модель добавила внешний пакет, проверьте, зачем он там.
  2. Тесты. Запустите их до правки функции и после. Разница в выводе — доказательство, что правка что-то изменила. Три теста из примера дают errors=1 до и OK после.
  3. Границы. Добавьте свои случаи: пустая строка, пробелы вместо числа, отрицательное значение, разделитель тысяч. Эти случаи пока не проверены: добавьте их в тесты, если они встречаются в ваших данных.
  4. Безопасность. float() на пользовательском вводе без проверки — это исключение на первом же мусоре. eval, exec, subprocess с внешними данными — повод переписать. Проверьте происхождение зависимостей и действия кода до исполнения.
  5. Воспроизводимость. Сохраните промпт, ответ модели и результат прогона. У нас для этого лежат prompt.txt, response.txt и хеши файлов — так видно, что именно проверялось.

Что даёт такой порядок: вы перестаёте верить ответу на слово. Модель предложила код — тест подтвердил или опроверг. Модель предложила правку — тест показал, что она работает. Это и есть разница между «дипсик написал» и «дипсик написал, и я это проверил».

Частые вопросы

Этот пример проверен в веб-чате DeepSeek?
Нет. Проверен вызов deepseek/deepseek-v4.1-flash через OpenRouter API и локальный запуск сохранённой функции. Веб-интерфейс здесь не тестировался.

Можно ли повторить проект без скачивания архива?
Да. Полный код функции и тестов приведён выше. Сохраните их в revenue.py и test_revenue.py, затем запустите тесты. Отдельный загрузочный файл статья не обещает.

Три теста подтверждают правильность любой обработки CSV?
Нет. Они проверяют приведённые числа с точкой, запятой и файл с заголовком без строк. Другие форматы и ошибочные значения требуют дополнительных тестов.

Почему код не запускается у меня?
Прочитайте traceback. Проверьте версию Python, имена файлов, импорты и входные данные. Ошибка синтаксиса в тесте и ValueError в функции относятся к разным стадиям; не приписывайте оба отказа одной причине.

Какие данные отправлять модели?
Короткий воспроизводимый пример без секретов. Для других сценариев прочитайте разбор задач с Дипсиком и материал о голосовом вводе.

Читайте также

3 материала