Инженерная академия ИИ: 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)
json
,os
: Стандартная библиотека 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. Если у вас возникнут вопросы или потребуется дополнительная настройка, обратитесь к документации используемой библиотеки или за дальнейшими рекомендациями.
© заявление об авторских правах
Авторское право на статью Круг обмена ИИ Пожалуйста, не воспроизводите без разрешения.
Похожие статьи
Нет комментариев...