AI-агент для поиска работы: резюме под вакансию и сопроводительные письма
Собираем небольшой инструмент: вы даёте текст вакансии и файл с реальным опытом, получаете адаптированное резюме, письмо и список пробелов. Без выдуманных навыков.
4 мин · · агенты · автоматизация
Откликаться на вакансии однотипными резюме неэффективно, а переписывать резюме под каждую вручную долго. Эту работу можно отдать модели, если задать жёсткие рамки: брать факты только из вашего профиля и честно отмечать, чего в нём нет. Ниже собираем AI-агента для поиска работы на Python: вакансия на вход, резюме и сопроводительное письмо на выход, плюс проверка, чтобы в тексте не оказалось выдуманного опыта.
Честная оговорка про слово «агент». То, что мы строим, ближе к конвейеру из двух запросов, чем к самостоятельному агенту, который ходит по сайтам и рассылает отклики. Для этой задачи конвейер лучше: предсказуем, дёшев и не отправляет ничего без вас. Как отличить агента от простого скрипта, написано в статье AI-агент на Python с нуля, а здесь сразу к делу.
Как это устроено
- Вы один раз заполняете
profile.md: места работы, проекты, стек, достижения с цифрами, образование. Только то, что правда. - На входе текст вакансии.
- Первый запрос: модель выделяет требования вакансии, сопоставляет с профилем и пишет резюме и письмо. Если требования нет в профиле, она не придумывает, а записывает в список пробелов.
- Второй запрос: проверка. Модель выписывает каждое утверждение из результата и ищет для него подтверждение в профиле.
- Вы читаете итог и отправляете сами.
Профиль: основа честности
Чем точнее профиль, тем лучше результат. Пример структуры:
Профиль кандидата
## Опыт
### Бэкенд-разработчик, ООО «Пример», 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.
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.
Похожие статьи
- Skills в Codex: что это и как написать свой сценарий для агентаSkill в Codex это папка с SKILL.md, которую агент загружает по описанию или по вашему вызову. Показываем структуру, пример для pytest и отличие от плагинов и хуков.
- Вайб-кодинг для Битрикс24: приложения и обработчики с агентомКак поручить агенту приложение или обработчик для Битрикс24 и не получить выдуманных методов: правила проекта, вебхуки, пагинация, тесты и расчёт сессии.
- MCP в Open WebUI: как дать моделям доступ к внешним инструментамOpen WebUI умеет подключать MCP-серверы и отдавать их инструменты моделям. Разбираем пошаговую настройку, ограничения и то, как это сказывается на расходе токенов при работе через шлюз.
- MCP в opencode: подключение локальных и удалённых серверовПошагово подключаем MCP-серверы к opencode: блок mcp в конфиге, заголовки и OAuth, отключение серверов у отдельных агентов и цена лишних инструментов.