AI-агент для поиска работы: резюме под вакансию и сопроводительные письма

Собираем небольшой инструмент: вы даёте текст вакансии и файл с реальным опытом, получаете адаптированное резюме, письмо и список пробелов. Без выдуманных навыков.

4 мин · · агенты · автоматизация

Откликаться на вакансии однотипными резюме неэффективно, а переписывать резюме под каждую вручную долго. Эту работу можно отдать модели, если задать жёсткие рамки: брать факты только из вашего профиля и честно отмечать, чего в нём нет. Ниже собираем AI-агента для поиска работы на Python: вакансия на вход, резюме и сопроводительное письмо на выход, плюс проверка, чтобы в тексте не оказалось выдуманного опыта.

Честная оговорка про слово «агент». То, что мы строим, ближе к конвейеру из двух запросов, чем к самостоятельному агенту, который ходит по сайтам и рассылает отклики. Для этой задачи конвейер лучше: предсказуем, дёшев и не отправляет ничего без вас. Как отличить агента от простого скрипта, написано в статье AI-агент на Python с нуля, а здесь сразу к делу.

Как это устроено

  1. Вы один раз заполняете profile.md: места работы, проекты, стек, достижения с цифрами, образование. Только то, что правда.
  2. На входе текст вакансии.
  3. Первый запрос: модель выделяет требования вакансии, сопоставляет с профилем и пишет резюме и письмо. Если требования нет в профиле, она не придумывает, а записывает в список пробелов.
  4. Второй запрос: проверка. Модель выписывает каждое утверждение из результата и ищет для него подтверждение в профиле.
  5. Вы читаете итог и отправляете сами.

Профиль: основа честности

Чем точнее профиль, тем лучше результат. Пример структуры:

bash
Профиль кандидата
## Опыт
### Бэкенд-разработчик, ООО «Пример», 2022-2025
- Поддерживал сервис заказов на Python/FastAPI, ~40 запросов в секунду в пике
- Перевёл отчёты с Excel на PostgreSQL, время формирования с 15 минут до 40 секунд
## Стек
Python, FastAPI, PostgreSQL, Docker, базовый опыт Kubernetes
## Образование
...

Цифры и формулировки вносите сами. Правило: если факта нет в профиле, в резюме его не будет. Не кладите в профиль пароли, паспортные данные и контакты, которые не должны попасть в чужой сервис: контакты добавите в итоговый документ вручную.

Код

Используем OpenAI-совместимый API шлюза: base_url="https://api.zukko.pro/v1", ключ fetch_.... Подробнее о клиенте — в справочнике по Python.

bash
import json
import sys
from openai import OpenAI

client = OpenAI(base_url="https://api.zukko.pro/v1", api_key="fetch_...")
MODEL = "claude-sonnet-5-5"

PROFILE = open("profile.md", encoding="utf-8").read()

