Содержание
- Как писать код с DeepSeek: границы веб-чата и проверенного API-примера
- Небольшой CSV-проект и исходная ошибка с десятичной запятой
- Готовый промпт на исправление кода с тестами
- Исправленная функция и запуск воспроизводимых тестов
- Как дать модели traceback и критерии успеха
- Варианты запроса для написания и проверки кода
- Как проверить зависимости, безопасность и результаты самостоятельно
- Частые вопросы
Дипсик код: как писать и проверять программы
Черновик готовит редакция с помощью ИИ. За стандарт издания отвечает главный редактор — Валерий Курземнек.
Материал редакции Зерокодера. Счёт по выдаче снят собственным прогоном 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-файле. Исходная функция выглядит так:
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 воспроизводит отказ. Учебная сумма не подтверждает точность финансовых расчётов; для денег отдельно определите правила округления и подходящий числовой тип.
Готовый промпт на исправление кода с тестами
Ниже — редакционный запрос для повторения задачи. Он очищен от технического вывода первого ошибочного тестового файла и не является дословным логом платного вызова. В фактическом запросе модель получила исходную функцию и задачу исправления; файл тестов тогда содержал неверно экранированные строки. Точный исходный запрос сохранён в редакционном комплекте, а обстоятельства исправления тестов описаны ниже.
Исправь функцию 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 показывает ошибку импорта самого тестового файла, это другая стадия: функция ещё не выполнялась. Исправьте тестовую обвязку и повторите запуск исходной реализации. Только после этого можно сравнивать результат предложенной правки.
Исправленная функция и запуск воспроизводимых тестов
Модель вернула такую функцию:
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 и пропуск пустых значений — дополнительные изменения; их поведение отдельными тестами здесь не проверялось.
Тесты:
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 и уточните, какое условие нарушено.
Для долгой задачи сохраняйте промежуточные версии. В записи должны быть исходный код, запрос, ответ и результаты локальной проверки. Успех короткого примера показывает исход приведённых входов. Безопасность и корректность для других данных требуют дополнительных проверок.
Варианты запроса для написания и проверки кода
Ниже — собственные редакционные варианты. Они не запускались отдельными вызовами модели и не являются примерами полученных ответов.
Проверь функцию split_tags(text): она возвращает text.split(',').
Учебный вход: красный, синий, , зелёный.
Требуется список непустых тегов без пробелов по краям. Порядок сохранить.
Предложи изменение и тесты на пробелы, пустые элементы и пустую строку.
Напиши функцию count_labels(rows). rows — список строк: архив, новый, архив.
Результат — словарь количества каждого значения. Внешние библиотеки не использовать.
Дай код и тесты для повторов и пустого списка. Не меняй регистр входных значений.
Нужно сравнить два подхода поиска дублей в списке: вложенные циклы и множество.
Исходные условия: порядок дублей не важен, элементы — строки, память ограничена условиями окружения, точный лимит не задан.
Объясни свойства подходов, перечисли вопросы перед выбором. Не выдумывай время исполнения: замеры не проводились.
Для первого запроса проверяйте результат по списку тегов; для второго — суммы счётчика и пустой вход; для третьего — ясность условий и отсутствие выдуманного бенчмарка. Запрос на сравнение алгоритмов не заменяет профилирование в вашем окружении. Измеряйте длительность отдельно, сохраняя вход и версию программы.
Как проверить зависимости, безопасность и результаты самостоятельно
Порядок проверки после получения кода:
- Зависимости. Список импортов в ответе сверьте с тем, что установлено.
csvиioвходят в стандартную библиотеку, ставить ничего не нужно. Если модель добавила внешний пакет, проверьте, зачем он там. - Тесты. Запустите их до правки функции и после. Разница в выводе — доказательство, что правка что-то изменила. Три теста из примера дают
errors=1до иOKпосле. - Границы. Добавьте свои случаи: пустая строка, пробелы вместо числа, отрицательное значение, разделитель тысяч. Эти случаи пока не проверены: добавьте их в тесты, если они встречаются в ваших данных.
- Безопасность.
float()на пользовательском вводе без проверки — это исключение на первом же мусоре.eval,exec,subprocessс внешними данными — повод переписать. Проверьте происхождение зависимостей и действия кода до исполнения. - Воспроизводимость. Сохраните промпт, ответ модели и результат прогона. У нас для этого лежат
prompt.txt,response.txtи хеши файлов — так видно, что именно проверялось.
Что даёт такой порядок: вы перестаёте верить ответу на слово. Модель предложила код — тест подтвердил или опроверг. Модель предложила правку — тест показал, что она работает. Это и есть разница между «дипсик написал» и «дипсик написал, и я это проверил».
Частые вопросы
Этот пример проверен в веб-чате DeepSeek?
Нет. Проверен вызов deepseek/deepseek-v4.1-flash через OpenRouter API и локальный запуск сохранённой функции. Веб-интерфейс здесь не тестировался.
Можно ли повторить проект без скачивания архива?
Да. Полный код функции и тестов приведён выше. Сохраните их в revenue.py и test_revenue.py, затем запустите тесты. Отдельный загрузочный файл статья не обещает.
Три теста подтверждают правильность любой обработки CSV?
Нет. Они проверяют приведённые числа с точкой, запятой и файл с заголовком без строк. Другие форматы и ошибочные значения требуют дополнительных тестов.
Почему код не запускается у меня?
Прочитайте traceback. Проверьте версию Python, имена файлов, импорты и входные данные. Ошибка синтаксиса в тесте и ValueError в функции относятся к разным стадиям; не приписывайте оба отказа одной причине.
Какие данные отправлять модели?
Короткий воспроизводимый пример без секретов. Для других сценариев прочитайте разбор задач с Дипсиком и материал о голосовом вводе.
