AI Engineering Academy: 2.6 Observabilidad RAG - Configuración Arize Phoenix
Base de conocimientos de IAActualizado hace 10 meses Círculo de intercambio de inteligencia artificial 16.9K 00
Bienvenido a este cuaderno, donde exploraremos cómo utilizar Llama Index para configurar y observar la generación de mejoras de recuperación (RAG) Racionalizar.
https://github.com/adithya-s-k/AI-Engineering.academy/tree/main/RAG/01_RAG_Observability
breve
Esta guía proporciona un tutorial completo sobre la configuración de las herramientas y bibliotecas necesarias, incluidos los modelos incrustados y los índices de almacenes vectoriales, para la recuperación eficaz de documentos y el procesamiento de consultas. Cubriremos todos los aspectos, desde la instalación y la configuración hasta la consulta y la recuperación de información relevante, para ayudarle a familiarizarse con las capacidades de búsqueda avanzada de la canalización RAG.
introducción (un tema)
Para empezar con este cuaderno, necesitarás conocimientos básicos de Python y cierta familiaridad con los conceptos de aprendizaje automático. Si no estás familiarizado con estos conceptos, no te preocupes: ¡te guiaremos paso a paso!
condiciones previas
- Python 3.7+
- Jupyter Notebook o JupyterLab
- Conceptos básicos de Python y aprendizaje automático
1. Configuración
1.1 Instalación de los paquetes de software necesarios
Para empezar a configurar Arize Phoenix, tendrás que instalar los paquetes de software necesarios.
Arize Phoenix es una herramienta integral diseñada para la observabilidad y monitorización de sistemas de aprendizaje automático e IA. Proporciona la capacidad de rastrear y analizar todos los aspectos de los modelos de aprendizaje automático y las canalizaciones de datos.
!pip install arize-phoenix
!pip install openinference-instrumentation-openai
Estos comandos se instalarán:
arize-phoenix
Herramientas para la observabilidad del flujo de trabajo en el aprendizaje automático.openinference-instrumentation-openai
Paquetes para integrar modelos OpenAI con herramientas de observabilidad como Arize Phoenix.
1.2 Configuración de Arize Phoenix
Hay tres maneras de completar los ajustes de la siguiente manera:
Seguir leyendo Toma.
- línea de comandos (informática)
python3 -m phoenix.server.main serve
- Docker inicia la imagen docker de phoenix utilizando el siguiente comando:
docker run -p 6006:6006 -p 4317:4317 arizephoenix/phoenix:latest
Esto expone la interfaz de usuario de Phoenix y la API REST a localhost:6006, y expone el punto final gRPC para spans a localhost:4317.
- cuadernos
import phoenix as px px.launch_app()
1.3 Importar las bibliotecas necesarias y configurar el entorno
Importe las bibliotecas necesarias y configure el entorno antes de proceder al tratamiento y la evaluación de los datos:
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
Biblioteca estándar de Python para el manejo de datos JSON y la interacción con el sistema operativo.getpass
: Herramienta para introducir contraseñas de forma segura.nest_asyncio
Permite el uso de asyncio en cuadernos Jupyter.pandas
(pd
): Una potente biblioteca de manipulación de datos de Python.tqdm
Barra de progreso: proporcione una barra de progreso para que el bucle pueda seguir el progreso del procesamiento de datos.phoenix
(px
): parte de la herramienta de observabilidad Arize, que proporciona una interfaz de usuario interactiva para explorar datos y supervisar modelos de aprendizaje automático.
configure nest_asyncio
para permitir evaluaciones concurrentes en un entorno de cuaderno y establecer el ancho máximo de columna del DataFrame de pandas para mejorar la legibilidad.
1.4 Iniciar la aplicación Phoenix
px.launch_app()
Esta función inicializa y lanza la aplicación Phoenix, que se abre en una nueva pestaña del navegador predeterminado y proporciona una interfaz interactiva para explorar conjuntos de datos, visualizar el rendimiento del modelo y depurar.
1.5 Visualización de las sesiones de la aplicación Phoenix
Una vez lanzada la aplicación Phoenix, puede interactuar con la aplicación directamente en el cuaderno utilizando objetos de sesión. Ejecute el siguiente código para lanzar la aplicación Phoenix y verla en la sesión actual:
# 启动并查看 Phoenix 应用会话
(session := px.launch_app()).view()
Esta línea de código inicia la aplicación Phoenix y asigna la sesión a una variable llamada session, utilizando el método view()
El método muestra las aplicaciones Phoenix directamente en la interfaz del portátil, proporcionando una experiencia integrada sin tener que cambiar entre el navegador y el portátil.
1.6 Establecer el punto final de la traza
Para enviar datos de rastreo a una aplicación Phoenix para su análisis y observabilidad, defina la URL del punto final donde la aplicación Phoenix escucha los datos entrantes.
endpoint = "http://127.0.0.1:6006/v1/traces"
endpoint
Variable que almacena la URL del punto final utilizada por la aplicación Phoenix para escuchar los datos de rastreo entrantes.
2. Seguimiento de OpenAI
Más integración. Lectura.
2.1 Instalar e importar paquetes de OpenAI
!pip install openai
import openai
openai
: Biblioteca cliente de Python para la API de OpenAI. Te permite enviar peticiones a los modelos de OpenAI (incluyendo GPT-3 y GPT-4) para una variedad de tareas.
2.2 Configuración de la clave API de 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
- Obtención de la clave API: el código primero intenta obtener la clave API de la variable de entorno (OPENAI_API_KEY). Si no se encuentra la clave, se solicita al usuario una entrada segura a través de getpass.
- Establecer clave de API: La clave de API recuperada o suministrada se establece como clave para la biblioteca cliente de OpenAI.
- Almacenar la clave API: por último, almacene la clave API en una variable de entorno para garantizar que siempre esté disponible durante la sesión.
2.3 Configuración de OpenTelemetry para el seguimiento
Para habilitar el seguimiento de sus interacciones OpenAI, configurar OpenTelemetry y configurar los componentes necesarios.
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)
Biblioteca OpenTelemetry
En el código proporcionado, se utilizan varias bibliotecas OpenTelemetry para configurar el rastreo. A continuación se muestra una visión general de cada biblioteca:
opentelemetry
:corresponde al inglés -ity, -ism, -ization: Biblioteca central de OpenTelemetry, que proporciona APIs para el seguimiento y las métricas.uso: Incluye el módulo de trazas para crear y gestionar trazas.opentelemetry.exporter.otlp.proto.http.trace_exporter
:corresponde al inglés -ity, -ism, -ization: Proporciona un exportador de trazas utilizando OTLP (OpenTelemetry Protocol) sobre HTTP.usoEl móduloOTLPSpanExporter
se utiliza para enviar datos de seguimiento a un backend compatible con OTLP y se configura mediante la creación de puntos finales.opentelemetry.sdk.trace
:corresponde al inglés -ity, -ism, -ization: Contiene implementaciones del SDK para el seguimiento, incluyendoTracerProvider
.uso::TracerProvider
Gestión de instancias Tracer: gestiona las instancias Tracer y es responsable de exportar los spans (unidades de trabajo) recogidos en los traces.SimpleSpanProcessor
Procesador que sincroniza los tramos de exportación para procesar y enviar datos al exportador.
opentelemetry.sdk.trace.export
:corresponde al inglés -ity, -ism, -ization: Proporciona clases para exportar datos de seguimiento.uso::SimpleSpanProcessor
El procesamiento de tramos y su exportación mediante el exportador especificado garantiza que los datos se envíen al backend para su análisis.
2.4 Instrumentación de OpenAI con OpenInference
Para integrar OpenTelemetry en OpenAI y habilitar el seguimiento de las interacciones del modelo OpenAI, utilice los datos del modelo openinference
bibliotecas OpenAIInstrumentor
.
from openinference.instrumentation.openai import OpenAIInstrumentor
# 实例化并为 OpenAI 应用 instrumentation
OpenAIInstrumentor().instrument()
OpenAIInstrumentor
: Deopeninference
clases de biblioteca para la instrumentación de las llamadas a la API de OpenAI para permitir el seguimiento y la observabilidad.instrument()
Este método configura el cliente de la API OpenAI para generar y enviar automáticamente datos de rastreo al backend OpenTelemetry. Integra los ajustes de rastreo configurados y permite supervisar y analizar el proceso de interacción con los modelos de OpenAI.
Al ejecutar este código, puede asegurarse de que todas las llamadas a la API de OpenAI se rastrean para capturar información detallada sobre el uso y el rendimiento del modelo.
2.5 Realizar una solicitud a la API de OpenAI
Para interactuar con la API de OpenAI y obtener una respuesta, utilice el siguiente código. Este ejemplo muestra cómo crear una solicitud de finalización de chat e imprimir los resultados a través de la API de 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()
Inicializa una instancia de cliente OpenAI que puede ser usada para interactuar con la API OpenAI.client.chat.completions.create()
: Envía una solicitud a la API de OpenAI para crear un complemento de chat.model="gpt-4o"
: Especifique el nombre del modelo utilizado para generar el complemento. Asegúrate de que el nombre del modelo es correcto y de que lo has habilitado en tu cuenta de la API de OpenAI.messages
:: Una lista de mensajes que incluye el historial de diálogos. Este ejemplo contiene una única petición de mensaje enviada por el usuario: "Escribe un haiku".
response.choices[0].message.content
: Extrae e imprime complementos generados por el modelo.
3. Seguimiento del índice Llama
3.1 Instalación e importación de las bibliotecas necesarias
!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
:: Paquete central para la funcionalidad del Índice Llama.llama-index-core
: Proporciona las funciones y herramientas básicas de Llama Index.llama-index-llms-openai
Un paquete para integrar el Índice Llama con modelos OpenAI.openinference-instrumentation-llama-index==2.2.4
: Proporciona herramientas para la instrumentación de las interacciones del Índice Llama.llama-index-callbacks-arize-phoenix
: Proporciona integración con las llamadas de retorno de Arize Phoenix.arize-phoenix[llama-index]
Ampliación de Arize Phoenix para el seguimiento del índice Llama.
3.2 Obtener la URL de la sesión Phoenix activa en ese momento
# 获取当前活动的 Phoenix 会话的 URL
px.active_session().url
Acceda a la sesión de Phoenix activa en ese momento y recupere su URL para ver o compartir la interfaz de Phoenix para supervisar y analizar los datos de seguimiento.
3.3 Configuración del seguimiento del Índice Llama
Para configurar el seguimiento de OpenTelemetry para Llama Index, configure el proveedor Tracer e integre 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
: Deopeninference.instrumentation.llama_index
clase para el seguimiento y la instrumentación de la observabilidad del Índice Llama.trace_sdk.TracerProvider()
: Inicializa un nuevo proveedor Tracer para crear y gestionar datos de rastreo.SimpleSpanProcessor
: Se utiliza para sincronizar la exportación de tramos y enviar los datos al backend.LlamaIndexInstrumentor().instrument(tracer_provider=tracer_provider)
: Aplica instrumentación al Índice Llama y utiliza el proveedor Tracer proporcionado para el rastreo.
3.4 Uso de OpenAI para interactuar con el Índice Llama
Para realizar una solicitud de finalización a través de Llama Index utilizando un modelo OpenAI, utilice el siguiente código:
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
: Dellama_index
para importar clases OpenAI que permitan la interacción con modelos OpenAI.OpenAI(model="gpt-4o-mini")
Inicializa una instancia de la clase OpenAI utilizando el modelo especificado (por ejemplo, gpt-4).llm.complete(...)
Envía un texto al modelo para generar el contenido de la respuesta.
3.5 Interacción por chat con Llama Index mediante 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
Clases utilizadas para interactuar con los modelos de OpenAI.ChatMessage
Clase para formatear mensajes de chat.OpenAI()
Inicializa una instancia de la clase OpenAI.ChatMessage
: Crea un objeto de mensaje de chat, especificando el rol (por ejemplo, "sistema", "usuario") y el contenido del mensaje.role="system"
Definir mensajes del sistema para establecer el contexto o la personalidad del modelo.role="user"
: Representa un mensaje enviado por el usuario.
llm.chat(messages)
Envía el mensaje definido al modelo y recibe el resultado de la respuesta.
Este código interactúa con el modelo OpenAI a través de la configuración del sistema y de los mensajes de usuario para el chat.
4. Observación del proceso GAR
4.1 Preparación del entorno para observar el proceso GAR
!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
Paquete central para la funcionalidad del Índice Llama.llama-index-vector-stores-qdrant
: Integra Qdrant como almacén de vectores para Llama Index.llama-index-readers-file
: Proporciona capacidades de lectura de archivos para Llama Index.llama-index-embeddings-fastembed
Soporte FastEmbed para Llama Index para generar incrustaciones vectoriales.llama-index-llms-openai
: Integrar modelos OpenAI en Llama Index.qdrant_client
Biblioteca cliente para interactuar con Qdrant, un motor de búsqueda vectorial.fastembed
Biblioteca para la generación rápida de vectores de incrustación.
4.2 Preparación de un proceso GAR mediante incrustación e indexación de documentos
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
Clases para crear y gestionar índices de almacenes vectoriales. El índice realiza una búsqueda y recuperación de similitudes eficiente basada en vectores de documentos.SimpleDirectoryReader
Clase que lee documentos de un directorio especificado y preprocesa los archivos cargados para su indexación.FastEmbedEmbedding
Clase de modelo de incrustación para generar vectores de incrustación de texto utilizando la biblioteca FastEmbed. Especifique el nombre del modelo como"BAAI/bge-base-en-v1.5"
.from llama_index.embeddings.openai import OpenAIEmbedding
::OpenAIEmbedding
La clase de modelo de incrustación utilizada para generar vectores a través del servicio de incrustación de OpenAI. Está comentada por defecto. Si desea utilizar un modelo OpenAI en lugar de FastEmbed, puede descomentarla y configurar los parámetros, tales comoembed_batch_size
.
Settings
Clase para establecer la configuración global del modelo de incrustación. La configuración global del modelo de incrustación puede establecerse dando a la claseembed_model
que especifica el modelo de incrustación a utilizar.Settings.embed_model = FastEmbedEmbedding(model_name="BAAI/bge-base-en-v1.5")
: Configurar el uso globalFastEmbedEmbedding
como modelo de vector de incrustación.documents = SimpleDirectoryReader("data").load_data()
: Del catálogo"data"
Cargar y preprocesar los datos de los documentos. Asegúrese de que los nombres de directorio se ajustan a la ruta real del proyecto.index = VectorStoreIndex.from_documents(documents)
Creación de un índice vectorial basado en documentos preprocesados. Este paso implementa una representación vectorizada del documento y permite realizar consultas basadas en vectores.
4.3 Índice de almacenamiento de vectores de consulta
Una vez configurado el índice del almacén vectorial, puedes utilizarlo para realizar consultas y recuperar información relevante.
query_engine = index.as_query_engine()
response = query_engine.query("What did the author do growing up?")
print(response)
as_query_engine()
:: WillVectorStoreIndex
Convertir en un motor de consulta. Este motor permite realizar búsquedas y recuperar información a partir de una representación vectorial de los documentos almacenados en un índice.query()
: Ejecuta una consulta en un índice de almacén vectorial. La cadena de consulta "¿A qué se dedicaba el autor de pequeño?" se utiliza para buscar documentos relevantes y recuperar información basada en el contexto proporcionado por la incrustación vectorial.
Por fin.response
Contiene información recuperada de los índices de almacenamiento vectorial que se generan en función de las consultas y los documentos índice.
llegar a un veredicto
En esta guía, configuramos un proceso de Generación Aumentada de Recuperación (RAG) utilizando Llama Index y lo integramos con varios componentes para observar su funcionalidad. Primero configuramos e instalamos las bibliotecas necesarias, incluyendo Llama Index, OpenTelemetry y varios modelos de incrustación.
A continuación hicimos lo siguiente:
- Inicializar y configurar el modelo de incrustación, utilizando modelos FastEmbed u OpenAI si es necesario.
- Carga e indexa documentos del catálogo para preparar los datos para la consulta.
- Configure el motor de consulta para realizar búsquedas y recuperar información relevante a partir de los documentos indexados.
Siguiendo estos pasos, habrá preparado con éxito un proceso RAG que permite la recuperación eficiente de documentos y el procesamiento de consultas. Esta configuración proporciona capacidades avanzadas de búsqueda y recuperación de información mediante la incrustación e indexación basadas en vectores.
Siéntase libre de experimentar con diferentes configuraciones y consultas para explorar más a fondo las capacidades del proceso GAR. Si tiene alguna duda o necesita una mayor personalización, consulte la documentación de la biblioteca que esté utilizando o para obtener más orientación.
© declaración de copyright
Derechos de autor del artículo Círculo de intercambio de inteligencia artificial Todos, por favor no reproducir sin permiso.
Artículos relacionados
Sin comentarios...