当前位置: 首页 > news >正文

使用 Elastic、OpenLLMetry 和 OpenTelemetry 跟踪 LangChain 应用程序

作者:来自 Elastic Bahubali Shetti

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

LangChain 已迅速成为 AI 开发领域的关键框架,特别是用于构建由大型语言模型 (LLM) 支持的应用程序。随着开发人员对其的采用率飙升,对有效调试和性能优化工具的需求也变得越来越明显。其中一种必不可少的工具就是能够从 LangChain 应用程序获取和分析跟踪。跟踪提供了对执行流程的宝贵见解,帮助开发人员了解和改进他们的 AI 驱动系统。

有几种用于 Langchain 的跟踪选项。一种是 Langsmith,非常适合详细跟踪和对大型语言模型 (LLMs) 请求的完整细分。但是,它是特定于 Langchain 的。OpenTelemetry (OTel) 现在被广泛接受为跟踪的行业标准。作为主要的云原生计算基金会 (CNCF) 项目之一,它拥有与 Kubernetes 一样多的提交,正在获得为该框架提供支持的主要 ISV 和云提供商的支持。

因此,许多基于 Langchain 的应用程序将具有多个组件,而不仅仅是 LLM 交互。将 OpenTelemetry 与 Langchain 结合使用至关重要。除了 Langsmith 之外,OpenLLMetry 是跟踪 Langchain 应用的一个可用选项。

本博客将展示如何使用 OpenLLMetry 库 opentelemetry-instrumentation-langchain 将 Langchain 跟踪引入 Elastic。

先决条件:

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

  • 拥有 Langchain 应用程序进行检测
  • 熟悉使用 OpenTelemetry 的 Python SDK
  • 你最喜欢的 LLM 上的帐户,带有 API 密钥

概述

在强调跟踪时,我创建了一个简单的 LangChain 应用程序,它执行以下操作:

  1. 在命令行上获取客户输入。(查询)
  2. 通过 LangChain 将这些发送到 Azure OpenAI LLM。
  3. 链工具设置为使用 Tavily 进行搜索
  4. LLM 使用输出将相关信息返回给用户。

如你所见,Elastic Observability 的 APM 识别了 LangChain App,并且还显示了完整的跟踪(通过手动检测完成):

如上图所示:

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

代码是手动检测的,但也可以使用自动检测。

OpenTelemetry 配置

在使用 OpenTelemetry 时,我们需要配置 SDK 以生成跟踪并配置 Elastic 的端点和授权。说明可在 OpenTelemetry Auto-Instrumentation 设置文档中找到。

OpenTelemetry 环境变量:

可以在 Linux 中(或在代码中)按如下方式设置 Elastic 的 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,并且还提供了相应的授权标头。这些可以从 OpenTelemetry 下的 Elastic APM 配置屏幕轻松获取:

注意:不需要代理,我们只需将 OTLP 跟踪消息直接发送到 Elastic 的 APM 服务器。

OpenLLMetry 库:

OpenTelemetry 的自动检测功能可以通过检测包进行扩展,以跟踪其他框架。

首先,你必须安装以下包:

pip install opentelemetry-instrumentation-langchain

此库由 OpenLLMetry 开发。

然后,你需要将以下内容添加到代码中。

from opentelemetry.instrumentation.langchain import LangchainInstrumentor
LangchainInstrumentor().instrument()

检测

添加库并设置环境变量后,即可使用自动检测。使用自动检测,可执行以下操作:

opentelemetry-instrument python tavilyAzureApp.py

OpenLLMetry 库确实可以正确提取流程,只需进行最少的手动操作,除了添加 OpenLLMetry 库。

  1. 在命令行上获取客户输入。(查询)
  2. 通过 LangChain 将这些发送到 Azure OpenAI LLM。
  3. 链工具设置为使用 Tavily 进行搜索
  4. LLM 使用输出将相关信息返回给用户。

手动检测

如果你想从应用程序中获取更多详细信息,则需要手动检测。要获得更多跟踪,请遵循我的 Python 检测指南。本指南将引导你完成设置必要的 OpenTeleMemtry ,此外,你还可以查看 OTel 中有关使用 Python 进行检测的文档。

请注意,环境变量 OTEL_EXPORTER_OTLP_HEADERS 和 OTEL_EXPORTER_OTLP_ENDPOINT 的设置如上一节所述。你还可以设置 OTEL_RESOURCE_ATTRIBUTES。

一旦你按照任一指南中的步骤启动跟踪器,你基本上只需添加你想要获取更多详细信息的跨度即可。在下面的示例中,只添加了一行代码用于跨度初始化。

