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

作者:来自 Elastic Bahubali ShettiKarthik KalyanaramanYemi Adejumobi

Langchain 应用程序的使用正在增长。构建基于 RAG 的应用程序、简单的 AI 助手等的能力正在成为常态。观察这些应用程序更加困难。考虑到现有的各种选项,本博客展示了如何将 OpenTelemetry 检测与 Langtrace 结合使用并将其导入 Elastic Observability APM。

随着人工智能驱动的应用程序变得越来越复杂,对用于监控和优化其性能的强大工具的需求比以往任何时候都更加重要。LangChain 已迅速成为人工智能开发领域的一个重要框架,特别是用于构建由大型语言模型 (LLM) 支持的应用程序。随着开发人员对其的采用率飙升,对有效调试和性能优化工具的需求也变得越来越明显。一种这样的基本工具是能够从 Langchain 应用程序获取和分析跟踪。跟踪提供了对执行流程的宝贵见解,帮助开发人员了解和改进他们的人工智能驱动系统。Elastic Observability 的 APM 提供了使用 OpenTelemetry 跟踪你的 Langchain 应用程序的能力,但你需要第三方库。

有几种用于跟踪 Langchain 的选项。Langtrace 就是这样一种选择。Langtrace 是一款开源可观察性软件,可让你捕获、调试和分析来自所有应用程序的跟踪和指标。Langtrace 会自动从 LLM API/推理、向量数据库和基于 LLM 的框架中捕获跟踪。 Langtrace 脱颖而出,因为它与流行的 LLM 框架无缝集成,并且能够提供对复杂 AI 工作流的深入洞察,而无需大量手动操作。

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

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 应用,该应用执行以下步骤:

  • 在命令行上获取客户输入。(查询)
  • 通过 LangChain 将这些发送到 Azure OpenAI LLM。
  • 利用链工具使用 DuckDuckGo 执行搜索。
  • LLM 处理搜索结果并将相关信息返回给用户。

以下是示例交互:

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

如你所见,Elastic Observability 的 APM 识别了 LangChain 应用程序,并显示了平均延迟、吞吐量和交易。我们的平均延迟为 30 秒,因为人类需要该日志才能输入查询(两次)。

你还可以选择其他选项卡来查看依赖项、错误、指标等。Elastic APM 的一个有趣部分是能够使用针对此服务也进行了分析的通用分析 (use universal profiling - eBPF) 输出。以下是我们服务的依赖项(Azure OpenAI)及其平均延迟、吞吐量和失败的 transactions:

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

如果我们深入研究交易并查看对 Taylor Swift 和 Pittsburgh Steelers 的查询跟踪,我们可以看到查询及其相应的跨度。

在此跟踪中:

  1. 用户进行查询
  2. 调用 Azure OpenAI,但它使用工具 (DuckDuckGo) 来获取一些结果
  3. Azure OpenAI 审核并向最终用户返回摘要
  4. 重复另一个查询

我们注意到另一个长跨度(除 Azure OpenAI 外)是 Duckduckgo(~1000ms)。我们可以单独查看跨度并查看数据:

配置:

我们如何让所有这些显示在 Elastic 中?让我们来看看这些步骤:

OpenTelemetry 配置

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

OpenTelemetry 环境变量:

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

ini 复制代码
1.  OTEL_EXPORTER_OTLP_ENDPOINT=12345.apm.us-west-2.aws.cloud.es.io:443
2.  OTEL_EXPORTER_OTLP_HEADERS="Authorization=Bearer%20ZZZZZZZ"
3.  OTEL_RESOURCE_ATTRIBUTES="service.

在此设置中:

  • OTEL_EXPORTER_OTLP_ENDPOINT 配置为将跟踪发送到 Elastic。
  • OTEL_EXPORTER_OTLP_HEADERS 为 Elastic APM 服务器提供必要的授权。
  • OTEL_RESOURCE_ATTRIBUTES 定义关键属性,如服务名称、版本和部署环境。

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

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

Langtrace 库:

OpenTelemetry 的自动检测功能可以扩展,以使用检测包来跟踪其他框架。对于这篇博文,你需要安装 Langtrace Python SDK:

pip install langtrace-python-sdk 

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

javascript 复制代码
1.  from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter

3.  from langtrace_python_sdk import langtrace, with_langtrace_root_span

检测:

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

opentelemetry-instrument python langtrace-elastic-demo.py 

除了集成 OpenTelemetry 库之外,Langtrace OpenTelemetry 库还可以通过最少的手动检测正确捕获流程。此外,Langtrace 捕获的 LLM 跨度还包括有用的元数据,例如 token 计数、模型超参数设置等。请注意,生成的跨度遵循此处描述的 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 无缝集成。

OpenTelemetry 与 Elastic 的其他资源

原文:Observing Langchain applications with Elastic, OpenTelemetry, and Langtrace --- Elastic Observability Labs

相关推荐
jwolf21 小时前
Elasticsearch向量搜索:从语义搜索到图搜图只有一步之遥
elasticsearch·搜索引擎·ai
你可以叫我仔哥呀2 小时前
ElasticSearch学习笔记三:基础操作(一)
笔记·学习·elasticsearch
hummhumm3 小时前
第 25 章 - Golang 项目结构
java·开发语言·前端·后端·python·elasticsearch·golang
java1234_小锋6 小时前
Elasticsearch中的节点(比如共20个),其中的10个选了一个master,另外10个选了另一个master,怎么办?
大数据·elasticsearch·jenkins
Elastic 中国社区官方博客6 小时前
Elasticsearch 开放推理 API 增加了对 IBM watsonx.ai Slate 嵌入模型的支持
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
我的运维人生6 小时前
Elasticsearch实战应用:构建高效搜索与分析平台
大数据·elasticsearch·jenkins·运维开发·技术共享
Mephisto.java11 小时前
【大数据学习 | Spark】Spark的改变分区的算子
大数据·elasticsearch·oracle·spark·kafka·memcache
mqiqe11 小时前
Elasticsearch 分词器
python·elasticsearch
小马爱打代码11 小时前
Elasticsearch简介与实操
大数据·elasticsearch·搜索引擎
java1234_小锋20 小时前
Elasticsearch是如何实现Master选举的?
大数据·elasticsearch·搜索引擎