에이전트 이벤트

·4분 읽기

원문: Koog Documentation — agent-events 이 글은 Koog 공식 문서의 agent-events 페이지를 한국어로 옮긴 번역본입니다. 문서 구조와 링크 의미를 유지하되, MkDocs 전용 UI 문법은 블로그에서 읽기 좋도록 정리했습니다.

에이전트 이벤트

에이전트 이벤트는 에이전트 워크플로의 일부로 발생하는 작업 또는 상호 작용입니다. 여기에는 다음이 포함됩니다.

  • 에이전트 수명주기 이벤트
  • 전략 이벤트
  • 노드 실행 이벤트
  • LLM 통화 이벤트
  • LLM 스트리밍 이벤트
  • 도구 실행 이벤트

참고: 기능 이벤트는 Agent-Core 모듈에 정의되어 있으며 ai.koog.agents.core.feature.model.events 패키지 아래에 있습니다. agents-features-traceagents-features-event-handler와 같은 기능은 이러한 이벤트를 사용하여 에이전트 실행 중에 생성된 메시지를 처리하고 전달합니다.

사전 정의된 이벤트 유형

Koog는 사용자 정의 메시지 프로세서에서 사용할 수 있는 사전 정의된 이벤트 유형을 제공합니다. 미리 정의된 이벤트는 다음과 같습니다. 관련된 개체에 따라 여러 범주로 분류됩니다.

에이전트 이벤트

AgentStartingEvent

에이전트 실행의 시작을 나타냅니다. 다음 필드가 포함됩니다.

이름 데이터 유형 필수의 기본 설명
eventId 이벤트 또는 이벤트 그룹의 고유 식별자입니다.
executionInfo 에이전트실행정보 이 이벤트와 관련된 실행에 대한 상황별 정보를 제공합니다.
agentId AI 에이전트의 고유 식별자입니다.
runId AI 에이전트 실행의 고유 식별자입니다.

AgentCompleted이벤트

에이전트 실행의 종료를 나타냅니다. 다음 필드가 포함됩니다.

이름 데이터 유형 필수의 기본 설명
eventId 이벤트 또는 이벤트 그룹의 고유 식별자입니다.
executionInfo 에이전트실행정보 이 이벤트와 관련된 실행에 대한 상황별 정보를 제공합니다.
agentId AI 에이전트의 고유 식별자입니다.
runId AI 에이전트 실행의 고유 식별자입니다.
result 에이전트 실행 결과입니다. 결과가 없으면 null일 수 있습니다.

AgentExecutionFailed이벤트

에이전트 실행 중 오류 발생을 나타냅니다. 다음 필드가 포함됩니다.

이름 데이터 유형 필수의 기본 설명
eventId 이벤트 또는 이벤트 그룹의 고유 식별자입니다.
executionInfo 에이전트실행정보 이 이벤트와 관련된 실행에 대한 상황별 정보를 제공합니다.
agentId AI 에이전트의 고유 식별자입니다.
runId AI 에이전트 실행의 고유 식별자입니다.
error AIAgentError 에이전트 실행 중에 발생한 특정 오류입니다. 자세한 내용은 AIAgentError을 참조하세요.

AgentClosingEvent

에이전트의 종료 또는 종료를 나타냅니다. 다음 필드가 포함됩니다.

이름 데이터 유형 필수의 기본 설명
eventId 이벤트 또는 이벤트 그룹의 고유 식별자입니다.
executionInfo 에이전트실행정보 이 이벤트와 관련된 실행에 대한 상황별 정보를 제공합니다.
agentId AI 에이전트의 고유 식별자입니다.

AIAgentError 클래스는 에이전트 실행 중에 발생한 오류에 대한 자세한 내용을 제공합니다. 다음 필드가 포함됩니다.

이름 데이터 유형 필수의 기본 설명
message 특정 오류에 대한 자세한 내용을 제공하는 메시지입니다.
stackTrace 마지막으로 실행된 코드까지의 스택 레코드 모음입니다.
cause 아니요 null 가능한 경우 오류의 원인입니다.

AgentExecutionInfo 클래스는 실행 경로에 대한 컨텍스트 정보를 제공하여 에이전트 실행 내에서 중첩된 실행 컨텍스트를 추적할 수 있습니다. 다음 필드가 포함됩니다.

이름 데이터 유형 필수의 기본 설명
parent 에이전트실행정보 아니요 null 상위 실행 컨텍스트에 대한 참조입니다. null인 경우 루트 실행 수준을 나타냅니다.
partName 실행의 현재 부분 또는 세그먼트의 이름을 나타내는 문자열입니다.

