Skip to content

イベントハンドラー

エージェントのワークフローにおける特定のイベントを監視し、それらに応答するためにイベントハンドラーを使用できます。これは、ロギング、テスト、デバッグ、およびエージェントの動作の拡張に役立ちます。

機能の概要

EventHandler機能を使用すると、エージェントのさまざまなイベントをフックできます。これは、以下のようなイベント委譲メカニズムとして機能します。

  • AIエージェント操作のライフサイクルを管理する。
  • ワークフローのさまざまな段階を監視し、応答するためのフックを提供する。
  • エラー処理とリカバリを可能にする。
  • ツールの呼び出しの追跡と結果の処理を容易にする。

インストールと設定

EventHandler機能は、EventHandlerクラスを通じてエージェントのワークフローに統合されます。このクラスはエージェントのさまざまなイベントに対してコールバックを登録する方法を提供し、エージェント設定に機能としてインストールできます。詳細は、APIリファレンスを参照してください。

機能をインストールし、エージェントのイベントハンドラーを設定するには、次のようにします。

=== "Kotlin"

<!--- INCLUDE
import ai.koog.agents.core.agent.AIAgent
import ai.koog.agents.features.eventHandler.feature.handleEvents
import ai.koog.prompt.executor.llms.all.simpleOllamaAIExecutor
import ai.koog.prompt.executor.ollama.client.OllamaModels
val agent = AIAgent(
    promptExecutor = simpleOllamaAIExecutor(),
    llmModel = OllamaModels.Meta.LLAMA_3_2,
) {
-->
<!--- SUFFIX 
} 
-->
```kotlin
handleEvents {
    // ツール呼び出しを処理する
    onToolCallStarting { eventContext ->
        println("Tool called: ${eventContext.toolName} with args ${eventContext.toolArgs}")
    }
    // エージェントの実行が完了したときにトリガーされるイベントを処理する
    onAgentCompleted { eventContext ->
        println("Agent finished with result: ${eventContext.result}")
    }

    // その他のイベントハンドラー
}
```
<!--- KNIT example-event-handlers-01.kt -->

=== "Java"

<!--- INCLUDE
/**
-->
<!--- SUFFIX
**/
-->
```java
AIAgent<String, String> agent = AIAgent.builder()
    .promptExecutor(simpleOllamaAIExecutor("http://localhost:11434"))
    .llmModel(OllamaModels.Meta.LLAMA_3_2)
    .install(EventHandler.Feature, cfg -> {
        // ツール呼び出しを処理する
        cfg.onToolCallStarting(ctx -> {
            System.out.println("Tool called: " + ctx.getToolName() + " with args " + ctx.getToolArgs());
        });
        // エージェントの実行が完了したときにトリガーされるイベントを処理する
        cfg.onAgentCompleted(ctx -> {
            System.out.println("Agent finished with result: " + ctx.getResult());
        });
    })
    .build();
```
<!--- KNIT example-event-handlers-java-01.java -->

イベントハンドラー設定の詳細については、APIリファレンスを参照してください。

また、エージェントの作成時にhandleEvents拡張関数を使用してイベントハンドラーを設定することもできます。この関数は、イベントハンドラー機能をインストールし、エージェントのイベントハンドラーを構成します。以下に例を示します。

=== "Kotlin"

<!--- INCLUDE
import ai.koog.agents.core.agent.AIAgent
import ai.koog.agents.features.eventHandler.feature.handleEvents
import ai.koog.prompt.executor.llms.all.simpleOllamaAIExecutor
import ai.koog.prompt.executor.ollama.client.OllamaModels
-->
```kotlin
val agent = AIAgent(
    promptExecutor = simpleOllamaAIExecutor(),
    llmModel = OllamaModels.Meta.LLAMA_3_2,
){
    handleEvents {
        // ツール呼び出しを処理する
        onToolCallStarting { eventContext ->
            println("Tool called: ${eventContext.toolName} with args ${eventContext.toolArgs}")
        }
        // エージェントの実行が完了したときにトリガーされるイベントを処理する
        onAgentCompleted { eventContext ->
            println("Agent finished with result: ${eventContext.result}")
        }

        // その他のイベントハンドラー
    }
}
```
<!--- KNIT example-event-handlers-02.kt -->

=== "Java"

<!--- INCLUDE
/**
-->
<!--- SUFFIX
**/
-->
```java
AIAgent<String, String> agent = AIAgent.builder()
    .promptExecutor(simpleOllamaAIExecutor("http://localhost:11434"))
    .llmModel(OllamaModels.Meta.LLAMA_3_2)
    .install(EventHandler.Feature, cfg -> {
        // ツール呼び出しを処理する
        cfg.onToolCallStarting(ctx -> {
            System.out.println("Tool called: " + ctx.getToolName() + " with args " + ctx.getToolArgs());
        });
        // エージェントの実行が完了したときにトリガーされるイベントを処理する
        cfg.onAgentCompleted(ctx -> {
            System.out.println("Agent finished with result: " + ctx.getResult());
        });
    })
    .build();
```
<!--- KNIT example-event-handlers-java-02.java -->