コンテンツにスキップ

拡張機能

拡張機能は、ExtensionAPIを受け取り、以下のことができる関数(またはモジュール)です。

  • 追加のツールを登録する
  • エージェントイベントにサブスクライブする
  • コンテキストのためにエージェントの名前にアクセスする

拡張機能を使用すると、再利用可能なエージェント機能をモジュールとしてパッケージ化できます。

import { Agent } from "@schift-io/sdk";
import type { ExtensionAPI } from "@schift-io/sdk";
const loggingExtension = (api: ExtensionAPI) => {
api.on("tool_call", (event) => {
console.log(`[${api.agentName}] calling ${event.toolName}`);
});
api.on("agent_end", (event) => {
console.log(`[${api.agentName}] done in ${event.totalDurationMs}ms`);
});
};
const agent = new Agent({
name: "My Agent",
instructions: "...",
extensions: [loggingExtension],
transport: schift.transport,
});

拡張機能はファイルパスからも読み込むことができます。モジュールはdefaultまたはinit関数をエクスポートする必要があります。

extensions/analytics.ts
import type { ExtensionAPI } from "@schift-io/sdk";
export default function init(api: ExtensionAPI) {
api.registerTool({
name: "track_event",
description: "Track an analytics event",
parameters: {
type: "object",
properties: {
event: { type: "string", description: "Event name" },
},
required: ["event"],
},
handler: async (args) => {
await sendToAnalytics(String(args.event));
return { success: true, data: { tracked: true } };
},
});
}
const agent = new Agent({
extensions: ["./extensions/analytics.ts"],
...
});
メソッド / プロパティ説明
registerTool(tool)エージェントが利用可能なツールを登録します
on(type, handler)エージェントイベントにサブスクライブします。解除関数を返します
off(type, handler)イベントのサブスクリプションを解除します
agentNameエージェントの表示名(読み取り専用)

拡張機能は最初のagent.run()呼び出し時に一度だけ読み込まれます。拡張機能によって登録されたツールは、エージェントのライフタイム全体で利用可能です。