使用 Elastic、OpenTelemetry 和 Langtrace 观测 Langchain 应用程序

Langchain 应用程序的使用正在增长。构建基于 RAG 的应用程序、简单的 AI 助手以及更多功能正变得司空见惯。观测这些应用程序更加困难。鉴于目前有各种各样的选择,本博客将展示如何将 OpenTelemetry 工具与 Langtrace 结合使用,并将其摄取到 Elastic Observability APM 中。

Observing Langchain applications with Elastic, OpenTelemetry, and Langtrace

随着 AI 驱动的应用程序变得越来越复杂,对强大的工具来监控和优化其性能的需求比以往任何时候都更加迫切。LangChain 已迅速成为 AI 开发领域中至关重要的框架,特别是在构建由大型语言模型 (LLM) 驱动的应用程序方面。随着其在开发人员中的采用率飙升,对有效的调试和性能优化工具的需求也日益明显。其中一种必不可少的工具是能够从 Langchain 应用程序获取和分析跟踪。跟踪为执行流程提供了宝贵的见解,帮助开发人员理解和改进其 AI 驱动的系统。 Elastic 可观测性的 APM 提供了使用 OpenTelemetry 跟踪 Langchain 应用程序的功能,但您需要第三方库。

有多种方法可以跟踪 Langchain。Langtrace 是其中一种选择。Langtrace 是一款 开源 可观测性软件,可让您捕获、调试和分析所有应用程序中的跟踪和指标。Langtrace 会自动捕获来自 LLM API/推理、向量数据库和基于 LLM 的框架的跟踪。Langtrace 的突出之处在于它与流行的 LLM 框架无缝集成,并且能够深入了解复杂的 AI 工作流程,而无需进行广泛的手动插桩。

Langtrace 有一个 SDK,这是一个轻量级库,可以安装并导入到您的项目中以收集跟踪。跟踪是基于 OpenTelemetry 的,可以导出到 Elastic,而无需使用 Langtrace API 密钥。

OpenTelemetry (OTel) 现在被广泛接受为跟踪的行业标准。作为主要的云原生计算基金会 (CNCF) 项目之一,其提交次数与 Kubernetes 一样多,它正在获得主要独立软件供应商 (ISV) 和云提供商的支持,这些供应商正在为该框架提供支持。

因此,许多基于 LangChain 的应用程序将具有超出 LLM 交互的多个组件。将 OpenTelemetry 与 LangChain 一起使用至关重要。

本博客将介绍如何使用 Langtrace SDK 跟踪连接到 Azure OpenAI 的简单 LangChain Chat 应用程序,在 DuckDuckGoSearch 中执行搜索并将输出导出到 Elastic。

先决条件

  • 一个 Elastic Cloud 帐户 — 立即注册,并熟悉 Elastic 的 OpenTelemetry 配置

  • 有一个 LangChain 应用程序需要插桩

  • 熟悉如何使用 OpenTelemetry 的 Python SDK

  • 您最喜欢的 LLM(AzureOpen AI)上的帐户,以及 API 密钥

  • 我们在本博客中使用的应用程序,名为

    langchainChat
    可以在 Github langhcainChat 中找到。它是使用 Azure OpenAI 和 DuckDuckGo 构建的,但您可以轻松地针对您选择的 LLM 和搜索进行修改。

应用程序概述和在 Elastic 中的输出

为了展示 Langtrace 和 Elastic 的强大功能,我们创建了一个简单的 LangChain 应用程序,该应用程序执行以下步骤

  1. 在命令行上获取客户输入。(查询)

  2. 通过 LangChain 将这些输入发送到 Azure OpenAI LLM。

  3. 利用链工具使用 DuckDuckGo 执行搜索。

  4. LLM 处理搜索结果,并将相关信息返回给用户。

这是一个示例交互

这是我们运行一些查询后服务视图的样子。

如您所见,Elastic Observability 的 APM 识别 LangChain 应用程序,并显示平均延迟、吞吐量和事务。我们的平均延迟为 30 秒,因为人类需要这么长时间才能输入查询(两次)。

您还可以选择其他选项卡来查看依赖项、错误、指标等。Elastic APM 的一个有趣之处在于,它能够使用通用分析 (eBPF) 输出,并针对此服务进行分析。以下是我们的服务依赖项(Azure OpenAI)及其平均延迟、吞吐量和失败事务的概览。

我们看到 Azure OpenAI 平均需要 4 秒才能给出结果。