전략 이벤트

그래프전략StartingEvent

그래프 기반 전략 실행의 시작을 나타냅니다. 다음 필드가 포함됩니다.

이름 데이터 유형 필수의 기본 설명
eventId 이벤트 또는 이벤트 그룹의 고유 식별자입니다.
executionInfo 에이전트실행정보 이 이벤트와 관련된 실행에 대한 상황별 정보를 제공합니다.
runId 전략 실행의 고유 식별자입니다.
strategyName 전략의 이름입니다.
graph 전략이벤트 그래프 전략 워크플로를 나타내는 그래프 구조입니다.

FunctionalStrategyStartingEvent

기능적 전략 실행의 시작을 나타냅니다. 다음 필드가 포함됩니다.

이름 데이터 유형 필수의 기본 설명
eventId 이벤트 또는 이벤트 그룹의 고유 식별자입니다.
executionInfo 에이전트실행정보 이 이벤트와 관련된 실행에 대한 상황별 정보를 제공합니다.
runId 전략 실행의 고유 식별자입니다.
strategyName 전략의 이름입니다.

전략완료이벤트

전략 실행의 끝을 나타냅니다. 다음 필드가 포함됩니다.

이름 데이터 유형 필수의 기본 설명
eventId 이벤트 또는 이벤트 그룹의 고유 식별자입니다.
executionInfo 에이전트실행정보 이 이벤트와 관련된 실행에 대한 상황별 정보를 제공합니다.
runId 전략 실행의 고유 식별자입니다.
strategyName 전략의 이름입니다.
result 실행 결과입니다. 결과가 없으면 null일 수 있습니다.

노드 이벤트

NodeExecutionStartingEvent

노드 실행의 시작을 나타냅니다. 다음 필드가 포함됩니다.

이름 데이터 유형 필수의 기본 설명
eventId 이벤트 또는 이벤트 그룹의 고유 식별자입니다.
executionInfo 에이전트실행정보 이 이벤트와 관련된 실행에 대한 상황별 정보를 제공합니다.
runId 전략 실행의 고유 식별자입니다.
nodeName 실행이 시작된 노드의 이름입니다.
input Json요소 아니요 null 노드의 입력 값입니다.

NodeExecutionCompleted이벤트

노드 실행의 끝을 나타냅니다. 다음 필드가 포함됩니다.

이름 데이터 유형 필수의 기본 설명
eventId 이벤트 또는 이벤트 그룹의 고유 식별자입니다.
executionInfo 에이전트실행정보 이 이벤트와 관련된 실행에 대한 상황별 정보를 제공합니다.
runId 전략 실행의 고유 식별자입니다.
nodeName 실행이 종료된 노드의 이름입니다.
input Json요소 아니요 null 노드의 입력 값입니다.
output Json요소 아니요 null 노드에서 생성된 출력 값입니다.

NodeExecutionFailed이벤트

노드 실행 중에 발생한 오류를 나타냅니다. 다음 필드가 포함됩니다.

이름 데이터 유형 필수의 기본 설명
eventId 이벤트 또는 이벤트 그룹의 고유 식별자입니다.
executionInfo 에이전트실행정보 이 이벤트와 관련된 실행에 대한 상황별 정보를 제공합니다.
runId 전략 실행의 고유 식별자입니다.
nodeName 오류가 발생한 노드의 이름입니다.
input Json요소 아니요 null 노드에 제공되는 입력 데이터입니다.
error AIAgentError 노드 실행 중에 발생한 특정 오류입니다. 자세한 내용은 AIAgentError을 참조하세요.

하위 그래프 이벤트

SubgraphExecutionStartingEvent

하위 그래프 실행의 시작을 나타냅니다. 다음 필드가 포함됩니다.

이름 데이터 유형 필수의 기본 설명
eventId 이벤트 또는 이벤트 그룹의 고유 식별자입니다.
executionInfo 에이전트실행정보 이 이벤트와 관련된 실행에 대한 상황별 정보를 제공합니다.
runId 전략 실행의 고유 식별자입니다.
subgraphName 실행이 시작된 하위 그래프의 이름입니다.
input Json요소 아니요 null 하위 그래프의 입력 값입니다.

SubgraphExecutionCompletedEvent

하위 그래프 실행의 끝을 나타냅니다. 다음 필드가 포함됩니다.

