langgraph / / 2024. 12. 3. 07:47

[langgraph] LangSmith에서 그래프 실행 시 실행 ID(runID), 태그(tag)와 메타데이터(metadata)를 전달하는 방법

LangGraph 공식문서를 번역한 내용입니다. 필요한 경우 부연 설명을 추가하였고 이해하기 쉽게 예제를 일부 변경하였습니다. 문제가 되면 삭제하겠습니다.

https://langchain-ai.github.io/langgraph/how-tos/run-id-langsmith/

그래프 실행을 디버깅하는 것은 IDE나 터미널에서 어려울 수 있다. LangSmith를 사용하면 LangGraph로 구축한 LLM 앱의 실행 데이터를 디버깅, 테스트 및 모니터링할 수 있다. 시작하는 방법에 대한 자세한 내용은 LangSmith 문서를 참조하자.

그래프 호출 중 생성된 실행 데이터를 더 쉽게 식별하고 분석할 수 있도록, 실행 시점에 추가 구성 설정을 지정할 수 있다(참조: RunnableConfig).

필드 타입 설명
run_name str 이 호출에 대한 실행 이름이다. 기본값은 클래스의 이름이다.
run_id UUID 이 호출에 대한 실행의 고유 식별자이다. 지정하지 않으면 새로운 UUID가 생성된다.
tags List[str] 이 호출과 모든 하위 호출(예: 체인이 LLM을 호출하는 경우)에 대한 태그이다. 이를 사용해 호출을 필터링할 수 있다.
metadata Dict[str, Any] 이 호출과 모든 하위 호출에 대한 메타데이터이다(예: 체인이 LLM을 호출하는 경우). 키는 문자열이고 값은 JSON 직렬화 가능해야 한다.

LangGraph 그래프는 LangChain의 Runnable 인터페이스를 구현하며, invoke, ainvoke, stream 등의 메서드에서 두 번째 인수로 RunnableConfig를 받는다.

LangSmith 플랫폼을 사용하면 run_name, run_id, tags, metadata를 기준으로 실행 데이터를 검색하고 필터링할 수 있다.

TLDR

import uuid
config = {"run_id": uuid.uuid4()}, "tags": ["my_tag1"], "metadata": {"a": 5}}
graph.stream(inputs, config, stream_mode="values")

이후의 가이드에서는 전체 에이전트를 보여준다.

준비

우선, 필요한 패키지를 설치하자.

pip install langgraph langchain_openai

그래프 정의

여기서는 간단한 ReAct 에이전트를 사용할 것이다.

from langchain_openai import ChatOpenAI
from typing import Literal
from langgraph.prebuilt import create_react_agent
from langchain_core.tools import tool

model = ChatOpenAI(model="gpt-4o", temperature=0)


@tool
def get_weather(city: Literal["nyc", "sf"]):
    """Use this to get weather information."""
    if city == "nyc":
        return "It might be cloudy in nyc"
    elif city == "sf":
        return "It's always sunny in sf"
    else:
        raise AssertionError("Unknown city")


tools = [get_weather]


# Define the graph
graph = create_react_agent(model, tools=tools)

그래프 실행

이제 그래프를 정의했으니, 한 번 실행하고 LangSmith에서 트레이스를 확인해 보겠다. 트레이스를 LangSmith에서 쉽게 확인할 수 있도록 설정에서 사용자 지정 run_id를 전달하겠다.

이 과정은 LANGSMITH_API_KEY 환경 변수가 설정되어 있다고 가정한다.

참고로, 기본적으로 실행 결과는 기본 프로젝트에 기록되지만, LANGCHAIN_PROJECT 환경 변수를 설정하여 기록할 프로젝트를 지정할 수도 있다.

import uuid


def print_stream(stream):
    for s in stream:
        message = s["messages"][-1]
        if isinstance(message, tuple):
            print(message)
        else:
            message.pretty_print()


inputs = {"messages": [("user", "what is the weather in sf")]}

config = {"run_name": "agent_007", "tags": ["cats are awesome"]}

print_stream(graph.stream(inputs, config, stream_mode="values"))
================================[1m Human Message [0m=================================

what is the weather in sf
==================================[1m Ai Message [0m==================================
Tool Calls:
  get_weather (call_9ZudXyMAdlUjptq9oMGtQo8o)
 Call ID: call_9ZudXyMAdlUjptq9oMGtQo8o
  Args:
    city: sf
=================================[1m Tool Message [0m=================================
Name: get_weather

It's always sunny in sf
==================================[1m Ai Message [0m==================================

The weather in San Francisco is currently sunny.

LangSmith에서 그래프 보기

그래프를 실행했으니 이제 LangSmith로 이동해 트레이스를 확인해 보겠다. 먼저 기록한 프로젝트(이 경우 기본 프로젝트)를 클릭한다. 그러면 사용자 지정 실행 이름인 "agent_007"로 된 실행 기록을 확인할 수 있을 것이다.

또한 제공된 태그나 메타데이터를 사용하여 나중에 트레이스를 필터링할 수도 있다. 예를 들어:

LangGraph 참고 자료

반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유