メインコンテンツまでスキップ

会話API

@grant CAT.agent.conversation

会話APIはAgentシステムの中核であり、スクリプトがAI会話の作成、メッセージの送信、返信の受信を可能にします。

会話を作成

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

ConversationCreateOptions

パラメータデフォルト説明
idstring自動生成会話ID、既存の会話の再開に使用
systemstringカスタムシステムプロンプト、組み込みプロンプトの後に追加
modelstringデフォルトモデルモデルID(管理ページで設定後に取得)
maxIterationsnumber20単一の会話ターン内の最大ツール呼び出しループ数
skills"auto" | string[]"auto"はすべてのSkillを自動的に読み込み、または特定のSkill名の配列
toolsToolDefinition[]カスタムツールリスト(以下参照)
commandsRecord<string, CommandHandler>カスタム会話コマンド
ephemeralbooleanfalseストレージに永続化されない一時的な会話
cachebooleantrueプロンプトキャッシュを有効にする(トークン使用量を削減)

カスタムツール

スクリプトは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: "北京", unit: "celsius" }
const data = await fetchWeather(args.city, args.unit);
return { temperature: data.temp, condition: data.condition };
}
}]
});

ツールのparametersJSON 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メッセージID
role"user" | "assistant" | "system" | "tool"メッセージロール
contentstring | ContentBlock[]メッセージ内容
thinking{ content: string }思考プロセス(アシスタントメッセージ — これはオブジェクトであり、プレーン文字列ではないことに注意)
errorstringこのターンでエラーが発生した場合のエラーメッセージ
modelIdstringこのメッセージに使用されたモデルID
durationMsnumber総応答時間(ミリ秒)
parentIdstring親メッセージID(ブランチ用)
toolCallsToolCall[]ツール呼び出しの記録(アシスタントメッセージ)
toolCallIdstring対応するツール呼び出しID(ツールメッセージ)
usage{ inputTokens, outputTokens }トークン使用量
createtimenumber作成タイムスタンプ

clear — 会話をクリア

await conv.clear();

会話内のすべてのメッセージ履歴をクリアします。

save — 会話を永続化

await conv.save();

会話のメタデータをストレージに保存します。一時的な会話(ephemeral: true)はデフォルトでは保存されません。このメソッドを呼び出すことで永続化された会話に変換されます。

インスタンスプロパティ

プロパティ説明
idstring会話ID
titlestring会話タイトル
modelIdstring使用中のモデルID

マルチモーダルコンテンツ

メッセージ内容はプレーン文字列、またはマルチモーダル入力をサポートする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オーディオ

一時的会話 vs. 永続化会話

機能永続化会話(デフォルト)一時的会話
メッセージ保存OPFSに永続化メモリ内のみ
組み込みツールすべて利用可能含まれません;toolsで提供してください
会話リスト表示される表示されない
プロンプトキャッシュサポート無効にできる
ユースケース汎用会話軽量な一時タスクと簡単なQ&A

コンテキスト管理

自動コンパクト

会話のコンテキスト使用量がモデルのコンテキストウィンドウの**80%**を超えると、システムは自動的にLLMを呼び出して履歴の要約を生成し、古いメッセージを置き換えてスペースを解放します。

プロンプトキャッシュ

デフォルトで有効です。Anthropicモデルの場合、システムプロンプトとメッセージ履歴がキャッシュされ、繰り返しのターンでトークン使用量とレイテンシが大幅に削減されます。

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);
}
}