> ## Documentation Index
> Fetch the complete documentation index at: https://docs.coreweave.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 에이전트 일괄 로깅

> LLM Call이 이미 완료되어 기록만 하면 되는 프레임워크에서 에이전트 트레이스를 수동으로 로깅합니다.

LLM Call이 이미 완료되어 기록만 하면 되는 프레임워크에서는 CoreWeave Forge SDK의 `tracing.log_turn`과 `tracing.log_conversation`을 사용하세요. 모든 span은 컨텍스트 관리자를 열어 두지 않고 즉시 생성되고 종료됩니다.

이 방식으로 로깅하는 데이터는 과거 데이터여도 되며, 실시간 대화가 없어도 됩니다. `conversation_id`에는 대화를 고유하게 식별하는 고정된 문자열을 지정하세요. `conversation_id`가 같은 턴은 **Conversations** 탭에서 하나의 대화로 그룹화됩니다.

에이전트 루프를 직접 구축하는 경우에는 [에이전트 트레이스하기](/ko/products/agent-lens/tracing/instrument)에 설명된 실시간 계측 API를 사용하세요.

<h2 id="log-a-turn">
  턴 로깅하기
</h2>

이미 완료된 단일 턴을 기록하려면 `tracing.log_turn`을 사용하세요. 이 함수는 모든 LLM span과 도구 span을 포함해 완전히 구성된 턴을 받습니다. `LLM` 및 `Tool` 객체는 `start_*` 팩토리를 거치지 말고 직접 생성하세요. 직접 생성한 span은 `log_turn`에 전달하기 전까지 아무것도 내보내지 않으므로, 이러한 객체는 일반 데이터처럼 다룰 수 있습니다.

<Tabs>
  <Tab title="Python">
    ```python lines highlight="1,2,4,29" theme={"system"}
    from coreweave.forge.agentlens import tracing
    from coreweave.forge.agentlens.tracing import LLM, Message, Tool, Usage

    tracing.init("[YOUR-TEAM]/[YOUR-PROJECT]")

    llm_span = LLM(
        model="gpt-4o",
        provider_name="openai",
        input_messages=[Message(role="user", content="What is the weather?")],
        output_messages=[Message(role="assistant", content="Let me check.")],
        usage=Usage(input_tokens=100, output_tokens=20),
    )

    tool_span = Tool(
        name="get_weather",
        arguments='{"city": "Tokyo"}',
        result='"24°C, sunny"',
    )

    llm_span2 = LLM(
        model="gpt-4o",
        provider_name="openai",
        input_messages=[Message(role="user", content="What is the weather?")],
        output_messages=[Message(role="assistant", content="It is 24°C and sunny.")],
        usage=Usage(input_tokens=150, output_tokens=30),
    )

    # 턴을 모든 span과 함께 로깅합니다.
    tracing.log_turn(
        conversation_id="my-conversation-abc",
        agent_name="weather-bot",
        messages=[
            Message(role="user", content="What is the weather in Tokyo?"),
            Message(role="assistant", content="It is 24°C and sunny in Tokyo."),
        ],
        spans=[llm_span, tool_span, llm_span2],
    )
    ```
  </Tab>

  <Tab title="TypeScript">
    ```plaintext theme={"system"}
    이 기능은 아직 TypeScript SDK에서 사용할 수 없습니다.
    ```
  </Tab>
</Tabs>

`log_turn`은 내보낸 span의 트레이스 ID가 담긴 `LogResult`를 반환합니다.

`log_turn`의 선택적 `model` 매개변수는 하위 LLM span이 아니라 턴 자체의 span에 모델을 설정합니다. 각 `LLM` span은 저마다 독립적인 `model` 값을 가집니다. 한 턴에서 여러 모델을 사용한다면, 해당 턴의 주 모델로 여기는 모델을 `log_turn`의 `model`에 지정하세요.

로깅한 시점이 아니라 턴이 실제로 발생한 시점을 기록하려면 `started_at`과 `ended_at`을 시간대 정보가 포함된 `datetime` 값으로 전달하세요.

<h2 id="log-a-conversation">
  대화 로깅하기
</h2>

여러 턴으로 이루어진 대화 전체를 한 번에 일괄 임포트하려면 `tracing.log_conversation`을 사용하세요. `turns` 매개변수는 `Turn` 객체 목록을 받으며, 각 객체는 앞의 `log_turn` 예시에서 span을 구성한 것과 같은 방식으로 구성합니다.

<Tabs>
  <Tab title="Python">
    ```python lines theme={"system"}
    tracing.log_conversation(
        conversation_id="my-conversation-abc",
        agent_name="weather-bot",
        turns=[turn_1, turn_2],
    )
    ```
  </Tab>

  <Tab title="TypeScript">
    ```plaintext theme={"system"}
    This feature is not available in the TypeScript SDK yet.
    ```
  </Tab>
</Tabs>
