Ana içeriğe geç

Sohbet API'si

@grant CAT.agent.conversation

Sohbet API'si Agent sisteminin çekirdeğidir; bir betiğin AI sohbetleri oluşturmasını, mesaj göndermesini ve yanıtlar almasını sağlar.

Bir sohbet oluşturma

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

ConversationCreateOptions

ParametreTürVarsayılanAçıklama
idstringotomatik oluşturulurSohbet kimliği, mevcut bir sohbeti sürdürmek için kullanılır
systemstringÖzel sistem istemi, yerleşik istemin ardına eklenir
modelstringvarsayılan modelModel kimliği (yönetim sayfasında yapılandırdıktan sonra elde edilir)
maxIterationsnumber20Tek bir sohbet turundaki maksimum araç çağrısı döngüsü sayısı
skills"auto" | string[]"auto" tüm Skill'leri otomatik yükler veya belirli Skill adlarının bir dizisi
toolsToolDefinition[]Özel araç listesi (aşağıya bakın)
commandsRecord<string, CommandHandler>Özel sohbet komutları
ephemeralbooleanfalseDepolamaya kalıcı olarak yazılmayan geçici bir sohbet
cachebooleantrueİstem önbelleğini etkinleştirir (belirteç kullanımını azaltır)

Özel araçlar

Bir betik, AI'ın çağırması için kendi araçlarını kaydedebilir:

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 };
}
}]
});

Bir aracın parameters değeri JSON Schema spesifikasyonunu izler. AI, aracı ne zaman ve nasıl çağıracağını anlamak için description kullanır.

Özel komutlar

/ ile başlayan özel komutlar kaydedilebilir:

const conv = await CAT.agent.conversation.create({
commands: {
"/export": async (args) => {
// Kullanıcı "/export pdf" yazdığında tetiklenir
await exportToPdf(args);
return "Export complete";
}
}
});

Yerleşik komutlar: /new (sohbet geçmişini temizler) — bu, özel bir işleyiciyle geçersiz kılınabilir.

Mevcut bir sohbeti alma

const conv = await CAT.agent.conversation.get(conversationId);
// Sohbet yoksa null döndürür

ConversationInstance yöntemleri

chat — eşzamanlı sohbet

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

Bir mesaj gönderir ve tam yanıtı bekler. AI yanıt verirken araçları çağırabilir; chat, nihai sonucu döndürmeden önce tüm araç yürütmelerinin bitmesini bekler.

Parametreler:

ParametreTürAçıklama
contentstring | ContentBlock[]Mesaj içeriği, metin veya çok modlu içerik blokları
options.toolsToolDefinition[]Yalnızca bu çağrı için eklenecek ek araçlar (oluşturma sırasında iletilen araçlarla birleştirilir)

ChatReply döndürür:

AlanTürAçıklama
contentstring | ContentBlock[]AI'nın yanıt içeriği
thinkingstringModelin düşünme süreci (yalnızca bazı modeller destekler)
toolCallsToolCall[]Bu yanıt sırasında yapılan araç çağrılarının kaydı
usage{ inputTokens, outputTokens }Belirteç kullanımı
commandbooleanBu yanıtın bir komutla tetiklenip tetiklenmediği

chatStream — akışlı sohbet

const stream = await conv.chatStream(content, options?);
for await (const chunk of stream) {
// Akış olaylarını işle
}

AI'nın yanıtını gerçek zamanlı olarak alır — çıktıyı kademeli olarak görüntülemeniz gerektiğinde kullanışlıdır.

StreamChunk olay türleri:

typeAlanlarAçıklama
content_deltacontent: stringArtımlı metin içeriği
thinking_deltathinking: stringArtımlı düşünme içeriği
tool_calltoolCall: ToolCallAraç çağrısı bilgisi (durum değişikliklerinde tetiklenir)
content_blockblock: ContentBlockBir içerik bloğu (görsel, dosya vb.)
doneusage: { inputTokens, outputTokens }Sohbet turu tamamlandı
errorerror: string, errorCode?: stringHata

