云计算百科
云计算领域专业知识百科平台

LlamaIndex 系列【42】可观测性(Observability)

文章目录

  • 1. 概述
  • 2. 集成示例
    • 2.1 使用方式
    • 2.2 第三方集成
      • 2.2.1 OpenTelemetry
      • 2.2.2 LlamaTrace(托管版 Arize Phoenix)
      • 2.2.3 SigNoz
      • 2.2.4 Weights and Biases (W&B) Weave
      • 2.2.5 MLflow
      • 2.2.6 OpenLLMetry
      • 2.2.7 Arize Phoenix(本地部署)
      • 2.2.8 Langfuse
      • 2.2.9 Literal AI
      • 2.2.10 Comet Opik
      • 2.2.11 Argilla
      • 2.2.12 Agenta
      • 2.2.13 Deepeval
      • 2.2.14 Confident AI
      • 2.2.15 Maxim AI
  • 3. Callbacks(回调机制)
    • 3.1 回调事件类型
    • 3.2 内置回调模块
    • 3.3 TokenCounting 迁移指南
  • 4. Instrumentation(插桩模块)
    • 4.1 核心类说明
    • 4.2 使用插桩做可观测性
      • 4.2.1 自定义 EventHandler
      • 4.2.3 自定义 Event
      • 4.2.3 自定义 Span & SpanHandler
      • 4.2.4 Span 进入/退出
      • 4.2.4 Dispatcher 层级机制

1. 概述

针对开发规范大模型应用(RAG 系统、智能 Agent),一项核心要求是:能够对系统整体以及各个组件进行观测、调试、评估。

LlamaIndex 提供一键可观测性🔭能力,让你能够在生产环境中构建规范可靠的大模型应用。

该功能可以让 LlamaIndex 库无缝对接合作伙伴提供的强大可观测/评估工具。只需配置一次变量,即可实现如下能力:

  • 查看大模型 / Prompt 的输入与输出
  • 保障任意组件(大模型、嵌入模型)输出符合预期
  • 查看索引构建与查询阶段的调用链路追踪

注意 可观测性现已由 instrumentation(插桩)模块实现(v0.10.20 及以上版本可用)。

本页面提及的大量工具与集成仍在使用旧版 CallbackManager,或未使用 set_global_handler,我们已对这类集成做标记说明。

2. 集成示例

2.1 使用方式

开启能力通常只需要如下代码:

from llama_index.core import set_global_handler

# 通用用法
set_global_handler("<handler_name>", **kwargs)

set_global_handler 的所有关键字参数,都会透传给底层回调处理器。

配置完成!执行链路会自动流转到下游服务,你就可以使用应用执行链路追踪等能力。

2.2 第三方集成

2.2.1 OpenTelemetry

OpenTelemetry 是广泛使用的开源链路追踪与可观测套件,支持大量后端存储(Jaeger、Zipkin、Prometheus 等)。

LlamaIndex 的 OpenTelemetry 集成会追踪 LlamaIndex 产生的全部事件:大模型调用、Agent、RAG 流水线组件等。LlamaIndex 原生插桩采集到的所有数据,都可以导出为 OpenTelemetry 格式。

安装依赖:

pip install llama-index-observability-otel

RAG 流水线默认配置示例:

from llama_index.observability.otel import LlamaIndexOpenTelemetry
from llama_index.core import SimpleDirectoryReader, VectorStoreIndex
from llama_index.llms.openai import OpenAI
from llama_index.embeddings.openai import OpenAIEmbedding
from llama_index.core import Settings

# 初始化插桩对象
instrumentor = LlamaIndexOpenTelemetry()

if __name__ == "__main__":
embed_model = OpenAIEmbedding(model_name="text-embedding-3-small")
llm = OpenAI(model="gpt-4.1-mini")

# 开始监听事件
instrumentor.start_registering()

# 加载文档、构建索引
documents = SimpleDirectoryReader(
input_dir="./data/paul_graham/"
).load_data()

index = VectorStoreIndex.from_documents(documents, embed_model=embed_model)
query_engine = index.as_query_engine(llm=llm)

