PostHog와 Langfuse로 LlamaIndex + Mistral 애플리케이션 모니터링하기

PostHog와 Langfuse로 LlamaIndex + Mistral 애플리케이션 모니터링하기 (Monitoring LlamaIndex + Mistral applications with PostHog and Langfuse)

[LlamaIndex]로 RAG 애플리케이션을 구축하고, [Langfuse]로 단계를 관찰하며, [PostHog]의 데이터를 분석하는 방법을 배우는 문서예요.

출처: 문서

본문

이 쿡북에서는 [LlamaIndex]로 RAG 애플리케이션을 구축하고, [Langfuse]로 단계를 관찰하며, [PostHog]에서 데이터를 분석하는 방법을 보여드릴게요.

Langfuse란? (What is Langfuse?)

[Langfuse]는 오픈소스 LLM 엔지니어링 플랫폼이에요. [traces], [evals], [프롬프트 관리] 같은 기능이 포함되어 LLM 앱을 디버깅하고 개선하는 데 도움을 줍니다.

LlamaIndex란? (What is LlamaIndex?)

LlamaIndex ((GitHub))는 LLM을 외부 데이터 소스와 연결하도록 설계된 데이터 프레임워크예요. 데이터를 효과적으로 구조화·인덱싱·쿼리하는 데 도움을 주며, 개발자가 고급 LLM 애플리케이션을 더 쉽게 구축할 수 있게 해줍니다.

PostHog란? (What is PostHog?)

[PostHog]는 제품 분석에 인기 있는 선택이에요. Langfuse의 LLM 분석과 PostHog의 제품 분석을 결합하면 앱에 대한 다음 질문에 쉽게 답할 수 있어요:

  • "고객, 모델별, 그리고 전체적으로 내 LLM 비용은 얼마인가?"
  • "LLM 기능과의 상호작용이 다른 지표(리텐션, 사용량, 매출 등)와 상관관계가 있는가?"
  • "Langfuse에서 수집한 사용자 피드백이 PostHog의 사용자 행동과 어떻게 상관되는가?"

LlamaIndex와 Mistral로 간단한 RAG 앱 구축하기 (How to build a Simple RAG app with LlamaIndex and Mistral)

이 예시에서는 고슴도치 돌보는 방법에 대한 질문에 답하는 채팅 앱을 만들어요. LlamaIndex가 [고슴도치 케어 가이드]를 [Mistral 8x22B 모델]로 벡터화하고, 모든 모델 생성은 Langfuse의 [LlamaIndex 통합]으로 트레이싱됩니다. 마지막으로 [PostHog 통합]을 통해 PostHog에서 고슴도치 앱에 대한 상세 분석을 직접 볼 수 있어요.

Step 1: LlamaIndex와 Mistral 설정

먼저 Mistral API 키를 환경 변수로 설정해요. 아직 없다면 [Mistral 계정에 가입]하고, 무료 체험판이나 요금제에 [구독]한 뒤 [API 키를 생성]하면 돼요 (💡 LlamaIndex가 지원하는 다른 모델을 사용해도 되지만, 이 쿡북에서는 Mistral을 사용합니다).

그런 다음 LlamaIndex로 Mistral 언어 모델과 임베딩 모델을 모두 초기화하고, 이 모델들을 LlamaIndex Settings 객체에 설정해요.

%pip install llama-index llama-index-llms-mistralai llama-index-embeddings-mistralai nest_asyncio --upgrade
# Set the Mistral API key
import os
os.environ["MISTRAL_API_KEY"] = "***Your-Mistral-API-Key***"

# Ensures that sync and async code can be used together without issues
import nest_asyncio
nest_asyncio.apply()

# Import and set up llama index
from llama_index.llms.mistralai import MistralAI
from llama_index.embeddings.mistralai import MistralAIEmbedding
from llama_index.core import Settings

# Define your LLM and embedding model
llm = MistralAI(model="open-mixtral-8x22b", temperature=0.1)
embed_model = MistralAIEmbedding(model_name="mistral-embed")

# Set the LLM and embedding model in the Settings object
Settings.llm = llm
Settings.embed_model = embed_model

Step 2: Langfuse 초기화

다음으로 Langfuse 클라이언트를 초기화해요. 아직 없다면 [Langfuse에 가입]하고, 프로젝트 설정에서 [API 키]를 복사해 환경에 추가하세요.

%pip install langfuse
import os

# get keys for your project from https://cloud.langfuse.com
LANGFUSE_SECRET_KEY="sk-lf-..."
LANGFUSE_PUBLIC_KEY="pk-lf-..."
LANGFUSE_HOST="https://cloud.langfuse.com" # 🇪🇺 EU region
# LANGFUSE_HOST="https://us.cloud.langfuse.com" # 🇺🇸 US region
from langfuse import Langfuse

langfuse = Langfuse()

마지막으로 앱의 루트에서 LlamaIndex Settings.callback_manager에 Langfuse의 LlamaIndexCallbackHandler를 등록해요. Langfuse의 LlamaIndex 통합에 대해 더 알아보려면 [여기]를 참조하세요.

