Перейти к содержимому

Идёт открытая бета — все возможности бесплатныПодробнее

one-s-mcp

Семантический поиск по смыслу

Содержание

Глобальный поиск 1С — тот, что в Конфигураторе, — ищет подстроку. Помните точное имя объекта: найдёт. Не помните: не найдёт ничего, зато обойдёт всю конфигурацию целиком и заставит ждать — не случайно рядом с ним ищут и то, как его прервать.

Поиск по коду и метаданным в one-s-mcp устроен иначе. Когда ИИ-ассистент подключается к вашей конфигурации 1С, ему мало знать 1С «вообще» — ему нужно найти конкретную процедуру, конкретный регистр, конкретное поле именно в вашей базе. Вы — или сам ассистент — описываете нужное обычными словами, например «процедура, которая проверяет заполнение реквизитов перед записью документа», и система находит подходящий код и объекты метаданных, даже если в их названии нет ни одного слова из запроса.

При этом это не замена точному поиску, а его усиление: движок one-s-mcp ищет одновременно и по смыслу запроса, и по точным словам в нём, а результаты обеих «дорожек» сливаются в одну выдачу. И построение указателя, и сам поиск происходят на машине, где установлен one-s-mcp: выгрузка конфигурации никуда не отправляется, поисковые отпечатки считаются и хранятся локально.

Какую боль решает

Без знания вашей конкретной конфигурации ИИ-ассистент склонен на голубом глазу ссылаться на справочники, регистры и процедуры, которых у вас попросту нет — придумывает то, что звучит правдоподобно для типовой 1С, но не существует в вашей базе. Мы отдельно разбирали эту проблему — почему ИИ выдумывает несуществующие методы 1С — и семантический поиск закрывает её в первую очередь: ассистент перестаёт гадать и отвечает из реального указателя вашей конфигурации.

С этим же связаны более житейские боли:

Как это работает

При индексации выгрузки каждый объект конфигурации и каждая процедура превращаются в «вектор смысла» — числовой отпечаток содержания. За это отвечает многоязычная нейросеть bge-m3, которая работает на видеокарте клиента (если подходящей видеокарты нет, расчёт уходит на процессор — медленнее, но без потери качества поиска). Запрос на естественном языке превращается в такой же отпечаток, и система ищет ближайшие по смыслу объекты. Поэтому запрос «приём денег от покупателя» находит документ «Приходный кассовый ордер», хотя дословного совпадения слов там нет.

Для процедур в отпечаток смысла попадает не только имя, но и «умная подпись»: форма вызова (например, «ОбщегоНазначения.ИмяФункции(Параметр1, Параметр2)»), описание из документирующего комментария, параметры и возвращаемое значение. Такой связный текст описывает не просто тему функции, а то, как её правильно позвать, — это напрямую снижает число ошибок в коде, который потом генерирует ассистент.

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

Ищет всё это не только по коду. В том же указателе и с тем же смысловым поиском лежат объекты метаданных — документы, справочники, регистры всех видов, планы счетов, обработки, отчёты. Поэтому вопрос «какой документ пишет в регистр остатков товаров» и вопрос «где считается сумма НДС в документе» обрабатываются одним и тем же поиском, просто попадают в разные типы результатов.

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

Когда нужен не смысл, а буквальное вхождение — конкретное имя метода, кусок текста запроса на языке запросов, строка сообщения пользователю, — в one-s-mcp есть отдельный быстрый точный поиск по коду 1С прямо в файлах выгрузки (на основе ripgrep). Он работает по живым файлам, поэтому доступен даже до завершения полной индексации, и его можно сузить по типу файлов и по источнику — основной конфигурации или конкретному расширению. Это не конкурент семантическому поиску, а его дополнение для случаев, где нужна дословная точность.

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

В той же карточке приходят ещё две вещи, важные именно для доработки типовых. Первая — статус поддержки объекта: снят с поддержки, изменён с сохранением поддержки или не редактируется; ассистент сразу понимает, можно ли править объект напрямую или нужно расширение. Вторая — объект показывается с уже наложенными правками расширений: изменения в заимствованные реквизиты, табличные части и команды видны как часть объекта, а не теряются за типовой версией.

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

Что это даёт

Честно об ограничениях

Качество поиска мы измеряем, а не декларируем: есть собственный стенд с эталонным набором вопросов и метриками, каждое изменение ранжирования проверяется сравнением «до/после». На этом наборе поиск доведён до измеренного потолка, и дальнейшие попытки просто переформулировать запросы прироста не дали. Поэтому мы говорим честно: поиск находит очень многое, но не обещаем, что он находит вообще всё.

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

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

Что дальше

Хотите, чтобы ассистент искал по вашей реальной конфигурации, а не выдумывал по памяти о типовых, — скачайте one-s-mcp и подключите его к своей базе. Посмотреть, что ещё умеет ассистент помимо поиска, можно на странице всех возможностей.