إنتقل إلى المحتوى الرئيسي

واجهة برمجة الحوار

@grant CAT.agent.conversation

واجهة برمجة الحوار هي قلب نظام Agent، حيث تتيح للسكرپت إنشاء حوارات ذكاء اصطناعي وإرسال الرسائل وتلقي الردود.

إنشاء حوار

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

ConversationCreateOptions

المعاملالنوعالافتراضيالوصف
idstringمُنشأ تلقائياًمعرف الحوار، يُستخدم لاستئناف حوار موجود
systemstringمطالبة نظام مخصصة، تُلحق بعد المطالبة المدمجة
modelstringالنموذج الافتراضيمعرف النموذج (يُحصل عليه بعد تكوينه على صفحة الإدارة)
maxIterationsnumber20الحد الأقصى لعدد حلقات استدعاء الأدوات ضمن جولة حوار واحدة
skills"auto" | string[]"auto" يحمّل جميع Skills تلقائياً، أو مصفوفة من أسماء Skills محددة
toolsToolDefinition[]قائمة الأدوات المخصصة (انظر أدناه)
commandsRecord<string, CommandHandler>أوامر حوار مخصصة
ephemeralbooleanfalseحوار مؤقت غير محفوظ في التخزين
cachebooleantrueتفعيل تخزين المطالبات مؤقتاً (يقلل استهلاك الرموز)

أدوات مخصصة

يمكن للسكرپت تسجيل أدواته الخاصة ليستدعيها الذكاء الاصطناعي:

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. يستخدم الذكاء الاصطناعي description لفهم متى وكيف يستدعي الأداة.

أوامر مخصصة

يمكن تسجيل أوامر مخصصة تبدأ بـ /:

const conv = await CAT.agent.conversation.create({
commands: {
"/export": async (args) => {
// Triggered when the user types "/export pdf"
await exportToPdf(args);
return "Export complete";
}
}
});

الأوامر المدمجة: /new (مسح سجل الحوار) — يمكن استبدالها بمعالج مخصص.

الحصول على حوار موجود

const conv = await CAT.agent.conversation.get(conversationId);
// Returns null if the conversation doesn't exist

طرق ConversationInstance

chat — حوار متزامن

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

يرسل رسالة وينتظر الرد الكامل. قد يستدعي الذكاء الاصطناعي أدوات أثناء الرد؛ ينتظر chat انتهاء جميع عمليات تنفيذ الأدوات قبل إرجاع النتيجة النهائية.

المعلمات:

المعاملالنوعالوصف
contentstring | ContentBlock[]محتوى الرسالة، نص أو كتل محتوى متعددة الوسائط
options.toolsToolDefinition[]أدوات إضافية تُلحق لهذا الاستدعاء فقط (مدمجة مع الأدوات الممررة عند الإنشاء)

يرجع ChatReply:

الحقلالنوعالوصف
contentstring | ContentBlock[]محتوى رد الذكاء الاصطناعي
thinkingstringعملية تفكير النموذج (تدعمها بعض النماذج فقط)
toolCallsToolCall[]سجل استدعاءات الأدوات التي تمت خلال هذا الرد
usage{ inputTokens, outputTokens }استهلاك الرموز
commandbooleanيحدد ما إذا كان هذا الرد قد تم بسببه أمر ما

chatStream — حوار متدفق

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

يستقبل رد الذكاء الاصطناعي في الوقت الفعلي — مفيد عندما تحتاج إلى عرض المخرجات تدريجياً.

أنواع أحداث StreamChunk:

النوعالحقولالوصف
content_deltacontent: stringمحتوى نصي تدريجي
thinking_deltathinking: stringمحتوى تفكير تدريجي
tool_calltoolCall: ToolCallمعلومات استدعاء الأداة (يُطلق عند تغييرات الحالة)
content_blockblock: ContentBlockكتلة محتوى (صورة، ملف، إلخ)
doneusage: { inputTokens, outputTokens }اكتمل جولة الحوار
errorerror: string, errorCode?: stringخطأ

أكواد الخطأ (errorCode):

الكودالوصف
rate_limitالوصول إلى حد معدل واجهة البرمجة؛ يُعاد عادةً تلقائياً
authفشل المصادقة؛ تحقق من مفتاح API
tool_timeoutانتهت مهلة تنفيذ الأداة
max_iterationsالوصول إلى الحد الأقصى لعدد حلقات استدعاء الأدوات
api_errorخطأ واجهة برمجة آخر

getMessages — الحصول على سجل الرسائل

const messages = await conv.getMessages();

يرجع ChatMessage[] يحتوي على جميع رسائل الحوار.

شكل ChatMessage:

الحقلالنوعالوصف
idstringمعرف الرسالة
role"user" | "assistant" | "system" | "tool"دور الرسالة
contentstring | ContentBlock[]محتوى الرسالة
thinking{ content: string }عملية التفكير (رسائل المساعد — لاحظ أنها كائن وليست سلسلة نصية عادية)
errorstringرسالة الخطأ إذا فشل هذا الدور
modelIdstringمعرف النموذج المستخدم لهذه الرسالة
durationMsnumberإجمالي مدة الاستجابة بالمللي ثانية
parentIdstringمعرف الرسالة الأصل (للتفرع)
toolCallsToolCall[]سجل استدعاءات الأدوات (رسائل المساعد)
toolCallIdstringمعرف استدعاء الأداة المقابل (رسائل الأداة)
usage{ inputTokens, outputTokens }استهلاك الرموز
createtimenumberطابع وقت الإنشاء

clear — مسح الحوار

await conv.clear();

يمسح جميع سجل الرسائل في الحوار.

save — حفظ الحوار

await conv.save();

يحفظ بيانات الحوار الوصفية في التخزين. لا تُحفظ الحوارات المؤقتة (ephemeral: true) افتراضياً؛ استدعاء هذه الطريقة يحولها إلى حوار محفوظ.

خصائص المثيل

الخاصيةالنوعالوصف
idstringمعرف الحوار
titlestringعنوان الحوار
modelIdstringمعرف النموذج المستخدم

محتوى متعدد الوسائط

يمكن أن يكون محتوى الرسالة سلسلة نصية عادية، أو مصفوفة ContentBlock[] لدعم الإدخال متعدد الوسائط:

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

أنواع ContentBlock

النوعالحقول الإلزاميةالوصف
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==

// Create a conversation with a custom tool
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" };
}
}]
});

// Stream the translation result
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;
// Update the UI in real time
updateTranslationUI(result);
}
}