AI个人学习
和实操指南

AI工程学院:2.6RAG 可观察性- Arize Phoenix 设置

本文于 2024-12-08 15:13 更新,部分内容具有时效性,如有失效,请留言

欢迎来到本笔记本,在这里我们将探索如何使用 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 是一个专为机器学习和 AI 系统的可观察性和监控设计的综合工具。它提供了跟踪和分析机器学习模型及数据流水线各个方面的功能。

!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 镜像:
    docker run -p 6006:6006 -p 4317:4317 arizephoenix/phoenix:latest
    

    这将把 Phoenix 的 UI 和 REST API 暴露在 localhost:6006,并将 gRPC 端点用于 spans 的暴露在 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:用于处理 JSON 数据和操作系统交互的标准 Python 库。
  • getpass:一个用于安全输入密码的工具。
  • nest_asyncio:允许在 Jupyter 笔记本中使用 asyncio。
  • pandas (pd):一个强大的 Python 数据操作库。
  • tqdm:为循环提供进度条,用于跟踪数据处理进度。
  • phoenix (px):Arize 可观察性工具的一部分,提供交互式 UI 用于探索数据和监控机器学习模型。

配置 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 应用程序以进行分析和可观察性,请定义 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 库来设置追踪。以下是每个库的概述:

  • opentelemetry:作用:OpenTelemetry 的核心库,提供用于追踪和指标的 API。用法:包括 trace 模块,用于创建和管理追踪。
  • opentelemetry.exporter.otlp.proto.http.trace_exporter:作用:提供通过 HTTP 使用 OTLP(OpenTelemetry 协议)的追踪导出器。用法:该模块中的 OTLPSpanExporter 类用于将追踪数据发送到与 OTLP 兼容的后端,并通过设置端点进行配置。
  • opentelemetry.sdk.trace:作用:包含用于追踪的 SDK 实现,包括 TracerProvider用法
    • TracerProvider:管理 Tracer 实例,并负责导出在追踪中收集的 spans(工作单元)。
    • SimpleSpanProcessor:一种同步导出 spans 的处理器,用于处理和发送数据到导出器。
  • opentelemetry.sdk.trace.export:作用:提供用于导出追踪数据的类。用法
    • SimpleSpanProcessor:处理 spans 并使用指定的导出器进行导出,确保数据发送到后端以进行分析。

2.4 使用 OpenInference 对 OpenAI 进行 Instrumentation

为了将 OpenTelemetry 集成到 OpenAI 中,并为 OpenAI 模型交互启用追踪,请使用来自 openinference 库的 OpenAIInstrumentor

from openinference.instrumentation.openai import OpenAIInstrumentor
# 实例化并为 OpenAI 应用 instrumentation
OpenAIInstrumentor().instrument()
  • OpenAIInstrumentor:来自 openinference 库的类,用于对 OpenAI 的 API 调用进行 instrumentation,从而实现追踪和可观测性。
  • instrument():此方法配置 OpenAI API 客户端以自动生成并发送追踪数据到 OpenTelemetry 后端。它集成了已配置的追踪设置,使你能够监控和分析与 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 客户端实例,可用于与 OpenAI API 交互。
  • client.chat.completions.create(): 向 OpenAI API 发送请求以创建聊天补全。
    • model="gpt-4o": 指定用于生成补全的模型名称。确保模型名称正确并且你已在 OpenAI API 账户中启用。
    • messages: 包括对话历史的消息列表。本示例包含用户发送的单个消息请求:“Write a haiku。”
  • response.choices[0].message.content: 提取并打印模型生成的补全内容。

 

3. 追踪 Llama index

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 Index 和 OpenAI 模型集成的包。
  • openinference-instrumentation-llama-index==2.2.4: 提供对 Llama Index 交互进行 instrumentation 的工具。
  • llama-index-callbacks-arize-phoenix: 提供与 Arize Phoenix 回调集成。
  • arize-phoenix[llama-index]: 扩展 Arize Phoenix 以支持 Llama Index 追踪。

3.2 获取当前活动 Phoenix 会话的 URL

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

访问当前活动的 Phoenix 会话,检索其 URL,从而查看或共享用于监控和分析追踪数据的 Phoenix 界面。

3.3 设置 Llama Index 的追踪

要为 Llama Index 设置 OpenTelemetry 追踪,请配置 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 Index 进行追踪和可观测性 instrumentation。
  • trace_sdk.TracerProvider():初始化一个新的 Tracer 提供程序,用于创建和管理追踪数据。
  • SimpleSpanProcessor:用于同步导出 spans 并将数据发送到后端。
  • LlamaIndexInstrumentor().instrument(tracer_provider=tracer_provider):为 Llama Index 应用 instrumentation,并使用提供的 Tracer 提供程序进行追踪。

3.4 使用 OpenAI 与 Llama Index 交互

要使用 OpenAI 模型通过 Llama Index 执行完成请求,请使用以下代码:

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 与 Llama Index 进行聊天交互

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:创建聊天消息对象,指定角色(例如,“system”、“user”)和消息内容。
    • 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:为 Llama Index 提供 FastEmbed 支持,用于生成向量嵌入。
  • llama-index-llms-openai:集成 OpenAI 模型到 Llama Index。
  • qdrant_client:与 Qdrant 交互的客户端库,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(): 在向量存储索引上执行查询。查询字符串 "What did the author do growing up?" 用于搜索相关文档并基于向量嵌入提供的上下文检索信息。

最后,response 包含从向量存储索引中检索的信息,这些信息基于查询和索引文档生成。

 

结论

在本指南中,我们使用 Llama Index 设置了一个检索增强生成(RAG)流程,并将其与各种组件集成以观察其功能。我们首先配置和安装了所需的库,包括 Llama Index、OpenTelemetry 和各种嵌入模型。

我们接下来进行了以下操作:

  • 初始化并配置嵌入模型,必要时使用 FastEmbed 或 OpenAI 模型。
  • 加载并索引来自目录的文档,以准备数据进行查询。
  • 设置查询引擎,以便执行搜索并基于索引文档检索相关信息。

通过遵循这些步骤,您已成功准备好一个能够高效文档检索和查询处理的 RAG 流程。该设置利用基于向量的嵌入和索引,提供了先进的搜索和信息检索功能。

您可以随意尝试不同的配置和查询,以进一步探索 RAG 流程的功能。如有任何问题或需要进一步定制,请查阅所使用库的文档或获取更多指导。

AI轻松学

普通人的AI入门指南

帮助你以低成本、零基础学会如何利用AI工具。AI就像办公软件一样,是每个人的必备技能。 掌握AI会让你在求职中占据优势,在未来的工作和学习中事半功倍。

查看详情>
未经允许不得转载:首席AI分享圈 » AI工程学院:2.6RAG 可观察性- Arize Phoenix 设置

首席AI分享圈

首席AI分享圈专注于人工智能学习,提供全面的AI学习内容、AI工具和实操指导。我们的目标是通过高质量的内容和实践经验分享,帮助用户掌握AI技术,一起挖掘AI的无限潜能。无论您是AI初学者还是资深专家,这里都是您获取知识、提升技能、实现创新的理想之地。

联系我们
zh_CN简体中文