query_result_one = query_engine.query("Who is Paul?")
query_result_two = query_engine.query("What did Paul do?")

自定义高级配置示例:

import json
from pydantic import BaseModel, Field
from typing import List

from llama_index.observability.otel import LlamaIndexOpenTelemetry
from opentelemetry.exporter.otlp.proto.http.trace_exporter import (
OTLPSpanExporter,
)

# 自定义 Span 导出器
span_exporter = OTLPSpanExporter("http://0.0.0.0:4318/v1/traces")

# 初始化插桩对象
instrumentor = LlamaIndexOpenTelemetry(
service_name_or_resource="my.test.service.1",
span_exporter=span_exporter,
debug=True,
)

if __name__ == "__main__":
instrumentor.start_registering()
# …业务代码

我们还提供演示仓库,展示如何追踪 Agent 工作流,并将链路数据存入 Postgres 数据库。

2.2.2 LlamaTrace(托管版 Arize Phoenix)

LlamaIndex 与 Arize AI 合作推出 LlamaTrace:托管式链路追踪、可观测与评估平台,原生适配开源 LlamaIndex 用户,并对接 LlamaCloud。

项目基于开源 Arize Phoenix 构建。Phoenix 以 Notebook 优先的体验监控模型与大模型应用,提供:

  • 大模型链路追踪:跟踪大模型应用完整执行流程,理解内部逻辑,排查检索、工具调用等问题。
  • 大模型评估:利用大模型能力评估生成模型/应用的相关性、有害性等指标。

安装集成包:

pip install -U llama-index-callbacks-arize-phoenix

前往 https://llamatrace.com/login 注册账号,创建 API Key,填入环境变量。

# Phoenix 可实时自动采集展示 LlamaIndex 应用链路
# 正常运行 LlamaIndex 业务,链路会自动采集展示

import llama_index.core
import os

PHOENIX_API_KEY = "<PHOENIX_API_KEY>"
os.environ["OTEL_EXPORTER_OTLP_HEADERS"] = f"api_key={PHOENIX_API_KEY}"
llama_index.core.set_global_handler(
"arize_phoenix", endpoint="https://llamatrace.com/v1/traces"
)

参考文档:

  • Trace LlamaIndex with Arize AX
  • Arize agent evaluation guide
  • Arize LLM evaluation guide

在这里插入图片描述

2.2.3 SigNoz

SigNoz 是开源可观测平台,原生基于 OpenTelemetry 构建,在统一面板提供链路、日志、指标,支持私有化部署与云服务。搭配 LlamaIndex,可以查看完整 RAG、Agent 工作流详细链路,同时监控 Token 消耗、延迟、错误率、大模型模型分布等核心指标。

安装依赖:

pip install \\
opentelemetry-distro \\
opentelemetry-exporter-otlp \\
opentelemetry-instrumentation-httpx \\
opentelemetry-instrumentation-system-metrics \\
llama-index \\
openinference-instrumentation-llama-index

执行自动插桩安装:

opentelemetry-bootstrap –action=install

通过 OpenTelemetry 启动 LlamaIndex 应用:

OTEL_RESOURCE_ATTRIBUTES="service.name=<service_name>" \\
OTEL_EXPORTER_OTLP_ENDPOINT="https://ingest.<region>.signoz.cloud:443" \\
OTEL_EXPORTER_OTLP_HEADERS="signoz-ingestion-key=<your_ingestion_key>" \\
OTEL_EXPORTER_OTLP_PROTOCOL=grpc \\
OTEL_TRACES_EXPORTER=otlp \\
OTEL_METRICS_EXPORTER=otlp \\
OTEL_LOGS_EXPORTER=otlp \\
OTEL_PYTHON_LOG_CORRELATION=true \\
OTEL_PYTHON_LOGGING_AUTO_INSTRUMENTATION_ENABLED=true \\
opentelemetry-instrument <your_run_command>

  • <service_name>:你的服务名称
  • <region>:SigNoz Cloud 对应区域
  • <your_ingestion_key>:SigNoz 采集密钥
  • <your_run_command>:启动应用命令,例如 python main.py

