🤖

본 콘텐츠의 이미지 및 내용은 AI로 생성되었습니다.

⚠️

본 콘텐츠의 이미지 및 내용을 무단으로 복제, 배포, 수정하여 사용할 경우 저작권법에 의해 법적 제재를 받을 수 있습니다.

이미지 로딩 중...

Observability 관찰성 완벽 가이드 - 슬라이드 1/7
A

AI Generated

2025. 12. 1. · 19 Views

Observability 관찰성 완벽 가이드

LangChain 애플리케이션의 동작을 추적하고 분석하는 Observability(관찰성)의 핵심 개념을 다룹니다. LangSmith를 활용한 자동 추적부터 의사결정 프로세스 분석까지, 초급 개발자도 쉽게 따라할 수 있도록 설명합니다.


목차

  1. LANGSMITH_TRACING 환경 변수
  2. 자동 추적 활성화
  3. tags와 metadata 추가
  4. 선택적 추적 컨텍스트
  5. 도구 호출 및 결과 관찰
  6. 의사결정 프로세스 분석

1. LANGSMITH TRACING 환경 변수

김개발 씨는 LangChain으로 첫 번째 챗봇을 만들었습니다. 그런데 이상합니다.

분명히 잘 동작하는 것 같은데, 가끔 이상한 답변이 나옵니다. 도대체 내부에서 무슨 일이 벌어지고 있는 걸까요?

LANGSMITH_TRACING은 LangChain 애플리케이션의 모든 동작을 기록하는 스위치입니다. 마치 비행기의 블랙박스처럼, 여러분의 AI 애플리케이션에서 일어나는 모든 일을 추적합니다.

이 환경 변수 하나만 설정하면, LLM 호출부터 도구 실행까지 모든 과정을 눈으로 확인할 수 있습니다.

다음 코드를 살펴봅시다.

import os

# LangSmith 추적을 활성화합니다
os.environ["LANGSMITH_TRACING"] = "true"

# LangSmith API 키를 설정합니다
os.environ["LANGSMITH_API_KEY"] = "lsv2_pt_xxxxx"

# 프로젝트 이름을 지정합니다 (선택사항)
os.environ["LANGSMITH_PROJECT"] = "my-chatbot-project"

from langchain_openai import ChatOpenAI

# 이제 모든 LLM 호출이 자동으로 추적됩니다
llm = ChatOpenAI(model="gpt-4")
response = llm.invoke("안녕하세요!")

김개발 씨는 입사 2개월 차 주니어 개발자입니다. 최근 회사에서 LangChain을 사용한 고객 상담 챗봇 프로젝트에 투입되었습니다.

열심히 코드를 작성해서 프로토타입을 완성했는데, 문제가 생겼습니다. 챗봇이 가끔 엉뚱한 대답을 하는 것입니다.

"도대체 왜 이런 답변이 나오는 거지?" 김개발 씨는 머리를 싸맸습니다. 코드상으로는 문제가 없어 보이는데, LLM 내부에서 무슨 일이 일어나는지 알 수가 없었습니다.

그때 선배 개발자 박시니어 씨가 다가왔습니다. "혹시 LangSmith 추적 켜봤어요?" Observability, 한국어로 관찰성이라고 부르는 이 개념은 시스템 내부 상태를 외부에서 얼마나 잘 파악할 수 있는지를 나타냅니다.

마치 투명한 유리 상자 안에 기계를 넣어두고 작동 과정을 지켜보는 것과 같습니다. LangChain에서는 LangSmith라는 도구를 통해 이 관찰성을 제공합니다.

그리고 이 모든 것의 시작점이 바로 LANGSMITH_TRACING 환경 변수입니다. 이 환경 변수를 "true"로 설정하는 순간, 마법이 시작됩니다.

여러분의 LangChain 애플리케이션에서 일어나는 모든 일이 기록되기 시작합니다. LLM에 어떤 프롬프트가 전달되었는지, 얼마나 오래 걸렸는지, 어떤 응답이 돌아왔는지 모두 알 수 있습니다.

설정 방법은 간단합니다. 코드 맨 위에서 환경 변수 세 개만 설정하면 됩니다.

LANGSMITH_TRACING은 추적 기능을 켜는 스위치입니다. LANGSMITH_API_KEY는 LangSmith 서비스에 접속하기 위한 인증 키입니다.

