Repository navigation
topic search
Вы помните, что в чате что-то обсуждали, но не помните, какими словами. Поиск по темам находит такое обсуждение по смыслу. Спросите «где мы говорили про аренду квартиры?» — и он найдёт разговор, в котором были «сдаю», «залог» и «хозяйка», даже если слов «аренда квартиры» никто не написал. Он работает и между языками: вопрос по-русски находит обсуждение на английском или испанском.
Прочитав эту страницу, вы сможете подготовить чат к поиску по темам, задавать вопросы своими словами,
читать результаты и понимать, когда лучше подходит обычный поиск по словам. Поиск по темам использует
только сообщения, которые max уже сохранил на этом компьютере, поэтому сначала скачайте историю:
max personal messages sync <чат> (скачать историю чата).
Термины этой страницы:
-
Разговор — одно обсуждение внутри чата. В оживлённой группе идут сразу несколько разговоров, и
их сообщения перемешаны.
maxразделяет их; разговор — список сообщений, которые относятся друг к другу, от старых к новым. - Кусок — короткая часть разговора, около 1200 знаков. Длинный разговор режется на куски, чтобы каждый был примерно об одном.
- Вектор — набор чисел, который передаёт смысл текста. У текстов об одном и том же векторы похожи, даже если слова или язык другие.
- Модель — небольшая программа, которая превращает текст в вектор. По умолчанию она работает на вашем компьютере.
Поиск по темам — не поле topic: поиска сообщений. topic: оставляет одну ветку
обсуждения. Разговор здесь — то, что max находит сам, в любом чате.
| Задача | Команда |
|---|---|
| Найти обсуждение по теме — в одном чате или во всех подготовленных | max personal search conversations "<вопрос>" |
| Посмотреть разговоры чата, новые сверху | max personal conversations list <чат> |
| Прочитать один разговор от начала до конца | max personal conversations show <id> |
| Открыть весь разговор, в котором есть сообщение | max personal conversations show <чат> <сообщение> |
| Найти другие разговоры о том же, во всех чатах | max personal conversations related <чат> <сообщение> |
| Ограничить результат человеком, периодом или словом | max personal search conversations "<вопрос>" --filter '<запрос>' |
| Узнать, что устарело, и догнать |
max personal conversations status, max personal search conversations "<вопрос>" --refresh
|
| Попросить своего ИИ-агента точнее связать сообщения | max skill show link-conversations |
Поиск по словам (max personal search messages) |
Поиск по темам (max personal search conversations) |
|
|---|---|---|
| Что вы помните | точные слова, имя, дату, файл | только о чём шла речь |
| Что находит | отдельные сообщения с вашими словами | целые разговоры о вашем вопросе |
| Другие слова о том же | нет: «квартира» не найдёт «жильё» | да |
| Другие языки | нет | да, около 100 языков у модели по умолчанию |
| Точные условия (отправитель, дата, файл, ссылка) | да, весь язык запросов | да, через --filter
|
| Подготовка | скачать историю | скачать историю, затем build и embed
|
| Обращается к MAX | да, при поиске в одном названном чате | нет, читает только этот компьютер |
Поиск по словам — когда вы помните слово, число, имя или файл. Поиск по темам — когда помните тему, но не формулировку, когда обсуждение растянуто на много коротких сообщений или когда писали на другом языке. Если не уверены, начните с поиска по темам: он ищет и ваши слова, поэтому разговор с ними всё равно окажется вверху.
Подготовьте чат один раз, а потом задавайте сколько угодно вопросов.
Ваш запрос ИИ-агенту:
В Книжном клубе найди, где мы обсуждали, чтобы встречаться в другом месте. Покажи разговор.
Что происходит по шагам:
max personal messages sync "Книжный клуб" # 1. скачать историю, если её ещё нет
max personal conversations build --chat "Книжный клуб" # 2. разделить чат на разговоры
max personal models text download e5-small # 3. один раз: скачать модель, 135 МБ, общая с tg
max personal conversations embed --chat "Книжный клуб" # 4. посчитать вектор каждого куска
max personal search conversations "где встречаемся" --chat "Книжный клуб" # 5. спросить
max personal conversations show 91 # 6. прочитать найденный разговорШаги 2–4 выполняются на вашем компьютере и к MAX не обращаются. embed продолжает с места, где его
прервали. Следующим вопросам нужен только шаг 5; когда повторять шаги 2 и 4, сказано в разделе
Свежесть.
Пример результата (вымышленный):
0.874 91 2026-09-14 18:02–18:40 23 messages · 4 people · from message 4180 (messages 4185–4192) msg:max/500/7/4185
0.851 64 2026-08-02 10:15–10:31 9 messages · 3 people · from message 3302 (messages 3302–3310) msg:max/500/7/3302
Найденное — подсказка, а не ответ: откройте разговор и прочитайте сообщения, прежде чем на него опираться.
У поиска по темам три этапа. Первые два готовят чат один раз; третий выполняется на каждый вопрос.
max personal conversations build читает сохранённые сообщения чата от старых к новым и для каждого решает,
какое прежнее сообщение оно продолжает. ИИ не используется, к MAX команда не обращается. Связи берутся
в таком порядке:
- Ответы самого MAX. Сообщение, отправленное ответом, относится к сообщению, на которое отвечает.
- Ответы вашего агента, если вы попросили агента связать чат (ниже).
-
Упоминание. Сообщение, где кого-то упомянули, относится к последнему сообщению этого человека.
Упоминание — это
@username, упоминание, отмеченное мессенджером, или сообщение, которое начинается с имени пользователя и двоеточия или запятой (anna: согласна).maxсмотрит назад не дальше 50 сообщений. - Тот же человек пишет снова. Следующее сообщение человека продолжает его предыдущее, если пришло в пределах 5 минут и последних 10 сообщений.
Сообщение без связи начинает новый разговор. Разговор может пропускать сообщения между своими, если те
из других разговоров. Правила угадывают: они могут разбить одно обсуждение на два или склеить два в
одно. Новый build заменяет прошлый, поэтому номер разговора берите из свежего list, а не храните.
max personal conversations embed режет каждый разговор на куски около 1200 знаков, по границам сообщений.
Каждая строка куска — «отправитель: текст». Сообщение длиннее куска делится на части внахлёст, чтобы
модель прочитала всё длинное сообщение, а не только начало. Сообщения без текста ничего не добавляют.
Затем модель превращает каждый кусок в вектор, и max его сохраняет. Сам текст куска второй раз не
сохраняется — только вектор и отпечаток, по которому видно, что текст изменился.
max personal search conversations ищет ваш вопрос двумя способами и объединяет результаты:
-
По смыслу. Вопрос тоже превращается в вектор.
maxсравнивает его с векторами всех кусков и оценивает каждый разговор по его самому близкому куску. У модели по умолчаниюe5-smallсовпадение по смыслу должно быть достаточно близким: оценка сходства выше 0,80 по шкале, где 1 — тот же смысл. -
По словам.
maxищет и каждое слово вопроса в сохранённых сообщениях. Слово из трёх и более букв находит и более длинные слова, которые с него начинаются (встречнайдёт «встречаемся»). Опечатки не исправляются.
Разговор, найденный обоими способами, стоит выше найденного одним. У каждого результата сказано, как он
найден: "by": ["meaning"] (по смыслу), ["words"] (по словам) или оба. Без скачанной модели поиск
всё равно работает, только по словам, и в ответе тогда "meaning": "unavailable". Чат, который ни разу
не построен, не просматривается: сначала build.
Почему так находится больше, чем поиском по словам: поиску по словам нужно то же слово в сообщении. Поиск по смыслу сравнивает, о чём тексты, и читает кусок разговора, а не одно сообщение. Поэтому «где встречаемся» может найти обсуждение, где один спросил «библиотека или кафе?», а другой ответил «в кафе на углу тише». Половина по словам не даёт потерять точные имена и редкие слова.
Техническая сторона — правила, куски, векторы и порядок результатов — на странице как устроен поиск.
В терминале каждый результат — одна строка:
- оценка сходства, или
—, если нашли только по словам; - номер разговора, когда он начался и кончился, сколько сообщений и людей, его первое сообщение;
-
(messages 4185–4192)— кусок, совпавший лучше всего (или сообщение, если нашли только по словам): с него и начинайте читать; - ссылка на сообщение (
msg:…), которую принимаютmax personal messages showиmax personal messages context; -
stale, если текст изменили после подсчёта вектора: оценка — для старого текста.
С --json то, что поиск не смог просмотреть по смыслу, — записи в missing: модель не скачана, векторы
устарели, чат ни разу не построен или не скачан. Рядом в next — команда, которая это исправит, например
conversations embed --chat <чат>; аккаунты — в meta.accounts.
max personal conversations list "Книжный клуб" started_at>=7d
max personal conversations show 91 # один разговор, от старых к новым
max personal conversations show "Книжный клуб" 204 # разговор, в котором сообщение 204
max personal conversations related "Книжный клуб" 204 # другие разговоры о том же, во всех чатах
max personal messages links "Книжный клуб" 204 # почему сообщение там, где оно естьrelated берёт векторы, которые сохранил embed, и модель не запускает, поэтому отвечает быстро. Это
поиск только по смыслу.
Тему помните, слова — нет.
max personal search conversations "кто берёт еду на пикник"Поиск идёт во всех подготовленных чатах. Он может найти разговор, где писали «я возьму бутерброды» и «у Бори напитки», — поиск по словам его бы пропустил.
Обсуждали на другом языке.
max personal search conversations "аренда квартиры" --chat "Valencia expats"С моделью по умолчанию так находится и обсуждение на испанском — про «piso».
Сузить по человеку и периоду. --filter принимает строгий язык запросов.
Разговор подходит, если хотя бы одно его сообщение удовлетворяет всему условию. Сам вопрос по-прежнему
ищется по смыслу.
max personal search conversations "бюджет поездки" --filter 'from:"Алиса Тестова" date:30d'max personal search conversations "условия договора" --filter 'has:file' --timezone Europe/MadridНачать с одного сообщения. Вы нашли сообщение поиском по словам и хотите всё остальное на эту тему:
max personal search messages '"вернули залог" chat:"Valencia expats"'
max personal conversations related "Valencia expats" 5120Искать и в чатах ботов. По умолчанию поиск по темам идёт в текущей учётной записи. --source personal,
bots, all или название мессенджера расширяют охват; тогда у каждого результата сказано, из какой
учётной записи он.
max personal search conversations "задержка доставки" --source allСкачать новое перед вопросом. --sync-first сначала скачивает новые сообщения — в пределах чата,
времени и числа сообщений, как у поиска сообщений.
max personal search conversations "где встречаемся" --chat "Книжный клуб" --sync-firstНовые сообщения попадают в разговор только после следующего build, а в векторы — после следующего
embed.
max personal conversations status # что отстало, по чатам
max personal conversations build # все изменившиеся чаты и группы, ни разу не построенные
max personal conversations embed # все построенные чаты, где остались куски
max personal search conversations "аренда квартиры" --refresh # сначала догнать, потом искатьstatus считает для каждого построенного чата сообщения, которых build ещё не видел (новые,
изменённые, удалённые), куски с актуальным, устаревшим или отсутствующим вектором, и сколько групп ни
разу не построено. Без --chat команды build, embed и search --refresh берут за раз не больше
20 чатов (--max-chats) и считают не больше 2000 кусков (--max-chunks); запустите ещё раз, чтобы
продолжить. Модель они не скачивают. --refresh нельзя сочетать с --filter и --source: сначала
постройте и посчитайте нужные чаты.
Когда в новой версии меняются правила, status и max personal store check называют чаты, построенные по
старым, — постройте их снова.
Когда сообщение удаляют, его текст уходит и из векторов.
max personal messages sync <чат> --catch-up может сразу после скачивания построить разговоры чата и посчитать
векторы (скачать историю чата).
Правила не видят связей, которые понятны только по смыслу. Их может добавить ваш собственный ИИ-агент (например, Claude Code, Codex, Cursor или Gemini CLI):
max skill show link-conversations # инструкция для агента
max personal conversations batches status --chat "Книжный клуб" # сколько сообщений и пачек, сколько текстаАгент читает инструкцию, говорит, сколько текста прочитает, и ждёт вашего «да». Потом он берёт чат
пачками (max personal conversations batches next), решает, на какое прежнее сообщение отвечает каждое, и
сохраняет ответ (max personal conversations links add). Следующий build его учитывает: сначала идут ответы
самого MAX, потом связи агента, потом правила. max personal conversations links clear --chat "Книжный клуб"
убирает ответы агента; после этого постройте чат снова. В этом процессе сам max модель не вызывает.
Сохранять ответы разрешает право профиля conversations.links.
max может и сам отправить пачки сервису моделей. Обычный build использует правила и сохранённые
связи; max personal conversations build --chat <чат> --analyze передаёт ограниченные пачки настроенному
OpenAI-совместимому сервису или Anthropic. Нужен явный --chat. Перед первой передачей команда
показывает объём, адрес и предел токенов и спрашивает согласие; оно сохраняется для учётной записи,
чата и выбранного сервиса до отзыва. По умолчанию пачка — 50 сообщений (--size), предел резерва —
100 000 токенов за запуск (--max-tokens); --yes даёт согласие в скриптах.
max personal conversations consents list показывает согласия, consents revoke --chat <чат> отзывает их.
Встроенный анализ доступен только из командной строки, не через MCP; ключи не записываются в файл
настроек.
По умолчанию ничего не уходит с компьютера. Модель работает здесь и скачивается только по вашей команде:
max personal models text list # модели и какие скачаны
max personal models text download embeddinggemma --accept-termse5-small — по умолчанию: маленькая и быстрая, около 100 языков. embeddinggemma находит больше, но
работает примерно в семь раз медленнее и скачивается только с --accept-terms: на неё действуют
условия Google Gemma. Векторы двух моделей не смешиваются: ищите той моделью, которой считали. Чат,
посчитанный только другой моделью, stderr называет.
На современном ноутбуке e5-small считает около 30 кусков в секунду; группа в 100 000 сообщений —
чуть больше 20 минут, один раз. Дальше считается только изменившееся.
Векторы может считать внешний сервис, с вашим ключом:
max personal models text key set openai
max personal conversations embed --chat "Книжный клуб" --provider openai
max personal search conversations "аренда квартиры" --provider openaiТогда текст разговоров чата уходит этому сервису, а каждый поиск отправляет ему ваш вопрос. Прежде
чем что-то отправить, embed называет число кусков, наибольшее число токенов и наибольшую цену и
ждёт «да» (--yes в скриптах; --max-tokens задаёт предел). --base-url принимает любой сервер с
API векторов OpenAI (/v1/embeddings), например Ollama или LM Studio на вашем компьютере, вместе с
--model и --dims. max personal models text key remove openai забывает ключ. Настройка внешних векторов
действует и на поиск, который ваш агент выполняет через MCP: его вопросы тоже уходят этому сервису.
- Поиск сообщений — точные слова, люди, даты и файлы.
- Как устроен поиск — техническая сторона правил, кусков, векторов и порядка результатов.