AI 엔지니어링 아카데미: 2.6 RAG 관찰 가능성 - 아리제 피닉스 설정

AI 기술 자료9개월 전 업데이트 AI 공유 서클
9.4K 00

이 노트북에서는 라마 인덱스를 사용하여 검색 향상 생성을 설정하고 관찰하는 방법을 살펴봅니다(RAG) 간소화.

https://github.com/adithya-s-k/AI-Engineering.academy/tree/main/RAG/01_RAG_Observability

 

개요

이 가이드는 효율적인 문서 검색과 쿼리 처리를 위해 임베디드 모델과 벡터 스토어 인덱스 등 필요한 도구와 라이브러리를 구성하는 방법에 대한 전체 튜토리얼을 제공합니다. 설치 및 설정부터 관련 정보 쿼리 및 검색에 이르기까지 모든 것을 다루어 RAG 파이프라인의 고급 검색 기능에 익숙해지도록 도와드립니다.

 

소개(주제)

이 노트북을 시작하려면 Python에 대한 기본적인 이해와 머신 러닝 개념에 어느 정도 익숙해야 합니다. 이러한 개념에 익숙하지 않더라도 걱정하지 마세요. 단계별로 안내해 드릴 테니까요!

사전 조건

  • Python 3.7+
  • 주피터 노트북 또는 주피터랩
  • Python 및 머신 러닝 개념의 기초

 

1. 설정

1.1 필요한 소프트웨어 패키지 설치

아리제 피닉스 설정을 시작하려면 필요한 소프트웨어 패키지를 설치해야 합니다.

아리즈 피닉스는 머신 러닝 및 AI 시스템의 통합 가시성 및 모니터링을 위해 설계된 종합적인 도구입니다. 머신 러닝 모델과 데이터 파이프라인의 모든 측면을 추적하고 분석할 수 있는 기능을 제공합니다.

!pip install arize-phoenix
!pip install openinference-instrumentation-openai

다음 명령이 설치됩니다:

  • arize-phoenix머신 러닝 워크플로우 통합 가시성을 위한 도구.
  • openinference-instrumentation-openai아리즈 피닉스와 같은 통합 가시성 도구와 OpenAI 모델을 통합하기 위한 패키지입니다.

1.2 아리제 피닉스 설정하기

다음과 같이 세 가지 방법으로 설정을 완료할 수 있습니다:

자세히 보기 여기.

  • 명령줄(컴퓨팅)
    python3 -m phoenix.server.main serve
    
  • 다음 명령을 사용하여 도커 이미지의 phoenix를 시작합니다:
    docker run -p 6006:6006 -p 4317:4317 arizephoenix/phoenix:latest
    

    이렇게 하면 Phoenix UI 및 REST API가 localhost:6006에 노출되고, 스팬에 대한 gRPC 엔드포인트가 localhost:4317에 노출됩니다.

  • 노트북
    import phoenix as px
    px.launch_app()
    

1.3 필요한 라이브러리 가져오기 및 환경 구성하기

데이터 처리 및 평가를 진행하기 전에 필요한 라이브러리를 가져오고 환경을 설정합니다:

import json
import os
from getpass import getpass
import nest_asyncio
import pandas as pd
from tqdm import tqdm
import phoenix as px
# 允许在笔记本环境中进行并发评估
nest_asyncio.apply()
# 设置 pandas DataFrame 的显示选项以展示更多内容
pd.set_option("display.max_colwidth", 1000)
  • jsonosJSON 데이터 및 운영 체제 상호 작용을 처리하기 위한 표준 Python 라이브러리입니다.
  • getpass비밀번호를 안전하게 입력할 수 있는 도구입니다.
  • nest_asyncio: 주피터 노트북에서 비동기식 사용을 허용합니다.
  • pandas (pd): 강력한 Python 데이터 조작 라이브러리입니다.
  • tqdm: 데이터 처리 진행률을 추적할 수 있도록 루프에 진행률 표시줄을 제공합니다.
  • phoenix (px): 데이터를 탐색하고 머신 러닝 모델을 모니터링하기 위한 대화형 UI를 제공하는 아리제 옵저버빌리티 도구의 일부입니다.