查看下面的 with tracer.start_as_current_span("getting user query") as span: 的位置

# Creates a tracer from the global tracer provider
tracer = trace.get_tracer("newsQuery")async def chat_interface():print("Welcome to the AI Chat Interface!")print("Type 'quit' to exit the chat.")with tracer.start_as_current_span("getting user query") as span:while True:user_input = input("\nYou: ").strip()if user_input.lower() == 'quit':print("Thank you for chatting. Goodbye!")breakprint("AI: Thinking...")try:result = await chain.ainvoke({"query": user_input})print(f"AI: {result.content}")except Exception as e:print(f"An error occurred: {str(e)}")if __name__ == "__main__":asyncio.run(chat_interface())

如你所见,通过手动检测,我们得到以下跟踪:

当我们输入查询函数时会调用它。async def chat_interface()

结论

在本博客中,我们讨论了以下内容:

  • 如何使用 OpenTelemetry 手动检测 LangChain
  • 如何正确初始化 OpenTelemetry 并添加自定义跨度
  • 如何使用 Elastic 轻松设置 OTLP ENDPOINT 和 OTLP HEADERS,而无需收集器
  • 在 Elastic Observability APM 中查看跟踪

希望这能提供一个易于理解的指南,介绍如何使用 OpenTelemetry 检测 Langchain,以及将跟踪发送到 Elastic 是多么容易。

OpenTelemetry 与 Elastic 的其他资源

  • 使用 Elastic 上的 OpenTelemetry 实现独立性
  • 使用 Elastic 和 OpenTelemetry 在 Kubernetes 上实现现代可观察性和安全性
  • 使用 OpenTelemetry 和 Elastic 进行日志记录的 3 种模型
  • 将免费和开放的 Elastic APM 添加为 Elastic Observability 部署的一部分
  • 使用 OpenTelemetry 和 Elastic 监控 OpenAI API 和 GPT 模型
  • 使用 OpenTelemetry 和 Elastic 为你的可观察性平台提供面向未来的保障
  • 检测资源:
    • Python:自动检测、手动检测
    • Java:自动检测、手动检测
    • Node.js:自动检测、手动检测
    • .NET:自动检测、手动检测

还可以登录 cloud.elastic.co 试用 Elastic 的免费试用版。

原文:Tracing Langchain apps with Elastic, OpenLLMetry, and OpenTelemetry — Elastic Observability Labs

相关文章:

使用 Elastic、OpenLLMetry 和 OpenTelemetry 跟踪 LangChain 应用程序

作者:来自 Elastic Bahubali Shetti Langchain 应用程序的使用正在增长。构建基于 RAG 的应用程序、简单的 AI 助手等的能力正在成为常态。观察这些应用程序更加困难。考虑到现有的各种选项,本博客展示了如何将 OpenTelemetry 检测与 OpenLLMetry 结合使…...

【论文复现】VALL-E:语音合成的新里程

📕作者简介:热爱跑步的恒川,致力于C/C、Java、Python等多编程语言,热爱跑步,喜爱音乐、摄影的一位博主。 📗本文收录于论文复现系列,大家有兴趣的可以看一看。 📘相关专栏C语言初阶、…...

java项目之微服务在线教育系统设计与实现(springcloud)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的闲一品交易平台。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 微服务在线教育系统设计与…...

P3-1.【结构化程序设计】第一节——知识要点:算法、顺序结构程序设计、if语句的语法结构及各种用法

讲解视频: P3-1.【结构化程序设计】第一节——知识要点:算法、顺序结构程序设计、if语句的语法结构及各种用法 知识要点:算法、顺序结构程序设计、if语句的语法结构及各种用法 一、算法、顺序结构程序设计任务分析 知识要点:算法…...

Vue2——单页应用程序路由的使用

一.单页应用程序与多页应用程序之间的比较 二.单页的应用场景 系统类网站 / 内部网站 / 文档类网站 / 移动端网站 三.路由的介绍 1. 什么是路由 路由是一种映射关系 2. Vue中的路由是什么 路径和组件的映射关系 四.VueRouter的使用 5个基础步骤(固定) …...

变分法(Calculus of Variations)

变分法(Calculus of Variations)是数学的一个分支,主要研究函数的极值问题,即寻找一个函数,使得某个泛函达到最大值或最小值。泛函是将函数作为变量的函数,与通常的函数不同,泛函的变量是函数本…...

包括 Nginx、Gateway、Nacos、Dubbo、Sentinel、RocketMQ 和 Seata 的调用链路描述:

