alterna ai
ALTERNA AI / ГЛАВА 18 · 04

18.4 Внешняя программа может выполнить действие

На предыдущей странице: что действительно увидела модель.

Модель может предложить вызов, но приложение проверяет имя и аргументы. Документ не получает право разрешать новые действия.

Поиск выбирает фрагменты; builder добавляет их к вопросу. Память, история и tool result имеют разные источники. Право действия проверяет программа, а цикл обязан иметь причину остановки.

Модель предлагает данные, executor принимает решение

Tool call — структурированное предложение вызвать именованную операцию. Executor проверяет allowlist, schema, типы, диапазоны, authorization, timeout и размер результата до side effect. JSON, сгенерированный моделью, остаётся недоверенным input. F14.

Для pure tool add(a,b) контракт можно записать как частичную функцию: только object с точными keys и конечными numbers переходит в result. В Python bool является subtype int, поэтому validator должен отклонять его отдельно, если schema требует число, но не boolean.

E(name,args)={args.a+args.b,name=add∧args⊨schemaerror,иначе.E(name,args)= \begin{cases} args.a+args.b,&name=\texttt{add}\land args\models schema\\ error,&\text{иначе}. \end{cases}

Что показывает модель. Trace разделяет model output, parser, validator, authorization, execution и observation. Ошибка tool возвращается как typed result, а не маскируется выдуманным успехом. Операции записи получают idempotency key, confirmation и audit event; read-only и write permissions не смешиваются.

Граница применимости. Schema validation не предотвращает вредную, но формально корректную команду. Tools могут возвращать prompt injection или секреты. Нельзя давать модели shell/network/filesystem по умолчанию; sandbox, least privilege, rate limit и human approval определяются threat model конкретной системы.

call_18d={'name':'add','arguments':{'a':2,'b':3}}
args_18d=call_18d.get('arguments',{})
valid_18d=(call_18d.get('name')=='add' and set(args_18d)=={'a','b'} and
           all(isinstance(args_18d[k],(int,float)) and not isinstance(args_18d[k],bool) for k in ('a','b')))
result_18d=args_18d['a']+args_18d['b'] if valid_18d else None
assert valid_18d and result_18d==5

Код повторяет только что разобранные операции. Полный проверяемыйPython-пример главы доступен отдельным файлом; показанный короткий фрагмент не заменяет его реализацию.

Текст может предложить действие, но authority принадлежит runtime.

Запись приложения не равна весам модели. Как этот вопрос продолжает полученный результат?

Python-примеры главы 18 Академическая база →