이름 데이터 유형 필수의 기본 설명
eventId 이벤트 또는 이벤트 그룹의 고유 식별자입니다.
executionInfo 에이전트실행정보 이 이벤트와 관련된 실행에 대한 상황별 정보를 제공합니다.
runId 전략 실행의 고유 식별자입니다.
subgraphName 실행이 종료된 하위 그래프의 이름입니다.
input Json요소 아니요 null 하위 그래프의 입력 값입니다.
output Json요소 아니요 null 하위 그래프에 의해 생성된 출력 값입니다.

SubgraphExecutionFailedEvent

하위 그래프 실행 중에 발생한 오류를 나타냅니다. 다음 필드가 포함됩니다.

이름 데이터 유형 필수의 기본 설명
eventId 이벤트 또는 이벤트 그룹의 고유 식별자입니다.
executionInfo 에이전트실행정보 이 이벤트와 관련된 실행에 대한 상황별 정보를 제공합니다.
runId 전략 실행의 고유 식별자입니다.
subgraphName 오류가 발생한 하위 그래프의 이름입니다.
input Json요소 아니요 null 하위 그래프에 제공되는 입력 데이터입니다.
error AIAgentError 하위 그래프 실행 중에 발생한 특정 오류입니다. 자세한 내용은 AIAgentError을 참조하세요.

LLM 통화 이벤트

LLMCallStartingEvent

LLM 호출의 시작을 나타냅니다. 다음 필드가 포함됩니다.

이름 데이터 유형 필수의 기본 설명
eventId 이벤트 또는 이벤트 그룹의 고유 식별자입니다.
executionInfo 에이전트실행정보 이 이벤트와 관련된 실행에 대한 상황별 정보를 제공합니다.
runId LLM 실행의 고유 식별자입니다.
prompt 즉각적인 모델에 전송되는 프롬프트입니다. 자세한 내용은 Prompt을 참조하세요.
model 모델정보 모델 정보입니다. ModelInfo을 참조하세요.
tools 목록 모델이 호출할 수 있는 도구 목록입니다.

Prompt 클래스는 메시지 목록, 고유 식별자 및 언어 모델 설정을 위한 선택적 매개변수입니다. 다음 필드가 포함됩니다.

이름 데이터 유형 필수의 기본 설명
messages 목록 프롬프트가 구성되는 메시지 목록입니다.
id 프롬프트의 고유 식별자입니다.
params LLMParams 아니요 LLMParams() LLM이 콘텐츠를 생성하는 방식을 제어하는 ​​설정입니다.

ModelInfo 클래스는 공급자, 모델 식별자 및 특성을 포함하여 언어 모델에 대한 정보를 나타냅니다. 다음 필드가 포함됩니다.

이름 데이터 유형 필수의 기본 설명
provider 공급자 식별자(예: "openai", "google", "anthropic")입니다.
model 모델 식별자(예: "gpt-4", "claude-3")입니다.
displayName 아니요 null 선택적으로 사람이 읽을 수 있는 모델 표시 이름입니다.
contextLength 아니요 null 모델이 처리할 수 있는 최대 토큰 수입니다.
maxOutputTokens 아니요 null 모델이 생성할 수 있는 최대 토큰 수입니다.

LLMCallCompleted이벤트

LLM 통화의 종료를 나타냅니다. 다음 필드가 포함됩니다.

이름 데이터 유형 필수의 기본 설명
eventId 이벤트 또는 이벤트 그룹의 고유 식별자입니다.
executionInfo 에이전트실행정보 이 이벤트와 관련된 실행에 대한 상황별 정보를 제공합니다.
runId LLM 실행의 고유 식별자입니다.
prompt 즉각적인 통화에 사용되는 프롬프트입니다.
model 모델정보 모델 정보입니다. ModelInfo을 참조하세요.
responses 목록<Message.Response> 모델이 반환한 하나 이상의 응답입니다.
moderationResponse 조정결과 아니요 null 중재 응답(있는 경우)입니다.

LLM 스트리밍 이벤트

LLM스트리밍시작이벤트

LLM 스트리밍 호출의 시작을 나타냅니다. 다음 필드가 포함됩니다.

이름 데이터 유형 필수의 기본 설명
eventId 이벤트 또는 이벤트 그룹의 고유 식별자입니다.
executionInfo 에이전트실행정보 이 이벤트와 관련된 실행에 대한 상황별 정보를 제공합니다.
runId LLM 실행의 고유 식별자입니다.
prompt 즉각적인 모델에 전송되는 프롬프트입니다.
model 모델정보 모델 정보입니다. ModelInfo을 참조하세요.
tools 목록 모델이 호출할 수 있는 도구 목록입니다.

