ИИ в скриптах
Скрипт может сам обращаться к ИИ во время работы: определять тон отзывов, разбирать адреса, классифицировать заявки, сокращать тексты. Для этого есть команда CoverseAI.ask.
Простой вопрос
const tone = CoverseAI.ask("Определи тон отзыва одним словом: «Всё понравилось, спасибо»");
console.log(tone); // например, «Положительный»
Ответ приходит текстом.
Указания для ИИ
const summary = CoverseAI.ask("Сократи до одного предложения: " + text, {
system: "Отвечай по-русски, без вступлений.",
});
system задаёт, в каком виде отвечать и какую роль играть.
Данные таблицей
const rows = Coverse.table.getSheet("Отзывы").getDataRange().getValues();
const answer = CoverseAI.ask(
"Для каждого отзыва определи тон. Ответь списком по одному слову в строке.",
{ data: rows },
);
data — массив строк, первая строка с заголовками. За запрос — заголовок и до 200 строк, до 30 столбцов, всего до 20 000 знаков. Много строк выгоднее отправить одним запросом, чем по одной.
Ответ в JSON
const parsed = CoverseAI.ask(
"Выдели город и сумму из текста: «Москва, 1500 рублей». Ответь объектом с полями city и amount.",
{ json: true },
);
console.log(parsed.city, parsed.amount);
С json: true команда возвращает готовый объект или массив.
Стоимость и лимиты
- Один запрос стоит 7 ИИ-кредитов из общего баланса рабочего пространства, того же, что у ИИ-ассистента.
- Не больше 5 запросов за запуск и не больше 100 запросов в сутки на все скрипты владельца таблицы.
- Время ожидания ответа входит во время запуска (30 секунд).
- Если кредитов не хватает, команда останавливает скрипт с ошибкой и ИИ не вызывается.
- Если ИИ не ответил, кредиты возвращаются.
В журнале запуска есть строка с числом ответов ИИ и списанными кредитами.
Персональные данные
Перед отправкой в модель скрываются телефоны, адреса электронной почты и номера документов. В ответ они подставляются обратно. Имена скрываются, если данные переданы таблицей с заголовками (data).
Пример: тон новых отзывов
function main() {
const sheet = Coverse.table.getSheet("Отзывы");
const rows = sheet.getDataRange().getValues();
const todo = [];
for (let i = 1; i < rows.length && todo.length < 50; i++) {
if (rows[i][2] === "") todo.push({ row: i + 1, text: rows[i][1] });
}
if (todo.length === 0) return;
const tones = CoverseAI.ask(
"Определи тон каждого отзыва: Положительный, Нейтральный или Отрицательный. Ответь массивом строк в том же порядке.",
{ data: [["Отзыв"], ...todo.map((item) => [item.text])], json: true },
);
todo.forEach((item, index) => sheet.getRange(item.row, 3).setValue(tones[index] || ""));
}
Что дальше
- Скрипт с помощью ИИ: ИИ пишет код скрипта.
- Лимиты