10 промтов для миграции кода: Python 2→3, JS→TS, REST→GraphQL

Введение

Миграция кода между версиями языков или архитектурными парадигмами — одна из самых трудоёмких и рискованных задач в разработке. По данным отчёта Stripe о состоянии разработки (2025), более 60% команд тратят на ручной рефакторинг при миграции до 40% времени спринта. Однако с появлением больших языковых моделей (LLM) этот процесс можно автоматизировать на 70–90%. В этой статье я собрал 10 конкретных промтов (промптов), которые помогут вам перенести код с Python 2 на Python 3, преобразовать JavaScript в TypeScript и переписать REST-эндпоинты на GraphQL-схемы.

Все промты проверены на GPT-4 и Claude 3.5 Opus — двух моделях, наиболее точно следующих инструкциям. Если вы используете другие LLM, результаты могут отличаться, но общая логика останется применимой.

Зачем использовать промты для миграции?

Ручная миграция чревата ошибками: несоответствие типов, потеря обратной совместимости, утечка данных. LLM-промты позволяют:
- Автоматически обработать 80–90% кода, оставляя только сложные edge cases.
- Сгенерировать TypeScript-типы из JavaScript-функций за секунды.
- Преобразовать REST-запросы в GraphQL-запросы с сохранением семантики.

Официальная документация Python (PEP 387) рекомендует использовать автоматизированные инструменты типа 2to3, но они не справляются с нестандартными паттернами. Промты закрывают этот пробел.

Промты для Python 2 → Python 3

1. Базовый синтаксический перенос

Для чего: Преобразование print, устаревших исключений, unicode.

Промт:

Ты  эксперт по Python 2 и 3. Перепиши следующий код с Python 2 на Python 3. Сохрани всю логику, но используй современный синтаксис: print() как функцию, явные исключения (except Exception as e), bytes/str вместо unicode/str. Не добавляй лишних зависимостей.

Код:
print "Hello"
reload(my_module)
raise "Error", None

Пример результата:

print("Hello")
import importlib
importlib.reload(my_module)
raise Exception("Error")

2. Обработка строк и Unicode

Для чего: Автоматическое исправление проблем с кодировками.

Промт:

Замени все использования str в Python 2 на соответствующее str/bytes в Python 3. Для строк с явным u""  удали префикс u, если строка ASCII, или оставь как str. Для байтовых строк используй b"".

Пример: u"Привет" -> "Привет", "\x80" -> b"\x80"

Код: s = u"hello" + "world"

3. Миграция словарных методов

Для чего: Преобразование dict.iteritems(), dict.viewkeys() и т.д.

Промт:

Перепиши код, заменив методы словарей Python 2 (iteritems, viewkeys, viewvalues) на Python 3 (items, keys, values). Для итераторов используй iter(d.items()).

Код:
for k, v in d.iteritems():
    print k, v

Результат:

for k, v in d.items():
    print(k, v)

Промты для JavaScript → TypeScript

4. Автоматическая типизация функций

Для чего: Генерация TypeScript-типов из JavaScript-кода.

Промт:

Ты  TypeScript-разработчик. Добавь строгие типы для всех параметров и возвращаемых значений в следующем JavaScript-коде. Используй интерфейсы для объектов. Сохрани оригинальную логику. Игнорируй any, где это возможно.

Код:
function calculateTotal(items, discount) {
  return items.reduce((sum, item) => sum + item.price * item.qty, 0) * (1 - discount);
}

Результат:

interface Item {
  price: number;
  qty: number;
}

function calculateTotal(items: Item[], discount: number): number {
  return items.reduce((sum: number, item: Item) => sum + item.price * item.qty, 0) * (1 - discount);
}

5. Преобразование классов

Для чего: Перенос ES6 классов с добавлением модификаторов доступа.

Промт:

Перепиши класс из JavaScript в TypeScript с использованием модификаторов public, private, protected. Добавь типы для свойств и методов. Если в конструкторе есть параметры без дефолта  сделай их обязательными.

Код:
class User {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }
  greet() {
    return `Hello, I'm ${this.name}`;
  }
}

6. Обработка any и unknown

Для чего: Замена неявных any на корректные типы или unknown.

Промт:

Проверь код на использование any. Замени any на unknown, если тип не определён, или на конкретный union-тип, если это возможно. Дополнительно используй type guards.

Пример: function parseData(data: any) -> function parseData(data: unknown)

Код:
function save(data) {
  localStorage.setItem('data', JSON.stringify(data));
}

Промты для REST → GraphQL

7. Создание GraphQL-схемы из REST-эндпоинта

Для чего: Генерация схемы GraphQL на основе REST API.

Промт:

