Агентский поиск на примере Вкусвилла

Подоспел реальный пример для иллюстрации поста

В позапрошлом посте я писал, что агентский поиск должен принимать пачку запросов за раз. Напомню идею: один тулкол, много запросов, один ответ. Иначе получается N+1: агент ищет, ищет, ищет.

И вот поспел живой пример.

У Вкусвилла появился официальный MCP. vkusvill_products_search принимает один q. У меня в приложении Recipe Scaler список покупок для рецептов. Пара блюда — штук 20 ингредиентов. Чтобы собрать из них корзину Вкусвилла, мой агент делает примерно так:

vkusvill_search_products({ q: "яйца" })
vkusvill_search_products({ q: "тесто фило" })
vkusvill_search_products({ q: "апельсин" })
vkusvill_search_products({ q: "греческий йогурт" })
vkusvill_search_products({ q: "сахар" })
vkusvill_search_products({ q: "разрыхлитель" })
vkusvill_search_products({ q: "ваниль" })
vkusvill_search_products({ q: "растительное масло" })
vkusvill_search_products({ q: "апельсиновый сок" })
vkusvill_search_products({ q: "корица" })
vkusvill_search_products({ q: "вода" })
vkusvill_cart_link_create({ products: [...] })

Каждый поиск — это полный цикл тулкола, кусок контекста, шанс упереться в рейт-лимит у меня или у мцп Вкусвилла. Да в целом я задумался, когда у меня сработала защита на число тулов в одном вопросе. Да и пользователю тоже неудобно: «ищем, ищем, ищем».

Человеку так и надо: вбил «сметана», посмотрел выдачу. Агенту так не надо, он может посмотреть пять выдач параллельно.

Могло бы быть так:

{
  "queries": [
    { "q": "сметана 20%", "limit": 3 },
    { "q": "мука пшеничная", "limit": 3 },
    { "q": "яйца С1", "limit": 3 },
    { "q": "черника свежая", "limit": 3 }
  ],
  "mode": "short",
  "sort": "rating",
  "vvonly": 1
}

И ответ:

{
  "results": [
    {
      "q": "сметана 20%",
      "items": [
        { "id": 111, "xml_id": 222, "name": "Сметана 20%", "price": 89, "rating": 4.8 }
      ]
    }
  ]
}

Батчинг тоже надо делать не в тупую, например limit нужно на каждый запрос, не общий на всю выдачу. Для корзины из рецепта не нужны десять сметан. А общий лимит оставить только как защиту от дос-атаки.

Отправить
Подписаться на блог…