Пользователь описывает событие словами — «вторжение инопланетян», «высадка на Марс», «нашли Атлантиду». Агент разворачивает вокруг него целый сегмент интернета: энциклопедию, новостные заметки, ветки на форумах, видео. Дальше всё это индексируется и ищется обычной поисковой строкой — по мирам всех пользователей сразу.
В общем индексе лежат события, придуманные разными людьми в разное время. Запрос уходит по всем сразу — и находит релевантные сайты, как в обычном поисковике.
Событие — это рабочая папка с файлами сайтов. Агент читает канонические заметки, берёт шаблон нужного типа страницы и пишет её, сверяясь с уже созданным: даты, имена и факты держатся согласованными между всеми сайтами события.
Mission Ares 1 was humanity's first manned mission to the surface of Mars, executed by the International Mars Agency (IMA) — a joint program by NASA, ESA, Roscosmos, JAXA, and CNSA.
Заполнять можно по одному, командами в чат: сначала энциклопедия, потом новость о том же, потом обсуждение этой новости на форуме. Страницы ссылаются друг на друга.
Скор складывается из лексического совпадения и трёх векторных сходств с разными весами. Эмбеддинги считаются локально через @huggingface/transformers, вектора и страницы лежат в libSQL. Отладочный вид со слагаемыми встроен прямо в выдачу.
Прямое совпадение слов запроса. Вес меньше единицы, но сырое значение на порядок больше косинусных сходств — поэтому на точных запросах именно лексика решает.
Косинус между запросом и эмбеддингом заголовка. Самый тяжёлый из векторных сигналов: заголовок короткий и плотный по смыслу.
Отдельный эмбеддинг под тип страницы — вытаскивает из запроса намерение: обсуждение это или энциклопедическая справка.
На этом запросе лексика даёт 85% итогового скора, все три вектора вместе — 15%. Векторная часть здесь не заменяет поиск по словам, а доранжирует его: вытягивает страницы, где нужных слов нет, и разводит одинаково релевантные по типу сайта.
Проект контейнеризован и разбит на сервисы; лишние можно не поднимать.
Ядро: UI, API-роуты, стриминг ответов агента, обращения к БД и к провайдерам LLM. React, TypeScript, vanilla CSS без тяжёлых библиотек.
Вместо тяжёлой СУБД — файл altsearch.db на volume. Пользователи, история, сессии, конфиги агентов и вектора страниц.
Агент работает через read_file / write_file по рабочей папке события: канонические заметки плюс шаблоны под каждый тип сайта.
Опциональный профиль: реверс-прокси с веб-интерфейсом и автоматическими сертификатами Let's Encrypt.
Google, GitHub и локальные учётки. Область поиска переключается между «все события» и «мои» и запоминается в куке.
.env — только секреты. config.yaml — порт, разрешение локального входа, пресеты моделей. Плюс пять стартовых скриптов.
@huggingface/transformersЗдесь нет обучения моделей и нет анализа данных — и не должно быть: это проект про то, чтобы довести идею до работающего сервиса с агентом, авторизацией, базой и деплоем. Метрик качества поиска тоже нет: чтобы их считать, нужна разметка релевантности, а её на выдуманном корпусе взять неоткуда.