Tool Output Redaction в 2026: как скрывать чувствительные данные до того, как их увидит модель и trace
Tool output redaction в 2026: как очищать ответы tools до prompt assembly, observability и human review, чтобы agent pipeline не превращался в утечку секретов и PII.
Tool output redaction в 2026 нужен потому, что самые чувствительные данные в agent pipeline часто приходят не из user prompt, а из tools: CRM lookup, billing record, browser snapshot, internal search result, SQL response, API payload. Если этот вывод без фильтра попадает в assembled context, traces, review UI и downstream steps, один вызов tool-а быстро разносит sensitive data по всей системе.
Redaction tool output означает, что вы очищаете ответ инструмента до того, как его увидит модель, логирующая система или человек-ревьюер. Это не только masking для логов. Это часть безопасной orchestration-архитектуры.
Самый опасный anti-pattern - считать, что tool output по умолчанию безопасен, потому что он пришёл из "нашего" внутреннего API. Внутренний источник не делает данные безопасными для любого prompt, trace или review queue.
редактировать output лучше до prompt assembly, а не только до логирования;
разные tools требуют разные safe views;
reviewer UI и traces не должны автоматически получать raw payload;
redaction без schema discipline быстро расползается по ad hoc regex-правилам.
Без техники
Billing tool возвращает полный payload с email, partial card data, internal notes и fraud flags. Этот JSON целиком попадает в prompt и trace.
С техникой
Tool output сначала проходит schema-aware redaction: модель получает только безопасный summary и нужные поля, raw payload хранится отдельно и ограниченно.
ПромптRedaction intuition
Достаточно ли замаскировать tool output только в observability-логах?
Ответ модели
Нет. Если raw output уже увидела модель или review UI, утечка уже произошла внутри pipeline. Redaction должна срабатывать до prompt assembly и до fan-out в другие слои.
def redact_tool_output(tool_name, payload, policy):
tool_policy = policy["tools"][tool_name]["fields"]
safe = {}
for field, value in payload.items():
mode = tool_policy.get(field, "drop")
if mode == "allowed":
safe[field] = value
elif mode == "masked":
safe[field] = "***"
return safe
Практический совет: проектируйте tool output так, будто downstream модель, trace store и review queue по умолчанию небезопасны для raw payload. Тогда redaction становится базовым свойством архитектуры, а не поздней косметикой.
Проверьте себя
1. Почему tool output redaction нужно делать до prompt assembly?