구성 nest_asyncio 를 사용하여 노트북 환경에서 동시 평가를 허용하고 판다 데이터 프레임의 최대 열 너비를 설정하여 가독성을 개선할 수 있습니다.

1.4 Phoenix 애플리케이션 시작하기

px.launch_app()

이 함수는 기본 브라우저의 새 탭에서 열리고 데이터 세트 탐색, 모델 성능 시각화 및 디버깅을 위한 대화형 인터페이스를 제공하는 Phoenix 애플리케이션을 초기화하고 실행합니다.

1.5 Phoenix 애플리케이션 세션 보기

Phoenix 애플리케이션이 실행되면 세션 개체를 사용해 노트북에서 애플리케이션과 직접 상호 작용할 수 있습니다. 다음 코드를 실행해 Phoenix 애플리케이션을 실행하고 현재 세션에서 애플리케이션을 확인합니다:

# 启动并查看 Phoenix 应用会话
(session := px.launch_app()).view()

이 코드 줄은 Phoenix 애플리케이션을 시작하고 세션이라는 변수에 세션을 할당합니다. view() 이 방식은 노트북 인터페이스에 Phoenix 애플리케이션을 직접 표시하므로 브라우저와 노트북 사이를 전환할 필요 없이 통합된 환경을 제공합니다.

1.6 추적의 엔드포인트 설정하기

분석 및 가시성을 위해 추적 데이터를 Phoenix 애플리케이션으로 보내려면, Phoenix 애플리케이션이 수신 데이터를 수신 대기하는 엔드포인트 URL을 정의하세요.

endpoint = "http://127.0.0.1:6006/v1/traces"

endpoint Phoenix 애플리케이션이 수신 추적 데이터를 수신 대기하는 데 사용하는 엔드포인트 URL을 저장하는 변수입니다.

 

2. OpenAI 추적

더 많은 통합. 읽기.

2.1 OpenAI 패키지 설치 및 가져오기

!pip install openai
import openai

openai: OpenAI API용 Python 클라이언트 라이브러리입니다. 이를 통해 다양한 작업을 위해 OpenAI의 모델(GPT-3 및 GPT-4 포함)에 요청을 보낼 수 있습니다.

2.2 OpenAI API 키 구성하기

import openai
import os
from getpass import getpass
# 从环境变量中获取 API 密钥,若未设置则提示用户输入
if not (openai_api_key := os.getenv("OPENAI_API_KEY")):
openai_api_key = getpass("🔑 输入您的 OpenAI API 密钥:")
# 为 OpenAI 客户端设置 API 密钥
openai.api_key = openai_api_key
# 将 API 密钥存储到环境变量中以供后续使用
os.environ["OPENAI_API_KEY"] = openai_api_key
  • API 키 가져오기: 코드가 먼저 환경 변수(OPENAI_API_KEY)에서 API 키를 가져오려고 시도합니다. 키를 찾을 수 없는 경우 사용자에게 getpass를 통해 보안 입력을 요청하는 메시지가 표시됩니다.
  • API 키 설정: 검색되거나 제공된 API 키가 OpenAI 클라이언트 라이브러리의 키로 설정됩니다.
  • API 키 저장: 마지막으로 API 키를 환경 변수에 저장하여 세션 중에 항상 사용할 수 있도록 합니다.

2.3 트래킹을 위한 OpenTelemetry 설정하기

OpenAI 상호 작용에 대한 추적을 사용하려면 OpenTelemetry를 구성하고 필요한 구성 요소를 설정하세요.

from opentelemetry import trace as trace_api
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk import trace as trace_sdk
from opentelemetry.sdk.trace.export import SimpleSpanProcessor
# 设置 Tracer 提供程序
tracer_provider = trace_sdk.TracerProvider()
# 定义带有端点的 OTLP Span 导出器
span_exporter = OTLPSpanExporter(endpoint)
# 设置 Span Processor 以处理和导出 spans
span_processor = SimpleSpanProcessor(span_exporter)
# 将 Span Processor 添加到 Tracer 提供程序
tracer_provider.add_span_processor(span_processor)
# 设置全局 Tracer 提供程序
trace_api.set_tracer_provider(tracer_provider)

