3. Описание MCP-сервера › 3.6 AI-инструменты › tool_pool

Выполняет много команд AI-инструментов за один вызов, по порядку: пачку одной команды или цепочку, где шаг берёт то, что сделал шаг до него.

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

Право

«Инструменты → Выполнить» (AGENT_TOOL_RUN) — то же право, что у tool_run; каждая команда пула проверяется своей выдачей в реестре AI-инструментов.

Параметры

Параметр Тип Что это
[pool] список объектов шаги в том порядке, в каком они выполняются
[pool_source] строка файл JSON на этом компьютере с тем же списком шагов — абсолютный путь или путь от папки магазина — вместо pool

Нужен один из двух, вместе их указывать нельзя.

Шаг:

Поле Тип Что это
[name] строка слово, по которому к шагу обращаются следующие; без точки
unit строка адрес инструмента из tool_list
command строка команда
[params] объект поля команды, как у tool_run
[params_source], [debug], [into] как у tool_run

Шаг — чистый JSON: команду, которая принимает файлы, выполняет отдельный вызов tool_run.

Ссылка на шаг

Строка "@имя.поле" в params шага заменяется значением detail.поле шага с этим name, выполненного раньше; тип значения сохраняется — число остаётся числом. Ссылка работает на любой глубине params, в том числе внутри списков. Путь идёт и глубже: "@goods.row.id", а в списке — по номеру элемента, считая с нуля.

{"pool": [
  {"name": "cur", "unit": "MELBIS_AGENT_CURRENCY", "command": "CmdAdd",
   "params": {"skey": "EUR", "name": "Евро", "multiplex": 44.2}},
  {"unit": "MELBIS_AGENT_CURRENCY", "command": "CmdPos",
   "params": {"type": "POS", "data": [{"id": "@cur.id"}]}}
]}

Строка, в которой после @ стоит имя, не принадлежащее ни одному шагу до неё, уходит как есть: это слово данных. Ссылка на поле, которого в detail шага нет, останавливает пул на этом шаге.

Как идёт

Ответ

{"result": true,
 "steps": [{"num": 1, "name": "cur", "unit": "MELBIS_AGENT_CURRENCY", "command": "CmdAdd",
            "result": true, "message": "The row of currency is added", "detail": {"id": 12},
            "tables": {}, "files": [], "time": {"server": 33, "module": 13, "trip": 78}},
           {"num": 2, "name": "", "unit": "MELBIS_AGENT_CURRENCY", "command": "CmdPos",
            "result": true, "message": "…", "detail": {}, "tables": {}, "files": [],
            "time": {"server": 21, "module": 6, "trip": 63}}],
 "time": {"trip": 145}}
Поле Что это
result true — выполнены все шаги, false — пул остановлен
steps по каждому выполненному шагу: num — номер, name, unit, command и ответ команды — как у tool_run; последним стоит шаг, на котором пул остановился
time trip — полный круг всего пула по часам этого компьютера

Таблицы шага пишутся в файл tables\step<номер>.<unit>.<command>.<таблица>.jsonl папки разговора: одна команда может стоять в пуле много раз, и у каждого шага свой файл. Следующий пул эти файлы перезаписывает.

Остановленный пул приходит с признаком ошибки и тем же JSON; причина — в message последнего шага. Если шаг не дошёл до магазина — ссылка не нашлась или вызов упал, — у него есть только result: false и message.

Отказы

Ответ Когда
pool is required… нет ни pool, ни pool_source, или список пуст
pool or pool_source, not both… указаны оба
Step N is not an object… шаг — не объект
Step N needs unit and command… у шага нет unit или command
Step N carries files… у шага есть files или files_source
The name of step N carries a dot… в name есть точка
Two steps are named […]… два шага с одним именем; регистр не различается
@<имя>.<поле> names a field the detail of that step does not have. в detail шага нет такого поля — в message шага, на котором пул остановился
… holds no list of steps…, … is not whole json…, No such file: …, … is not utf-8 text… файл pool_source не найден, не в UTF-8, оборван или в нём не список

Отказы самих шагов — как у tool_run. Общие отказы — «Ответы и отказы».