タスクループ
openmcp-sdkはタスクループのメカニズムでエージェントを構築し、ユーザーがそれと対話できるようにしています。ユーザーがこのタスクループをリアルタイムで制御する必要がある場合、openmcp-sdkが提供するイベントを通じて対応するフック関数を登録することで実現できます。
高速デプロイの例を参考に、以下のコードでタスクループを制御するオブジェクトを取得できます:
typescript
import { OmAgent } from '../openmcp-sdk/service/sdk';
const agent = new OmAgent();
agent.loadMcpConfig('./mcpconfig.json');
const loop = await agent.getLoop();WARNING
フックの登録とloopの取得は agent.ainvoke の前に完了する必要があります!
この loop オブジェクトを通じて、以下のフックを登録できます:
registerOnChunk:モデルがchunkを返すときにトリガーregisterOnDone:タスク完了時にトリガーregisterOnError:タスクエラー時にトリガーregisterOnEpoch:各タスクエポック開始時にトリガーregisterOnToolCall:ツール関数呼び出し前にトリガーregisterOnToolCalled:ツール関数呼び出し後にトリガーregisterOnTokenConsumption:openmcpがトークン消費量と価格などの計算を完了した後にトリガー。現在のagent loopの呼び出しコストを取得するために使用できます。
これらのフック関数はコールバック関数を受け取り、対応するイベントがトリガーされたときにコールバック関数が呼び出されます。
typescript
loop.registerOnChunk((chunk) => {
console.log('⚙️ Agent Chunk', chunk);
});
loop.registerOnDone(() => {
console.log('⚙️ Agent Done');
});
loop.registerOnError((err) => {
console.log('⚙️ Agent Error', err);
});
loop.registerOnEpoch(() => {
console.log('⚙️ Agent Epoch');
});
loop.registerOnToolCall((toolCall) => {
console.log('⚙️ Agent Tool Call', toolCall);
return toolCall;
});
loop.registerOnToolCalled((toolCalled) => {
console.log('⚙️ Agent Tool Called', toolCalled);
return toolCalled;
});
loop.registerOnTokenConsumption((result) => {
console.log('⚙️ Agent Token Consumption', result);
});