LANGSMITH_PROJECT는 추적 데이터를 저장할 프로젝트 이름입니다. 이렇게 설정한 후 LangChain 코드를 실행하면, LangSmith 웹 대시보드에서 모든 실행 기록을 확인할 수 있습니다.

각 호출의 입력값, 출력값, 소요 시간, 토큰 사용량까지 한눈에 보입니다. 김개발 씨는 박시니어 씨의 조언대로 LANGSMITH_TRACING을 활성화했습니다.

그리고 LangSmith 대시보드를 열어보았습니다. "아!" 김개발 씨는 탄성을 질렀습니다.

문제의 원인이 바로 보였습니다. 프롬프트에 전달되는 컨텍스트가 잘못 구성되어 있었던 것입니다.

이것이 바로 Observability의 힘입니다. 보이지 않던 것을 보이게 만들어주는 것입니다.

실전 팁

💡 - 개발 환경에서는 항상 LANGSMITH_TRACING을 활성화해두세요

  • 프로젝트별로 LANGSMITH_PROJECT 이름을 다르게 설정하면 추적 데이터를 쉽게 구분할 수 있습니다

2. 자동 추적 활성화

박시니어 씨가 김개발 씨에게 물었습니다. "추적 코드 일일이 다 넣었어요?" 김개발 씨는 고개를 끄덕였습니다.

"네, 모든 함수마다요." 박시니어 씨가 웃었습니다. "그럴 필요 없어요.

LangChain은 자동으로 다 해줍니다."

자동 추적은 LangChain의 가장 강력한 기능 중 하나입니다. 환경 변수만 설정하면, 별도의 코드 수정 없이 모든 LLM 호출, 체인 실행, 도구 사용이 자동으로 추적됩니다.

마치 CCTV가 매장 전체를 녹화하듯이, LangChain의 모든 동작이 자동으로 기록됩니다.

다음 코드를 살펴봅시다.

import os
os.environ["LANGSMITH_TRACING"] = "true"
os.environ["LANGSMITH_API_KEY"] = "lsv2_pt_xxxxx"

from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate

# 프롬프트 템플릿 생성
prompt = ChatPromptTemplate.from_messages([
    ("system", "당신은 친절한 어시스턴트입니다."),
    ("human", "{question}")
])

# LLM과 체인 구성 - 추적 코드가 전혀 없습니다!
llm = ChatOpenAI(model="gpt-4")
chain = prompt | llm

# 실행하면 자동으로 모든 단계가 추적됩니다
result = chain.invoke({"question": "파이썬이 뭐예요?"})

예전에는 애플리케이션의 동작을 추적하려면 직접 로깅 코드를 작성해야 했습니다. 모든 함수의 시작과 끝에 로그를 남기고, 입력값과 출력값을 기록하고, 에러가 발생하면 스택 트레이스를 저장하는 등 번거로운 작업이 필요했습니다.

김개발 씨도 처음에는 그렇게 했습니다. 모든 LLM 호출 전후에 print문을 넣고, 시간을 측정하는 코드를 추가하고, 결과를 파일에 저장하는 로직을 구현했습니다.

코드가 점점 지저분해졌습니다. 박시니어 씨가 보여준 방법은 완전히 달랐습니다.

단순히 환경 변수를 설정하는 것만으로 모든 추적이 자동으로 이루어지는 것입니다. LangChain은 내부적으로 계측(Instrumentation) 이라는 기술을 사용합니다.

이것은 마치 자동차 계기판과 같습니다. 운전자가 별도로 센서를 달지 않아도, 자동차는 속도, 연료량, 엔진 온도 등을 자동으로 측정해서 보여줍니다.

LangChain도 마찬가지입니다. ChatOpenAI, ChatPromptTemplate, 체인 연결 등 LangChain의 모든 컴포넌트에는 이미 계측 코드가 내장되어 있습니다.

환경 변수가 활성화되면 이 계측 코드가 작동하기 시작합니다. 위의 코드 예제를 보면, 추적과 관련된 코드가 전혀 없습니다.

그저 평소처럼 프롬프트를 만들고, LLM을 생성하고, 체인을 구성해서 실행할 뿐입니다. 하지만 LangSmith 대시보드를 열어보면, 모든 단계가 상세하게 기록되어 있습니다.

프롬프트 템플릿에 어떤 값이 전달되었는지, 최종적으로 어떤 메시지가 LLM에 전송되었는지, LLM이 응답하는 데 얼마나 걸렸는지, 몇 개의 토큰을 사용했는지까지 모두 확인할 수 있습니다. 이런 자동 추적의 장점은 명확합니다.