📌 私有化 SigNoz:绝大多数步骤一致,修改 Endpoint,移除 ingestion‑key 请求头即可。

之后即可查看 LlamaIndex 自动/手动导出的链路、日志、指标。

在这里插入图片描述

参考文档:

  • SigNoz LlamaIndex Integration Docs
  • SigNoz LLamaIndex Q&A RAG Demo

2.2.4 Weights and Biases (W&B) Weave

W&B Weave 用于跟踪、实验、评估、部署、迭代大模型应用。具备高可扩展性与灵活性,覆盖应用开发全流程。

该集成基于 LlamaIndex 插桩模块,将 Span/事件注册为 Weave 调用。默认 Weave 自动打补丁,追踪主流大模型库与框架调用。

安装:

pip install weave

获取 W&B API Key:访问 https://wandb.ai 注册账号,在 https://wandb.ai/authorize 复制密钥。

import weave
from llama_index.llms.openai import OpenAI

# 使用项目名初始化 Weave
weave.init("llamaindex-demo")

# 所有 LlamaIndex 操作自动开启追踪
llm = OpenAI(model="gpt-4o-mini")
response = llm.complete("William Shakespeare is ")
print(response)

链路包含执行耗时、Token 消耗、成本、输入输出、异常、嵌套调用、流式数据。自定义函数想要被追踪,加上装饰器 @weave.op()。

在这里插入图片描述

可通过 autopatch_settings 控制自动补丁行为:

weave.init(..., autopatch_settings={"openai": {"enabled": False}})

无需额外配置 LlamaIndex;调用 weave.init() 即开启追踪。

该集成几乎支持 LlamaIndex 全部组件:流式/异步、补全、对话、工具调用、Agent、工作流、RAG。参考官方 W&B Weave × LlamaIndex 文档。

2.2.5 MLflow

MLflow 是开源 MLOps/LLMOps 平台,聚焦机器学习项目完整生命周期,保障各阶段可管理、可追踪、可复现。MLflow Tracing 基于 OpenTelemetry,支持 LlamaIndex 应用一键插桩。

开源项目,无需注册账号、配置密钥,安装后直接编码。

import mlflow

mlflow.llama_index.autolog() # 开启 MLflow 追踪

支持能力表:AgentWorkflow 等新特性需要 MLflow >= 2.18.0

流式异步引擎AgentWorkflowAgentWorkflow
✅ ✅ ✅ ✅ ✅ (>=2.18) ✅ (>=2.18)

参考文档:MLflow LlamaIndex integration,支持实验跟踪、评估、依赖管理。

2.2.6 OpenLLMetry

OpenLLMetry:基于 OpenTelemetry 的开源大模型应用追踪监控项目,对接主流可观测平台,数分钟完成安装部署。

from traceloop.sdk import Traceloop

Traceloop.init()

在这里插入图片描述

2.2.7 Arize Phoenix(本地部署)

可以直接使用开源版 Phoenix 本地实例,不需要 LlamaTrace 账号与 API Key,Phoenix 服务本地启动。

pip install -U llama-index-callbacks-arize-phoenix

import phoenix as px

# 控制台输出链接,浏览器打开 Web UI
px.launch_app()
# 页面初始为空,运行 LlamaIndex 业务后自动展示链路

import llama_index.core
llama_index.core.set_global_handler("arize_phoenix")

参考示例:

  • Auto‑Retrieval Guide with Pinecone and Arize Phoenix
  • Arize Phoenix Tracing Tutorial

2.2.8 Langfuse

Langfuse 开源大模型工程平台,帮助团队协作调试、分析、迭代大模型应用。LlamaIndex 集成可监控性能、链路、指标;完整记录上下文增强、大模型查询流程,可直接在 Langfuse UI 查看。

安装依赖:

pip install llama-index langfuse openinference-instrumentation-llama-index

配置环境变量:

import os

