const results = $input.all().map(item => item.json); const originalText = $("Webhook (Вход)").first().json.body.text; // Мапим все возможные сущности на понятные теги const operators = {}; const entities = [ "PHONE_NUMBER", "EMAIL_ADDRESS", "IP_ADDRESS", "IBAN_CODE", "CREDIT_CARD", "CRYPTO", "PASSPORT", "LOCATION", "PERSON", "ORGANIZATION", "DATE_TIME", "NRP", "MEDICAL_LICENSE" ]; entities.forEach(entity => { operators[entity] = { "type": "replace", "new_value": `[${entity.replace('_ADDRESS', '').replace('_CODE', '')}]` }; }); return { text: originalText, analyzer_results: results, anonymizers_config: { "primary_anonymizer": { "default_operator": { "type": "replace", "new_value": "[ДАННЫЕ]" }, "operators": operators } } }; это старый код узла, дайте пожалуйста новый в полном обьеме с учетом исправлений которые мы оговорили
Вот обновленный код для вашего узла **Prepare Anonymizer Body**.
Я добавил в него блок предварительной валидации. Теперь, если на вход придет пустой текст или слишком короткий «шум» (менее 3 символов), система передаст специальный маркер, который ваш ИИ-агент (с учетом нового промпта) распознает и выдаст фразу: «Ваши данные невозможно обработать» [1].
### Обновленный JS-код:
«`javascript
// 1. Получаем исходный текст из вебхука
const originalText = $(«Webhook (Вход)»).first().json.body.text;
// 2. Блок валидации: проверка на пустоту или бессмысленный ввод
// Если текста нет или он короче 3 символов, отправляем маркер ошибки
if (!originalText || originalText.trim().length < 3) {
return {
text: "ОШИБКА: ВВОД ПУСТОЙ ИЛИ НЕКОРРЕКТНЫЙ",
analyzer_results: [],
anonymizers_config: {
"primary_anonymizer": {
"default_operator": { "type": "replace", "new_value": "[ДАННЫЕ]" },
"operators": {}
}
}
};
}
// 3. Собираем результаты анализа от Presidio Analyzer
const results = $input.all().map(item => item.json);
// 4. Мапим сущности на понятные теги в квадратных скобках
const operators = {};
const entities = [
«PHONE_NUMBER», «EMAIL_ADDRESS», «IP_ADDRESS», «IBAN_CODE», «CREDIT_CARD»,
«CRYPTO», «PASSPORT», «LOCATION», «PERSON», «ORGANIZATION»,
«DATE_TIME», «NRP», «MEDICAL_LICENSE»
];
entities.forEach(entity => {
operators[entity] = {
«type»: «replace»,
«new_value»: `[${entity.replace(‘_ADDRESS’, »).replace(‘_CODE’, »)}]`
};
});
// 5. Формируем финальный объект для Presidio Anonymizer
return {
text: originalText,
analyzer_results: results,
anonymizers_config: {
«primary_anonymizer»: {
«default_operator»: {
«type»: «replace»,
«new_value»: «[ДАННЫЕ]»
},
«operators»: operators
}
}
};
«`
### Что именно изменилось:
1. **Предохранитель на входе:** Добавлена проверка `if (!originalText || originalText.trim().length < 3)`. Это отсекает пустые запросы или случайные нажатия клавиш (например, если кто-то прислал просто точку или пробел) [1]. 2. **Маркер для ИИ:** Если валидация не прошла, в поле `text` передается фраза «ОШИБКА: ВВОД ПУСТОЙ ИЛИ НЕКОРРЕКТНЫЙ». Ваш ИИ-агент, получив такой текст, согласно новому системному промпту («если текст невозможно интерпретировать...»), ответит пользователю: **«Ваши данные невозможно обработать»** [1]. 3. **Полный список сущностей:** Я сохранил ваш расширенный список, включая `IP_ADDRESS` и `MEDICAL_LICENSE`, чтобы робот ловил как можно больше данных на первом этапе [1]. **Что сделать сейчас:** 1. Замените код в узле `Prepare Anonymizer Body` на этот. 2. Убедитесь, что в узле `AI Agent` (Vertex AI) стоит тот **новый промпт**, который я дал вам выше. Теперь система будет защищена и от «невнятных» данных, и от пустых запросов. Хотите проверить это на «плохом» тесте?
🤖 | 📅 | 🧠 CTX 6