javascript

Я спросил у AI: «Заменишь ли ты меня?» и написал сервис за 2 часа

  • четверг, 19 февраля 2026 г. в 00:00:10
https://habr.com/ru/articles/1000816/
Пора ли паниковать по поводу увольнения из-за искусственного интеллекта?
Пора ли паниковать по поводу увольнения из‑за искусственного интеллекта?

Все мы видели эти заголовки: «ИИ оставит программистов без работы», «Копирайтеры больше не нужны», «Завод — наше всё». Паника, хайп, мемы. Я решил не гадать на кофейной гуще, а спросить у самого виновника торжества.

У меня задержали рейс на самолёт, и за 2 часа я сделал шуточный сервис ai‑fire.ru, который показывает, отберёт ли у вас работу ИИ.
1️⃣ вводишь свою профессию
2️⃣ жмёшь кнопку
3️⃣ узнаёшь — пора паниковать или пока можно выдохнуть

Важно что пользователь получает честный (иногда жестокий) ответ от нейросети с процентом риска, списком задач, которые ИИ заберет первыми, и навыками, которые спасут твою карьеру.

💼 Бизнес база

Для любой компании важно сокращать расходы и увеличивать доходы, поэтому любая автоматизация должна приводить либо к увеличению доходов либо к сокращению расходов. Доходы увеличить обычно сложно, а вот сократить персонал — просто(внедрил агента, отчитался, сократил штатную должность).
Таким образом число резюме к числу вакансий увеличилось в 2 раза за 2025 год.

Соотношение количества активных резюме к количеству активных вакансий - статистика hh.ru
Соотношение количества активных резюме к количеству активных вакансий — статистика hh.ru

🧠 Мозги проекта: DeepSeek API

Для пет‑проекта, который может «выстрелить» (или лечь под хабраэффектом), платить по прайсу GPT-4o было больно, поэтому я подключил DeepSeek V3.

Цена: В разы дешевле «больших братьев».

Качество: В задачах на логику и структурирование данных он показал себя блестяще.

JSON Mode: Работает из коробки.

Промпт и JSON‑режим

Самое сложное в работе с LLM — заставить её отвечать стабильно. Мне не нужен был поток сознания, мне нужна была структура для фронтенда.

Вот как выглядит мой системный промпт (упрощенно):

```typescript:src/app/api/analyze/route.ts
const systemPrompt = `
  You are an expert AI Job Market Analyst.
  Analyze the user's profession and return a JSON object.
  Language of response: ${locale}.
  
  JSON Structure required:
  {
    "risk_score": (number 0-100),
    "verdict": (short punchy title),
    "reasoning": (2 sentences explanation),
    "safe_skills": (array of 3 skills hard to automate),
    "replaced_tasks": (array of 3 tasks AI will take over)
  }
`;
```

А вот так мы делаем запрос. Обратите внимание на response_format: { type: "json_object" }. Это магия, которая спасает от 99% ошибок парсинга.

```typescript:src/app/api/analyze/route.ts
const completion = await openai.chat.completions.create({
  messages: [
    { role: "system", content: systemPrompt },
    { role: "user", content: `Profession: ${jobTitle}` }
  ],
  model: "deepseek-chat",
  response_format: { type: "json_object" }, // <--- Важно!
  temperature: 0.7,
});
```

💾 Кэширование: Не будь жадным

Пользователи предсказуемы. 50 человек спросят про «Программиста», 30 про «Дизайнера» и 20 про «Маркетолога». Зачем каждый раз дергать платный API?

Я поднял простую MySQL базу. Перед тем как идти к DeepSeek, мы проверяем: «А не спрашивали ли это уже?».

Логика простая:

1. Нормализуем ввод (jobTitle.trim().toLowerCase()).

2. Ищем в базе.

3. Если нашли — отдаем готовый JSON и инкрементируем счетчик популярности (интересно же потом статистику глянуть).

4. Если нет — идем в API и сохраняем результат.

```typescript:src/app/api/analyze/route.ts
// ... подключение к БД ...

// 1. Проверяем кэш
const [rows] = await pool.execute<RowDataPacket[]>(
  'SELECT analysis_json, request_count FROM profession_analysis WHERE profession = ? AND locale = ?',
  [normalizedJobTitle, locale]
);

if (rows.length > 0) {
  // Ура, экономия!
  await pool.execute(
    'UPDATE profession_analysis SET request_count = request_count + 1 WHERE profession = ? AND locale = ?',
    [normalizedJobTitle, locale]
  );
  return NextResponse.json(rows[0].analysis_json);
}

// ... запрос к API ...

// 2. Сохраняем для потомков
await pool.execute(
  'INSERT INTO profession_analysis (profession, locale, analysis_json) VALUES (?, ?, ?)',
  [normalizedJobTitle, locale, JSON.stringify(data)]
);
```

Это снизило нагрузку на API процентов на 40% уже в первые часы тестов.

🏁 Что в итоге?

Проект ai‑fire.ru живёт и здравствует.
Статистика с сайта отображается на дашборде Datalens.

Стек:
Frontend: Next.js
LLM: DeepSeek V3 
Database: MySQL

Заходите, проверяйте свои профессии. Пишите в комменты, кого ИИ «уволил» с вероятностью 100%, а кто оказался незаменим.

P. S. Если введете «Professional Sleeper» (Профессиональный спящий), ИИ выдаст очень забавный вердикт. Попробуйте найти пасхалки! 😉
Жду вашего фидбека и звезд на GitHub.
А ещё у нас есть сообщество AI Founders, присоединяйся в telegram — будем вместе постигать AI.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Заменит ли твою профессию ИИ?
23.68%Да9
57.89%Нет22
18.42%У меня паника7
Проголосовали 38 пользователей. Воздержались 4 пользователя.