Узнайте, как создать AI-коуча для собеседований с долговременной памятью и маршрутизацией запросов. Реализация на Python с Hindsight и Cascadeflow. Начните экономить API-затраты уже сегодня.
Большинство AI-ботов для собеседований — это прославленные поисковики с чат-интерфейсом. Они задают вопрос, дают шаблонный ответ из учебника и, что хуже всего, страдают полной амнезией. Если вы неделю назад спотыкались на хэш-таблицах, бот об этом не знает. Каждая сессия начинается с нуля. Это не коучинг, это просто задавание вопросов.
Я решил построить нечто иное: коуча, который рассматривает каждую сессию как итерацию, отслеживает прогресс и разумно управляет затратами на API.
Чтобы решить проблему памяти и стоимости, я не стал строить сложный хрупкий бэкенд. Стек остался сфокусированным:
Поток: Ввод пользователя → Проверка памяти → Маршрутизатор (на дешёвую/дорогую модель) → Ответ LLM → Сохранение.
Стандартный RAG часто слишком поверхностен для личного роста. Мне нужно было отслеживать паттерны неудач. Я использовал Hindsight для поддержания постоянного банка проблем пользователя (например, «рекурсия», «конкурентность»). Когда начинается сессия, агент извлекает историю и внедряет её в системный промпт. Диалог превращается из «Как дела?» в «На прошлой сессии вы споткнулись на логике коллизий в хэш-таблицах. Давайте вернёмся к этому».
Я не мог оправдать маршрутизацию каждого «привет» или «я готов» через флагманскую модель вроде gpt-4o. Это дорого и не нужно. Я реализовал рантайм-маршрутизатор. Простые разговорные запросы идут на llama-3.1-8b (дёшево), а сложные технические — на llama-3.3-70b или gpt-4o. Это создаёт аудиторский след, где я в реальном времени отслеживаю расходы.
Первая итерация была сломана. Я попытался впихнуть память в сообщение пользователя:
# ПЛОХОЙ подход
if 'what was' in question.lower():
memory = MEMORY_BANKS[bank_id][-1]
prompt = f'User previously struggled with {memory}. {question}'AI просто путался — думал, что пользователь написал «User previously struggled with recursion», и повторял это за мной. Он не учился. Исправление: я перенёс контекст памяти в системный промпт, куда ему и место. Также добавил проверки безопасности, чтобы не падать на новых пользователях.
memory_context = ''
if MEMORY_BANKS.get(bank_id) and 'what was' in question.lower():
memory = MEMORY_BANKS[bank_id][-1]
memory_context = f'Context: User failed at {memory} before. Mention this.'
response = client.chat.completions.create(
model=model,
messages=[
{'role': 'system', 'content': SYSTEM_PROMPT + memory_context},
{'role': 'user', 'content': question}
]
)Разделив «память» и «намерение пользователя», агент начал интерпретировать обратную связь и менять поведение.
Разница колоссальная.
До (бот без состояния):
Вы: Объясните полиморфизм.
AI: Полиморфизм — это ключевая концепция ООП, где...
(Стоимость: $0.02)
После (интеллектуальный агент):
[HINDSIGHT] Вспомнил: найдена обратная связь из сессии #1
[CASCADEFLOW] Маршрутизация на: llama-3.3-70b-versatile | Причина: Технический
AI: В сессии #1 вы были неуверенны в v-table. Давайте копнём глубже: объясните стоимость полиморфизма во время выполнения.
(Стоимость: $0.008)
Память требует кода, а не только промптов. Нельзя просто сказать AI «запомни». Нужно построить слой персистентности. Hindsight заставил меня структурировать данные правильно.
Логируйте свои расходы. Если вы явно не логируете решения маршрутизации (как я с Cascadeflow), вы понятия не имеете, сколько денег утекает на простые запросы.
Системные промпты — для контекста, пользовательские — для намерения. Как только я разделил их, агент перестал галлюцинировать и начал учить.
Начните с малого: добавьте в своего бота простую базу данных (SQLite или Redis) для хранения ошибок пользователя. Внедрите маршрутизатор на основе длины запроса или ключевых слов — например, если запрос короче 10 слов, используйте дешёвую модель. Вы увидите, как качество коучинга вырастет, а счёт за API упадёт.
Хочешь закрепить знания на практике?
Решай задачи на Algolit — интерактивная платформа для обучения
Начать бесплатно →