Про децентрализацию поисковиков

В Information Retrieval есть задача поиска ближайших соседей. Звучит она так: у нас есть очень много точек многомерном пространстве. Мы ставим ещё одну точку и пытаемся найти, какие из уже отмеченных точек находятся ближе всего к нашей. Эта задача встречается как составной блок много где.
Одно из применений — поисковик. Вы пишете запрос, он кодируется в форме точки в 100-мерном пространстве, а в поисковике каждая страница интернета уже хранится как точка в этом пространстве. Теперь поиск ближайших точек — это получение страниц, которые лучше всего соответствуют вашему запросу.

Самый тривиальный способ решения этой задачи: перебрать все точки, измерить расстояния и выбрать те, у которых расстояния наименьшие. Проблема в том, что перебирать миллиард или даже триллион точек — очень долго.
Чтобы делать работу эффективнее, принято строить индексы. Это что-то типа предметного указателя в книге (если вы помните такие). Например, вы разбиваете всё пространство поиска на «кубики». Один раз просматриваете все точки и запоминаете, какие точки попали в какой кубик. Когда вы выполняете поиск, вы проверяете, в какой кубик попал ваш запрос и теперь вам, чтобы найти 10 ближайших точек, достаточно посмотреть в том же кубике и нескольких соседних. Поздравляю, задача ускорена в миллион раз. Но ценой того, что вам надо хранить и обновлять поисковый индекс.

Один из главных активов условного гугла — это индекс, в котором записана информация о каждой странице интернета, до которой они дотянулись. Грубо говоря, они целиком прочли весь интернет и выписали, по каким ключевым словам показывать каждую страницу, а также придумали, как отранжировать страницы по релевантности вашему запросу (придумали, как считать расстояние между точками).

С развитием AI происходит довольно опасный процесс: качество поисковых систем стремительно деградирует, а поисковики вместо списка страниц, что почитать по теме выдают AI-выжимку.
Эту проблему часто обсуждают в контексте рынка рекламы, потому что теперь совершенно непонятно, как привлечь человека на страницу своего сайта, если этот сайт больше не ищется через поисковик. Но меня интересует и другая проблема, более техническая.

LLM-агентам, чтобы давать нормальные ответы, требуется периодически делать запросы актуальной информации через поисковик. Это обычно не гугл (если вы не пользуетесь gemini), а либо собственный поисковый индекс, либо один из полудюжины малоизвестных поисковиков, продающих им доступ к своему API. Причём поиск для агентов уже стал отдельным бизнесом для некоторых из этих компаний.

Если локальные LLM запускать уже получается, то локальный поисковый индекс всего интернета сделать, вероятно, не получится никогда: его придётся грузовиком жёстких дисков завозить и хотя бы раз в неделю привозить апдейты.
Альтернатива, которая нам доступна — искать не по всему интернету, а по нескольким сайтам, о существовании которых помнит даже ваша LLM: wikipedia, github, facebook etc. При этом вам приходится расчитывать на поисковик самого ресурса, то есть чтобы найти статью в википедии вы идёте не в гугл, а заходите на сайт википедии и вбиваете поисковый запрос прямо в ней. Беда в том, что большую часть сайтов так найти невозможно, потому что LLM даже не знает о её существовании.

Мне видится, что решением мог бы стать децентрализованный поисковик. Мы можем распространить «теорию шести рукопожатий» на интернет. В интернете не все страницы связаны, но говорят, что от одного случайного сайта до другого чаще всего возможно дойти за 6 переходов по гиперссылкам. От одной страницы до другой — за 13 переходов (правда, это довольно старые оценки).

В принципе, агент мог бы в поисках информации проделать десяток шагов от знакомого ему сайта до незнакомого. Но он не знает, в каком направлении ему идти.

А.Л. мне как-то рассказывал про семейство алгоритмов поиска ближайших соседей, при котором мы не строим классический поисковый индекс, а строим «гиперссылки» между некоторыми точками, а при запросе от случайно выбранной точки идём по рёбрам в тех направлениях, которые нас приближают к цели.
Наша задача одновременно проще и сложнее. С одной стороны, рёбра у нас уже известны, нам не нужно их строить. А с другой стороны, нам сложнее понять, приблизились мы к результату или отдалились, тут недостаточно просто померять расстояние. Однако научиться правильно выбирать путь по веб-графу вполне возможно.

А как мы могли бы помочь построению децентрализованного поисковика? Например, мы могли бы на наши сайты добавлять помимо гиперссылок специальные указатели «направо пойдёшь — коня потеряешь», позволяющие агенту быстро сориентироваться, что он найдёт не только на следующей странице, но и в некоторой окрестности. Чтобы каждый сайт хранил этакий микро-слепок интернета в ближайшей окрестности и тем самым помогал ориентироваться в направлениях.
Для профессиональных ML-щиков я бы сформулировал вопрос так: как должны выглядеть эмбеддинги вершин графа, чтобы они помогали найти кратчайший путь по графу до некоторой вершины. Или до вершины с некоторым свойством.