# 从 Langfuse 项目设置页获取密钥 https://cloud.langfuse.com
os.environ["LANGFUSE_PUBLIC_KEY"] = "pk-lf-…"
os.environ["LANGFUSE_SECRET_KEY"] = "sk-lf-…"
os.environ["LANGFUSE_HOST"] = "https://cloud.langfuse.com" # 欧洲区
# os.environ["LANGFUSE_HOST"] = "https://us.cloud.langfuse.com" # 美国区

初始化客户端并校验连通性:

from langfuse import get_client

langfuse = get_client()

if langfuse.auth_check():
print("Langfuse client is authenticated and ready!")
else:
print("Authentication failed. Please check your credentials and host.")

开启 OpenInference LlamaIndex 插桩,自动采集事件导出 OTel Span:

from openinference.instrumentation.llama_index import LlamaIndexInstrumentor

LlamaIndexInstrumentor().instrument()

即可在 Langfuse 查看 LlamaIndex 链路:

  • LlamaIndex example trace
  • Example trace link in Langfuse

参考文档:

  • Langfuse Documentation
  • Tracing LlamaIndex Agents

2.2.9 Literal AI

Literal AI 是大模型评估 & 可观测解决方案,帮助产研团队稳定、快速、规模化交付大模型应用。支持对话会话、Agent 运行记录自动落日志。

使用方式:

pip install literalai

云平台注册账号,在设置页面获取 API Key;私有化部署需要记录服务地址。

from llama_index.core import set_global_handler

# 通过环境变量 LITERAL_API_KEY、LITERAL_API_URL 配置凭证
set_global_handler("literalai")

参考文档:

  • Literal AI integration with Llama Index
  • Build a Q&A application with LLamaIndex and monitor it with Literal AI

2.2.10 Comet Opik

Opik 是 Comet 推出的开源端到端大模型评估平台。

注册 Comet 获取 API Key;私有化部署记录服务地址。

pip install opik

设置环境变量:

export OPIK_API_KEY="<OPIK_API_KEY>"
export OPIK_WORKSPACE="<OPIK_WORKSPACE>"
# export OPIK_URL_OVERRIDE="<OPIK_URL_OVERRIDE>" # 私有化可选

业务代码:

from llama_index.core import Document, VectorStoreIndex, set_global_handler

# 读取环境变量 OPIK_API_KEY, OPIK_WORKSPACE
set_global_handler("opik")

# 需要配置 OPENAI_API_KEY
index = VectorStoreIndex.from_documents([Document.example()])
query_engine = index.as_query_engine()

questions = [
"Tell me about LLMs",
"How do you fine‑tune a neural network ?",
"What is RAG ?",
]

for question in questions:
print(f"> \\033[92m{question}\\033[0m")
response = query_engine.query(question)
print(response)

运行后 Opik 后台可查看链路。

在这里插入图片描述

参考文档:

  • Llama‑index + Opik documentation page
  • Llama‑index integration cookbook

2.2.11 Argilla

Argilla 面向 AI 工程师与领域专家的协作工具,用于构建高质量数据集。

需要先部署 Argilla Server。

pip install argilla-llama-index

from llama_index.core.instrumentation import get_dispatcher
from argilla_llama_index import ArgillaHandler

argilla_handler = ArgillaHandler(
dataset_name="query_llama_index",
api_url="http://localhost:6900",
api_key="argilla.apikey",
number_of_retrievals=2,
)
root_dispatcher = get_dispatcher()
root_dispatcher.add_span_handler(argilla_handler)
root_dispatcher.add_event_handler(argilla_handler)

在这里插入图片描述

参考文档:

  • Getting started with Argilla’s LlamaIndex Integration
  • Other example tutorials

2.2.12 Agenta

Agenta 开源 LLMOps 平台,用于构建健壮大模型 AI 应用,提供可观测、Prompt 管理、大模型评估全套工具。

pip install agenta llama-index openinference-instrumentation-llama-index

import os
import agenta as ag
from openinference.instrumentation.llama_index import LlamaIndexInstrumentor
from llama_index.core import SimpleDirectoryReader, VectorStoreIndex

os.environ["AGENTA_API_KEY"] = "your_agenta_api_key"
os.environ["AGENTA_HOST"] = "https://cloud.agenta.ai" # 私有化替换地址