GEN_RULES = """Ты помогаешь составить отклик на вакансию.
Правила:
1. Используй только факты из профиля. Ничего не добавляй: ни навыков, ни цифр, ни компаний.
2. Если требование вакансии не подтверждено профилем, не пиши, что оно есть. Занеси его в gaps.
3. Резюме: 5-7 пунктов опыта, переформулированных под язык вакансии.

Запуск: python job_agent.py vacancy.txt. Режим response_format={"type": "json_object"} просит модель вернуть JSON; если вам нужна жёсткая схема, посмотрите статью Структурированный JSON-ответ. Как именно этот параметр работает с конкретной моделью, проверьте на пробном запросе; если получите ошибку 400, уберите response_format и оставьте требование JSON в промпте.

Как не выдумать опыт

Выдуманный навык в резюме всплывает на первом техническом интервью. Защита строится на нескольких слоях:

  • Жёсткое правило в промпте и отдельный список gaps: модель получает «разрешение» признаться, что чего-то нет.
  • Второй проход-проверка, как в коде выше. Проверяющему отдают те же факты и просят искать расхождения, а не писать текст заново.
  • Ваше чтение. Автоматическая проверка не заменяет глаза: проходите по каждой цифре и дате.
  • Формулировки без преувеличения. Просите не усиливать глаголы: «участвовал» не должно превращаться в «руководил».

Список gaps полезен и сам по себе: это перечень того, что вакансия просит, а у вас в профиле нет. Либо вы добавите недостающий факт (если он правдив), либо решите, что вакансия вам не подходит.

Сколько это стоит

Прикинем один отклик на условных объёмах. Вход первого запроса: инструкция, профиль и вакансия, около 3000 токенов. Выход: резюме, письмо и пробелы, около 1200 токенов. Проверка: вход около 4200 токенов (профиль и результат), выход около 300.

Цены на 18 октября 2026, $ за 1M токенов:

claude-sonnet-5-5 (0.4 / 2): генерация: 3000 × 0.4 / 1e6 + 1200 × 2 / 1e6 = 0.0012 + 0.0024 = $0.0036 проверка: 4200 × 0.4 / 1e6 + 300 × 2 / 1e6 = 0.00168 + 0.0006 = $0.00228 итого за отклик: $0.00588; за 100 откликов около $0.59 deepseek-v4.1-flash (0.013 / 0.038): генерация: 3000 × 0.013 / 1e6 + 1200 × 0.038 / 1e6 ≈ $0.000085 проверка: 4200 × 0.013 / 1e6 + 300 × 0.038 / 1e6 ≈ $0.000066 итого за отклик: около $0.00015; за 100 откликов около $0.015

Сумма за отклик в обоих случаях ничтожна по сравнению со временем на ручную подгонку. Что выбрать, подскажет только проба: прогоните три реальные вакансии на двух моделях и сравните письма. Актуальные цены и список моделей: GET https://api.zukko.pro/v1/models. «Бесплатно» здесь не получится, но расход измеряется центами.

Что можно добавить

  • Несколько версий письма разного тона, из которых вы выбираете.
  • Подготовку к собеседованию: просите список вопросов по пробелам и вашему стеку.
  • Сохранение результатов в таблицу, чтобы вести учёт откликов.
  • Автоматическую отправку откликов не добавляйте: отправка без вашего контроля легко приведёт к неточным письмам в нерелевантные компании.

Учтите ещё одно: резюме содержит персональные данные. Отправляйте модели обезличенный профиль (без телефона, адреса, имён работодателей, если они чувствительны) и добавляйте контакты уже в готовый документ.

Чтобы начать, создайте ключ в кабинете, заполните profile.md и запустите скрипт на одной вакансии.

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

Можно ли сделать AI-агента для поиска работы бесплатно?

Доступ к моделям платный: расход идёт с баланса за токены. Но для этой задачи он очень мал, порядка долей цента на отклик. Отдельно есть разовые $0.50 за подписку на канал @zukkopro (один раз на Telegram-аккаунт), подробности в кабинете.

Что делать, если модель всё равно приписала навык?

Проверка нужна именно для этого, а финальное слово за вашим чтением. Усильте правило в промпте («если не уверен, помести в gaps») и сравните результат на другой модели.

Нужен ли для такого инструмента «настоящий» агент с инструментами?

Для адаптации резюме нет: хватает двух запросов. Агентный режим с вызовом функций нужен, если вы хотите, чтобы модель сама читала файлы или обращалась к внешним сервисам; тогда посмотрите function calling.

Как найти сами вакансии?

Копируйте текст вакансии вручную или из своих подборок. Автоматический сбор с сайтов проверяйте на соответствие правилам этих сайтов, мы такой скрипт не описываем.

zukko

Платите в 25×
меньше

за Claude Code & ChatGPT

Один ключ fetch_* и base URL api.zukko.pro — в Cursor, Claude Code, Codex и любом SDK.