Настройка LLM и AI-агентов под задачу/aka-gst

Эксперимент 3 · 3 мин

Лабораторная работа 3: инструменты и agent loop

Содержание раздела
  1. Цель
  2. Инструменты
  3. Запуск
  4. Как работает цикл
  5. Критерии PASS/FAIL
  6. Тесты
  7. Ограничения

Цель

Дать модели две строго ограниченные функции и реализовать цикл «модель → инструмент → результат → модель».

Инструменты

  1. lookup_order читает только два фиктивных заказа из встроенного словаря.
  2. calculate_order_total принимает ID заказа и количество от 1 до 100, а цену берёт из доверенного справочника.

Агент не получает shell, сеть, произвольное чтение файлов или изменение данных.

Запуск

Запустите приложение Ollama и из корня проекта выполните:

bash
uv run python -m agent_lab.tool_agent \
  "Узнай статус заказа DEMO-1001 и посчитай стоимость трёх таких заказов."

Программа выводит журнал вызванных инструментов, итоговый ответ и число шагов.

Как работает цикл

  1. Python отправляет модели задачу и JSON-описания разрешённых инструментов.
  2. Модель отвечает обычным текстом либо массивом tool_calls.
  3. Python проверяет имя функции по allowlist.
  4. Pydantic проверяет аргументы и запрещает лишние поля.
  5. Python выполняет функцию и возвращает результат модели с ролью tool.
  6. Цикл повторяется, но не более четырёх шагов.

Критерии PASS/FAIL

PASS:

  • известный заказ найден без выдуманных данных;
  • неизвестный заказ возвращает found: false;
  • итоговая стоимость считается по доверенной цене без eval;
  • неизвестный инструмент и лишние аргументы отклоняются;
  • цикл завершается текстовым ответом в пределах лимита.

Тесты

bash
uv run pytest

Тест run_shell специально имитирует опасный вызов модели. Диспетчер обязан отклонить его, поскольку такой функции нет в allowlist.

Ограничения

  • модель может выбрать ненужный инструмент или не вызвать нужный;
  • схема проверяет аргументы, но бизнес-правила всё равно реализуются в Python;
  • демонстрационная база заказов хранится в памяти и не содержит реальных данных;
  • для внешних и изменяющих действий в реальном проекте потребуется подтверждение человека.

Универсальный калькулятор намеренно не используется: на первом сквозном тесте модель перепутала цену 2490 с числом 1001 из ID заказа. Узкий бизнес-инструмент не позволяет модели самостоятельно подставлять цену и устраняет этот класс ошибки.