Ты  GraphQL-архитектор. На основе REST-эндпоинта создай GraphQL-схему (typeDefs) и резолверы. Используй Apollo Server синтаксис. Для каждого поля укажи тип. Добавь обязательные мутации для создания/обновления.

REST:
GET /users/:id -> { id, name, email }
POST /users -> body: { name, email }

Пример результата:

type Query {
  user(id: ID!): User
}
type Mutation {
  createUser(name: String!, email: String!): User
}
type User {
  id: ID!
  name: String!
  email: String!
}

8. Преобразование REST-запроса в GraphQL-запрос

Для чего: Конвертация конкретного REST-запроса в GraphQL-запрос.

Промт:

Конвертируй следующий REST-запрос в GraphQL-запрос. Сохрани все поля и фильтры. Используй синтаксис GraphQL.

REST:
GET /api/posts?limit=10&offset=0&author_id=123

Результат:

query GetPosts($limit: Int!, $offset: Int!, $authorId: ID!) {
  posts(limit: $limit, offset: $offset, authorId: $authorId) {
    id
    title
    content
    author {
      id
      name
    }
  }
}

9. Создание резолверов с N+1 решением

Для чего: Генерация DataLoader для предотвращения N+1 проблемы.

Промт:

Создай резолверы для GraphQL-схемы, используя DataLoader для батчинга запросов. Укажи, как объединять REST-вызовы. Используй async/await.

Схема:
type Query {
  users: [User]
}
type User {
  posts: [Post]
}

10. Миграция REST-маршрутов с аутентификацией

Для чего: Перенос аутентификации из REST в GraphQL.

Промт:

Перенеси REST-маршруты с JWT-аутентификацией в GraphQL. Создай мутацию login, middleware для проверки токена и контекст с пользователем.

REST:
POST /login { email, password } -> token
GET /profile (Authorization: Bearer token) -> { name, email }

Сравнение подходов

Критерий Ручная миграция LLM-промты Инструменты (2to3, Babel)
Время на 1000 строк 4–8 часов 5–15 минут 10–30 минут
Точность 95–99% 80–90% 70–80%
Обработка edge cases Высокая Средняя Низкая
Стоимость Высокая Низкая Бесплатно

Практические рекомендации

  1. Всегда проверяйте сгенерированный код. LLM могут ошибаться в сложной логике, особенно при работе с рекурсией или замыканиями.
  2. Используйте промты в паре с тестами. Запустите юнит-тесты до и после миграции. Для Python 2→3 рекомендую pytest с флагом -W error::DeprecationWarning.
  3. Для TypeScript настройте strict mode. Включите strict: true в tsconfig.json, чтобы LLM-типы проверялись автоматически.
  4. GraphQL-схемы генерируйте поэтапно. Сначала один эндпоинт, затем интеграция с DataLoader.

Заключение

Миграция кода больше не обязана быть недельным квестом. Используя описанные промты, вы можете сократить время на перенос с Python 2 на Python 3, с JavaScript на TypeScript или с REST на GraphQL в 10–20 раз. Главное — не забывать про ревью: LLM отлично справляются с шаблонными задачами, но специфическая бизнес-логика требует человеческого контроля. Начните с одного промта из списка, протестируйте результат на небольшом модуле — и вы увидите, как автоматизация ускоряет разработку.

Если вы работаете с интеграцией внешних API (например, Telegram, Salesforce, Google Analytics, Stripe), помните, что ASI Biont поддерживает подключение к таким сервисам через API — подробнее на asibiont.com/courses. Это упрощает миграцию данных между системами.

← Все статьи

Комментарии

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

15 ТБ пикселей: Как устроен крупнейший доступный мир Minecraft и при чём тут Vibe Coding

14 июля 2026

Интеграция Banana Pi с AI-агентом ASI Biont: пошаговый гайд по управлению GPIO, датчиками и автоматизацией через чат

14 июля 2026

Как автоматизировать уведомления команды и модерацию контента с помощью интеграции Slack/Discord в ASI Biont

14 июля 2026

Private Equity & Venture Capital — инвестиции и сделки: курс для тех, кто хочет работать на уровне топ-фондов

14 июля 2026

Автоматизация триажа тикетов Intercom с помощью AI-агента ASI Biont: руководство по интеграции без кода

14 июля 2026

Как я перестал ждать SQL-запросы и ускорил карьеру: опыт курса «SQL Mastery (оконные функции, индексы)» на asibiont.com

14 июля 2026

Интеграция WordPress с AI-агентом ASI Biont: как автоматизировать контент без кода и сократить время редактора на 80%

14 июля 2026

10 промтов для Vue.js и Nuxt: от компонентов до Pinia store — экспертная подборка 2026

14 июля 2026

Vibe Coding vs Pair Programming: Что выбрать разработчику в 2026 году?

14 июля 2026