以下是一个更详细和清晰的客户端请求在 Spring Cloud Alibaba 框架中,包括 Nginx、Gateway、Nacos、Dubbo、Sentinel、RocketMQ 和 Seata 的调用链路描述: 1. 客户端请求 用户在浏览器或移动应用中发起请求(例如,获取用户信息的…...

【P2-1】ESP8266 WIFI模块STA、AP、STA+AP、TCP/UDP透传工作模式介绍与AT指令介绍

前言:本文对ESP8266 WIFI模块STA、AP、STA+AP、TCP/UDP透传工作模式进行介绍;以及AT指令介绍,包括基础AT指令,WIFI功能AT指令、TCP/IP相关AT指令、常用AT指令实例进行介绍。 ESP8266 WIFI模块的接线及固件烧写可参考我的这篇博客:正点原子ATK-ESP8266 WIFI模块接线及固件…...

《C#语法一篇通》,20万字,48小时阅读,持续完善中。。。

本文摘录了C#语法的主要内容,接近20万字。 所有鸡汤的味道都等于马尿! 如果你相信任何所谓的鸡汤文章,智商堪忧。 计算机语言没有”好不好“之说,骗子才会告诉你哪个语言好,学好任何一本基础语言(C&#…...

[node] 2 fs文件系统模块

前言 fs模块是Node.js官方提供的内置Api,用来操作文件的模块。它提供了一系列的属性和方法,来满足用户对文件的操作需求 目标 1 掌握fs中文件处理方法readFile、writeFile等的基础用法 2 node如何安装 3 一些常用的终端快捷键 #mermaid-svg-rPp2nDYrW33gLvuI {font-family:&q…...

【react】基础知识点学习

1. 创建项目 npm install -g create-react-app npx create-react-app my-app cd my-app npm startindex.js为入口文件,App.js为根组件。 如何将react应用挂载在页面上? 将App组件渲染到id为root的DOM元素中 2. JSX JSX是|avaScript和XML(HTML)的缩写…...

D4--哈夫曼树和不等式

看文先三连,养成好习惯~看文先三连,养成好习惯~看文先三连,养成好习惯~ 目录 知识点: 堆排序: 优先队列: 定义:(默认大顶堆) 入队: 出队: 取队顶&…...

详解RabbitMQ三种队列类型

RabbitMQ 是一个强大的消息队列系统,它提供了多种队列类型以满足不同的使用需求。本文将探讨三种主要队列类型:经典队列、仲裁队列和流式队列,并讨论它们的区别和选型建议。 经典队列(Classic Queues) 简介&#xff…...

openGauss数据库-头歌实验1-3 创建和管理模式

一、创建和使用模式 (一)任务描述 本关任务:基于 openGauss 学习创建模式的相关知识。 (二)相关知识 为了完成本关任务,你需要掌握:1.openGauss 的常用操作,2.SQL 创建模式相关语…...

森林火灾检测数据集(猫脸码客 第233期)

森林火灾检测数据集 森林火灾是一种具有巨大破坏性的自然灾害,每年在全球范围内造成巨大损失。为了有效应对森林火灾,及早发现和快速响应是至关重要的。传统上,森林火灾的检测主要依赖于人工巡逻和卫星遥感技术。然而,这些方法存…...

LeetCode100之找到字符串中所有字母异位词(438)--Java

1.问题描述 给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词的子串,返回这些子串的起始索引。不考虑答案输出的顺序。 示例1 输入: s "cbaebabacd", p "abc" 输出: [0,6] 解释: 起始索引等于 0 的子串是 "cba", 它是 …...

【Python】Python自习课:第一个python程序

【Python】Python自习课:第一个python程序...

DICOM标准:解析DICOM属性中的病人模块

目录 病人模块概述 1. 病人关系模块(Patient Relationship Module) 2. 病人识别模块(Patient Identification Module) 3. 病人统计模块(Patient Demographic Module) 4. 病人医学模块(Pati…...

C++设计模式创建型模式———生成器模式

文章目录 一、引言二、生成器/建造者模式三、总结 一、引言 上一篇文章我们介绍了工厂模式,工厂模式的主要特点是生成对象。当对象较简单时,可以使用简单工厂模式或工厂模式;而当对象相对复杂时,则可以选择使用抽象工厂模式。 工…...

基于微信小程序的校园失物招领系统的研究与实现(V4.0)

博主介绍:✌stormjun、8年大厂程序员经历。全网粉丝15w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&…...

conda相比python好处

Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理&#xff1a…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...

python/java环境配置

环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制&#xff0…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

API网关Kong的鉴权与限流:高并发场景下的核心实践

🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 在微服务架构中,API网关承担着流量调度、安全防护和协议转换的核心职责。作为云原生时代的代表性网关,Kong凭借其插件化架构…...