오픈텔레메트리 라이브러리

제공된 코드에서는 추적을 설정하는 데 여러 OpenTelemetry 라이브러리가 사용됩니다. 아래는 각 라이브러리에 대한 개요입니다:

  • opentelemetry:영어 -ity, -ism, -ization에 해당합니다.: 추적 및 메트릭을 위한 API를 제공하는 OpenTelemetry의 핵심 라이브러리입니다.사용법: 추적 생성 및 관리를 위한 추적 모듈이 포함되어 있습니다.
  • opentelemetry.exporter.otlp.proto.http.trace_exporter:영어 -ity, -ism, -ization에 해당합니다.HTTP를 통해 OTLP(OpenTelemetry Protocol)를 사용하여 추적 내보내기를 제공합니다.사용법모듈의 OTLPSpanExporter 클래스는 추적 데이터를 OTLP 호환 백엔드로 전송하는 데 사용되며 엔드포인트를 설정하여 구성합니다.
  • opentelemetry.sdk.trace:영어 -ity, -ism, -ization에 해당합니다.다음을 포함한 추적용 SDK 구현이 포함되어 있습니다. TracerProvider.사용법::
    • TracerProvider트레이서 인스턴스를 관리하고 트레이스로 수집된 스팬(작업 단위)을 내보내는 작업을 담당합니다.
    • SimpleSpanProcessor내보내기 범위를 동기화하여 데이터를 처리하고 내보내기로 전송하는 프로세서입니다.
  • opentelemetry.sdk.trace.export:영어 -ity, -ism, -ization에 해당합니다.추적 데이터 내보내기를 위한 클래스를 제공합니다.사용법::
    • SimpleSpanProcessor스팬을 처리하고 지정된 내보내기를 사용하여 내보내면 데이터가 분석을 위해 백엔드로 전송됩니다.

2.4 OpenInference로 OpenAI 계측하기

OpenTelemetry를 OpenAI에 통합하고 OpenAI 모델 상호 작용에 대한 추적을 사용하려면 다음을 수행하십시오. openinference 라이브러리 OpenAIInstrumentor.

from openinference.instrumentation.openai import OpenAIInstrumentor
# 实例化并为 OpenAI 应用 instrumentation
OpenAIInstrumentor().instrument()
  • OpenAIInstrumentor: 출발지 openinference 라이브러리 클래스를 사용하여 추적 및 관찰이 가능하도록 OpenAI의 API 호출을 계측할 수 있습니다.
  • instrument()이 메서드는 추적 데이터를 자동으로 생성하여 OpenTelemetry 백엔드로 전송하도록 OpenAI API 클라이언트를 구성합니다. 구성된 추적 설정을 통합하고 OpenAI 모델과 상호 작용하는 프로세스를 모니터링하고 분석할 수 있습니다.

이 코드를 실행하면 모든 OpenAI API 호출을 추적하여 모델 사용 및 성능에 대한 자세한 인사이트를 확보할 수 있습니다.

2.5 OpenAI API에 요청하기

OpenAI의 API와 상호 작용하여 응답을 받으려면 다음 코드를 사용하세요. 이 예는 OpenAI API를 통해 채팅 완료 요청을 생성하고 결과를 인쇄하는 방법을 보여줍니다:

import openai
# 创建 OpenAI 客户端实例
client = openai.OpenAI()
# 向 OpenAI API 发起聊天补全请求
response = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "Write a haiku."}],
)
# 打印响应内容
print(response.choices[0].message.content)
  • openai.OpenAI(): OpenAI API와 상호 작용하는 데 사용할 수 있는 OpenAI 클라이언트 인스턴스를 초기화합니다.
  • client.chat.completions.create(): 채팅 보완 기능을 만들도록 OpenAI API에 요청을 보냅니다.
    • model="gpt-4o": 보완을 생성하는 데 사용되는 모델의 이름을 지정합니다. 모델 이름이 정확하고 OpenAI API 계정에서 사용하도록 설정했는지 확인하세요.
    • messages:: 대화 내역이 포함된 메시지 목록입니다. 이 예에는 사용자가 보낸 단일 메시지 요청인 "하이쿠 쓰기"가 포함되어 있습니다.
  • response.choices[0].message.content모델에서 생성된 보정을 추출하고 인쇄합니다.

 