ag.init()
LlamaIndexInstrumentor().instrument()

@ag.instrument()
def document_search_app(user_query: str):
"""文档检索应用"""
docs = SimpleDirectoryReader("data").load_data()
search_index = VectorStoreIndex.from_documents(docs)
query_processor = search_index.as_query_engine()
answer = query_processor.query(user_query)
return answer

运行后,链路自动采集到 Agenta,用于调试、关联配置与 Prompt、评估性能、查询数据、监控指标。 在这里插入图片描述 参考文档:

  • Documentation Observability for LlamaIndex with Agenta
  • Notebook Observability for LlamaIndex with Agenta

2.2.13 Deepeval

DeepEval(Confident AI)开源大模型评估框架,内置 14+ 评估指标(摘要、幻觉、回答相关性、忠实度、RAGAS 等)。可以结合 LlamaIndex 追踪调试失败用例;也可以对接 Confident AI 托管平台做线上无参考评估。

pip install -U deepeval llama-index

import deepeval
from deepeval.integrations.llama_index import instrument_llama_index
import llama_index.core.instrumentation as instrument

deepeval.login("<your-confident-api-key>")
instrument_llama_index(instrument.get_dispatcher())

2.2.14 Confident AI

Confident AI 是一款大模型可观测与评估平台。其原生支持 OpenTelemetry 的追踪 SDK confident-trace,可以订阅 LlamaIndex 的插桩调度器(instrumentation dispatcher),因此每一次 Agent 执行、工作流步骤、检索动作与工具调用,都会以完整层级结构展示在观测面板(Observatory)中。

使用方式:

pip install confident-trace llama-index-core llama-index-llms-openai

前往 Confident AI 获取项目 API Key,并和模型服务商密钥一起配置环境变量。 欧盟区域用户需要额外设置:

  • CONFIDENT_OTEL_ENDPOINT="https://eu.otel.confident-ai.com/v1/traces";
  • 不配置则链路数据默认上报至美国服务节点。

export CONFIDENT_API_KEY="<your-confident-api-key>"
export OPENAI_API_KEY="<your-openai-key>"

在程序启动阶段、定义/运行 Agent 之前,调用一次 init()。Agent 照常使用 agent.run(),无需额外配置回调与调度器:

import asyncio

from confident_trace import init, shutdown
from llama_index.core.agent.workflow import FunctionAgent
from llama_index.core.tools import FunctionTool
from llama_index.llms.openai import OpenAI

def multiply(a: float, b: float) –> float:
"""用于两个数字相乘"""
return a * b

async def main():
init()
try:
agent = FunctionAgent(
name="assistant",
llm=OpenAI(model="gpt-4o-mini"),
tools=[FunctionTool.from_defaults(multiply)],
system_prompt="你是一名可以执行计算的助手。",
)
print(await agent.run("3 乘以 12 等于多少?"))
finally:
shutdown()

if __name__ == "__main__":
asyncio.run(main())

Agent 执行记录、工作流步骤、检索、工具调用以及带 Token 消耗统计的模型调用都会被自动采集。

说明:模型 Span 依赖受支持的服务商 SDK;自定义封装、本地大模型只能采集到 Agent 结构,不会生成 LLM 内部 Span;向量 Embedding 调用目前不会被追踪。 如果是长时间运行的服务,只在服务启动时调用一次 init(),优雅关闭时调用 shutdown(),不要每个请求都重复调用。

你可以在 Confident AI 的工作流页面配置上报进来的链路数据处理规则:

  • 评估规则:使用指标集对流入的 Trace 自动执行评估
  • 分类器:按照问题类型、情感倾向或者自定义维度给 Trace 打标签,方便后续分组、筛选
  • 队列接入:将生产链路送入标注队列,供内部评审团队人工复核
  • 数据集接入:把线上真实 Trace 归集到数据集,复用为回归测试用例

Trace、Span、对话线程都可以单独配置工作流。如果想在代码里单独为某一条 Trace 指定评估指标集,可以调用 update_trace 方法。

