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

কথোপকথন 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);
}
}