첫째, 코드가 깔끔해집니다. 비즈니스 로직에만 집중할 수 있습니다.

둘째, 실수로 추적을 빠뜨리는 일이 없습니다. 셋째, 프로덕션 환경에서도 동일하게 동작합니다.

김개발 씨는 기존에 작성했던 로깅 코드를 모두 삭제했습니다. 그리고 훨씬 깔끔해진 코드를 보며 뿌듯해했습니다.

실전 팁

💡 - 자동 추적은 LangChain의 모든 공식 컴포넌트에서 동작합니다

  • 커스텀 함수도 @traceable 데코레이터를 붙이면 자동 추적에 포함됩니다

3. tags와 metadata 추가

프로젝트가 커지면서 김개발 씨는 새로운 고민에 빠졌습니다. LangSmith에 쌓이는 추적 데이터가 너무 많아진 것입니다.

"이 중에서 특정 기능의 로그만 찾고 싶은데..." 이럴 때 필요한 것이 바로 tags와 metadata입니다.

tagsmetadata는 추적 데이터에 라벨을 붙이는 방법입니다. tags는 간단한 문자열 목록으로, 빠르게 필터링할 때 유용합니다.

metadata는 키-값 쌍으로, 더 상세한 정보를 저장할 수 있습니다. 마치 도서관에서 책에 분류 번호와 색인 카드를 붙이는 것과 같습니다.

다음 코드를 살펴봅시다.

from langchain_openai import ChatOpenAI
from langchain_core.runnables import RunnableConfig

llm = ChatOpenAI(model="gpt-4")

# 설정 객체를 생성합니다
config = RunnableConfig(
    tags=["customer-support", "korean"],  # 필터링용 태그
    metadata={
        "user_id": "user_12345",      # 사용자 식별
        "session_id": "sess_abc",      # 세션 추적
        "feature": "product-inquiry",  # 기능 분류
        "version": "1.2.0"             # 앱 버전
    }
)

# config를 전달하여 실행합니다
response = llm.invoke(
    "이 상품의 반품 정책이 어떻게 되나요?",
    config=config
)

쇼핑몰 고객 상담 챗봇을 운영한다고 상상해 보세요. 하루에 수천 건의 대화가 오갑니다.

어느 날 특정 고객이 "챗봇이 이상한 답변을 했다"고 항의합니다. 이때 그 고객의 대화 기록만 찾아보려면 어떻게 해야 할까요?

아무런 표시 없이 쌓인 수천 건의 로그 중에서 특정 대화를 찾는 것은 건초 더미에서 바늘 찾기와 같습니다. 바로 이런 상황에서 tagsmetadata가 빛을 발합니다.

tags는 간단한 라벨입니다. "customer-support", "korean", "premium-user" 같은 문자열을 붙여둡니다.

나중에 LangSmith에서 특정 태그로 필터링하면, 해당 태그가 붙은 추적만 볼 수 있습니다. metadata는 더 풍부한 정보를 담습니다.

사용자 ID, 세션 ID, 기능 이름, 앱 버전 등 구조화된 데이터를 저장할 수 있습니다. 이 정보를 활용하면 "user_12345의 지난주 대화만 보여줘" 같은 복잡한 검색도 가능합니다.

코드를 살펴보면, RunnableConfig 객체를 생성하고 여기에 tags와 metadata를 지정합니다. 그리고 이 config를 invoke 메서드의 두 번째 인자로 전달합니다.

이렇게 하면 해당 실행에 대한 추적 데이터에 자동으로 태그와 메타데이터가 붙습니다. 실무에서는 이런 패턴을 자주 사용합니다.

웹 애플리케이션이라면 요청이 들어올 때 사용자 정보를 metadata에 담습니다. 여러 기능이 있다면 각 기능별로 다른 tags를 붙입니다.

A/B 테스트 중이라면 실험 그룹 정보를 metadata에 저장합니다. 김개발 씨는 챗봇에 이 기능을 적용했습니다.

이제 고객 ID별로, 기능별로, 날짜별로 추적 데이터를 쉽게 검색할 수 있게 되었습니다. 항의하는 고객의 대화 기록도 금방 찾을 수 있었습니다.

체계적인 태깅 전략은 팀 전체가 함께 정해야 합니다. 어떤 태그를 사용할지, 어떤 메타데이터를 수집할지 미리 합의해 두면 나중에 데이터 분석이 훨씬 수월해집니다.

