Рецепты
Готовые примеры доработки. Каждый — один файл, который кладётся в каталог плагинов соответствующего сервера. Проверяйте dry-run перед развёртыванием.
Чем решать задачу
Свои сокращения и термины в запросах
Таблица ALIASES / QUERY_ALIASES
Перезагрузка
Готовый инструмент с зафиксированными аргументами
Таблица TOOL_PRESETS
Перезагрузка
Не показывать часть диагностик анализатора
Таблица SUPPRESSED_DIAGNOSTICS
Перезагрузка
Переписать запрос перед поиском
on_request (call-scoped)
Перезагрузка
Переупорядочить или отфильтровать выдачу
on_result / on_rank / on_search_candidates
Перезагрузка
Изменить то, что попадает в индекс
derived-state хук
Пересборка индекса
Выбросить документы или строки из индекса
derived-state хук, skip = True
Пересборка индекса
Правило простое: если ответ не зависит от вызова — таблица; если зависит — call-scoped хук; и только если менять нужно само сохранённое состояние — derived-state.
HelpSearchServer: термины компании и пресет инструмента
Таблицы и call-scoped хук — пересборки не требуют.
"""Термины компании и готовый поиск по стандартам. /app/plugins/10-terms.py"""
REQUIRES = {"host": 1, "product": "1c-help", "hooks": 1}
#: Дополнительные имена, которые разрешает docinfo.
ALIASES = {
"ТЗ": "ТаблицаЗначений",
"РС": "РегистрСведений",
}
#: Отдельный инструмент — пресет docsearch с зафиксированным doc_type.
TOOL_PRESETS = [
{
"name": "search_structures",
"description": "Поиск по страницам структур справки платформы.",
"tool": "docsearch",
"bind": {"doc_type": "structure"},
},
]
def on_result(result, request):
"""Свои стандарты — первыми в выдаче."""
result["items"].sort(
key=lambda item: not item["citation"].get("source", "").startswith("rules/"),
)
return resultHelpSearchServer: разметить и выбросить документы при сборке
Derived-state: правка этого файла делает сохранённый индекс устаревшим, и следующий старт пересобирает его в staging-поколение, пока текущее продолжает отвечать.
SSLSearchServer: синонимы и вытеснение устаревшего
Выбросить записи ещё на этапе индексации (derived-state, стоит переэмбеддирования выбранной базы БСП):
SyntaxCheckServer: корпоративный профиль проверок
Таблица подавления окончательна и не выполняет кода; on_diagnostics добавляет то, что зависит от вызова.
TemplatesSearchServer: свой префикс запроса и метка отдела
Derived-state вариант — эмбеддить шаблоны вместе с названием подсистемы (стоит пересборки коллекций):
Graph Metadata Search: свои факты об объектах и свой Cypher
Не забудьте GRAPH_PLUGINS_ENABLED=true — иначе каталог не читается.
Хук проставляет свойство при сборке графа, шаблон его читает — вместе это даёт инструменту run_graph_cypher_template запрос в терминах вашей организации.
on_metadata_object — derived-state: значения properties должны быть примитивами или списками примитивов (Neo4j другого не хранит), а правка файла вызывает пересборку проекта. ALIASES, CYPHER_TEMPLATES и on_search_candidates — call-scoped, им достаточно reload_plugins.
1CCodeChecker: пресет ERP и очистка перед отправкой
Все хуки здесь call-scoped: перезагрузка действует со следующего вызова, ничего не переиндексируется. on_upstream_call — последняя точка перед передачей данных в code.1c.ai.
Не записывайте call и request в собственный журнал: через них могут проходить исходный код и параметры сессии.
Композиция нескольких файлов
Файлы выполняются в отсортированном порядке имён, и каждый хук — конвейер: что вернул 10-terms.py, то получит 20-filter.py. Отсюда практика именования:
Действующий порядок всегда виден в состоянии подсистемы (plugin_state, list_plugins, GET /plugins) — вместе с эпохой, ошибками и накопленным временем каждого хука.
Last updated