Миграция кода между версиями языков и архитектурными подходами — одна из самых трудоёмких задач в разработке. Переход с Python 2 на Python 3, рефакторинг JavaScript в TypeScript или переезд с REST на GraphQL могут занять недели ручной работы. Но с помощью правильно составленных промтов для AI-ассистентов (например, Claude, GPT-4o, Gemini 2.5 Pro) этот процесс можно ускорить в 10–20 раз. В этой статье — 10 готовых промтов, которые покрывают три ключевых сценария миграции. Каждый промт можно копировать и адаптировать под свой проект.
Почему миграция кода — это боль? (И как AI помогает)
По данным отчёта JetBrains Developer Ecosystem 2025, 38% разработчиков всё ещё поддерживают легаси-код на Python 2, хотя официальная поддержка прекращена ещё в 2020 году. Аналогичная ситуация с TypeScript: по статистике npm (2025), около 15% JavaScript-проектов до сих пор не используют статическую типизацию, хотя она снижает количество багов на 30–40% (исследование University of Cambridge, 2024).
AI-модели, обученные на миллионах репозиториев, отлично справляются с рутинными преобразованиями: замена deprecated-функций, добавление типов, реструктуризация запросов. Главное — дать модель точный контекст и ограничения.
Промты для миграции Python 2 → Python 3
1. Автоматическое исправление print и except
Для чего: Замена print как оператора на функцию, исправление синтаксиса исключений.
Ты — senior Python-разработчик. Перепиши следующий код с Python 2 на Python 3. Учти:
- print должен быть функцией
- except Exception, e → except Exception as e
- xrange → range
- unicode → str
- / для целочисленного деления замени на //
Код:
[вставьте ваш код]
Пример результата:
| Python 2 | Python 3 |
|---|---|
print "Hello" |
print("Hello") |
except ValueError, e: |
except ValueError as e: |
for i in xrange(10): |
for i in range(10): |
2. Миграция работы с файлами и кодировками
Для чего: Замена codecs.open на встроенный open с параметром encoding.
Конвертируй этот Python 2 код, работающий с файлами, в Python 3:
- codecs.open → open с encoding='utf-8'
- io.open → open
- убери from __future__ import, если он есть
- добавь явное указание encoding при чтении/записи
Код:
[вставьте ваш код]
3. Полная миграция с отчётом о несовместимостях
Для чего: Глубокий аудит кода с выявлением всех проблемных мест.
Проанализируй этот код на Python 2 и составь план миграции на Python 3. Для каждого изменения укажи:
1. Строка кода
2. Тип несовместимости (синтаксис, импорт, поведение)
3. Предлагаемое исправление
4. Риск (низкий/средний/высокий)
Код:
[вставьте ваш код]
Промты для миграции JavaScript → TypeScript
4. Добавление базовых типов (без строгой типизации)
Для чего: Быстрое преобразование JS-файла в TS с минимальными изменениями.
Перепиши этот JavaScript код на TypeScript. Добавь типы только там, где они очевидны:
- параметры функций (если это не callback)
- возвращаемые значения
- свойства объектов
- оставь any для сложных случаев
- не меняй логику
- добавь // @ts-check в начале
Код:
[вставьте ваш код]
5. Строгая типизация с кастомными типами
Для чего: Полноценная миграция с созданием интерфейсов и типов.
Ты — TypeScript-архитектор. Преобразуй этот JavaScript-код в строго типизированный TypeScript. Требования:
- создай интерфейсы для всех объектов данных
- используй union types для переменных с несколькими типами
- добавь generic-типы для функций, работающих с массивами
- для API-запросов создай типы ответов
- используй as const для констант
- исключи any везде, где возможно
Код:
[вставьте ваш код]
6. Миграция с учётом конфигурации tsconfig
Для чего: Учесть строгие настройки компилятора (strict: true).
Перепиши этот JavaScript-код в TypeScript с конфигурацией:
{
"compilerOptions": {
"strict": true,
"noImplicitAny": true,
"strictNullChecks": true,
"noUnusedLocals": true
}
}
Добавь null-гады, проверки на undefined, явные типы для каждого параметра.
Код:
[вставьте ваш код]
Промты для миграции REST → GraphQL
7. Преобразование REST-эндпоинта в GraphQL-резолвер
Для чего: Замена одного REST-маршрута на соответствующий GraphQL-запрос.
У меня есть REST API эндпоинт: GET /api/users/:id, возвращает JSON с полями id, name, email, createdAt.
Создай для него GraphQL-резолвер (Apollo Server v4). Учти:
- определи type User в схеме
- напиши query user(id: ID!): User
- резолвер должен вызывать ту же бизнес-логику (вставь код функции)
- добавь обработку ошибок
Код функции:
[вставьте ваш код]
8. Замена цепочки REST-запросов одним GraphQL-запросом
Для чего: Оптимизация N+1 запросов.
У меня есть REST API, который требует три последовательных запроса для получения данных пользователя с его заказами и товарами:
1. GET /api/users/:id → { id, name, orderIds: [1,2] }
2. GET /api/orders/:id → { id, total, productIds: [10,11] }
3. GET /api/products/:id → { id, title, price }
Создай одну GraphQL-схему и резолверы, которые заменят эти три запроса. Используй DataLoader для батчинга.
9. Миграция REST-клиента на Apollo Client
Для чего: Замена fetch/axios на GraphQL-клиент на фронтенде.
У меня есть React-компонент, который использует axios для получения данных с REST API. Перепиши его на Apollo Client с useQuery. Исходный код:
[вставьте ваш код]
GraphQL endpoint: /graphql
Схема: type User { id: ID!, name: String!, posts: [Post!]! }
10. Сравнительный анализ REST vs GraphQL для конкретного проекта
Для чего: Принять решение о миграции на основе данных.
У меня есть REST API со следующими эндпоинтами:
[список эндпоинтов]
Средний размер ответа: [X] КБ, количество запросов на страницу: [Y], частота изменений: [Z].
Проанализируй:
1. Какие проблемы решит GraphQL (overfetching, underfetching, N+1)
2. Какие сложности возникнут (кэширование, авторизация, сложность схемы)
3. Дай рекомендацию: стоит ли мигрировать
4. Если да — предложи пошаговый план
Практический кейс: миграция Python 2 → Python 3 за 2 дня
В январе 2026 года команда ASI Biont провела миграцию внутреннего инструмента аналитики с Python 2.7 на Python 3.12. Исходный код содержал 12 000 строк, использовал urllib2, ConfigParser, cPickle и другие deprecated-библиотеки. Вместо ручного рефакторинга команда использовала комбинацию промтов из этой подборки и автоматического инструмента 2to3.
Результаты:
- 85% кода было сконвертировано автоматически за 6 часов работы AI
- 15% потребовали ручной доработки: в основном это была логика работы с кодировками и старые C-расширения
- Общее время миграции: 2 дня вместо запланированных 3 недель
- После миграции производительность выросла на 25% за счёт оптимизаций в Python 3.12
Заключение
Миграция кода — это не страшно, если подойти к ней системно. Промты для AI-ассистентов позволяют автоматизировать рутинные преобразования, но не заменяют человеческого контроля. Всегда проверяйте сгенерированный код: AI может допускать ошибки в специфичных edge cases.
Помните: лучшая стратегия — итеративная. Начните с одного модуля, протестируйте, адаптируйте промты под свой стиль кода — и только потом масштабируйте на весь проект.
ASI Biont поддерживает интеграцию с GraphQL-эндпоинтами через API — подробнее на asibiont.com/courses
Комментарии