Что получится в результате
Соберем ИИ-агента для обучения и онбординга, который помогает новичку или ученику пройти путь от первого входа до проверяемого результата: выдает маршрут обучения, отвечает только по материалам, объясняет сложные места, задает контрольные вопросы, фиксирует прогресс, сообщает наставнику о рисках и синхронизирует результаты с LMS.
Рабочая версия будет делать так:
- настройки хранятся в `settings`;
- программы обучения хранятся в `learning_programs`;
- роли учеников хранятся в `learner_roles`;
- участники обучения хранятся в `learners`;
- наставники хранятся в `mentors`;
- модули курса хранятся в `course_modules`;
- уроки хранятся в `lesson_catalog`;
- учебные материалы хранятся в `learning_materials`;
- фрагменты материалов хранятся в `knowledge_chunks`;
- embeddings и ссылки на фрагменты хранятся в `retrieval_index`;
- маршрут обучения хранится в `learning_paths`;
- события прогресса хранятся в `progress_events`;
- вопросы ученика хранятся в `learner_questions`;
- ответы агента хранятся в `answer_log`;
- контрольные вопросы хранятся в `knowledge_checks`;
- попытки ответов хранятся в `check_attempts`;
- слабые темы хранятся в `weak_topics`;
- рекомендации по следующему шагу хранятся в `next_step_queue`;
- задачи наставнику хранятся в `mentor_tasks`;
- спорные ответы уходят в `approval_queue`;
- синхронизация с LMS пишется в `lms_sync_queue`;
- результаты обучения хранятся в `learning_results`;
- еженедельный отчет пишется в `weekly_learning_report`;
- все решения пишутся в `audit_log`;
- ошибки интеграций пишутся в `error_log`.
В первой версии агент не ставит финальные оценки, не увольняет и не “проваливает” сотрудника, не меняет LMS-курс, не выдает ответы без ссылок на материалы и не сохраняет лишние персональные данные. Он помогает учиться, фиксирует прогресс и подсказывает наставнику, где нужна помощь.
Что понадобится
- n8n Cloud или self-hosted n8n.
- Google Sheets для MVP-таблиц.
- LMS: Moodle, Google Classroom, Open edX или выгрузка курса в таблицах.
- База знаний: Google Docs, Notion, Confluence, Markdown, PDF или HTML-страницы.
- Хранилище embeddings: pgvector, Qdrant, Pinecone, Chroma или другой векторный индекс.
- Тестовая группа учеников или один пилотный сотрудник.
- Список ролей и ожидаемых результатов обучения.
- Наставник или HR/learning manager, который подтверждает программу и спорные ответы.
- Канал уведомлений: Telegram, Slack, Teams или email.
- API-ключ LLM-провайдера.
Шаг 1. Выберите первый сценарий обучения
Не начинайте с “агент обучает всех всему”. Для MVP выберите один сценарий.
Подходящие варианты:
- онбординг нового сотрудника;
- обучение операторов поддержки;
- обучение продажам по продукту;
- адаптация менеджера в CRM;
- курс по внутренним регламентам;
- обучение клиентов продукту;
- повторение слабых тем после теста.
Самый безопасный старт: `роль -> маршрут из 5 модулей -> ответы по материалам -> мини-тест -> задача наставнику`.
Проверка: сценарий можно пройти одним тестовым пользователем за 30-60 минут.
Шаг 2. Запретите опасные действия
В первой версии запретите агенту:
- ставить финальную оценку;
- менять статус сотрудника;
- менять курс в LMS;
- записывать оценки в LMS без approval;
- отвечать без найденного материала;
- придумывать регламенты;
- хранить лишние персональные данные;
- показывать материалы не той роли;
- выдавать ответы на экзамен;
- делать вывод “сотрудник не подходит”;
- отправлять руководителю чувствительные выводы без проверки;
- использовать приватные документы для обучения модели.
Разрешите агенту:
- читать программу;
- читать учебные материалы;
- искать по базе знаний;
- объяснять фрагменты;
- задавать контрольные вопросы;
- фиксировать прогресс;
- находить слабые темы;
- предлагать следующий шаг;
- создавать задачи наставнику;
- отправлять спорные ответы в approval.
Проверка: любые оценки, аттестации и спорные выводы должны попадать в `approval_queue`.
Шаг 3. Создайте Google Sheet проекта
Создайте таблицу `learning_agent_mvp`.
Добавьте листы:
settings
learning_programs
learner_roles
learners
mentors
course_modules
lesson_catalog
learning_materials
knowledge_chunks
retrieval_index
learning_paths
progress_events
learner_questions
answer_log
knowledge_checks
check_attempts
weak_topics
next_step_queue
mentor_tasks
approval_queue
lms_sync_queue
learning_results
weekly_learning_report
audit_log
error_log
Проверка: названия листов совпадают один в один, потому что n8n будет обращаться к ним по имени.
Шаг 4. Заполните settings
В `settings` добавьте колонки:
key
value
description
Добавьте строки:
llm_model | gpt-4.1-mini | модель для ответов и проверок
embedding_model | text-embedding-3-small | модель embeddings
default_program_id | PROG-SUPPORT-ONBOARDING | программа по умолчанию
max_chunks_per_answer | 6 | максимум фрагментов в ответе
min_answer_sources | 1 | минимум найденных фрагментов
allow_final_grades | false | финальные оценки запрещены
allow_lms_write | false | запись в LMS только после approval
store_personal_data | minimal | храним минимум данных
approval_channel | telegram | канал согласований
report_channel | email | канал отчетов
Проверка: `allow_final_grades=false` и `allow_lms_write=false`.
Шаг 5. Заполните learning_programs
В `learning_programs` добавьте колонки:
program_id
name
goal
target_role
duration_days
success_criteria
owner
status
Пример:
PROG-SUPPORT-ONBOARDING | Онбординг оператора поддержки | сотрудник умеет отвечать на типовые обращения и знает регламенты | support_operator | 14 | прошел 5 модулей, сдал мини-тесты, разобрал 3 кейса | learning_manager | active
Проверка: у программы есть измеримый результат, а не только название.
Шаг 6. Заполните learner_roles
В `learner_roles` добавьте колонки:
role_id
program_id
role_name
must_know
must_do
restricted_materials
status
Пример:
ROLE-SUPPORT | PROG-SUPPORT-ONBOARDING | оператор поддержки | продукт, SLA, эскалации, тон общения | обработать тикет, найти регламент, оформить эскалацию | finance,hr-private | active
Проверка: агент понимает, какие материалы доступны роли, а какие запрещены.
Шаг 7. Заполните learners
В `learners` добавьте колонки:
learner_id
program_id
role_id
display_name
email_hash
start_date
mentor_id
status
Пример:
LRN-001 | PROG-SUPPORT-ONBOARDING | ROLE-SUPPORT | Анна | sha256:... | 2026-05-23 | MENTOR-001 | active
Не храните лишние персональные данные. Для MVP достаточно ID, роли, наставника и статуса.
Проверка: email хранится как hash или внутренний ID, если полный адрес не нужен.
Шаг 8. Заполните mentors
В `mentors` добавьте колонки:
mentor_id
name
role
contact_channel
contact_ref
responsibility
status
Пример:
MENTOR-001 | Иван | team lead support | telegram | @ivan | проверка кейсов, ответы на сложные вопросы | active
Проверка: у каждого активного ученика есть наставник.
Шаг 9. Создайте course_modules
В `course_modules` добавьте колонки:
module_id
program_id
title
goal
order_number
required
estimated_minutes
status
Пример:
MOD-001 | PROG-SUPPORT-ONBOARDING | Продукт и основные сценарии | понять, что делает продукт и кому он нужен | 1 | yes | 40 | active
MOD-002 | PROG-SUPPORT-ONBOARDING | Регламенты поддержки | научиться находить SLA и правила эскалации | 2 | yes | 50 | active
Проверка: у модулей есть порядок и цель.
Шаг 10. Создайте lesson_catalog
В `lesson_catalog` добавьте колонки:
lesson_id
module_id
title
lesson_type
goal
material_refs
expected_outcome
order_number
status
`lesson_type`:
read
watch
practice
case
quiz
shadowing
mentor_review
Проверка: урок связан с материалами и ожидаемым результатом.
Шаг 11. Создайте learning_materials
В `learning_materials` добавьте колонки:
material_id
lesson_id
title
source_type
source_url
version
access_role
owner
status
updated_at
`source_type`:
google_doc
notion
confluence
pdf
markdown
html
video_transcript
lms_page
Проверка: у материала есть версия и роль доступа.
Шаг 12. Разбейте материалы на knowledge_chunks
В `knowledge_chunks` добавьте колонки:
chunk_id
material_id
lesson_id
heading
chunk_text
source_url
version
access_role
created_at
Правила:
- один chunk = один небольшой смысловой фрагмент;
- сохраняйте ссылку на исходный материал;
- сохраняйте версию;
- не смешивайте разные уроки в одном chunk;
- не добавляйте закрытые материалы в общедоступный индекс.
Проверка: по каждому ответу агента можно вернуться к конкретному фрагменту.
Шаг 13. Создайте retrieval_index
В `retrieval_index` добавьте колонки:
index_id
chunk_id
embedding_ref
metadata_json
access_role
status
indexed_at
`metadata_json` должен содержать:
{
"program_id": "PROG-SUPPORT-ONBOARDING",
"module_id": "MOD-001",
"lesson_id": "LESSON-001",
"material_id": "MAT-001",
"version": "2026-05-23",
"source_url": "https://..."
}
Проверка: поиск фильтруется по `access_role`, иначе ученик может увидеть лишние материалы.
Шаг 14. Создайте workflow индексации в n8n
Создайте workflow `Learning Agent Index`.
Добавьте узлы:
- `Manual Trigger`;
- `Read learning_materials`;
- `Fetch document text`;
- `Split into chunks`;
- `Write knowledge_chunks`;
- `Create embeddings`;
- `Upsert retrieval_index`;
- `Write audit_log`;
- `Write error_log`.
Проверка: workflow обрабатывает один материал и создает несколько chunks с embeddings.
Шаг 15. Создайте learning_paths
В `learning_paths` добавьте колонки:
path_id
learner_id
program_id
module_id
lesson_id
status
assigned_at
started_at
completed_at
Статусы:
assigned
in_progress
completed
blocked
skipped_by_mentor
Проверка: путь обучения строится из модулей и уроков, а не из произвольных советов агента.
Шаг 16. Создайте progress_events
В `progress_events` добавьте колонки:
event_id
learner_id
program_id
lesson_id
event_type
payload_json
created_at
`event_type`:
lesson_started
lesson_completed
question_asked
answer_read
check_started
check_passed
check_failed
mentor_task_created
Проверка: прогресс фиксируется событиями, а не одним полем “прошел/не прошел”.
Шаг 17. Создайте learner_questions
В `learner_questions` добавьте колонки:
question_id
learner_id
program_id
lesson_id
question_text
context_json
status
created_at
Статусы:
new
answered
needs_material
needs_mentor
blocked_by_access
Проверка: вопрос связан с программой и уроком.
Шаг 18. Настройте prompt для ответа по материалам
Prompt:
Ты обучающий ассистент. Отвечай только по найденным материалам.
Правила:
1. Если материалов недостаточно, скажи, что ответа нет в курсе.
2. Не придумывай регламенты и процедуры.
3. Дай короткое объяснение простым языком.
4. Добавь ссылку на урок или материал.
5. Если вопрос относится к закрытой теме, верни status=blocked_by_access.
6. Если нужен наставник, верни status=needs_mentor.
7. Не выдавай готовые ответы на итоговую аттестацию.
question:
{{$json.question}}
learner:
{{$json.learner}}
retrieved_chunks:
{{$json.chunks}}
Верни JSON:
{
"status": "answered | needs_material | needs_mentor | blocked_by_access",
"answer": "...",
"source_chunk_ids": ["..."],
"recommended_next_step": "...",
"mentor_task_needed": false
}
Проверка: если `source_chunk_ids` пустой, ответ не показывается как факт.
Шаг 19. Создайте answer_log
В `answer_log` добавьте колонки:
answer_id
question_id
learner_id
status
answer_text
source_chunk_ids
confidence
recommended_next_step
created_at
`confidence`:
high
medium
low
needs_material
Проверка: ответы с `low` и `needs_material` попадают наставнику или владельцу курса.
Шаг 20. Создайте knowledge_checks
В `knowledge_checks` добавьте колонки:
check_id
lesson_id
check_type
question
expected_answer
rubric_json
difficulty
status
`check_type`:
single_choice
short_answer
case
role_play
practical_task
Проверка: у проверки есть ожидаемый ответ или rubric, иначе агент не должен оценивать попытку.
Шаг 21. Настройте prompt для генерации проверок
Prompt:
Ты методист. Подготовь контрольные вопросы к уроку.
Правила:
1. Проверяй понимание, а не память формулировок.
2. Не задавай вопросы по материалам, которых нет в lesson.
3. Для практического урока добавь кейс.
4. Дай ожидаемый ответ и критерии проверки.
5. Не создавай итоговую аттестацию без методиста.
lesson:
{{$json.lesson}}
chunks:
{{$json.chunks}}
Верни JSON:
{
"checks": [
{
"check_type": "short_answer | case | practical_task",
"question": "...",
"expected_answer": "...",
"rubric": ["..."],
"difficulty": "easy | medium | hard"
}
]
}
Проверка: вопросы создаются по конкретным chunks, а не из головы.
Шаг 22. Создайте check_attempts
В `check_attempts` добавьте колонки:
attempt_id
check_id
learner_id
answer_text
score
feedback
weak_topics
status
created_at
Статусы:
passed
failed
needs_review
not_gradable
Проверка: агент не ставит финальную оценку. Он дает предварительный `score` и feedback.
Шаг 23. Настройте prompt для проверки ответа
Prompt:
Ты наставник по обучению. Проверь ответ ученика по rubric.
Правила:
1. Оценивай только по критериям.
2. Не ставь финальную аттестацию.
3. Если ответ спорный, верни needs_review.
4. Дай короткую обратную связь.
5. Назови слабые темы.
6. Предложи следующий учебный шаг.
check:
{{$json.check}}
learner_answer:
{{$json.answer}}
rubric:
{{$json.rubric}}
Верни JSON:
{
"status": "passed | failed | needs_review | not_gradable",
"score": 0,
"feedback": "...",
"weak_topics": ["..."],
"next_step": "..."
}
Проверка: `needs_review` отправляется наставнику.
Шаг 24. Создайте weak_topics
В `weak_topics` добавьте колонки:
weak_topic_id
learner_id
program_id
module_id
lesson_id
topic
evidence
severity
status
created_at
`severity`:
low
medium
high
critical
Проверка: слабая тема создается только с evidence: вопрос, попытка или ошибка в кейсе.
Шаг 25. Создайте next_step_queue
В `next_step_queue` добавьте колонки:
next_step_id
learner_id
program_id
reason
recommended_lesson_id
recommended_action
priority
status
created_at
`recommended_action`:
continue_next_lesson
repeat_lesson
ask_mentor
do_practice_task
read_material
watch_video
take_check_again
Проверка: следующий шаг связан с конкретным уроком или задачей.
Шаг 26. Создайте mentor_tasks
В `mentor_tasks` добавьте колонки:
mentor_task_id
mentor_id
learner_id
source
source_id
task_type
title
description
priority
status
created_at
`task_type`:
answer_question
review_attempt
help_blocked_learner
update_material
approve_lms_sync
check_access
Проверка: наставник получает конкретное действие, а не общий сигнал “ученику сложно”.
Шаг 27. Создайте approval_queue
В `approval_queue` добавьте колонки:
approval_id
source
source_id
action_type
action_text
risk_level
payload_json
approver
status
requested_at
approved_at
decision_comment
В approval отправляйте:
- запись оценки в LMS;
- изменение программы;
- изменение учебного материала;
- спорный ответ;
- итоговую аттестацию;
- вывод о неготовности сотрудника;
- доступ к закрытым материалам;
- отчет руководителю с чувствительными выводами.
Проверка: `approval_queue.status` не может сразу быть `approved`.
Шаг 28. Настройте Telegram approval
В n8n добавьте Telegram-узел после записи в `approval_queue`.
Сообщение:
Learning Agent approval
Action: {{$json.action_type}}
Risk: {{$json.risk_level}}
Learner: {{$json.learner_id}}
Source: {{$json.source}} {{$json.source_id}}
{{$json.action_text}}
Approve: /approve {{$json.approval_id}}
Reject: /reject {{$json.approval_id}}
Review: /review {{$json.approval_id}}
Проверка: команда `/approve` меняет только одну строку по `approval_id`.
Шаг 29. Создайте lms_sync_queue
В `lms_sync_queue` добавьте колонки:
sync_id
approval_id
lms_type
learner_id
course_id
payload_json
sync_action
status
created_at
synced_at
error_message
`sync_action`:
mark_lesson_complete
write_preliminary_score
add_comment
assign_lesson
create_course_note
В первой версии используйте `status=pending_manual` или включайте запись в LMS только после approval.
Проверка: агент не пишет оценки напрямую в LMS.
Шаг 30. Подключите Moodle Web Services
Если используете Moodle, начните с read-only.
Минимальные операции:
- получить курсы;
- получить пользователей курса;
- получить структуру модулей;
- получить прогресс;
- подготовить sync draft.
Проверка: запись оценок или completion включается только после отдельного approval.
Шаг 31. Подключите Google Classroom API
Если используете Google Classroom, начните с чтения:
- courses;
- courseWork;
- materials;
- students;
- submissions.
Проверка: комментарии и оценки не создаются автоматически в MVP.
Шаг 32. Подключите Open edX
Если используете Open edX, подключите данные курса и прогресса через доступные API или выгрузку.
Для MVP достаточно:
- course structure;
- learner progress;
- problem results;
- links to lessons;
- manual sync queue.
Проверка: агент не меняет course content в Open edX.
Шаг 33. Создайте learning_results
В `learning_results` добавьте колонки:
result_id
learner_id
program_id
module_id
completed_lessons
passed_checks
failed_checks
weak_topics_count
mentor_tasks_count
status
updated_at
Статусы:
on_track
needs_help
blocked
completed
needs_review
Проверка: статус объясняется событиями и попытками, а не догадкой LLM.
Шаг 34. Создайте weekly_learning_report
В `weekly_learning_report` добавьте колонки:
report_id
program_id
period
summary
active_learners
completed_lessons
passed_checks
blocked_learners
top_weak_topics
mentor_actions
material_gaps
next_week_actions
status
created_at
Пример summary:
За неделю 8 новичков прошли 42 урока, 6 человек застряли на теме SLA и эскалаций. Агент создал 5 задач наставникам и нашел 3 вопроса, на которые нет материала. На следующей неделе нужно обновить урок по эскалациям и добавить два практических кейса.
Проверка: отчет содержит действия для наставника и владельца курса.
Шаг 35. Настройте audit_log
В `audit_log` добавьте колонки:
audit_id
run_id
actor
action
entity_type
entity_id
before_json
after_json
reason
created_at
Логируйте:
- индексацию материала;
- ответ на вопрос;
- создание проверки знаний;
- проверку ответа;
- создание слабой темы;
- рекомендацию следующего шага;
- задачу наставнику;
- отправку в approval;
- sync с LMS;
- weekly report.
Проверка: по `audit_log` можно понять, почему агент дал конкретный ответ или рекомендацию.
Шаг 36. Настройте error_log
В `error_log` добавьте колонки:
error_id
run_id
node_name
error_type
message
payload_sample
retry_count
status
created_at
Типы ошибок:
missing_material
access_denied
empty_retrieval
invalid_json
lms_api_error
embedding_error
stale_material_version
mentor_not_found
Проверка: если retrieval пустой, агент не должен отвечать “по памяти”.
Шаг 37. Протестируйте на одном уроке
Добавьте модуль и урок:
MOD-001 | PROG-SUPPORT-ONBOARDING | Регламенты поддержки | научиться находить SLA и правила эскалации | 1 | yes | 50 | active
LESSON-001 | MOD-001 | Как работает SLA | read | понять сроки реакции и эскалации | MAT-001 | ученик объясняет, когда эскалировать тикет | 1 | active
Добавьте материал `MAT-001`, разбейте его на chunks и запустите workflow.
Задайте вопрос:
Когда нужно эскалировать тикет, если клиент ждет ответ больше суток?
Ожидаемый результат:
- агент нашел 1-6 релевантных chunks;
- в `answer_log` появился ответ со ссылкой на chunks;
- в `progress_events` появилось `question_asked`;
- агент предложил следующий шаг;
- в `knowledge_checks` создан мини-вопрос;
- попытка ученика записалась в `check_attempts`;
- если ответ слабый, появилась запись в `weak_topics`;
- в `audit_log` есть все действия;
- в `error_log` нет ошибок.
Шаг 38. Проверьте негативные сценарии
Проведите проверки:
- задайте вопрос не по материалам курса;
- убедитесь, что агент вернул `needs_material`;
- задайте вопрос по закрытому разделу;
- убедитесь, что ответ заблокирован;
- удалите mentor_id у ученика;
- убедитесь, что создана ошибка `mentor_not_found`;
- передайте невалидный JSON от LLM;
- убедитесь, что workflow остановился и записал ошибку;
- попробуйте записать оценку в LMS без approval;
- убедитесь, что запись не выполнена;
- задайте вопрос “дай ответ на итоговый тест”;
- убедитесь, что агент отказался и предложил повторить материал.
Проверка: агент должен помогать учиться, а не обходить обучение.
Что нельзя автоматизировать в первой версии
Не автоматизируйте сразу:
- финальную аттестацию;
- запись оценок в LMS;
- изменение курса;
- выводы о профпригодности;
- отчеты руководителю с чувствительными персональными выводами;
- доступ к закрытым материалам;
- ответы без найденных материалов;
- массовое назначение курсов;
- автоматическое удаление ученика из программы;
- использование приватных документов для обучения модели;
- хранение лишних персональных данных;
- замену наставника агентом.
Минимальный хороший MVP: агент индексирует один курс, отвечает по материалам со ссылками, задает мини-проверку, фиксирует прогресс, находит слабые темы, создает задачу наставнику и готовит weekly learning report.
Частые вопросы
Можно ли подключить агента к Moodle или другой LMS?
Да, но начните с чтения структуры курса, прогресса и материалов. Запись оценок, completion и комментариев лучше включать только после approval, потому что LMS часто используется как официальный контур обучения.
Может ли агент заменить наставника?
Нет. Он снимает повторяющиеся вопросы, помогает с материалами и показывает слабые темы, но спорные ответы, мотивация, обратная связь и оценка готовности остаются за человеком.
Как не допустить выдуманных ответов?
Используйте RAG по учебным материалам и правило: нет найденных chunks - нет ответа как факта. Агент должен показать ссылку на материал или честно сказать, что в курсе нет ответа.
Какие данные ученика хранить?
Минимум: ID, роль, программа, наставник, прогресс, попытки проверок и слабые темы. Личные данные, оценки и чувствительные выводы храните только если это действительно нужно и понятно, кто имеет доступ.
Что считать готовым результатом MVP?
MVP готов, если один ученик проходит один модуль, агент отвечает по материалам, задает проверочный вопрос, фиксирует прогресс, создает задачу наставнику при проблеме и оставляет понятный `audit_log`.