参考教程:

  • LlamaIndex 集成教程:完整部署、链路属性、多轮执行归集为对话线程
  • Confident AI 大模型链路追踪
  • 在线评估

2.2.15 Maxim AI

Maxim AI 是 Agent 仿真、评估、可观测平台,为 RAG、Agent 等大模型工作流提供完整追踪监控评估。

pip install maxim-py

import os
from dotenv import load_dotenv
from maxim import Config, Maxim
from maxim.logger import LoggerConfig
from maxim.logger.llamaindex import instrument_llamaindex

load_dotenv()
MAXIM_API_KEY = os.getenv("MAXIM_API_KEY")
MAXIM_LOG_REPO_ID = os.getenv("MAXIM_LOG_REPO_ID")

maxim = Maxim(Config(api_key=MAXIM_API_KEY))
logger = maxim.logger(LoggerConfig(id=MAXIM_LOG_REPO_ID))
instrument_llamaindex(logger, debug=True)

print("✅ Maxim instrumentation enabled for LlamaIndex")

示例 Agent 业务代码:

from llama_index.core.agent import FunctionAgent
from llama_index.core.tools import FunctionTool
from llama_index.llms.openai import OpenAI

def add_numbers(a: float, b: float) –> float:
"""两数相加"""
return a + b

add_tool = FunctionTool.from_defaults(fn=add_numbers)
llm = OpenAI(model="gpt-4o-mini", temperature=0)

agent = FunctionAgent(
tools=[add_tool],
llm=llm,
verbose=True,
system_prompt="You are a helpful calculator assistant.",
)

import asyncio
response = await agent.run("What is 15 + 25?")
print(f"Response: {response}")


3. Callbacks(回调机制)

LlamaIndex 提供回调机制,用于库内部逻辑调试、统计、追踪。CallbackManager 可以挂载任意多个回调处理器。

除记录事件数据,还可以统计每个事件耗时、触发次数;同时记录事件链路图,回调处理器可以自由消费这些数据。例如 LlamaDebugHandler 默认会在每次操作结束打印完整事件链路。

3.1 回调事件类型

  • CHUNKING:文本分片前后日志
  • NODE_PARSING:文档解析为节点的日志
  • EMBEDDING:文本嵌入数量日志
  • LLM:大模型调用模板与返回日志
  • QUERY:查询开始、结束
  • RETRIEVE:查询命中的检索节点日志
  • SYNTHESIZE:结果合成调用日志
  • TREE:摘要树生成日志
  • SUB_QUESTION:子问题生成与应答日志

你可以自定义回调处理器消费事件,也可以使用内置实现。

3.2 内置回调模块

  • TokenCountingHandler:灵活统计 Prompt、补全、嵌入 Token 用量
  • LlamaDebugHanlder:基础事件追踪打印
  • WandbCallbackHandler:对接 W&B 做事件链路跟踪
  • AimCallback:记录大模型输入输出
  • OpenInferenceCallbackHandler:AI 推理记录
  • OpenAIFineTuningHandler:保存全部 LLM 输入输出,导出 OpenAI 微调数据集

3.3 TokenCounting 迁移指南

旧版 Token 统计逻辑已废弃。

旧方案:Token 统计直接写死在 llm_predictor、embed_model 对象,静态 gpt‑2 tokenizer,计数不准。 新方案:迁移为回调 TokenCountingHandler,支持自定义分词器、生命周期控制、多索引独立计数器。

示例代码:

import tiktoken
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
from llama_index.core.callbacks import CallbackManager, TokenCountingHandler
from llama_index.core import Settings

token_counter = TokenCountingHandler(
tokenizer=tiktoken.encoding_for_model("gpt-3.5-turbo").encode,
verbose=False,
)

Settings.callback_manager = CallbackManager([token_counter])

document = SimpleDirectoryReader("./data").load_data()
index = VectorStoreIndex.from_documents(documents)

print(token_counter.total_embedding_token_count)
token_counter.reset_counts()

