Spans

Spans

AgentOps는 span을 사용해서 에이전트 워크플로우에서 서로 다른 유형의 작업을 추적해요. 이제 span이 무엇인지, 어떤 종류가 있는지 함께 알아볼게요.

출처: 문서

본문

Spans 개요 (Spans Overview)

AgentOps v0.4에서는 모든 작업 추적에 "Events"라는 개념 대신 "Spans"라는 개념을 사용해요. Spans는 서로 다른 유형의 작업을 나타내며 계층적으로 조직됩니다.

span은 에이전트 워크플로우에서 하나의 작업 단위 또는 작업(operation)이에요. span은 데코레이터를 사용해 만들어지고, 에이전트 실행의 계층적 추적(trace)을 만들기 위해 자동으로 중첩됩니다.

Span 유형 (Span Types)

AgentOps는 여러 유형의 span을 지원하며, 각각 서로 다른 종류의 작업을 나타내요:

Session Spans

Session span은 다른 모든 span의 루트(root) 역할을 해요. 에이전트 워크플로우의 완전한 실행을 나타냅니다.

from agentops.sdk.decorators import session

@session
def my_workflow():
    # Your session code here
    return result

Agent Spans

Agent span은 특정 에이전트가 수행한 작업을 나타내요. 보통 session span의 자식입니다.

from agentops.sdk.decorators import agent

@agent
class MyAgent:
    def __init__(self, name):
        self.name = name

Operation/Task Spans

Operation span은 에이전트가 수행한 특정 작업(task) 또는 작업(operation)을 나타내요. 보통 agent span의 자식입니다.

from agentops.sdk.decorators import operation

@operation
def process_data(data):
    # Process the data
    return result

Workflow Spans

Workflow span은 워크플로우를 구성하는 일련의 작업들을 나타내요. 여러 개의 operation을 포함할 수 있습니다.

from agentops.sdk.decorators import workflow

@workflow
def my_workflow(data):
    # Workflow implementation
    return result

LLM Spans

LLM span은 지원되는 LLM provider에 호출을 할 때 자동으로 만들어져요. 언어 모델과의 상호작용을 나타냅니다.

Span 속성 (Span Attributes)

모든 span은 공통 속성 세트를 공유해요:

Attribute Description
span_id span을 위한 고유 식별자
trace_id 이 span이 속한 trace의 ID
parent_id 부모 span의 ID
name span의 이름
kind span의 종류 (session, agent, operation 등)
start_time span이 시작된 시점
end_time span이 끝난 시점
attributes span을 위한 사용자 지정 속성

추가로, span은 자동으로 다음을 캡처해요:

  • 데코레이트된 함수의 입력 파라미터
  • 데코레이트된 함수의 반환 값
  • 실행 중 발생하는 예외(exception)

Span 계층 구조 (Span Hierarchy)

Span은 에이전트 실행의 trace를 만들기 위해 계층적으로 조직돼요. 전형적인 계층 구조는 다음과 같아요:

  1. Session (root)
  2. Agent
  3. Operation/Task
  4. Nested Operations

이 계층 구조 덕분에 에이전트 실행의 흐름을 시각화하고 서로 다른 operation들이 어떻게 서로 연관되는지 이해할 수 있어요.

에러 처리 (Error Handling)

데코레이트된 함수 안에서 예외가 발생하면 자동으로 span에 기록돼요. 이렇게 하면 에이전트 워크플로우에서 에러를 쉽게 식별하고 디버깅할 수 있어요.

from agentops.sdk.decorators import operation

@operation
def risky_operation():
    # This exception will be recorded in the span
    raise ValueError("Something went wrong")

더 알아보기 (Learn more)