Слой архитектора
Telegram-бот
Личный инструмент архитектора, созданный для повышения его профессиональной эффективности и как демонстрация работы памяти проекта.
Настройки
Токен, связь и всё, без чего бот не отвечает.
Что это даёт. Дверь в ваш проект из мессенджера, а не из браузера. Человек пишет вашему боту и получает ответ, собранный из вашей же базы знаний, — без отдельного приложения и без страницы входа.
Telegram
привязано к @roma_armstrongТекущий бот: @TestFracteraBot
После привязки бот отвечает из базы знаний этого проекта. Ответ он не выдумывает: если база пуста или служба выключена, он так и говорит.
Ключ OpenAI
Ключ OpenAI существует…j8sAБоту он нужен чаще, чем нет: без этого ключа голосовая заметка не расшифруется, а ответ не соберётся. Поэтому он настраивается здесь — обе настройки на одном экране.
Проект перезапускается, чтобы прочитать новый ключ; служба каналов читает его сразу.
Расписание
Как часто у приложения спрашивают, не наступило ли напоминание. Напоминание обязано сработать, когда на сайт никто не смотрит, — значит кто-то должен постучать, и это он. «Выключено» означает, что напоминаний в проекте нет и платить за них не нужно.
Реестр признаков
признаков: 25
Что проект умеет вынимать из сообщения: дату события, деньги, место, связь со сказанным раньше. Каждый признак — объявленная способность, а не ярлык.
Чем пришло
- Печатный текст
material.textвстроенный
Человек написал сообщение буквами.
Канал отдаёт сообщение без вложения звука.
tgdesk_messages.raw_kind
- Голосовое сообщение
material.voiceвстроенный
Человек надиктовал. Служба расшифровывает запись, и дальше по потоку она неотличима от печатного текста — отличие видно только здесь.
Канал отдаёт вложение звука; служба возвращает расшифровку.
tgdesk_messages.raw_kind
Зачем пришло
- capture
intent.captureвстроенный
Человек рассказывает о случившемся — это сохраняется.
Маршрутизатор намерений спрашивает модель одним коротким вопросом и получает имя ветви.
ветвь обработки; в базе не хранится
- question
intent.questionвстроенный
Спрашивает о собственной жизни: что покупал, обещал, тратил.
Маршрутизатор намерений спрашивает модель одним коротким вопросом и получает имя ветви.
ветвь обработки; в базе не хранится
- schedule
intent.scheduleвстроенный
Просит напомнить или поставить событие в календарь.
Маршрутизатор намерений спрашивает модель одним коротким вопросом и получает имя ветви.
ветвь обработки; в базе не хранится
- confirm
intent.confirmвстроенный
Соглашается или отказывается — и больше ничего.
Маршрутизатор намерений спрашивает модель одним коротким вопросом и получает имя ветви.
ветвь обработки; в базе не хранится
- correct
intent.correctвстроенный
Поправляет то, что система предложила: другую дату, другую сумму.
Маршрутизатор намерений спрашивает модель одним коротким вопросом и получает имя ветви.
ветвь обработки; в базе не хранится
- where
intent.whereвстроенный
Отвечает на вопрос, где он живёт, — для часового пояса.
Маршрутизатор намерений спрашивает модель одним коротким вопросом и получает имя ветви.
ветвь обработки; в базе не хранится
- meta
intent.metaвстроенный
Спрашивает о самой системе: кто ты, что умеешь.
Маршрутизатор намерений спрашивает модель одним коротким вопросом и получает имя ветви.
ветвь обработки; в базе не хранится
- command
intent.commandвстроенный
Команда, начинается с косой черты.
Маршрутизатор намерений спрашивает модель одним коротким вопросом и получает имя ветви.
ветвь обработки; в базе не хранится
Чем оказалось
- memo
entity.memoвстроенный
Просьба запомнить нечто как есть.
Разбор рассказа возвращает род сущности и её поля.
tgdesk_entries.kind
- note
entity.noteвстроенный
Заметка: факт, который стоит сохранить.
Разбор рассказа возвращает род сущности и её поля.
tgdesk_entries.kind
- task
entity.taskвстроенный
Задача — то, что человек собирается сделать.
Разбор рассказа возвращает род сущности и её поля.
tgdesk_entries.kind
- receipt
entity.receiptвстроенный
Чек или покупка: сумма, продавец, предмет.
Разбор рассказа возвращает род сущности и её поля.
tgdesk_entries.kind
- place
entity.placeвстроенный
Место — адрес, заведение, точка на карте.
Разбор рассказа возвращает род сущности и её поля.
tgdesk_entries.kind
- idea
entity.ideaвстроенный
Идея, замысел, мысль на будущее.
Разбор рассказа возвращает род сущности и её поля.
tgdesk_entries.kind
Куда уехало
- Медиатека
destination.mediaвстроенный
Присланный файл сохранён и доступен по имени.
Отметка ставится обработкой, когда отправка прошла; отказ пишется в заметки сообщения.
tgdesk_artifacts.kind
- Векторный склад
destination.vectorвстроенный
Смысл сообщения записан для поиска по смыслу, а не по словам.
Отметка ставится обработкой, когда отправка прошла; отказ пишется в заметки сообщения.
tgdesk_artifacts.kind
- Граф знаний
destination.ragвстроенный
Конверт сообщения ушёл в граф: источник, автор, время, признаки, суть.
Отметка ставится обработкой, когда отправка прошла; отказ пишется в заметки сообщения.
tgdesk_artifacts.kind
Что извлекли
- Связь с другим сообщением
field.linkвстроенный
выключить нельзя
Сообщения одного разговора, идущие подряд. Человек говорит «эту фотографию», «то место» — и без связи вторая фраза теряет предмет первой.
Сегодня — по времени: соседнее сообщение того же чата в пределах 180 секунд. По смыслу пока не ищется.
своей таблицы нет: связь — отношение, а не значение
- Когда это случилось
field.happenedвстроенный
Дата события отдельно от даты рассказа. «Вчера купил» кладётся под вчерашнее число, а не под минуту разговора.
Разбор возвращает дату события, если она названа словами: вчера, в понедельник, третьего числа.
tgdesk_messages.happened_unix
- Тут про деньги
field.moneyвстроенный
Отметка, что в сообщении речь о цене, оплате или заработке. По ней «покажи траты» отвечается условием, а не перечитыванием года переписки.
Разбор ставит отметку, когда упомянута цена, платёж или зарплата.
tgdesk_messages.has_financial
- Координаты
field.geoвстроенный
Точка на карте, присланная Telegram. Слово «здесь» координатами не становится — сегодня их даёт только настоящая геометка.
Канал присылает широту и долготу вложением.
tgdesk_messages.lat, tgdesk_messages.lon
- Переслано от
field.forwardedвстроенный
Кто автор пересланного сообщения. Важно, когда человек передаёт чужие слова.
Канал сообщает имя исходного отправителя.
tgdesk_messages.forwarded_from
- О чём это
field.facetsвстроенный
Два-шесть коротких тегов, называющих предмет сообщения словами человека. Сегодня они уезжают только в конверт графа и никуда больше — это готовый поток кандидатов в реестр.
Разбор возвращает теги вместе со сводкой.
нигде: печатается в конверт графа
Ваша собственная инструкция боту
В процессе разработки
Текст, который вы пишете сами, а бот исполняет вдобавок к своим правилам: ваши ограничения, ваш тон, ваша предметная область. Он добавляется к инструкции бота, а не заменяет её.