پرش به مطلب اصلی

API گفتگو

@grant CAT.agent.conversation

API گفتگو هسته سیستم Agent است و به یک اسکریپت اجازه می‌دهد گفتگوهای هوش مصنوعی ایجاد کند، پیام ارسال کند و پاسخ دریافت کند.

ایجاد یک گفتگو

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

ConversationCreateOptions

پارامترنوعپیش‌فرضتوضیحات
idstringتولید خودکارشناسه گفتگو، برای از سرگیری یک گفتگوی موجود استفاده می‌شود
systemstringprompt سیستم سفارشی، پس از prompt داخلی اضافه می‌شود
modelstringمدل پیش‌فرضشناسه مدل (پس از پیکربندی در صفحه مدیریت به دست می‌آید)
maxIterationsnumber20حداکثر تعداد حلقه فراخوانی ابزار در یک نوبت گفتگو
skills"auto" | string[]"auto" همه Skillها را به طور خودکار بارگذاری می‌کند، یا آرایه‌ای از نام Skillهای خاص
toolsToolDefinition[]فهرست ابزار سفارشی (به زیر مراجعه کنید)
commandsRecord<string, CommandHandler>دستورات گفتگوی سفارشی
ephemeralbooleanfalseگفتگوی موقتی که در ذخیره‌سازی ماندگار نمی‌شود
cachebooleantrueفعال‌سازی کش prompt (مصرف توکن را کاهش می‌دهد)

ابزارهای سفارشی

یک اسکریپت می‌تواند ابزارهای خود را برای فراخوانی هوش مصنوعی ثبت کند:

const conv = await CAT.agent.conversation.create({
tools: [{
name: "get_weather",
description: "دریافت اطلاعات آب‌وهوا برای شهر مشخص‌شده",
parameters: {
type: "object",
properties: {
city: {
type: "string",
description: "نام شهر"
},
unit: {
type: "string",
enum: ["celsius", "fahrenheit"],
description: "واحد دما"
}
},
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) => {
// زمانی که کاربر "/export pdf" را تایپ می‌کند فعال می‌شود
await exportToPdf(args);
return "صادرات کامل شد";
}
}
});

دستورات داخلی: /new (پاک کردن تاریخچه گفتگو) — این می‌تواند توسط یک handler سفارشی بازنویسی شود.

دریافت یک گفتگوی موجود

const conv = await CAT.agent.conversation.get(conversationId);
// اگر گفتگو وجود نداشته باشد null برمی‌گرداند

روش‌های 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) {
// مدیریت رویدادهای جریان
}

پاسخ هوش مصنوعی را به صورت بلادرنگ دریافت می‌کند — زمانی مفید است که نیاز به نمایش تدریجی خروجی دارید.

انواع رویداد StreamChunk:

نوعفیلدهاتوضیحات
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:

فیلدنوعتوضیحات
idstringشناسه پیام
role"user" | "assistant" | "system" | "tool"نقش پیام
contentstring | ContentBlock[]محتوای پیام
thinking{ content: string }فرآیند تفکر (پیام‌های assistant — توجه کنید این یک شیء است، نه یک رشته ساده)
errorstringپیام خطا اگر این نوبت خطا داشت
modelIdstringشناسه مدل استفاده‌شده برای این پیام
durationMsnumberمدت کل پاسخ در میلی‌ثانیه
parentIdstringشناسه پیام والد (برای انشعاب)
toolCallsToolCall[]ثبت فراخوانی‌های ابزار (پیام‌های assistant)
toolCallIdstringشناسه فراخوانی ابزار مربوطه (پیام‌های tool)
usage{ inputTokens, outputTokens }مصرف توکن
createtimenumberزمان‌سنج ایجاد

clear — پاک کردن گفتگو

await conv.clear();

تمام تاریخچه پیام در گفتگو را پاک می‌کند.

save — ماندگار کردن گفتگو

await conv.save();

فراداده گفتگو را در ذخیره‌سازی ذخیره می‌کند. گفتگوهای موقتی (ephemeral: true) به طور پیش‌فرض ذخیره نمی‌شوند؛ فراخوانی این روش آن را به یک گفتگوی ماندگار تبدیل می‌کند.

ویژگی‌های نمونه

ویژگینوعتوضیحات
idstringشناسه گفتگو
titlestringعنوان گفتگو
modelIdstringشناسه مدل در حال استفاده

محتوای چندوجهی

محتوای پیام می‌تواند یک رشته متنی ساده یا یک آرایه ContentBlock[] برای پشتیبانی از ورودی چندوجهی باشد:

// ارسال متن + یک تصویر
await conv.chat([
{ type: "text", text: "لطفاً تحلیل کنید چه چیزی در این تصویر است" },
{ 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 ارائه دهید
فهرست گفتگوهاقابل مشاهدهقابل مشاهده نیست
کش promptپشتیبانی می‌شودمی‌تواند غیرفعال شود
مورد استفادهگفتگوهای عمومیکارهای سبک‌وزن، یک‌باره و پرسش‌وپاسخ سریع

مدیریت زمینه

فشرده‌سازی خودکار

هنگامی که مصرف زمینه گفتگو از 80% پنجره زمینه مدل تجاوز کند، سیستم به طور خودکار LLM را برای تولید خلاصه تاریخچه فراخوانی می‌کند و پیام‌های قدیمی‌تر را برای آزادکردن فضا جایگزین می‌کند.

کش prompt

به طور پیش‌فرض فعال است. برای مدل‌های Anthropic، prompt سیستم و تاریخچه پیام در کش ذخیره می‌شوند و مصرف توکن و تأخیر برای نوبت‌های تکراری را به طور قابل توجهی کاهش می‌دهند.

می‌تواند از طریق cache: false غیرفعال شود:

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

مثال کامل

// ==UserScript==
// @name دستیار ترجمه هوشمند
// @match *://*/*
// @grant CAT.agent.conversation
// @grant CAT.agent.dom
// ==/UserScript==

// ایجاد یک گفتگو با یک ابزار سفارشی
const conv = await CAT.agent.conversation.create({
system: "شما یک دستیار ترجمه هستید. کاربر محتوای صفحه وب را به شما می‌دهد — لطفاً آن را به چینی ترجمه کنید.",
tools: [{
name: "get_selection",
description: "متن انتخاب‌شده توسط کاربر در صفحه را دریافت کنید",
parameters: { type: "object", properties: {} },
handler: async () => {
return { text: window.getSelection()?.toString() || "هیچ متنی انتخاب نشده است" };
}
}]
});

// پخش نتیجه ترجمه
const stream = await conv.chatStream("لطفاً متن انتخاب‌شده را دریافت کنید و به چینی ترجمه کنید");
let result = "";
for await (const chunk of stream) {
if (chunk.type === "content_delta") {
result += chunk.content;
// به‌روزرسانی رابط کاربری در زمان واقعی
updateTranslationUI(result);
}
}