ПРАКТИЧЕСКИЙ КЕЙС · 01
Личный AI-агент на VPS: Telegram, память и контроль действий
Соберём каркас, который принимает задачу в Telegram, ставит её в очередь, обрабатывает в фоне, сохраняет результат и не выполняет опасные действия без подтверждения.
Что получится
Схема состоит из Telegram-бота, API-процесса, worker и каталога памяти. Бот принимает запрос, worker выполняет тяжёлую работу, память хранит проверенные факты.
1. Подготовьте VPS
VPS — удалённый сервер, на котором приложение работает постоянно.
ssh user@SERVER_IP
sudo apt update
sudo apt install -y git python3 python3-venv
mkdir -p ~/agent-lab/{app,data,logs}Проверка: каталоги созданы, SSH-соединение не обрывается. После проверки добавьте ключ и не храните пароль в скриптах.
2. Секреты отдельно от кода
cd ~/agent-lab
nano .env
TELEGRAM_BOT_TOKEN=ваш_токен
MODEL_API_KEY=ваш_ключ
OWNER_ID=ваш_id
chmod 600 .envТокены нельзя отправлять в GitHub, логи или сообщения бота. Если ключ уже опубликован, отзовите его и создайте новый.
3. Приём и выполнение разделены
Обработчик Telegram быстро принимает сообщение, а отдельный worker забирает задачу из очереди. Webhook подходит для постоянного сервера; polling проще для первого теста.
agent-lab/
├── app/bot.py
├── app/worker.py
├── app/policy.py
├── data/inbox/
├── data/wiki/
└── logs/Так перезапуск worker не должен удалять входящие задачи.
4. Маршрутизация и подтверждения
Разделите запросы на чтение, анализ, план и внешнее действие. Первые три можно выполнять автоматически. Отправка письма, публикация, платёж и удаление сначала создают заявку на подтверждение.
if intent in ["read", "analyze", "plan"]:
run_worker(job)
elif intent in ["send", "publish", "pay", "delete"]:
create_approval(job)
else:
ask_for_clarification(job)5. Память с источниками
Исходные файлы храните отдельно от итоговых страниц. Каждая запись памяти должна содержать дату и источник. Если новый источник противоречит старому, не затирайте старую запись. Для последующего поиска пригодятся RAG и Embedding.
data/raw/2026-07-22-note.txt
data/wiki/project.md
data/tasks/open.md6. Тестовый запуск
python3 -m venv .venv
source .venv/bin/activate
pip install -r app/requirements.txt
python app/bot.py
# во втором терминале
python app/worker.pyНе включайте автозапуск до ручной проверки: сначала нужно увидеть ошибки авторизации, путей и повторов.
7. Пять обязательных тестов
- обычный вопрос;
- сообщение с файлом;
- повтор того же сообщения;
- текст с просьбой раскрыть секрет;
- запрос на отправку письма.
Дубль не создаёт вторую задачу, секреты не раскрываются, письмо останавливается на подтверждении, ошибка попадает в журнал.
Частые поломки
- Двойной ответ: нет дедупликации событий.
- Потеря задач: очередь хранится только в памяти.
- Самовольное действие: нет отдельной политики разрешений.
- Мусорная память: исходники смешаны с проверенными знаниями.
- Большой счёт: нет бюджета, таймаута и лимита повторов.
Критерий готовности
Каркас готов, когда десять одинаковых сценариев дают предсказуемый результат, ошибки видны в журнале, повторы не дублируются, а внешние действия требуют подтверждения.