LLMStreamingFrameReceivedEvent

LLM에서 수신된 스트리밍 프레임을 나타냅니다. 다음 필드가 포함됩니다.

이름 데이터 유형 필수의 기본 설명
eventId 이벤트 또는 이벤트 그룹의 고유 식별자입니다.
executionInfo 에이전트실행정보 이 이벤트와 관련된 실행에 대한 상황별 정보를 제공합니다.
runId LLM 실행의 고유 식별자입니다.
prompt 즉각적인 모델에 전송되는 프롬프트입니다.
model 모델정보 모델 정보입니다. ModelInfo을 참조하세요.
frame 스트림프레임 스트림에서 수신된 프레임입니다.

LLM스트리밍실패이벤트

LLM 스트리밍 호출 중 오류 발생을 나타냅니다. 다음 필드가 포함됩니다.

이름 데이터 유형 필수의 기본 설명
eventId 이벤트 또는 이벤트 그룹의 고유 식별자입니다.
executionInfo 에이전트실행정보 이 이벤트와 관련된 실행에 대한 상황별 정보를 제공합니다.
runId LLM 실행의 고유 식별자입니다.
prompt 즉각적인 모델에 전송되는 프롬프트입니다.
model 모델정보 모델 정보입니다. ModelInfo을 참조하세요.
error AIAgentError 스트리밍 중에 발생한 특정 오류입니다. 자세한 내용은 AIAgentError을 참조하세요.

LLM스트리밍완료이벤트

LLM 스트리밍 호출의 끝을 나타냅니다. 다음 필드가 포함됩니다.

이름 데이터 유형 필수의 기본 설명
eventId 이벤트 또는 이벤트 그룹의 고유 식별자입니다.
executionInfo 에이전트실행정보 이 이벤트와 관련된 실행에 대한 상황별 정보를 제공합니다.
runId LLM 실행의 고유 식별자입니다.
prompt 즉각적인 모델에 전송되는 프롬프트입니다.
model 모델정보 모델 정보입니다. ModelInfo을 참조하세요.
tools 목록 모델이 호출할 수 있는 도구 목록입니다.

도구 실행 이벤트

ToolCallStartingEvent

도구를 호출하는 모델의 이벤트를 나타냅니다. 다음 필드가 포함됩니다.

이름 데이터 유형 필수의 기본 설명
eventId 이벤트 또는 이벤트 그룹의 고유 식별자입니다.
executionInfo 에이전트실행정보 이 이벤트와 관련된 실행에 대한 상황별 정보를 제공합니다.
runId 전략/에이전트 실행의 고유 식별자입니다.
toolCallId 아니요 null 사용 가능한 경우 도구 호출의 식별자입니다.
toolName 도구의 이름입니다.
toolArgs JsonObject 도구에 제공되는 인수입니다.

도구 유효성 검사실패이벤트

도구 호출 중 유효성 검사 오류가 발생했음을 나타냅니다. 다음 필드가 포함됩니다.

이름 데이터 유형 필수의 기본 설명
eventId 이벤트 또는 이벤트 그룹의 고유 식별자입니다.
executionInfo 에이전트실행정보 이 이벤트와 관련된 실행에 대한 상황별 정보를 제공합니다.
runId 전략/에이전트 실행의 고유 식별자입니다.
toolCallId 아니요 null 사용 가능한 경우 도구 호출의 식별자입니다.
toolName 유효성 검사에 실패한 도구의 이름입니다.
toolArgs JsonObject 도구에 제공되는 인수입니다.
toolDescription 아니요 null 유효성 검사 오류가 발생한 도구에 대한 설명입니다.
message 아니요 null 유효성 검사 오류를 설명하는 메시지입니다.
error AIAgentError 발생한 특정 오류입니다. 자세한 내용은 AIAgentError을 참조하세요.

ToolCallFailed이벤트

도구 실행 실패를 나타냅니다. 다음 필드가 포함됩니다.

이름 데이터 유형 필수의 기본 설명
eventId 이벤트 또는 이벤트 그룹의 고유 식별자입니다.
executionInfo 에이전트실행정보 이 이벤트와 관련된 실행에 대한 상황별 정보를 제공합니다.
runId 전략/에이전트 실행의 고유 식별자입니다.
toolCallId 아니요 null 사용 가능한 경우 도구 호출의 식별자입니다.
toolName 도구의 이름입니다.
toolArgs JsonObject 도구에 제공되는 인수입니다.
toolDescription 아니요 null 실패한 도구에 대한 설명입니다.
error AIAgentError 도구를 호출하려고 할 때 발생한 특정 오류입니다. 자세한 내용은 AIAgentError을 참조하세요.