from llama_index.core import Settings
from llama_index.core.callbacks import CallbackManager
from langfuse.llama_index import LlamaIndexCallbackHandler

langfuse_callback_handler = LlamaIndexCallbackHandler()
Settings.callback_manager = CallbackManager([langfuse_callback_handler])

Step 3: 데이터 다운로드

RAG에 사용할 파일을 다운로드해요. 이 예시에서는 [고슴도치 케어 가이드] pdf 파일을 사용해 언어 모델이 고슴도치 돌보는 것 관련 질문 🦔에 답할 수 있게 해요.

!wget 'https://www.pro-igel.de/downloads/merkblaetter_engl/wildtier_engl.pdf' -O './hedgehog.pdf'

다음으로 LlamaIndex의 [SimpleDirectoryReader]로 pdf를 로드해요.

from llama_index.core import SimpleDirectoryReader

hedgehog_docs = SimpleDirectoryReader(input_files=["./hedgehog.pdf"]).load_data()

Step 4: 고슴도치 문서에 RAG 구축

다음으로 [VectorStoreIndex]로 고슴도치 문서의 벡터 임베딩을 만들고, 쿼리 기반 정보 검색을 위한 [쿼리 가능 엔진]으로 변환해요.

from llama_index.core import VectorStoreIndex

hedgehog_index = VectorStoreIndex.from_documents(hedgehog_docs)
hedgehog_query_engine = hedgehog_index.as_query_engine(similarity_top_k=5)

마지막으로 모든 것을 합치기 위해 엔진을 쿼리하고 응답을 출력해요.

response = hedgehog_query_engine.query("Which hedgehogs require help?")
print(response)

이제 LLM 체인의 모든 단계가 Langfuse에서 추적됩니다. Langfuse 예시 트레이스: [https://cloud.langfuse.com/project/cloramnkj0002jz088vzn1ja4/traces/367db23d-5b03-446b-bc73-36e289596c00]

Step 5: (선택) 앱 성능을 보기 위한 사용자 피드백 구현

고슴도치 채팅 앱의 품질을 모니터링하려면 [Langfuse Scores]를 사용해 사용자 피드백(예: 엄지 올리기/내리기 또는 코멘트)을 저장할 수 있어요. 이 점수들은 PostHog에서 분석할 수 있습니다.

Scores는 개별 observations나 전체 traces를 평가하는 데 사용돼요. Langfuse UI의 어노테이션 워크플로우로 만들거나, 모델 기반 평가를 실행하거나, 이 예시처럼 SDK를 통해 수집할 수 있어요.

현재 observation의 컨텍스트를 얻으려면 [observe() 데코레이터]를 사용해 hedgehog_helper() 함수에 적용해요.

from langfuse.decorators import langfuse_context, observe

# Langfuse observe() decorator to automatically create a trace for the top-level function and spans for any nested functions.
@observe()
def hedgehog_helper(user_message):

    response = hedgehog_query_engine.query(user_message)
    trace_id = langfuse_context.get_current_trace_id()

    print(response)

    return trace_id

trace_id = hedgehog_helper("Can I keep the hedgehog as a pet?")

# Score the trace, e.g. to add user feedback using the trace_id
langfuse.score(
    trace_id = trace_id,
    name="user-explicit-feedback",
    value=0.9,
    data_type="NUMERIC", # optional, inferred if not provided
    comment="Good to know!", # optional
)

Step 6: PostHog에서 데이터 보기

마지막으로 PostHog를 Langfuse 계정에 연결해요. 수행할 단계 요약은 다음과 같아요 (전체 내용은 [문서] 참조):

  1. 아직 없다면 무료 PostHog 계정에 [가입]
  2. [프로젝트 설정]에서 프로젝트 API 키와 호스트를 복사
  3. [Langfuse 대시보드]에서 Settings를 클릭하고 Integrations 섹션으로 스크롤해 PostHog 통합을 찾기
  4. Configure를 클릭하고 PostHog 호스트와 프로젝트 API 키를 붙여넣기 ([PostHog 프로젝트 설정]에서 찾을 수 있어요)
  5. Enabled를 클릭하고 Save

Langfuse는 하루 한 번 PostHog로 데이터 내보내기를 시작합니다.

Langfuse 대시보드 템플릿 사용:

통합을 설치한 후 [대시보드 템플릿]이 관련 통찰을 빠르게 설정하는 데 도움을 줘요. 고슴도치 채팅 앱에서는 아래 표시된 템플릿 대시보드를 사용해요. 이를 통해 PostHog에서 모델 비용, 사용자 피드백, 지연 시간을 분석할 수 있어요.

템플릿으로 자신의 대시보드를 만들려면:

  1. PostHog의 [dashboard] 탭으로 이동
  2. 오른쪽 상단의 New dashboard 버튼 클릭
  3. 템플릿 목록에서 LLM metrics – Langfuse 선택

피드백 (Feedback)

피드백이나 요청이 있다면 GitHub [Issue]를 만들거나 [Discord] 커뮤니티에 아이디어를 공유해 주세요.

더 알아보기 (Learn more)