Инженерная академия ИИ: 2.6 Наблюдаемость RAG - Arize Phoenix Setup

Добро пожаловать в этот блокнот, в котором мы рассмотрим, как использовать Llama Index для настройки и наблюдения за генерацией улучшений поиска (RAG) Упорядочить.

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

 

краткое содержание

В этом руководстве вы найдете полное руководство по настройке необходимых инструментов и библиотек, включая встроенные модели и индексы векторного хранилища, для эффективного поиска документов и обработки запросов. Мы расскажем обо всем, начиная с установки и настройки и заканчивая запросами и получением необходимой информации, чтобы помочь вам освоить расширенные возможности поиска в конвейере RAG.

 

введение (предмет)

Чтобы начать работу с этим блокнотом, вам потребуется базовое понимание языка Python и некоторое знакомство с концепциями машинного обучения. Если вы не знакомы с этими концепциями, не волнуйтесь - мы расскажем вам о них шаг за шагом!

предварительные условия

  • Python 3.7+
  • Jupyter Notebook или JupyterLab
  • Основы Python и концепции машинного обучения

 

1. Настройка

1.1 Установка необходимых программных пакетов

Чтобы начать настройку Arize Phoenix, вам нужно установить необходимые пакеты программного обеспечения.

Arize Phoenix - это комплексный инструмент, предназначенный для наблюдения и мониторинга систем машинного обучения и искусственного интеллекта. Он позволяет отслеживать и анализировать все аспекты моделей машинного обучения и конвейеров данных.

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

Эти команды выполнят установку:

  • arize-phoenix: Инструменты для машинного обучения наблюдаемости рабочих процессов.
  • openinference-instrumentation-openai: Пакеты для интеграции моделей OpenAI с инструментами наблюдаемости, такими как Arize Phoenix.

1.2 Настройка Arize Phoenix

Настройки можно выполнить тремя способами:

Читать далее Вот.

  • Командная строка (вычислительная техника)
    python3 -m phoenix.server.main serve
    
  • Docker запускает докер-образ phoenix с помощью следующей команды:
    docker run -p 6006:6006 -p 4317:4317 arizephoenix/phoenix:latest
    

    Это открывает пользовательский интерфейс Phoenix и 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)
  • jsonos: Стандартная библиотека Python для работы с данными JSON и взаимодействия с операционной системой.
  • getpass: Инструмент для безопасного ввода паролей.
  • nest_asyncio: Позволяет использовать asyncio в блокнотах Jupyter.
  • pandas (pd): Мощная библиотека манипулирования данными на языке Python.
  • tqdm: Предоставьте циклу индикатор выполнения для отслеживания хода обработки данных.
  • phoenix (px): часть инструмента Arize Observability Tool, предоставляющего интерактивный пользовательский интерфейс для изучения данных и мониторинга моделей машинного обучения.

настроить nest_asyncio чтобы обеспечить возможность одновременных вычислений в среде ноутбука и установить максимальную ширину столбцов pandas DataFrame для улучшения читабельности.

1.4 Запуск приложения Phoenix

px.launch_app()

Эта функция инициализирует и запускает приложение Phoenix, которое открывается в новой вкладке браузера по умолчанию и предоставляет интерактивный интерфейс для изучения наборов данных, визуализации работы модели и отладки.

1.5 Просмотр сеансов приложения Phoenix

После запуска приложения Phoenix вы можете взаимодействовать с ним непосредственно в блокноте, используя объекты сеанса. Выполните следующий код, чтобы запустить приложение Phoenix и просмотреть его в текущем сеансе:

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

Эта строка кода запускает приложение Phoenix и присваивает сессию переменной session, используя функцию view() Метод отображает приложения Phoenix непосредственно в интерфейсе ноутбука, обеспечивая интегрированную работу без необходимости переключаться между браузером и ноутбуком.

1.6 Установка конечной точки трассировки

Чтобы отправить данные трассировки в приложение Phoenix для анализа и наблюдения, определите URL конечной точки, на которой приложение Phoenix будет прослушивать входящие данные.

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

