Chuyển tới nội dung chính

API Hội thoại

@grant CAT.agent.conversation

API Hội thoại là cốt lõi của hệ thống Agent, cho phép script tạo cuộc trò chuyện AI, gửi tin nhắn và nhận phản hồi.

Tạo cuộc trò chuyện

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

ConversationCreateOptions

Tham sốKiểuMặc địnhMô tả
idstringtự động tạoID cuộc trò chuyện, dùng để tiếp tục cuộc trò chuyện hiện có
systemstringPrompt hệ thống tùy chỉnh, được thêm sau prompt tích hợp sẵn
modelstringmô hình mặc địnhID mô hình (được lấy sau khi cấu hình trên trang quản lý)
maxIterationsnumber20Số vòng lặp gọi công cụ tối đa trong một lượt hội thoại
skills"auto" | string[]"auto" tự động tải tất cả Skills, hoặc mảng tên Skills cụ thể
toolsToolDefinition[]Danh sách công cụ tùy chỉnh (xem bên dưới)
commandsRecord<string, CommandHandler>Lệnh hội thoại tùy chỉnh
ephemeralbooleanfalseCuộc trò chuyện tạm thời không được lưu持久
cachebooleantrueBật bộ nhớ đệm prompt (giảm sử dụng token)

Công cụ tùy chỉnh

Script có thể đăng ký công cụ riêng để AI gọi:

const conv = await CAT.agent.conversation.create({
tools: [{
name: "get_weather",
description: "Lấy thông tin thời tiết cho thành phố được chỉ định",
parameters: {
type: "object",
properties: {
city: {
type: "string",
description: "Tên thành phố"
},
unit: {
type: "string",
enum: ["celsius", "fahrenheit"],
description: "Đơn vị nhiệt độ"
}
},
required: ["city"]
},
handler: async (args) => {
// args = { city: "Hà Nội", unit: "celsius" }
const data = await fetchWeather(args.city, args.unit);
return { temperature: data.temp, condition: data.condition };
}
}]
});

parameters của công cụ tuân theo đặc tả JSON Schema. AI sử dụng description để hiểu khi nào và cách gọi công cụ.

Lệnh tùy chỉnh

Có thể đăng ký lệnh tùy chỉnh bắt đầu bằng /:

const conv = await CAT.agent.conversation.create({
commands: {
"/export": async (args) => {
// Kích hoạt khi người dùng nhập "/export pdf"
await exportToPdf(args);
return "Xuất hoàn tất";
}
}
});

Lệnh tích hợp sẵn: /new (xóa lịch sử hội thoại) — có thể bị ghi đè bởi trình xử lý tùy chỉnh.

Lấy cuộc trò chuyện hiện có

const conv = await CAT.agent.conversation.get(conversationId);
// Trả về null nếu cuộc trò chuyện không tồn tại

Các phương thức ConversationInstance

chat — chat đồng bộ

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

Gửi tin nhắn và đợi phản hồi hoàn chỉnh. AI có thể gọi công cụ trong khi phản hồi; chat đợi tất cả việc thực thi công cụ hoàn thành trước khi trả về kết quả cuối cùng.

Tham số:

Tham sốKiểuMô tả
contentstring | ContentBlock[]Nội dung tin nhắn, văn bản hoặc nội dung đa phương thức
options.toolsToolDefinition[]Công cụ bổ sung chỉ cho lần gọi này (được kết hợp với công cụ khi tạo)

Trả về ChatReply:

TrườngKiểuMô tả
contentstring | ContentBlock[]Nội dung phản hồi của AI
thinkingstringQuá trình suy luận của mô hình (chỉ một số mô hình hỗ trợ)
toolCallsToolCall[]Ghi lại các lần gọi công cụ trong phản hồi này
usage{ inputTokens, outputTokens }Sử dụng token
commandbooleanPhản hồi này có được kích hoạt bởi lệnh không

chatStream — chat trực tuyến

const stream = await conv.chatStream(content, options?);
for await (const chunk of stream) {
// Xử lý sự kiện trực tuyến
}

Nhận phản hồi của AI theo thời gian thực — hữu ích khi bạn cần hiển thị đầu ra dần dần.

Các loại sự kiện StreamChunk:

loạiTrườngMô tả
content_deltacontent: stringNội dung văn bản dần dần
thinking_deltathinking: stringNội dung suy luận dần dần
tool_calltoolCall: ToolCallThông tin gọi công cụ (kích hoạt khi trạng thái thay đổi)
content_blockblock: ContentBlockKhối nội dung (hình ảnh, tệp, v.v.)
doneusage: { inputTokens, outputTokens }Lượt hội thoại hoàn tất
errorerror: string, errorCode?: stringLỗi

Mã lỗi (errorCode):

Mô tả
rate_limitĐã chạm giới hạn tốc độ API; thường được tự động thử lại
authXác thực thất bại; kiểm tra khóa API
tool_timeoutHết thời gian thực thi công cụ
max_iterationsĐã chạm số vòng lặp gọi công cụ tối đa
api_errorLỗi API khác