실전 팁

💡 - 태그 이름은 일관된 명명 규칙을 사용하세요 (예: kebab-case)

  • 개인정보는 metadata에 직접 저장하지 말고, 식별 가능한 ID만 저장하세요

4. 선택적 추적 컨텍스트

박시니어 씨가 코드 리뷰를 하다가 말했습니다. "이 부분만 특별히 자세하게 추적하고 싶을 때가 있지 않아요?" 김개발 씨가 고개를 끄덕였습니다.

"네, 전체 다 추적하면 너무 많아서요." 바로 이럴 때 선택적 추적 컨텍스트가 필요합니다.

선택적 추적 컨텍스트는 특정 코드 블록에만 추적 설정을 적용하는 방법입니다. with 문을 사용해서 추적 범위를 정확히 지정할 수 있습니다.

마치 특정 방에만 CCTV를 설치하는 것처럼, 원하는 부분만 집중적으로 관찰할 수 있습니다.

다음 코드를 살펴봅시다.

from langchain_openai import ChatOpenAI
from langsmith import trace

llm = ChatOpenAI(model="gpt-4")

# 특정 블록에만 추적을 적용합니다
with trace(
    name="고객_문의_처리",
    tags=["customer-inquiry"],
    metadata={"priority": "high"}
) as run:
    # 이 블록 안의 모든 호출이 하나의 추적으로 묶입니다
    response = llm.invoke("고객 문의를 분석해주세요")

    # 추적에 추가 정보를 기록합니다
    run.metadata["response_length"] = len(response.content)

# 블록 밖에서는 별도의 추적 설정이 적용됩니다
other_response = llm.invoke("다른 질문입니다")

대규모 애플리케이션을 운영하다 보면, 모든 것을 동일한 수준으로 추적하기 어렵습니다. 어떤 부분은 자세하게, 어떤 부분은 간략하게 추적하고 싶을 때가 있습니다.

또는 특정 작업을 하나의 논리적 단위로 묶어서 보고 싶을 때도 있습니다. trace 컨텍스트 매니저는 바로 이런 상황을 위해 설계되었습니다.

Python의 with 문과 함께 사용하면, 해당 블록 안의 모든 호출이 하나의 추적으로 묶입니다. 병원 진료 과정을 생각해 보세요.

접수, 대기, 진료, 처방, 수납이라는 단계가 있습니다. 각 단계를 개별적으로 기록할 수도 있지만, 한 환자의 전체 진료 과정을 하나로 묶어서 보면 더 이해하기 쉽습니다.

trace 컨텍스트도 마찬가지입니다. "고객_문의_처리"라는 이름의 추적 안에 여러 LLM 호출이 포함될 수 있습니다.

LangSmith에서 보면, 이 모든 호출이 하나의 상위 추적 아래 계층적으로 표시됩니다. 코드에서 주목할 점이 있습니다.

with 문 안에서 run 객체를 사용할 수 있다는 것입니다. 이 객체를 통해 추적에 추가 정보를 기록할 수 있습니다.

예를 들어 응답 길이, 처리 결과, 에러 정보 등을 동적으로 추가할 수 있습니다. trace 컨텍스트에는 name, tags, metadata를 모두 지정할 수 있습니다.

name은 LangSmith에서 이 추적을 식별하는 데 사용됩니다. 직관적인 이름을 붙이면 나중에 찾기 쉽습니다.

이 기능의 또 다른 장점은 중첩이 가능하다는 것입니다. trace 안에 또 다른 trace를 넣을 수 있습니다.

복잡한 워크플로우도 계층적으로 구조화할 수 있습니다. 김개발 씨는 챗봇의 핵심 로직에 trace 컨텍스트를 적용했습니다.

고객 문의 분류, 답변 생성, 만족도 확인 등 주요 단계를 각각 별도의 trace로 묶었습니다. 이제 문제가 발생했을 때 어느 단계에서 발생했는지 한눈에 파악할 수 있게 되었습니다.

실전 팁

💡 - 비즈니스 로직의 주요 단계마다 trace를 적용하면 디버깅이 쉬워집니다

  • trace 이름은 한글로 작성해도 잘 동작합니다

5. 도구 호출 및 결과 관찰

김개발 씨의 챗봇이 발전했습니다. 이제 단순한 대화를 넘어서 날씨를 검색하고, 데이터베이스를 조회하는 등 다양한 도구를 사용합니다.

