Перейти до основного вмісту

API розмови

@grant CAT.agent.conversation

API розмови є ядром системи Agent, що дозволяє скрипту створювати AI-розмови, надсилати повідомлення та отримувати відповіді.

Створення розмови

const conv = await CAT.agent.conversation.create(options?);

ConversationCreateOptions

ПараметрТипЗа замовчуваннямОпис
idstringавтогенерованийID розмови, використовується для відновлення існуючої розмови
systemstringВласна системна підказка, додається після вбудованої підказки
modelstringмодель за замовчуваннямID моделі (отримується після налаштування на сторінці керування)
maxIterationsnumber20Максимальна кількість циклів виклику інструментів у межах одного ходу розмови
skills"auto" | string[]"auto" завантажує всі Skill автоматично, або масив конкретних назв Skill
toolsToolDefinition[]Власний список інструментів (див. нижче)
commandsRecord<string, CommandHandler>Власні команди розмови
ephemeralbooleanfalseТимчасова розмова, яка не зберігається у сховищі
cachebooleantrueУвімкнути кешування підказок (зменшує використання токенів)

Власні інструменти

Скрипт може реєструвати власні інструменти для виклику AI:

const conv = await CAT.agent.conversation.create({
tools: [{
name: "get_weather",
description: "Get weather information for the specified city",
parameters: {
type: "object",
properties: {
city: {
type: "string",
description: "City name"
},
unit: {
type: "string",
enum: ["celsius", "fahrenheit"],
description: "Temperature unit"
}
},
required: ["city"]
},
handler: async (args) => {
// args = { city: "Beijing", unit: "celsius" }
const data = await fetchWeather(args.city, args.unit);
return { temperature: data.temp, condition: data.condition };
}
}]
});

parameters інструмента відповідає специфікації JSON Schema. AI використовує description, щоб зрозуміти, коли і як викликати інструмент.

Власні команди

Можна реєструвати власні команди, що починаються з /:

const conv = await CAT.agent.conversation.create({
commands: {
"/export": async (args) => {
// Спрацьовує, коли користувач вводить "/export pdf"
await exportToPdf(args);
return "Export complete";
}
}
});

Вбудовані команди: /new (очистити історію розмови) — можна перевизначити власним обробником.

Отримання існуючої розмови

const conv = await CAT.agent.conversation.get(conversationId);
// Повертає null, якщо розмови не існує

Методи ConversationInstance

chat — синхронна розмова

const reply = await conv.chat(content, options?);

Надсилає повідомлення та чекає на повну відповідь. AI може викликати інструменти під час відповіді; chat чекає завершення всіх виконань інструментів, перш ніж повернути остаточний результат.

Параметри:

