Подоспел реальный пример для иллюстрации поста
В позапрошлом посте я писал, что агентский поиск должен принимать пачку запросов за раз. Напомню идею: один тулкол, много запросов, один ответ. Иначе получается 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 нужно на каждый запрос, не общий на всю выдачу. Для корзины из рецепта не нужны десять сметан. А общий лимит оставить только как защиту от дос-атаки.