如果我们深入查看事务并查看针对 Taylor Swift 和 Pittsburgh Steelers 的查询的跟踪,我们可以看到这两个查询及其对应的跨度。

在此跟踪中

  1. 用户发起查询

  2. 调用 Azure OpenAI,但它使用一个工具 (DuckDuckGo) 来获取一些结果

  3. Azure OpenAI 审查并将摘要返回给最终用户

  4. 对另一个查询重复上述步骤

我们注意到,另一个较长的跨度(除了 Azure OpenAI 之外)是 Duckduckgo(约 1000 毫秒)。我们可以单独查看该跨度并查看数据

配置

我们如何让所有这些在 Elastic 中显示出来?让我们回顾一下步骤

OpenTelemetry 配置

为了利用 OpenTelemetry 与 Langtrace 和 Elastic 的全部功能,我们需要配置 SDK 以生成跟踪,并正确设置 Elastic 的端点和授权。详细说明可以在 OpenTelemetry 自动检测设置文档中找到。

OpenTelemetry 环境变量

对于 Elastic,您可以在 Linux/Mac 环境中或直接在代码中设置以下 OpenTelemetry 环境变量

OTEL_EXPORTER_OTLP_ENDPOINT=12345.apm.us-west-2.aws.cloud.es.io:443
OTEL_EXPORTER_OTLP_HEADERS="Authorization=Bearer%20ZZZZZZZ"
OTEL_RESOURCE_ATTRIBUTES="service.name=langchainChat,service.version=1.0,deployment.environment=production"

在此设置中

  • OTEL_EXPORTER_OTLP_ENDPOINT 配置为将跟踪发送到 Elastic。

  • OTEL_EXPORTER_OTLP_HEADERS 为 Elastic APM 服务器提供必要的授权。

  • OTEL_RESOURCE_ATTRIBUTES 定义关键属性,如服务名称、版本和部署环境。

这些值可以从 Elastic 的 APM 配置屏幕的 OpenTelemetry 部分轻松获取。

注意:不需要代理;OTLP 跟踪消息直接发送到 Elastic 的 APM 服务器,从而简化了设置过程。

Langtrace 库

OpenTelemetry 的自动检测可以扩展到使用检测包跟踪其他框架。对于本博文,您将需要安装 Langtrace Python SDK

pip install langtrace-python-sdk 

安装后,您可以将以下代码添加到您的项目中

from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter

from langtrace_python_sdk import langtrace, with_langtrace_root_span

检测

安装必要的库并配置环境变量后,您可以使用自动检测来跟踪您的应用程序。例如,运行以下命令以使用 Elastic 检测您的 LangChain 应用程序

opentelemetry-instrument python langtrace-elastic-demo.py

Langtrace OpenTelemetry 库正确捕获流程,只需最少的手动检测,只需集成 OpenTelemetry 库即可。此外,Langtrace 捕获的 LLM 跨度还包括有用的元数据,例如令牌计数、模型超参数设置等。请注意,生成的跨度遵循 此处描述的 OTEL GenAI 语义。

总而言之,检测过程涉及

  1. 从命令行捕获客户输入(查询)。

  2. 通过 LangChain 将这些查询发送到 Azure OpenAI LLM。

  3. 利用链式工具(例如 DuckDuckGo)执行搜索。

  4. LLM 处理结果并将相关信息返回给用户。

结论

通过将 Langtrace 的强大功能与 Elastic 相结合,开发人员可以实现对其 LangChain 应用程序的无与伦比的可见性,从而确保优化的性能和更快的调试。这种强大的组合简化了监控 AI 驱动系统的复杂任务,使您能够专注于真正重要的事情 - 为您的用户提供价值。在整个博客中,我们涵盖了以下基本步骤和概念

  • 如何使用 OpenTelemetry 手动检测 Langchain

  • 如何正确初始化 OpenTelemetry 并添加自定义跨度

  • 如何在不需要收集器的情况下使用 Elastic 轻松设置 OTLP ENDPOINT 和 OTLP HEADERS

  • 如何在 Elastic Observability APM 中查看和分析跟踪

这些步骤为希望将强大的跟踪功能集成到其 LangChain 应用程序中的开发人员提供了清晰可行的指南。

我们希望本指南能够简化对 LangChain 实现 OpenTelemetry 跟踪的理解和实现,从而确保与 Elastic 的无缝集成。

有关 Elastic 使用 OpenTelemetry 的其他资源