3. 라마 인덱스 추적

3.1 필수 라이브러리 설치 및 가져오기

!pip install llama-index
!pip install llama-index-core
!pip install llama-index-llms-openai
!pip install openinference-instrumentation-llama-index==2.2.4
!pip install -U llama-index-callbacks-arize-phoenix
!pip install "arize-phoenix[llama-index]"
  • llama-index:: 라마 인덱스 기능을 위한 핵심 패키지입니다.
  • llama-index-core: 라마 인덱스의 핵심 기능과 도구를 제공합니다.
  • llama-index-llms-openai라마 인덱스와 OpenAI 모델을 통합하기 위한 패키지입니다.
  • openinference-instrumentation-llama-index==2.2.4라마 인덱스 상호작용을 계측할 수 있는 도구를 제공합니다.
  • llama-index-callbacks-arize-phoenix아리즈 피닉스 콜백과의 통합을 제공합니다.
  • arize-phoenix[llama-index]라마 인덱스 추적을 지원하도록 아리즈 피닉스를 확장합니다.

3.2 현재 활성화된 Phoenix 세션의 URL 가져오기

# 获取当前活动的 Phoenix 会话的 URL
px.active_session().url

현재 활성화된 Phoenix 세션에 액세스하고 해당 URL을 검색하여 추적 데이터 모니터링 및 분석을 위한 Phoenix 인터페이스를 보거나 공유할 수 있습니다.

3.3 라마 인덱스 추적 설정하기

라마 인덱스에 대한 OpenTelemetry 추적을 설정하려면 추적기 공급자를 구성하고 라마 인덱스 인스트루멘터를 통합하세요.

from openinference.instrumentation.llama_index import LlamaIndexInstrumentor
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk import trace as trace_sdk
from opentelemetry.sdk.trace.export import SimpleSpanProcessor
# 设置 Tracer 提供程序
tracer_provider = trace_sdk.TracerProvider()
# 添加 Span Processor 到 Tracer 提供程序
tracer_provider.add_span_processor(SimpleSpanProcessor(OTLPSpanExporter(endpoint)))
# 使用 Tracer 提供程序 对 Llama Index 进行 Instrumentation
LlamaIndexInstrumentor().instrument(tracer_provider=tracer_provider)
  • LlamaIndexInstrumentor: 출발지 openinference.instrumentation.llama_index 클래스를 사용하여 라마 인덱스의 추적 및 관찰 가능성 계측을 수행합니다.
  • trace_sdk.TracerProvider()추적 데이터를 생성하고 관리하기 위한 새 추적자 공급자를 초기화합니다.
  • SimpleSpanProcessor스팬 내보내기를 동기화하고 데이터를 백엔드로 전송하는 데 사용됩니다.
  • LlamaIndexInstrumentor().instrument(tracer_provider=tracer_provider)라마 인덱스에 계측을 적용하고 제공된 트레이서 공급자를 사용하여 추적합니다.

3.4 OpenAI를 사용하여 라마 인덱스와 상호 작용하기

OpenAI 모델을 사용하여 라마 인덱스를 통해 완성 요청을 수행하려면 다음 코드를 사용하세요:

from llama_index.llms.openai import OpenAI
# 初始化 OpenAI 模型
llm = OpenAI(model="gpt-4o-mini")
# 发起完成请求
resp = llm.complete("Paul Graham is ")
# 打印响应结果
print(resp)
  • from llama_index.llms.openai import OpenAI: 출발지 llama_index 패키지를 사용하여 OpenAI 클래스를 가져와서 OpenAI 모델과 상호 작용할 수 있습니다.
  • OpenAI(model="gpt-4o-mini"): 지정된 모델(예: gpt-4)을 사용하여 OpenAI 클래스의 인스턴스를 초기화합니다.
  • llm.complete(...): 모델에 프롬프트 텍스트를 보내 응답 콘텐츠를 생성합니다.