그런데 도구 호출에서 가끔 오류가 발생합니다. 어떤 도구가 어떤 인자로 호출되었는지, 결과는 무엇이었는지 확인하고 싶습니다.

도구 호출 관찰은 LangChain 에이전트가 사용하는 도구의 입력과 출력을 추적하는 기능입니다. 에이전트가 어떤 도구를 선택했는지, 어떤 인자를 전달했는지, 도구가 어떤 결과를 반환했는지 모두 확인할 수 있습니다.

마치 요리사가 어떤 재료를 어떻게 사용했는지 레시피 기록을 보는 것과 같습니다.

다음 코드를 살펴봅시다.

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

# 도구를 정의합니다
@tool
def get_weather(city: str) -> str:
    """주어진 도시의 날씨를 조회합니다."""
    # 실제로는 API를 호출하겠지만, 예시를 위해 고정값 반환
    return f"{city}의 현재 날씨: 맑음, 22도"

@tool
def search_database(query: str) -> str:
    """데이터베이스에서 정보를 검색합니다."""
    return f"'{query}' 검색 결과: 관련 데이터 3건 발견"

# 에이전트 생성 - 도구 호출이 자동으로 추적됩니다
llm = ChatOpenAI(model="gpt-4")
agent = create_react_agent(llm, tools=[get_weather, search_database])

# 에이전트 실행
result = agent.invoke({"messages": [("human", "서울 날씨 알려줘")]})

LangChain 에이전트는 스스로 판단해서 도구를 사용합니다. 사용자가 "서울 날씨 알려줘"라고 하면, 에이전트는 get_weather 도구를 호출해야 한다고 판단합니다.

그리고 "서울"이라는 인자를 전달합니다. 도구가 결과를 반환하면, 에이전트는 그 결과를 바탕으로 답변을 생성합니다.

이 모든 과정이 자동으로 추적됩니다. LangSmith 대시보드에서는 다음과 같은 정보를 확인할 수 있습니다.

첫째, 에이전트가 어떤 도구를 선택했는지. 둘째, 도구에 어떤 인자가 전달되었는지.

셋째, 도구 실행에 얼마나 걸렸는지. 넷째, 도구가 어떤 결과를 반환했는지.

이 정보가 왜 중요할까요? 에이전트가 잘못된 도구를 선택하는 경우가 있기 때문입니다.

사용자가 날씨를 물었는데 데이터베이스 검색 도구를 호출할 수도 있습니다. 또는 올바른 도구를 선택했지만 인자를 잘못 전달할 수도 있습니다.

"서울"이 아니라 "Seoul"로 전달해서 에러가 발생할 수 있습니다. 도구 호출 추적이 없다면, 이런 문제를 찾기 어렵습니다.

"왜 날씨 정보가 안 나오지?" 하고 코드를 뒤져봐야 합니다. 하지만 추적 데이터를 보면, 문제가 어디서 발생했는지 바로 알 수 있습니다.

코드에서 주목할 점은, @tool 데코레이터를 사용한 함수가 자동으로 추적된다는 것입니다. 별도의 설정 없이도, 도구 호출 정보가 LangSmith에 기록됩니다.

create_react_agent로 생성한 에이전트의 전체 실행 과정도 추적됩니다. LLM이 몇 번 호출되었는지, 각 호출에서 어떤 판단을 내렸는지, 최종 답변은 어떻게 생성되었는지 모두 확인할 수 있습니다.

김개발 씨는 이 기능을 활용해서 챗봇의 도구 사용 패턴을 분석했습니다. 어떤 도구가 가장 많이 사용되는지, 어떤 도구에서 에러가 자주 발생하는지 파악할 수 있었습니다.

이 데이터를 바탕으로 도구를 개선하고, 에이전트의 성능을 높였습니다.

실전 팁

💡 - 도구 함수에 명확한 docstring을 작성하면 에이전트가 도구를 더 잘 선택합니다

  • 도구 실행 시간이 오래 걸린다면, 추적 데이터에서 병목을 확인할 수 있습니다

6. 의사결정 프로세스 분석

김개발 씨가 박시니어 씨에게 물었습니다. "에이전트가 왜 이런 결정을 내렸는지 어떻게 알 수 있을까요?" 박시니어 씨가 대답했습니다.

"LangSmith의 추적 데이터를 분석하면 에이전트의 생각 과정을 따라갈 수 있어요."