ToolCallCompleted이벤트

결과 반환과 함께 성공적인 도구 호출을 나타냅니다. 다음 필드가 포함됩니다.

이름 데이터 유형 필수의 기본 설명
eventId 이벤트 또는 이벤트 그룹의 고유 식별자입니다.
executionInfo 에이전트실행정보 이 이벤트와 관련된 실행에 대한 상황별 정보를 제공합니다.
runId 실행의 고유 식별자입니다.
toolCallId 아니요 null 도구 호출의 식별자입니다.
toolName 도구의 이름입니다.
toolArgs JsonObject 도구에 제공되는 인수입니다.
toolDescription 아니요 null 실행된 도구에 대한 설명입니다.
result Json요소 아니요 null 도구 호출의 결과입니다.

FAQ 및 문제 해결

다음 섹션에는 추적 기능과 관련하여 자주 묻는 질문과 답변이 포함되어 있습니다.

에이전트 실행의 특정 부분만 추적하려면 어떻게 해야 합니까?

이벤트를 필터링하려면 messageFilter 속성을 사용하십시오. 예를 들어 노드 실행만 추적하려면 다음을 수행하세요.

코틀린

1install(Tracing) {2    val fileWriter = TraceFeatureMessageFileWriter.create(outputPath)3    addMessageProcessor(fileWriter)4    5    // Only trace LLM calls6    fileWriter.setMessageFilter { message ->7        message is LLMCallStartingEvent || message is LLMCallCompletedEvent8    }9}

자바

1.install(Tracing.Feature, config -> {2    var fileWriter = TraceFeatureMessageFileWriter.create(outputPath);3    config.addMessageProcessor(fileWriter);45    // Only trace LLM calls6    fileWriter.setMessageFilter(message ->7        message instanceof LLMCallStartingEvent || message instanceof LLMCallCompletedEvent8    );9})

여러 메시지 프로세서를 사용할 수 있나요?

예, 여러 메시지 프로세서를 추가하여 동시에 여러 대상을 추적할 수 있습니다.

코틀린

1install(Tracing) {2    addMessageProcessor(TraceFeatureMessageLogWriter(logger))3    addMessageProcessor(TraceFeatureMessageFileWriter.create(outputPath))4    addMessageProcessor(TraceFeatureMessageRemoteWriter(connectionConfig))5}

자바

1.install(Tracing.Feature, config -> {2    config.addMessageProcessor(TraceFeatureMessageLogWriter.create(logger));3    config.addMessageProcessor(TraceFeatureMessageFileWriter.create(outputPath));4    config.addMessageProcessor(new TraceFeatureMessageRemoteWriter());5})

사용자 정의 메시지 프로세서를 어떻게 만들 수 있나요?

FeatureMessageProcessor 인터페이스를 구현합니다.

코틀린

1class CustomTraceProcessor : FeatureMessageProcessor() {23    override suspend fun processMessage(message: FeatureMessage) {4        // Custom processing logic5        if (message is NodeExecutionStartingEvent) {6            // Process node start event7        } else if (message is LLMCallCompletedEvent) {8            // Process LLM call end event9        } else {10            // Handle other event types11        }12    }1314    override suspend fun close() {15        // Close connections if established16    }17}1819val agent = AIAgent(20    promptExecutor = simpleOllamaAIExecutor(),21    llmModel = OllamaModels.Meta.LLAMA_3_2,22) {23    install(Tracing) {24        // Use your custom processor25        addMessageProcessor(CustomTraceProcessor())26    }27}

자바

1class CustomTraceProcessor extends FeatureMessageProcessor {23    @Override4    protected void handleMessage(FeatureMessage message) {5        // Custom processing logic6        if (message instanceof NodeExecutionStartingEvent) {7            // Process node start event8        } else if (message instanceof LLMCallCompletedEvent) {9            // Process LLM call end event10        } else {11            // Handle other event types12        }13    }1415    @Override16    public void handleClose() {17        // Close connections if established18    }19}2021var agent = AIAgent.builder()22    .promptExecutor(PromptExecutor.builder().ollama().build())23    .llmModel(OllamaModels.Meta.LLAMA_3_2)2425    .install(Tracing.Feature, config -> {26        // Use your custom processor27        config.addMessageProcessor(new CustomTraceProcessor());28    })29    .build();

메시지 프로세서에서 처리할 수 있는 기존 이벤트 유형에 대한 자세한 내용은 Predefined event types을 참조하세요.