স্কিপ করে মূল কন্টেন্ট এ যান

কথোপকথন API

@grant CAT.agent.conversation

কথোপকথন API হল Agent সিস্টেমের মূল, যা একটি স্ক্রিপ্টকে AI কথোপকথন তৈরি, বার্তা পাঠানো এবং উত্তর গ্রহণ করতে দেয়।

একটি কথোপকথন তৈরি করা​

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

ConversationCreateOptions​

প্যারামিটারধরনডিফল্টবর্ণনা
idstringস্বয়ংক্রিয়-উত্পন্নকথোপকথন আইডি, একটি বিদ্যমান কথোপকথন পুনরায় শুরু করতে ব্যবহৃত হয়
systemstring—কাস্টম সিস্টেম prompt, অন্তর্নির্মিত prompt-এর পরে যুক্ত হয়
modelstringডিফল্ট মডেলমডেল আইডি (ম্যানেজমেন্ট পেজে কনফিগার করার পরে প্রাপ্ত)
maxIterationsnumber20একক কথোপকথন টার্নের মধ্যে সর্বোচ্চ টুল-কল লুপ সংখ্যা
skills"auto" | string[]—"auto" স্বয়ংক্রিয়ভাবে সমস্ত Skill লোড করে, অথবা নির্দিষ্ট Skill নামের একটি অ্যারে
toolsToolDefinition[]—কাস্টম টুল তালিকা (নীচে দেখুন)
commandsRecord<string, CommandHandler>—কাস্টম কথোপকথন কমান্ড
ephemeralbooleanfalseএকটি ক্ষণস্থায়ী কথোপকথন যা স্টোরেজে সংরক্ষিত হয় না
cachebooleantrueprompt ক্যাশিং সক্রিয় করুন (টোকেন ব্যবহার হ্রাস করে)

কাস্টম টুল​

একটি স্ক্রিপ্ট AI-এর কলের জন্য নিজস্ব টুল নিবন্ধন করতে পারে:

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 স্পেক অনুসরণ করে। AI description ব্যবহার করে বুঝতে পারে কখন এবং কীভাবে টুলটি কল করতে হবে।

কাস্টম কমান্ড​

/ দিয়ে শুরু হওয়া কাস্টম কমান্ড নিবন্ধন করা যায়:

const conv = await CAT.agent.conversation.create({
commands: {
"/export": async (args) => {
// ব্যবহারকারী "/export pdf" টাইপ করলে ট্রিগার হয়
await exportToPdf(args);
return "এক্সপোর্ট সম্পন্ন";
}
}
});

অন্তর্নির্মিত কমান্ড: /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 ইভেন্টের ধরন:

ধরনফিল্ডবর্ণনা
content_deltacontent: stringক্রমবর্ধমান টেক্সট বিষয়বস্তু
thinking_deltathinking: stringক্রমবর্ধমান চিন্তা বিষয়বস্তু
tool_calltoolCall: ToolCallটুল কল তথ্য (অবস্থা পরিবর্তনে ফায়ার হয়)
content_blockblock: ContentBlockএকটি বিষয়বস্তু ব্লক (ছবি, ফাইল ইত্যাদি)
doneusage: { inputTokens, outputTokens }কথোপকথন টার্ন সম্পন্ন
errorerror: string, errorCode?: stringত্রুটি

ত্রুটি কোড (errorCode):

কোডবর্ণনা
rate_limitAPI রেট সীমা পৌঁছেছে; সাধারণত স্বয়ংক্রিয়ভাবে পুনরায় চেষ্টা করা হয়
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মোট উত্তর সময় ms-এ
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;
// রিয়েল-টাইমে UI আপডেট করুন
updateTranslationUI(result);
}
}