Инженерный каталог для AI-ассистента: подбираем совместимые замены деталей

Нужного кабельного ввода нет у поставщика, и инженер ищет замену. Названия в каталоге похожи, фотографии почти одинаковы, но отличаются резьба, диапазон кабеля и температурное исполнение. LLM помогает прочитать запрос человека и найти кандидатов по описанию. Решение о совместимости требует явных технических правил: похожесть текста здесь недостаточна.

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

Разделите обязательное и предпочтительное

В примере замена должна иметь ту же резьбу, полностью покрывать требуемый диапазон диаметров кабеля и работать во всём требуемом диапазоне температур. Цена и срок поставки могут ранжировать только прошедшие варианты. Если дешёвая деталь не выдерживает нужную температуру, её нельзя поднять наверх итогового списка за счёт высокой текстовой похожести.

Нормализуйте единицы и справочники до проверки. Строки «M20×1,5» и «M20x1.5» должны получить общий код, а температура — числовые границы в одной шкале. Неизвестное значение параметра означает необходимость запроса поставщику. Оно не превращается в соответствие. Для реального каталога перечень обязательных характеристик задаёт инженер: пример ограничен тремя признаками.

Получите объяснимый результат

Полный локальный скрипт ниже проверяет три кандидата. Он не подключает MCP SDK: это предметное ядро инструмента, которое можно независимо испытать до интеграции. В серверном контракте входом станут идентификаторы исходной детали и кандидатов, а сами характеристики сервер прочитает из доверенного каталога. Модель не должна самостоятельно подставлять удобные значения.

Проверка покрытия интервала отличается от проверки пересечения. Диапазон 5–10 мм пересекается с требуемыми 6–12 мм, но не подходит для кабеля диаметром 12 мм. Поэтому нижняя граница кандидата должна быть не выше требуемой, а верхняя — не ниже. То же правило применяется к температуре.

required = {"thread":"M20x1.5", "cable_min":6, "cable_max":12,
            "temp_min":-20, "temp_max":70}
catalog = {
    "A": {"thread":"M20x1.5", "cable_min":5, "cable_max":13, "temp_min":-30, "temp_max":80},
    "B": {"thread":"M20x1.5", "cable_min":5, "cable_max":10, "temp_min":-30, "temp_max":80},
    "C": {"thread":"M20x1.5", "cable_min":6, "cable_max":12, "temp_min":-10, "temp_max":70}}
def evaluate(candidate):
    reasons = []
    if candidate.get("thread") != required["thread"]:
        reasons.append("thread")
    for name in ("cable", "temp"):
        low, high = candidate.get(name+"_min"), candidate.get(name+"_max")
        if low is None or high is None:
            reasons.append(name+":unknown")
        elif low > high:
            raise ValueError("Invalid interval: " + name)
        elif low > required[name+"_min"] or high < required[name+"_max"]:
            reasons.append(name+":insufficient_range")
    return reasons
report = [{"sku":sku, "compatible_by_rules":not evaluate(c),
           "reasons":evaluate(c)} for sku, c in catalog.items()]
accepted = [r["sku"] for r in report if r["compatible_by_rules"]]
assert accepted == ["A"]
assert report[1]["reasons"] == ["cable:insufficient_range"]
assert report[2]["reasons"] == ["temp:insufficient_range"]
print(report)

Отделите понимание запроса от технического решения

Запрос инженера: «Подбери замену вводу M20 под кабель 6–12 мм для работы от −20 до +70 °C». В рабочем интерфейсе лучше попросить выбрать исходную карточку, чтобы не потерять другие обязательные параметры. Для нашего ограниченного примера исходная карточка даёт required, а поиск по каталогу предлагает A, B и C.

Инструкция ассистенту: получи исходный part_id, найди кандидатов и вызови проверку совместимости для их ID. Не меняй характеристики каталога. После результата перечисли прошедшие варианты и причины отказа остальных. Если обязательный параметр неизвестен, сообщи о необходимости уточнения. Не объявляй полную взаимозаменяемость по частичной проверке.

Минимальный вход будущего tool: {"part_id":"reference-1","candidate_ids":["A","B","C"]}. Сервер сам загружает required и catalog. После вычисления ассистент должен предложить A по трём заданным правилам, указать ограничения B и C и передать выбор инженеру. Условия наличия, сертификации и стоимости проверяются отдельными полями или инструментами.

Что должен видеть инженер

Для A все три условия выполнены. B отклонён по диаметру кабеля, C — по нижней рабочей температуре. Формулировка «совместим по проверенным параметрам» точнее общего обещания полной взаимозаменяемости. В карточке могут быть ещё материал, взрывозащита, уплотнение и монтажные ограничения. Добавляйте их в обязательные правила по мере расширения сценария.

Верните из инструмента версию правил, редакцию каталога и ID карточек. В интерфейсе покажите исходные диапазоны рядом с объяснением. По спецификации MCP инструмент может описать inputSchema и outputSchema, а сервер вернуть structuredContent. Такая форма позволяет клиенту построить таблицу проверки, сохранив значения для инженерного решения.

Как испытать подбор на рабочем материале

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

Подключите инженерный каталог к ассистенту

Для следующего шага нужно дать AI-клиенту безопасный доступ к каталогу и проверке совместимости. На курсе вы создадите MCP tools с типизированными схемами и структурированными ответами, пройдёте discovery и вызов инструмента, добавите тесты и версионирование контрактов. Это поможет выпускать новые характеристики каталога без скрытой поломки клиентов. Откройте программу платного курса «AI Agent Integrations PRO: MCP».

Продолжить на практике

  • AI Agent Integrations PRO: MCP ↗

    Вы уже работали с LLM и понимаете, что подключать их к реальным системам — больно. MCP — это стандарт, который делает эту боль меньше: один контракт вместо десятка костылей, типизированные инструменты вместо голого доступа к базе, тесты и логи вместо молитв. На курсе соберём сервер с нуля и выведем в production-контур.