Skip to content

タスクループ

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

Contributors

Changelog