response = index.as_query_engine().query("What did the author do growing up?")
print(
"Embedding Tokens: ", token_counter.total_embedding_token_count, "\\n",
"LLM Prompt Tokens: ", token_counter.prompt_llm_token_count, "\\n",
"LLM Completion Tokens: ", token_counter.completion_llm_token_count, "\\n",
"Total LLM Token Count: ", token_counter.total_llm_token_count,
)

4. Instrumentation(插桩模块)

instrumentation 模块(v0.10.20+)旨在替代旧版 Callbacks。过渡期两者同时可用;未来全部集成迁移完成后,旧 callbacks 模块将会移除。

新插桩模块用于 LlamaIndex 应用埋点观测:可以自定义逻辑处理事件、跟踪 Span;也允许用户自定义事件,在代码指定位置触发。

参考资源:

  • Notebook Guides:Basic Usage、Observing Model Calls、Observing All Events
  • API Reference:Instrumentation API Reference

4.1 核心类说明

  • Event:代表代码执行过程中某一个时间点发生的事件。
  • EventHandler:监听 Event,事件触发时执行业务逻辑。
  • Span:代表一段代码的执行生命周期,内部包含多个 Event。
  • SpanHandler:负责 Span 的进入、退出、异常中断。
  • Dispatcher:分发 Event,发送 Span 进入/退出/中断信号给对应 Handler。

4.2 使用插桩做可观测性

核心用途就是可观测,对接第三方可以拿到完整调用栈详细链路。

使用三步:

  • 获取 Dispatcher(分发器)
  • 【可选】挂载自定义 EventHandler
  • 【可选】挂载自定义 SpanHandler
  • 即可捕获 LlamaIndex 库及扩展包产生的全部事件与 Span。

    4.2.1 自定义 EventHandler

    from llama_index.core.instrumentation.event_handlers.base import BaseEventHandler
    from llama_index.core.instrumentation.events.llm import (
    LLMChatEndEvent, LLMChatStartEvent, LLMChatInProgressEvent,
    )

    class ExampleEventHandler(BaseEventHandler):
    events = []

    @classmethod
    def class_name(cls):
    return "ExampleEventHandler"

    def handle(self, event):
    print("———————–")
    print(event.id_)
    print(event.timestamp)
    print(event.span_id)

    if isinstance(event, LLMChatStartEvent):
    print(event.messages)
    elif isinstance(event, LLMChatInProgressEvent):
    print(event.response.delta)
    elif isinstance(event, LLMChatEndEvent):
    print(event.response)
    self.events.append(event)
    print("———————–")

    # 挂载
    import llama_index.core.instrumentation as instrument
    dispatcher = instrument.get_dispatcher(__name__)
    dispatcher.add_event_handler(ExampleEventHandler())

    4.2.3 自定义 Event

    继承 BaseEvent,基于 pydantic 定义字段,dispatcher 触发事件。

    from llama_index.core.instrumentation.event.base import BaseEvent
    from pydantic import Field

    class MyEvent(BaseEvent):
    new_field_1 = Field(...)
    new_field_2 = Field(...)

    import llama_index.core.instrumentation as instrument
    dispatcher = instrument.get_dispatcher(__name__)
    dispatcher.event(MyEvent(new_field_1=..., new_field_2=...))

    4.2.3 自定义 Span & SpanHandler

    Span 代表一段耗时执行过程。自定义 Span 需要配套实现 BaseSpanHandler,实现 new_span()、prepare_to_exit_span()、prepare_to_drop_span() 三个抽象方法,注册到 dispatcher。

    4.2.4 Span 进入/退出

    import llama_index.core.instrumentation as instrument
    dispatcher = instrument.get_dispatcher(__name__)

    def func():
    dispatcher.span_enter(...)
    try:
    val = ...
    except:
    dispatcher.span_drop(...)
    else:
    dispatcher.span_exit(...)
    return val

    # 装饰器语法糖
    @dispatcher.span
    def func():
    ...

    4.2.4 Dispatcher 层级机制

    Dispatcher 具备层级关系,类似 Python logging。根 Dispatcher 的 Handler 接收全部子模块事件;子模块 Dispatcher 的 Handler 只捕获本模块事件。

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » LlamaIndex 系列【42】可观测性(Observability)
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!