技术领域正在快速发展,大型语言模型 (LLM) 正处于这场变革的前沿。从聊天机器人到智能应用程序副驾驶,LLM 正在变得越来越复杂。随着这些应用程序变得越来越复杂,确保其可靠性和性能至关重要。这就是可观测性介入的地方,通过 OpenLIT 仪表化库,在 OpenTelemetry 和 Elastic 的帮助下。
OpenLIT 是一款开源的可观测性和评估工具,可帮助您的 LLM 应用程序从游乐场转变为调试到生产。借助 OpenLit,您可以从 一系列集成(跨 LLM、VectorDB、框架和 GPU)中进行选择,以便毫不费力地开始跟踪 LLM 性能、使用情况和成本。在此博客中,我们将着眼于跟踪 OpenAI 和 LangChain,以将遥测数据发送到与 OpenTelemetry 兼容的端点,如 Elastic。
Elastic 本机支持 OpenTelemetry,它可以直接从应用程序(通过 OpenTelemetry SDK)或通过本机 OTel 收集器获取遥测数据。无需特殊代理。此外,Elastic 的 EDOT 提供了一组受支持的 OTel SDK 和 OTel 收集器。在此博客中,为了简单起见,我们将把应用程序直接连接到 Elastic 而无需收集器。
为什么可观测性对于 LLM 应用程序至关重要
监控 LLM 应用程序至关重要,原因如下。
-
跟踪 LLM 的使用频率对于使用情况和成本跟踪至关重要。
-
延迟对于跟踪非常重要,因为模型的响应时间可能会因传递给 LLM 的输入而异。
-
速率限制是一个常见挑战,尤其是在外部 LLM 中,因为应用程序更多地依赖于这些外部 API 调用。当达到速率限制时,它可能会阻碍这些应用程序使用这些 LLM 执行其基本功能。
通过密切关注这些方面,您不仅可以节省成本,还可以避免达到请求限制,从而确保您的 LLM 应用程序以最佳方式运行。
您应该关注哪些信号?
在应用程序中使用大型语言模型 (LLM) 与传统的机器学习 (ML) 模型不同。主要的是,LLM 通常通过外部 API 调用进行访问,而不是在本地或内部运行。捕获事件序列(使用跟踪)至关重要,尤其是在基于 RAG 的应用程序中,其中 LLM 使用前后可能存在事件。此外,分析聚合数据(通过指标)可快速概览请求、令牌和成本等数据,这对于优化性能和管理成本非常重要。以下是要监控的关键信号
跟踪
请求元数据:鉴于可以极大地影响响应质量和成本的各种参数(如温度和 top_p),这在 LLM 的上下文中非常重要。要监控的具体方面有
-
温度:指示模型输出所需的创造性或随机性级别。更改此参数可能会显著影响生成内容的性质。
-
top_p:通过从最可能的单词的某个百分比中进行选择来决定模型的选择性程度。“top_p”值越高,意味着模型会考虑更广泛的单词,从而使文本更加多样化。
-
模型名称或版本:对于随着时间的推移进行跟踪至关重要,因为 LLM 的更新可能会影响性能或响应特性。
-
提示详细信息:发送到 LLM 的确切输入,这与内部 ML 模型(其中输入可能更受控制且同质)不同,可能会千差万别,并影响输出的复杂性和成本影响。
响应元数据:鉴于与 LLM 的基于 API 的交互,跟踪响应的详细信息对于成本管理和质量评估至关重要
-
令牌:直接影响成本,是衡量响应长度和复杂性的指标。
-
成本:对于预算至关重要,因为基于 API 的成本可以随着请求数量和每个请求的复杂性而扩展。
-
完成详细信息:类似于提示详细信息,但从响应的角度来看,提供对模型输出特征以及潜在的低效率或意外成本领域的见解。
指标
请求量:向 LLM 服务发出的请求总数。这有助于了解需求模式并识别使用情况中的任何异常情况,例如突然的峰值或下降。
请求持续时间:处理请求并从 LLM 接收响应所花费的时间。这包括网络延迟和 LLM 生成响应所花费的时间,从而提供对 LLM 服务性能和可靠性的见解。
成本和令牌计数器: 跟踪随着时间推移累积的总成本和消耗的令牌对于预算和成本优化策略至关重要。 监控这些指标可以提醒您注意意外的增长,这可能表明 LLM 使用效率低下或需要进行优化。
使用 OpenLIT 实现自动检测
OpenLIT 自动化遥测数据捕获,简化了开发人员的流程。以下是设置的分步指南
1. 安装 OpenLIT SDK:
首先,您必须安装以下软件包:
pip install openlit
注意: OpenLIT 目前支持 Python,这是一种用于生成式 AI 的流行语言。该团队也正在努力尽快扩展对 JavaScript 的支持。
2. 获取您的 Elastic APM 凭据
-
登录您的 Elastic 云帐户。
-
打开侧边导航,然后单击“可观察性”下的“APM”。
-
确保 APM 服务器正在运行
-
在 APM 代理部分,选择 OpenTelemetry 并直接跳转到第 5 步(在您的应用程序中配置 OpenTelemetry)
-
复制并保存以下配置值:
OTEL_EXPORTER_OTLP_ENDPOINT和OTEL_EXPORTER_OTLP_HEADERS
3. 设置环境变量:
Elastic 的 OpenTelemetry 环境变量可以在 Linux 中(或在代码中)按如下方式设置。Elastic OTel 文档
export OTEL_EXPORTER_OTLP_ENDPOINT="YOUR_ELASTIC_APM_OTLP_URL"
export OTEL_EXPORTER_OTLP_HEADERS="YOUR_ELASTIC_APM_AUTH"
注意:请确保将 Bearer 之后的空格替换为 %20
4. 初始化 SDK:
您需要将以下内容添加到 LLM 应用程序代码中。
import openlit
openlit.init()
(可选)您可以通过设置以下内容来自定义应用程序名称和环境:
openlit.init(application_name="YourAppName",environment="Production")
GenAI 中最流行的库是 OpenAI(用于访问 LLM)和 Langchain(用于编排步骤)。 基于 Langchain 和 OpenAI 的 LLM 应用程序的检测示例如下所示
import getpass
import os
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage, SystemMessage
import openlit
# Auto-instruments LLM and VectorDB calls, sending OTel traces and metrics to the configured endpoint
openlit.init()
os.environ["OPENAI_API_KEY"] = getpass.getpass()
model = ChatOpenAI(model="gpt-4")
messages = [
SystemMessage(content="Translate the following from English into Italian"),
HumanMessage(content="hi!"),
]
model.invoke(messages)
使用 Kibana 可视化数据
在您的 LLM 应用程序进行检测后,下一步是可视化收集的数据。 请按照以下步骤导入预构建的 Kibana 仪表板以开始使用
-
复制 此处 提供的仪表板 NDJSON,并将其保存到具有扩展名的文件中
.ndjson. -
登录您的 Elastic 实例。
-
转到“堆栈管理”>“已保存的对象”。
-
单击“导入”并上传包含仪表板 NDJSON 的文件。
-
单击“导入”,您应该可以使用该仪表板。
该仪表板通过八个关键领域提供系统指标的深入概述:总成功请求数、请求持续时间分布、请求速率、使用成本和令牌、热门 GenAI 模型、按平台和环境划分的 GenAI 请求、令牌消耗与成本。 这些指标共同帮助识别高峰使用时间、延迟问题、速率限制和资源分配,从而促进性能调整和成本管理。 这种全面的细分有助于了解 LLM 性能,确保跨环境、预算需求和故障排除问题的一致运行,最终优化整体系统效率。
此外,您可以在 Elastic APM 中看到来自 OpenLIT 的 OpenTelemetry 跟踪,从而让您可以详细查看每个 LLM 请求。此设置通过帮助进行模型性能检查、跨环境平稳运行、预算规划和故障排除来确保更好的系统效率。
结论
可观察性对于 LLM 应用程序的有效运行至关重要。 OpenTelemetry 的开放标准和广泛支持,结合Elastic 的 APM、AIOps 和分析以及OpenLIT为 20 多种 GenAI 工具(从 LLM 到 VectorDB)提供的强大且简单的自动检测,使 LLM 性能完全可见。
希望这提供了一个易于理解的演练,介绍了如何使用 OpenTelemetry 和 OpenLit 检测 Langchain,以及将跟踪发送到 Elastic 是多么容易。
关于 Elastic 的 OpenTelemetry 的其他资源
-
使用 OpenTelemetry 和 Elastic 面向未来您的可观察性平台
-
检测资源