3.5 OpenAI를 사용한 라마 인덱스와의 채팅 상호 작용

from llama_index.llms.openai import OpenAI
from llama_index.core.llms import ChatMessage
# 初始化 OpenAI 模型
llm = OpenAI()
# 定义聊天消息
messages = [
ChatMessage(
role="system", content="You are a pirate with a colorful personality"
),
ChatMessage(role="user", content="What is your name"),
]
# 获取模型的响应结果
resp = llm.chat(messages)
  • OpenAIOpenAI 모델과 상호 작용하는 데 사용되는 클래스입니다.
  • ChatMessage채팅 메시지 서식을 지정하는 클래스입니다.
  • OpenAI(): OpenAI 클래스의 인스턴스를 초기화합니다.
  • ChatMessage: 역할(예: "시스템", "사용자")과 메시지 내용을 지정하여 채팅 메시지 개체를 만듭니다.
    • role="system": 시스템 메시지를 정의하여 모델의 컨텍스트 또는 성격을 설정합니다.
    • role="user": 사용자가 보낸 메시지를 나타냅니다.
  • llm.chat(messages)정의된 메시지를 모델에 전송하고 응답 결과를 수신합니다.

이 코드는 채팅을 위한 시스템 및 사용자 메시지 설정을 통해 OpenAI 모델과 상호작용합니다.

 

4. RAG 프로세스 관찰

4.1 RAG 프로세스 관찰을 위한 환경 설정하기

!pip install llama-index
!pip install llama-index-vector-stores-qdrant
!pip install llama-index-readers-file
!pip install llama-index-embeddings-fastembed
!pip install llama-index-llms-openai
!pip install -U qdrant_client fastembed
  • llama-index라마 인덱스 기능을 위한 핵심 패키지입니다.
  • llama-index-vector-stores-qdrant라마 인덱스의 벡터 저장소로 Qdrant를 통합합니다.
  • llama-index-readers-file: 라마 인덱스에 파일 읽기 기능을 제공합니다.
  • llama-index-embeddings-fastembed벡터 임베딩을 생성하기 위한 라마 인덱스에 대한 FastEmbed 지원.
  • llama-index-llms-openai오픈AI 모델을 라마 인덱스에 통합.
  • qdrant_client벡터 검색 엔진인 Qdrant와 상호 작용하기 위한 클라이언트 측 라이브러리입니다.
  • fastembed임베딩 벡터를 빠르게 생성할 수 있는 라이브러리입니다.

4.2 임베딩 및 문서 인덱싱을 사용하여 RAG 프로세스 준비하기

