Lewati ke konten utama

API Percakapan

@grant CAT.agent.conversation

API Percakapan adalah inti dari sistem Agent, memungkinkan skrip membuat percakapan AI, mengirim pesan, dan menerima balasan.

Membuat percakapan

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

ConversationCreateOptions

ParameterJenisBawaanDeskripsi
idstringdibuat otomatisID percakapan, digunakan untuk melanjutkan percakapan yang ada
systemstringPrompt sistem kustom, ditambahkan setelah prompt bawaan
modelstringmodel bawaanID model (diperoleh setelah mengonfigurasinya di halaman manajemen)
maxIterationsnumber20Jumlah loop pemanggilan alat maksimum dalam satu giliran percakapan
skills"auto" | string[]"auto" memuat semua Skill secara otomatis, atau array nama Skill tertentu
toolsToolDefinition[]Daftar alat kustom (lihat di bawah)
commandsRecord<string, CommandHandler>Perintah percakapan kustom
ephemeralbooleanfalsePercakapan sementara yang tidak disimpan ke penyimpanan
cachebooleantrueAktifkan caching prompt (mengurangi penggunaan token)

Alat kustom

Skrip dapat mendaftarkan alatnya sendiri untuk dipanggil 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 alat mengikuti spesifikasi JSON Schema. AI menggunakan description untuk memahami kapan dan bagaimana memanggil alat.

Perintah kustom

Perintah kustom yang diawali dengan / dapat didaftarkan:

const conv = await CAT.agent.conversation.create({
commands: {
"/export": async (args) => {
// Dipicu saat pengguna mengetik "/export pdf"
await exportToPdf(args);
return "Export complete";
}
}
});

Perintah bawaan: /new (menghapus riwayat percakapan) — ini dapat ditimpa oleh handler kustom.

Mendapatkan percakapan yang ada

const conv = await CAT.agent.conversation.get(conversationId);
// Mengembalikan null jika percakapan tidak ada

Metode ConversationInstance

chat — chat sinkron

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

Mengirim pesan dan menunggu balasan lengkap. AI dapat memanggil alat saat membalas; chat menunggu semua eksekusi alat selesai sebelum mengembalikan hasil akhir.

Parameter:

ParameterJenisDeskripsi
contentstring | ContentBlock[]Konten pesan, baik teks maupun blok konten multimodal
options.toolsToolDefinition[]Alat tambahan yang dilampirkan hanya untuk panggilan ini (digabung dengan alat yang diberikan saat pembuatan)

Mengembalikan ChatReply:

BidangJenisDeskripsi
contentstring | ContentBlock[]Konten balasan AI
thinkingstringProses berpikir model (hanya beberapa model yang mendukung ini)
toolCallsToolCall[]Catatan pemanggilan alat yang dilakukan selama balasan ini
usage{ inputTokens, outputTokens }Penggunaan token
commandbooleanApakah balasan ini dipicu oleh perintah

chatStream — chat streaming

const stream = await conv.chatStream(content, options?);
for await (const chunk of stream) {
// Tangani peristiwa streaming
}

Menerima balasan AI secara waktu nyata — berguna saat Anda perlu menampilkan keluaran secara bertahap.

Jenis peristiwa StreamChunk:

typeBidangDeskripsi
content_deltacontent: stringKonten teks bertahap
thinking_deltathinking: stringKonten berpikir bertahap
tool_calltoolCall: ToolCallInfo pemanggilan alat (dipicu saat perubahan status)
content_blockblock: ContentBlockBlok konten (gambar, file, dll.)
doneusage: { inputTokens, outputTokens }Giliran percakapan selesai
errorerror: string, errorCode?: stringKesalahan

Kode kesalahan (errorCode):

KodeDeskripsi
rate_limitBatas kecepatan API tercapai; biasanya dicoba ulang secara otomatis
authAutentikasi gagal; periksa kunci API
tool_timeoutEksekusi alat kehabisan waktu
max_iterationsMencapai jumlah loop pemanggilan alat maksimum
api_errorKesalahan API lainnya

getMessages — dapatkan riwayat pesan

const messages = await conv.getMessages();

Mengembalikan ChatMessage[] yang berisi setiap pesan dalam percakapan.

Bentuk ChatMessage:

BidangJenisDeskripsi
idstringID pesan
role"user" | "assistant" | "system" | "tool"Peran pesan
contentstring | ContentBlock[]Konten pesan
thinking{ content: string }Proses berpikir (pesan asisten — perhatikan ini objek, bukan string biasa)
errorstringPesan kesalahan jika giliran ini error
modelIdstringID model yang digunakan untuk pesan ini
durationMsnumberTotal durasi respons dalam ms
parentIdstringID pesan induk (untuk percabangan)
toolCallsToolCall[]Catatan pemanggilan alat (pesan asisten)
toolCallIdstringID pemanggilan alat yang sesuai (pesan alat)
usage{ inputTokens, outputTokens }Penggunaan token
createtimenumberStempel waktu pembuatan

clear — hapus percakapan

await conv.clear();

Menghapus semua riwayat pesan dalam percakapan.

save — pertahankan percakapan

await conv.save();

Menyimpan metadata percakapan ke penyimpanan. Percakapan sementara (ephemeral: true) tidak disimpan secara bawaan; memanggil metode ini mengubahnya menjadi percakapan yang dipertahankan.

Properti instance

PropertiJenisDeskripsi
idstringID percakapan
titlestringJudul percakapan
modelIdstringID model yang digunakan

Konten multimodal

Konten pesan dapat berupa string teks biasa, atau array ContentBlock[] untuk mendukung input multimodal:

// Kirim teks + gambar
await conv.chat([
{ type: "text", text: "Please analyze what's in this image" },
{ type: "image", attachmentId: "img-id", mimeType: "image/png" }
]);

Jenis ContentBlock

typeBidang wajibDeskripsi
texttext: stringKonten teks
imageattachmentId: string, mimeType: stringGambar; memerlukan model yang mendukung visi
fileattachmentId: string, mimeType: string, name: stringFile
audioattachmentId: string, mimeType: stringAudio

Percakapan sementara vs. dipertahankan

FiturPercakapan dipertahankan (bawaan)Percakapan sementara
Penyimpanan pesanDisimpan ke OPFSHanya di memori
Alat bawaanSemua tersediaTidak disertakan; berikan sendiri melalui tools
Daftar percakapanTerlihatTidak terlihat
Caching promptdidukungDapat dinonaktifkan
Kasus penggunaanPercakapan tujuan umumTugas ringan sekali jalan dan Q&A cepat

Manajemen konteks

Kompresi otomatis

Saat penggunaan konteks percakapan melebihi 80% dari jendela konteks model, sistem secara otomatis memanggil LLM untuk membuat ringkasan riwayat, mengganti pesan yang lebih lama untuk mengosongkan ruang.

Caching prompt

Diaktifkan secara bawaan. Untuk model Anthropic, prompt sistem dan riwayat pesan di-cache, secara signifikan mengurangi penggunaan token dan latensi untuk giliran berulang.

Dapat dinonaktifkan melalui cache: false:

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

Contoh lengkap

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

// Buat percakapan dengan alat kustom
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" };
}
}]
});

// Streaming hasil terjemahan
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;
// Perbarui UI secara waktu nyata
updateTranslationUI(result);
}
}