Hata kodları (errorCode):

KodAçıklama
rate_limitAPI hız sınırına ulaşıldı; genellikle otomatik olarak yeniden denenir
authKimlik doğrulama başarısız oldu; API anahtarını kontrol edin
tool_timeoutAraç yürütmesi zaman aşımına uğradı
max_iterationsMaksimum araç çağrısı döngüsü sayısına ulaşıldı
api_errorDiğer API hatası

getMessages — mesaj geçmişini al

const messages = await conv.getMessages();

Sohbetteki her mesajı içeren bir ChatMessage[] döndürür.

ChatMessage biçimi:

AlanTürAçıklama
idstringMesaj kimliği
role"user" | "assistant" | "system" | "tool"Mesaj rolü
contentstring | ContentBlock[]Mesaj içeriği
thinking{ content: string }Düşünme süreci (asistan mesajları — bunun bir nesne olduğunu, düz bir dize olmadığını unutmayın)
errorstringBu turda hata oluştuysa hata mesajı
modelIdstringBu mesaj için kullanılan model kimliği
durationMsnumberMilisaniye cinsinden toplam yanıt süresi
parentIdstringÜst mesaj kimliği (dallanma için)
toolCallsToolCall[]Araç çağrılarının kaydı (asistan mesajları)
toolCallIdstringKarşılık gelen araç çağrısı kimliği (araç mesajları)
usage{ inputTokens, outputTokens }Belirteç kullanımı
createtimenumberOluşturma zaman damgası

clear — sohbeti temizle

await conv.clear();

Sohbetteki tüm mesaj geçmişini temizler.

save — sohbeti kalıcı hale getir

await conv.save();

Sohbetin meta verilerini depolamaya kaydeder. Geçici sohbetler (ephemeral: true) varsayılan olarak kaydedilmez; bu yöntemi çağırmak bir sohbeti kalıcı bir sohbete dönüştürür.

Örnek özellikler

ÖzellikTürAçıklama
idstringSohbet kimliği
titlestringSohbet başlığı
modelIdstringKullanımdaki model kimliği

Çok modlu içerik

Mesaj içeriği düz bir metin dizesi veya çok modlu girişi desteklemek için bir ContentBlock[] dizisi olabilir:

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

ContentBlock türleri

typeZorunlu alanlarAçıklama
texttext: stringMetin içeriği
imageattachmentId: string, mimeType: stringGörsel; görüş yeteneğine sahip bir model gerektirir
fileattachmentId: string, mimeType: string, name: stringDosya
audioattachmentId: string, mimeType: stringSes

Geçici ve kalıcı sohbetler

ÖzellikKalıcı sohbet (varsayılan)Geçici sohbet
Mesaj depolamaOPFS'e kalıcı olarak yazılırYalnızca bellekte
Yerleşik araçlarTümü kullanılabilirDahil edilmez; tools ile kendinizinkini sağlayın
Sohbet listesiGörünürGörünmez
İstem önbelleğiDesteklenirDevre dışı bırakılabilir
Kullanım amacıGenel amaçlı sohbetlerHafif, tek seferlik görevler ve hızlı soru-cevap

Bağlam yönetimi

Otomatik sıkıştırma

Sohbetin bağlam kullanımı, modelin bağlam penceresinin %80'ini aştığında, sistem geçmişin bir özetini oluşturmak için otomatik olarak LLM'yi çağırır ve yer açmak için eski mesajları değiştirir.

İstem önbelleği

Varsayılan olarak etkindir. Anthropic modelleri için sistem istemi ve mesaj geçmişi önbelleğe alınır; bu, tekrarlanan turlar için belirteç kullanımını ve gecikmeyi önemli ölçüde azaltır.

cache: false ile devre dışı bırakılabilir:

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

Tam örnek

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

// Özel bir araçla bir sohbet oluştur
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" };
}
}]
});

// Çeviri sonucunu akış olarak al
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;
// Arayüzü gerçek zamanlı güncelle
updateTranslationUI(result);
}
}