의사결정 프로세스 분석은 에이전트가 어떤 과정을 거쳐 최종 결론에 도달했는지 파악하는 것입니다. LangSmith의 추적 데이터를 통해 에이전트의 추론 단계, 도구 선택 이유, 중간 결과 해석 과정을 모두 확인할 수 있습니다.

마치 수학 문제의 풀이 과정을 따라가듯이, AI의 사고 과정을 추적할 수 있습니다.

다음 코드를 살펴봅시다.

from langchain_openai import ChatOpenAI
from langchain_core.tools import tool
from langgraph.prebuilt import create_react_agent
from langsmith import Client

# 복합적인 판단이 필요한 도구들
@tool
def check_inventory(product_id: str) -> str:
    """상품의 재고를 확인합니다."""
    return f"상품 {product_id}: 재고 5개"

@tool
def get_price(product_id: str) -> str:
    """상품의 가격을 조회합니다."""
    return f"상품 {product_id}: 25,000원"

@tool
def apply_discount(product_id: str, user_grade: str) -> str:
    """사용자 등급에 따른 할인을 적용합니다."""
    discount = {"gold": "20%", "silver": "10%", "bronze": "5%"}
    return f"할인율: {discount.get(user_grade, '0%')}"

# 에이전트 생성
llm = ChatOpenAI(model="gpt-4")
agent = create_react_agent(
    llm,
    tools=[check_inventory, get_price, apply_discount]
)

# 복합 질문 - 에이전트가 여러 도구를 조합해 답변합니다
result = agent.invoke({
    "messages": [("human", "상품 A001의 재고와 골드 회원 할인 적용 가격을 알려줘")]
})

AI 에이전트는 단순한 질문에는 간단히 답합니다. 하지만 복잡한 질문을 받으면 여러 단계의 추론을 거칩니다.

"상품 A001의 재고와 골드 회원 할인 적용 가격을 알려줘"라는 질문을 생각해 보세요. 에이전트는 먼저 무엇을 해야 할지 계획을 세웁니다.

첫 번째 단계로, 에이전트는 재고 확인이 필요하다고 판단합니다. check_inventory 도구를 호출합니다.

"재고 5개"라는 결과를 받습니다. 두 번째 단계로, 가격 정보가 필요합니다.

get_price 도구를 호출합니다. "25,000원"이라는 결과를 받습니다.

세 번째 단계로, 할인을 적용해야 합니다. apply_discount 도구를 호출합니다.

이때 "골드 회원"이라는 정보를 인자로 전달합니다. "20% 할인"이라는 결과를 받습니다.

마지막으로, 에이전트는 이 모든 정보를 종합해서 최종 답변을 생성합니다. "상품 A001은 현재 5개 재고가 있고, 정가 25,000원에서 골드 회원 20% 할인이 적용되어 20,000원입니다." LangSmith에서 이 추적을 열어보면, 이 모든 과정이 시각적으로 표시됩니다.

각 LLM 호출에서 에이전트가 어떤 생각을 했는지, 왜 그 도구를 선택했는지 확인할 수 있습니다. 이것이 왜 중요할까요?

에이전트가 잘못된 결론을 내렸을 때, 어느 단계에서 문제가 발생했는지 찾을 수 있기 때문입니다. 혹시 할인을 적용하지 않았나요?

가격 정보를 잘못 가져왔나요? 추론 과정에서 계산 실수를 했나요?

또한 이 분석을 통해 에이전트를 개선할 수 있습니다. 불필요하게 많은 도구를 호출하고 있다면, 프롬프트를 수정해서 효율성을 높일 수 있습니다.

특정 유형의 질문에서 자주 실패한다면, 해당 케이스에 대한 예시를 추가할 수 있습니다. 김개발 씨는 이제 챗봇이 이상한 답변을 할 때, LangSmith에서 의사결정 과정을 분석합니다.

문제의 원인을 찾고, 개선 방안을 도출하는 것이 훨씬 수월해졌습니다. Observability는 단순히 기록하는 것을 넘어서, AI 시스템을 더 잘 이해하고 개선하는 도구가 됩니다.

실전 팁

💡 - 복잡한 에이전트일수록 의사결정 분석이 중요합니다

  • LangSmith의 트리 뷰를 활용하면 추론 과정을 계층적으로 파악할 수 있습니다

이상으로 학습을 마칩니다. 위 내용을 직접 코드로 작성해보면서 익혀보세요!

#LangChain#Observability#LangSmith#Tracing#Debugging#AI,LLM,Python,LangChain

댓글 (0)

댓글을 작성하려면 로그인이 필요합니다.