getMessages — lấy lịch sử tin nhắn

const messages = await conv.getMessages();

Trả về ChatMessage[] chứa mọi tin nhắn trong cuộc trò chuyện.

Cấu trúc ChatMessage:

TrườngKiểuMô tả
idstringID tin nhắn
role"user" | "assistant" | "system" | "tool"Vai trò tin nhắn
contentstring | ContentBlock[]Nội dung tin nhắn
thinking{ content: string }Quá trình suy luận (tin nhắn trợ lý — lưu ý đây là đối tượng, không phải chuỗi đơn giản)
errorstringThông báo lỗi nếu lượt này gặp lỗi
modelIdstringID mô hình được sử dụng cho tin nhắn này
durationMsnumberTổng thời gian phản hồi bằng ms
parentIdstringID tin nhắn cha (để phân nhánh)
toolCallsToolCall[]Ghi lại các lần gọi công cụ (tin nhắn trợ lý)
toolCallIdstringID gọi công cụ tương ứng (tin nhắn công cụ)
usage{ inputTokens, outputTokens }Sử dụng token
createtimenumberThời gian tạo

clear — xóa cuộc trò chuyện

await conv.clear();

Xóa toàn bộ lịch sử tin nhắn trong cuộc trò chuyện.

save — lưu持久 cuộc trò chuyện

await conv.save();

Lưu metadata cuộc trò chuyện vào bộ nhớ. Cuộc trò chuyện tạm thời (ephemeral: true) không được lưu theo mặc định; gọi phương thức này chuyển đổi thành cuộc trò chuyện được lưu持久.

Thuộc tính instance

Thuộc tínhKiểuMô tả
idstringID cuộc trò chuyện
titlestringTiêu đề cuộc trò chuyện
modelIdstringID mô hình đang sử dụng

Nội dung đa phương thức

Nội dung tin nhắn có thể là chuỗi văn bản đơn giản, hoặc mảng ContentBlock[] để hỗ trợ đầu vào đa phương thức:

// Gửi văn bản + hình ảnh
await conv.chat([
{ type: "text", text: "Vui lòng phân tích nội dung trong hình ảnh này" },
{ type: "image", attachmentId: "img-id", mimeType: "image/png" }
]);

Các loại ContentBlock

loạiTrường bắt buộcMô tả
texttext: stringNội dung văn bản
imageattachmentId: string, mimeType: stringHình ảnh; yêu cầu mô hình có khả năng nhìn
fileattachmentId: string, mimeType: string, name: stringTệp
audioattachmentId: string, mimeType: stringÂm thanh

Cuộc trò chuyện tạm thời vs. được lưu持久

Tính năngCuộc trò chuyện được lưu持久 (mặc định)Cuộc trò chuyện tạm thời
Lưu trữ tin nhắnLưu持久 vào OPFSChỉ trong bộ nhớ
Công cụ tích hợp sẵnTất cả khả dụngKhông bao gồm; cung cấp của bạn qua tools
Danh sách cuộc trò chuyệnHiển thịKhông hiển thị
Bộ nhớ đệm promptHỗ trợCó thể tắt
Trường hợp sử dụngCuộc trò chuyện đa năngTác vụ nhẹ, một lần và câu hỏi nhanh

Quản lý ngữ cảnh

Tự động nén

Khi mức sử dụng ngữ cảnh của cuộc trò chuyện vượt quá 80% cửa sổ ngữ cảnh của mô hình, hệ thống tự động gọi LLM để tạo tóm tắt lịch sử, thay thế các tin nhắn cũ hơn để giải phóng không gian.

Bộ nhớ đệm prompt

Bật theo mặc định. Đối với các mô hình Anthropic, prompt hệ thống và lịch sử tin nhắn được bộ nhớ đệm, giảm đáng kể sử dụng token và độ trễ cho các lượt lặp lại.

Có thể tắt qua cache: false:

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

Ví dụ đầy đủ

// ==UserScript==
// @name Trợ lý dịch thuật thông minh
// @match *://*/*
// @grant CAT.agent.conversation
// @grant CAT.agent.dom
// ==/UserScript==

// Tạo cuộc trò chuyện với công cụ tùy chỉnh
const conv = await CAT.agent.conversation.create({
system: "Bạn là trợ lý dịch thuật. Người dùng sẽ cung cấp nội dung trang web — vui lòng dịch nó sang tiếng Việt.",
tools: [{
name: "get_selection",
description: "Lấy văn bản người dùng đã chọn trên trang",
parameters: { type: "object", properties: {} },
handler: async () => {
return { text: window.getSelection()?.toString() || "Không có văn bản được chọn" };
}
}]
});

// Truyền kết quả dịch thuật trực tuyến
const stream = await conv.chatStream("Vui lòng lấy văn bản đã chọn và dịch sang tiếng Việt");
let result = "";
for await (const chunk of stream) {
if (chunk.type === "content_delta") {
result += chunk.content;
// Cập nhật giao diện theo thời gian thực
updateTranslationUI(result);
}
}