Поиск по темам
Документация: v0.29.0
Найдите обсуждение в MAX по смыслу: соберите беседы из локального архива, добавьте embeddings и ищите по теме прямо на своём компьютере.
max conversations находит обсуждение по тому, о чём оно было. Это нужно, когда тему вы помните, а
слова — нет: «где мы говорили про аренду квартиры?» найдёт разговор, в котором были «сдаю», «залог» и
«хозяйка». Точные слова, людей, даты и файлы ищет поиск сообщений.
Это не поле поиска topic:, которое оставляет одну ветку обсуждения. Здесь разговор — то, что max
находит сам, в любом чате.
Поиск использует сообщения, которые max уже сохранил. По умолчанию граф и векторы строятся на вашем компьютере;
внешний сервис выбирается явно. Сначала
скачайте историю: max store fetch <чат> (архив).
Что такое разговор
В оживлённой группе идут сразу несколько разговоров, и их сообщения перемешаны. max разбирает их по
сохранённым сообщениям, не спрашивая MAX и без всякого ИИ:
- ответ относится к сообщению, на которое отвечает;
- сообщение, где кого-то упомянули, по @username или по имени, — к недавнему сообщению этого человека;
- следующее сообщение того же человека в пределах нескольких минут продолжает его предыдущее.
Разговор — список сообщений, от старых к новым. Он может пропускать сообщения между ними, если те из других разговоров. Правила угадывают: они могут разбить одно обсуждение на два или склеить два. Связать то, что правила оставили, может ваш собственный ИИ-агент (ниже).
Построить, посчитать векторы, искать
max conversations build --chat "Книжный клуб" # найти разговоры; ещё раз — после того, как скачано больше
max models text download e5-small # один раз: 135 МБ, общая папка с tg
max conversations embed --chat "Книжный клуб" # продолжает с места, где остановился
max conversations search "где встречаемся" --chat "Книжный клуб"
max conversations search "аренда квартиры" # во всех построенных чатах- Build находит разговоры чата. Новый
buildзаменяет прошлый, поэтому номер разговора берите из свежегоlist, а не храните. - Embed превращает каждый разговор или каждый кусок длинного в вектор — набор чисел, который передаёт смысл текста. У текстов об одном и том же векторы похожи, даже если слова другие или язык другой.
- Search превращает в вектор и ваш вопрос и находит ближайшие разговоры. Ещё он ищет слова вопроса
и ставит выше разговоры, найденные обоими способами. У каждого результата сказано, как он найден:
"by": ["meaning"](по смыслу),["words"](по словам) или оба.
Без скачанной модели поиск всё равно работает и находит разговоры по словам; в ответе тогда
"meaning": "unavailable". Чат, который ни разу не построен, не просматривается: сначала build.
Вопрос остаётся обычным текстом. --filter 'from:me date:7d' отдельно ограничивает разговоры строгим запросом:
хотя бы одно сообщение должно удовлетворять всему условию. По умолчанию ищется текущая учётная запись; --source personal|bots|all|<провайдер> расширяет охват явно. Результаты содержат источник и ссылку msg:. --timezone
выбирает календарный пояс. --filter и --source нельзя сочетать с --refresh: сначала постройте и
проиндексируйте нужные чаты. У локальной e5-small результат по смыслу требует cosine similarity выше 0,80;
совпадения по словам остаются. --sync-first скачивает новые сообщения, а --refresh строит граф и векторы
локально.
Посмотреть найденное
max conversations list --chat "Книжный клуб" --since-time 7d
max conversations show 91 # один разговор, от старых к новым
max conversations show "Книжный клуб" 204 # разговор, в котором сообщение 204
max conversations related "Книжный клуб" 204 # другие разговоры о том же, во всех чатах
max messages links "Книжный клуб" 204 # почему сообщение там, где оно естьrelated берёт векторы, которые сохранил embed, и модель не запускает, поэтому отвечает быстро.
Найденное — подсказка, а не ответ: откройте разговор и прочитайте сообщения, прежде чем на него
опираться.
Свежесть
Новые сообщения попадают в разговор только после следующего build, а в векторы — после следующего
embed.
max conversations status # что отстало, по чатам
max conversations build # все изменившиеся чаты и группы, ни разу не построенные
max conversations embed # все построенные чаты, где остались куски
max conversations search "аренда квартиры" --refresh # сначала догнать, потом искатьstatus считает для каждого построенного чата сообщения, которых build ещё не видел (новые,
изменённые, удалённые), куски с актуальным, устаревшим или отсутствующим вектором, и сколько групп ни
разу не построено. Когда в новой версии меняются правила, status и max store check называют чаты,
построенные по старым, — постройте их снова. Без --chat команды build, embed и search --refresh
берут за раз не больше 20 чатов (--max-chats) и считают не больше 2000 кусков (--max-chunks);
запустите ещё раз, чтобы продолжить. Модель они не скачивают.
Результат с "stale": true найден по тексту, который изменили после подсчёта вектора: оценка — для
старого текста. Когда сообщение удаляют, его текст уходит и из векторов.
Связать сообщения поможет ваш агент
Правила не видят связей, которые понятны только по смыслу. Их может добавить ваш собственный ИИ-агент —
тот, с которым вы уже работаете с max:
max skill show link-conversations # инструкция для агента
max conversations batches status --chat "Книжный клуб" # сколько сообщений и пачек, сколько текстаАгент читает инструкцию, говорит, сколько текста прочитает, и ждёт вашего «да». Потом он берёт чат
пачками (max conversations batches next), решает, на какое прежнее сообщение отвечает каждое, и
сохраняет ответ (max conversations links add). Следующий build его учитывает. Сначала идут ответы
самого MAX, потом связи агента, потом правила. max conversations links clear --chat "Книжный клуб"
убирает ответы агента. В этом агентском процессе сам max модель не вызывает.
Обычный build использует правила и сохранённые связи. max conversations build --chat <чат> --analyze передаёт
ограниченные пачки настроенному OpenAI-совместимому сервису или Anthropic. Нужен явный --chat. Перед первой
передачей команда показывает объём, адрес и предел токенов и спрашивает согласие; оно сохраняется для учётной
записи, чата и выбранного сервиса до отзыва. По умолчанию пачка — 50 сообщений, предел резерва — 100 000 токенов;
--yes даёт согласие в скриптах. max conversations consents list показывает согласия, consents revoke --chat <чат> отзывает их. Встроенный анализ доступен только в CLI; ключи не записываются в конфиг.
Приватность и цена
По умолчанию ничего не уходит с компьютера. Модель работает здесь, и скачивается только по вашей команде:
max models text list # модели и какие скачаны
max models text download embeddinggemma --accept-termse5-small — по умолчанию: маленькая и быстрая, около 100 языков. embeddinggemma находит больше, но
работает примерно в семь раз медленнее и скачивается только с --accept-terms: на неё действуют
условия Google Gemma. Векторы двух моделей не смешиваются: ищите той моделью, которой считали.
На современном ноутбуке e5-small считает около 30 кусков в секунду; группа в 100 000 сообщений —
чуть больше 20 минут, один раз. Дальше считается только изменившееся.
Векторы может считать внешний сервис, с вашим ключом:
max models text key set openai
max conversations embed --chat "Книжный клуб" --provider openai
max conversations search "аренда квартиры" --provider openaiТогда текст разговоров чата уходит этому сервису, а каждый поиск отправляет ему ваш вопрос. Прежде
чем что-то отправить, embed называет число кусков, наибольшее число токенов и наибольшую цену и
ждёт «да» (--yes в скриптах; --max-tokens задаёт предел). --base-url принимает любой сервер с
API векторов OpenAI (/v1/embeddings), например Ollama или LM Studio на вашем компьютере, вместе с
--model и --dims. max models text key remove openai забывает ключ.
Для агентов
В MCP max_conversations_list, max_conversations_show, max_conversations_search,
max_conversations_related и max_conversations_status читают построенное, а
max_conversations_refresh догоняет на этом компьютере. Через MCP агент получает инструкцию link-conversations,
оценивает объём инструментом max_conversations_batches_status и ждёт согласия владельца для этого чата. Затем
читает max_conversations_batches_next, сохраняет ответы через max_conversations_links_add и перестраивает граф
через max_conversations_build. max_conversations_links_clear удаляет ответы агента; после него граф также нужно
перестроить. Запись требует conversations.links. Настройка внешних векторов действует и на MCP-поиск: вопрос
отправляется выбранному сервису. Техническая сторона — правила, куски, векторы и порядок результатов — на странице
как устроен поиск.