from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
from llama_index.embeddings.fastembed import FastEmbedEmbedding
# from llama_index.embeddings.openai import OpenAIEmbedding
from llama_index.core.settings import Settings
Settings.embed_model = FastEmbedEmbedding(model_name="BAAI/bge-base-en-v1.5")
# Settings.embed_model = OpenAIEmbedding(embed_batch_size=10)
documents = SimpleDirectoryReader("data").load_data()
index = VectorStoreIndex.from_documents(documents)
  • VectorStoreIndex벡터 저장소 인덱스를 생성하고 관리하기 위한 클래스입니다. 이 인덱스는 문서 벡터를 기반으로 효율적인 유사성 검색 및 검색을 수행합니다.
  • SimpleDirectoryReader: 지정된 디렉토리에서 문서를 읽고 로드된 파일을 색인화하기 위해 사전 처리하는 클래스입니다.
  • FastEmbedEmbeddingFastEmbed 라이브러리를 사용하여 텍스트 임베딩 벡터를 생성하기 위한 임베딩 모델 클래스입니다. 모델 이름을 다음과 같이 지정합니다. "BAAI/bge-base-en-v1.5".
  • from llama_index.embeddings.openai import OpenAIEmbedding::
    • OpenAIEmbedding: OpenAI 임베딩 서비스를 통해 벡터를 생성하는 데 사용되는 임베딩 모델 클래스입니다. 기본적으로 주석 처리되어 있습니다. FastEmbed 대신 OpenAI 모델을 사용하려면 주석 처리를 해제하고 다음과 같은 매개 변수를 구성할 수 있습니다. embed_batch_size.
  • Settings글로벌 임베딩 모델 구성을 설정하는 클래스입니다. 글로벌 임베딩 모델 구성은 다음과 같이 설정할 수 있습니다. embed_model 속성 할당을 통해 사용할 임베딩 모델을 지정할 수 있습니다.
  • Settings.embed_model = FastEmbedEmbedding(model_name="BAAI/bge-base-en-v1.5"): 글로벌 사용 설정 FastEmbedEmbedding 를 임베딩 벡터 모델로 사용합니다.
  • documents = SimpleDirectoryReader("data").load_data()카탈로그에서 "data" 문서 데이터를 로드하고 전처리합니다. 디렉터리 이름이 프로젝트의 실제 경로에 맞게 조정되었는지 확인합니다.
  • index = VectorStoreIndex.from_documents(documents): 사전 처리된 문서를 기반으로 벡터 저장소 인덱스를 만듭니다. 이 단계에서는 문서의 벡터화된 표현을 구현하고 벡터 기반 쿼리를 허용합니다.

4.3 쿼리 벡터 스토리지 인덱스

벡터 스토어 인덱스가 설정되면 이를 사용하여 쿼리를 수행하고 관련 정보를 검색할 수 있습니다.

query_engine = index.as_query_engine()
response = query_engine.query("What did the author do growing up?")
print(response)
  • as_query_engine():: Will VectorStoreIndex 쿼리 엔진으로 변환합니다. 이 엔진을 사용하면 인덱스에 저장된 문서의 벡터 표현을 기반으로 검색을 수행하고 정보를 검색할 수 있습니다.
  • query(): 벡터 저장소 인덱스에 대한 쿼리를 실행합니다. 쿼리 문자열 "작성자는 성장하면서 무엇을 했나요?"는 벡터 임베딩에서 제공하는 컨텍스트를 기반으로 관련 문서를 검색하고 정보를 검색하는 데 사용됩니다.

마지막으로.response 쿼리 및 인덱스 문서를 기반으로 생성된 벡터 스토리지 인덱스에서 검색된 정보를 포함합니다.

 

평결에 도달하기

이 가이드에서는 라마 인덱스를 사용하여 검색 증강 생성(RAG) 프로세스를 설정하고 다양한 구성 요소와 통합하여 그 기능을 관찰했습니다. 먼저 Llama Index, OpenTelemetry, 다양한 임베딩 모델 등 필요한 라이브러리를 구성하고 설치했습니다.

다음으로 다음을 수행했습니다:

  • 필요한 경우 FastEmbed 또는 OpenAI 모델을 사용하여 임베딩 모델을 초기화하고 구성합니다.
  • 카탈로그에서 문서를 로드하고 색인을 생성하여 쿼리할 데이터를 준비합니다.
  • 색인된 문서를 기반으로 검색을 수행하고 관련 정보를 검색하도록 쿼리 엔진을 설정하세요.

이 단계를 수행하면 효율적인 문서 검색 및 쿼리 처리를 가능하게 하는 RAG 프로세스를 성공적으로 준비하게 됩니다. 이 설정은 벡터 기반 임베딩 및 인덱싱을 사용하여 고급 검색 및 정보 검색 기능을 제공합니다.

다양한 구성과 쿼리로 자유롭게 실험해 보면서 RAG 프로세스의 기능을 더 자세히 살펴보세요. 궁금한 점이 있거나 추가 사용자 지정이 필요한 경우 사용 중인 라이브러리의 설명서를 참조하거나 추가 안내를 받으세요.

© 저작권 정책

관련 문서

댓글 없음

댓글에 참여하려면 로그인해야 합니다!
지금 로그인
없음
댓글 없음...