ПараметрТипОпис
contentstring | ContentBlock[]Вміст повідомлення, текст або мультимодальні блоки вмісту
options.toolsToolDefinition[]Додаткові інструменти, які додаються лише для цього виклику (об'єднуються з інструментами, переданими під час створення)

Повертає ChatReply:

ПолеТипОпис
contentstring | ContentBlock[]Вміст відповіді AI
thinkingstringПроцес мислення моделі (підтримується лише деякими моделями)
toolCallsToolCall[]Запис викликів інструментів, зроблених під час цієї відповіді
usage{ inputTokens, outputTokens }Використання токенів
commandbooleanЧи була ця відповідь викликана командою

chatStream — потокова розмова

const stream = await conv.chatStream(content, options?);
for await (const chunk of stream) {
// Обробка потокових подій
}

Отримує відповідь AI у реальному часі — корисно, коли потрібно показувати вивід поступово.

Типи подій StreamChunk:

typeПоляОпис
content_deltacontent: stringІнкрементний текстовий вміст
thinking_deltathinking: stringІнкрементний вміст мислення
tool_calltoolCall: ToolCallІнформація про виклик інструмента (спрацьовує при зміні стану)
content_blockblock: ContentBlockБлок вмісту (зображення, файл тощо)
doneusage: { inputTokens, outputTokens }Хід розмови завершено
errorerror: string, errorCode?: stringПомилка

Коди помилок (errorCode):

КодОпис
rate_limitДосягнуто ліміту швидкості API; зазвичай повторюється автоматично
authАвтентифікація не вдалася; перевірте ключ API
tool_timeoutЧас виконання інструмента вичерпано
max_iterationsДосягнуто максимальної кількості циклів виклику інструментів
api_errorІнша помилка API

getMessages — отримати історію повідомлень

const messages = await conv.getMessages();

Повертає ChatMessage[], що містить кожне повідомлення в розмові.

Форма ChatMessage:

ПолеТипОпис
idstringID повідомлення
role"user" | "assistant" | "system" | "tool"Роль повідомлення
contentstring | ContentBlock[]Вміст повідомлення
thinking{ content: string }Процес мислення (повідомлення асистента — зверніть увагу, що це об'єкт, а не звичайний рядок)
errorstringПовідомлення про помилку, якщо цей хід завершився помилкою
modelIdstringID моделі, використаної для цього повідомлення
durationMsnumberЗагальна тривалість відповіді в мс
parentIdstringID батьківського повідомлення (для розгалуження)
toolCallsToolCall[]Запис викликів інструментів (повідомлення асистента)
toolCallIdstringВідповідний ID виклику інструмента (повідомлення інструментів)
usage{ inputTokens, outputTokens }Використання токенів
createtimenumberЧас створення

clear — очистити розмову

await conv.clear();

Очищає всю історію повідомлень у розмові.

save — зберегти розмову

await conv.save();

Зберігає метадані розмови у сховище. Тимчасові розмови (ephemeral: true) за замовчуванням не зберігаються; виклик цього методу перетворює її на збережену розмову.

Властивості екземпляра

ВластивістьТипОпис
idstringID розмови
titlestringНазва розмови
modelIdstringВикористовуваний ID моделі

Мультимодальний вміст

Вміст повідомлення може бути звичайним текстовим рядком або масивом ContentBlock[] для підтримки мультимодального вводу:

// Надіслати текст + зображення
await conv.chat([
{ type: "text", text: "Please analyze what's in this image" },
{ type: "image", attachmentId: "img-id", mimeType: "image/png" }
]);

Типи ContentBlock

typeОбов'язкові поляОпис
texttext: stringТекстовий вміст
imageattachmentId: string, mimeType: stringЗображення; вимагає модель з підтримкою зору
fileattachmentId: string, mimeType: string, name: stringФайл
audioattachmentId: string, mimeType: stringАудіо

Тимчасові та збережені розмови

ФункціяЗбережена розмова (за замовчуванням)Тимчасова розмова
Зберігання повідомленьЗберігається в OPFSЛише в пам'яті
Вбудовані інструментиУсі доступніНе включені; надайте власні через tools
Список розмовВидимийНе видимий
Кешування підказокПідтримуєтьсяМожна вимкнути
Випадок використанняРозмови загального призначенняЛегкі одноразові завдання та швидкі питання-відповіді

Керування контекстом

Автоматичне ущільнення

Коли використання контексту розмови перевищує 80% вікна контексту моделі, система автоматично викликає LLM для створення підсумку історії, замінюючи старіші повідомлення, щоб звільнити місце.

Кешування підказок

Увімкнено за замовчуванням. Для моделей Anthropic системна підказка та історія повідомлень кешуються, що значно зменшує використання токенів і затримку для повторних ходів.

Можна вимкнути через cache: false:

const conv = await CAT.agent.conversation.create({ cache: false });

Повний приклад

// ==UserScript==
// @name Smart translation assistant
// @match *://*/*
// @grant CAT.agent.conversation
// @grant CAT.agent.dom
// ==/UserScript==

// Створити розмову з власним інструментом
const conv = await CAT.agent.conversation.create({
system: "You are a translation assistant. The user will give you web page content — please translate it into Chinese.",
tools: [{
name: "get_selection",
description: "Get the text the user has selected on the page",
parameters: { type: "object", properties: {} },
handler: async () => {
return { text: window.getSelection()?.toString() || "No text selected" };
}
}]
});

// Потокова передача результату перекладу
const stream = await conv.chatStream("Please get the selected text and translate it into Chinese");
let result = "";
for await (const chunk of stream) {
if (chunk.type === "content_delta") {
result += chunk.content;
// Оновлення інтерфейсу в реальному часі
updateTranslationUI(result);
}
}