endpoint Переменная, хранящая URL конечной точки, используемой приложением Phoenix для прослушивания входящих данных трассировки.

 

2. Отслеживание OpenAI

Больше интеграции. Чтение.

2.1 Установка и импорт пакетов OpenAI

!pip install openai
import openai

openai: Клиентская библиотека Python для API OpenAI. Она позволяет отправлять запросы к моделям OpenAI (включая GPT-3 и GPT-4) для решения различных задач.

2.2 Настройка ключа API OpenAI

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: сначала код пытается получить ключ API из переменной окружения (OPENAI_API_KEY). Если ключ не найден, пользователю предлагается ввести безопасные данные с помощью 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. Ниже приведен обзор каждой библиотеки:

  • opentelemetry:Соответствует английским -ity, -ism, -ization: Основная библиотека OpenTelemetry, предоставляющая API для отслеживания и метрик.использование: Включает модуль трассировки для создания и управления трассировками.
  • opentelemetry.exporter.otlp.proto.http.trace_exporter:Соответствует английским -ity, -ism, -ization: Предоставляет экспортер трассировки с использованием протокола OTLP (OpenTelemetry Protocol) через HTTP.использование: Модуль OTLPSpanExporter Класс используется для отправки данных отслеживания на OTLP-совместимый бэкэнд и настраивается путем установки конечных точек.
  • opentelemetry.sdk.trace:Соответствует английским -ity, -ism, -ization: Содержит реализации SDK для отслеживания, включая TracerProvider.использование::
    • TracerProvider: Управляет экземплярами Tracer и отвечает за экспорт пролетов (единиц работы), собранных в трассах.
    • SimpleSpanProcessor: Процессор, который синхронизирует пролеты экспорта для обработки и отправки данных экспортеру.
  • opentelemetry.sdk.trace.export:Соответствует английским -ity, -ism, -ization: Предоставляет классы для экспорта данных отслеживания.использование::
    • SimpleSpanProcessor: Обработка диапазонов и их экспорт с помощью указанного экспортера гарантирует, что данные будут отправлены в бэкэнд для анализа.

2.4 Инструментирование OpenAI с помощью OpenInference

Чтобы интегрировать OpenTelemetry в OpenAI и включить отслеживание взаимодействия моделей OpenAI, используйте отслеживание из openinference библиотеки OpenAIInstrumentor.

from openinference.instrumentation.openai import OpenAIInstrumentor
# 实例化并为 OpenAI 应用 instrumentation
OpenAIInstrumentor().instrument()
  • OpenAIInstrumentor: Из openinference библиотечные классы для инструментария API-вызовов OpenAI, позволяющие отслеживать и наблюдать.
  • instrument(): Этот метод настраивает клиент OpenAI API на автоматическую генерацию и отправку данных трассировки в бэкэнд OpenTelemetry. Он объединяет настроенные параметры трассировки и позволяет отслеживать и анализировать процесс взаимодействия с моделями OpenAI.

Запустив этот код, вы сможете обеспечить отслеживание всех вызовов API OpenAI, чтобы получить подробную информацию об использовании и производительности модели.

2.5 Создание запроса к API OpenAI

Чтобы взаимодействовать с API OpenAI и получить ответ, используйте следующий код. В этом примере показано, как создать запрос на завершение чата и вывести результаты через API OpenAI:

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.
  • llama-index-core: Предоставляет основную функциональность и инструменты Llama Index.
  • llama-index-llms-openai: Пакет для интеграции индекса Llama с моделями OpenAI.
  • openinference-instrumentation-llama-index==2.2.4: Предоставляет инструменты для инструментального исследования взаимодействия индексов Llama.
  • llama-index-callbacks-arize-phoenix: Обеспечивает интеграцию с обратными вызовами Arize Phoenix.
  • arize-phoenix[llama-index]: Расширение Arize Phoenix для поддержки отслеживания индекса Llama.

3.2 Получение URL-адреса активной в данный момент сессии Phoenix

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

Доступ к активной сессии Phoenix и получение ее URL-адреса для просмотра или совместного использования интерфейса Phoenix для мониторинга и анализа данных отслеживания.

3.3 Настройка отслеживания индекса Llama

Чтобы настроить отслеживание OpenTelemetry для Llama Index, настройте провайдера Tracer и интегрируйте Llama Index Instrumentor.

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 класс для отслеживания и инструментария наблюдаемости индекса Llama.
  • trace_sdk.TracerProvider(): Инициализируйте новый провайдер Tracer для создания и управления данными трассировки.
  • SimpleSpanProcessor: Используется для синхронизации экспорта пролетов и отправки данных в бэкэнд.
  • LlamaIndexInstrumentor().instrument(tracer_provider=tracer_provider): Примените инструментарий к индексу Llama и используйте предоставленный провайдер Tracer для трассировки.

3.4 Использование OpenAI для взаимодействия с индексом ламы

Чтобы выполнить запрос на завершение через Llama Index с помощью модели 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"): Инициализируйте экземпляр класса OpenAI, используя указанную модель (например, gpt-4).
  • 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)
  • OpenAI: Классы, используемые для взаимодействия с моделями OpenAI.
  • 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.
  • llama-index-vector-stores-qdrant: Интегрируйте Qdrant в качестве векторного хранилища для Llama Index.
  • llama-index-readers-file: Предоставляет возможности чтения файлов для Llama Index.
  • llama-index-embeddings-fastembed: Поддержка FastEmbed для Llama Index для генерации векторных вкраплений.
  • llama-index-llms-openai: Интеграция моделей OpenAI в индекс Llama.
  • 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: Класс, который считывает документы из указанной директории и предварительно обрабатывает загруженные файлы для индексации.
  • FastEmbedEmbedding: Класс модели встраивания для генерации векторов встраивания текста с помощью библиотеки FastEmbed. Укажите имя модели в виде "BAAI/bge-base-en-v1.5".
  • from llama_index.embeddings.openai import OpenAIEmbedding::
    • OpenAIEmbedding: Класс модели встраивания, используемый для генерации векторов через сервис встраивания OpenAI. По умолчанию он закомментирован. Если вы хотите использовать модель OpenAI вместо FastEmbed, вы можете откомментировать его и настроить параметры, например 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():: Воля VectorStoreIndex Преобразование в механизм запросов. Этот механизм позволяет выполнять поиск и извлекать информацию на основе векторного представления документов, хранящихся в индексе.
  • query(): Выполнение запроса к индексу векторного хранилища. Строка запроса "Чем занимался автор в детстве?" используется для поиска соответствующих документов и извлечения информации на основе контекста, предоставляемого векторным вложением.

Наконец-то.response Содержит информацию, извлекаемую из индексов векторного хранения, которые создаются на основе запросов и индексных документов.

 

вынести вердикт

В этом руководстве мы создали процесс Retrieval Augmented Generation (RAG) с помощью Llama Index и интегрировали его с различными компонентами, чтобы пронаблюдать за его функциональностью. Сначала мы настроили и установили необходимые библиотеки, включая Llama Index, OpenTelemetry и различные модели встраивания.

Далее мы сделали следующее:

  • Инициализируйте и настройте модель встраивания, при необходимости используя модели FastEmbed или OpenAI.
  • Загружает и индексирует документы из каталога, чтобы подготовить данные для запросов.
  • Настройте механизм запросов для выполнения поиска и получения релевантной информации на основе проиндексированных документов.

Выполнив эти шаги, вы успешно подготовили процесс RAG, обеспечивающий эффективный поиск документов и обработку запросов. Эта настройка обеспечивает расширенные возможности поиска и извлечения информации с помощью векторного встраивания и индексирования.

Не стесняйтесь экспериментировать с различными конфигурациями и запросами, чтобы глубже изучить возможности процесса RAG. Если у вас возникнут вопросы или потребуется дополнительная настройка, обратитесь к документации используемой библиотеки или за дальнейшими рекомендациями.

© заявление об авторских правах

Похожие статьи

Нет комментариев

Вы должны войти в систему, чтобы участвовать в комментариях!
Войти сейчас
нет
Нет комментариев...