使用 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!")
                break
        
            print("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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/908514.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

揭秘Scam-as-a-Service:警惕钓鱼攻击的产业化

2024年6月开始,CertiK安全团队监控到大量相似的phishing/drainer transaction,仅6月份监控到的涉案金额就超过5500万美元,进入8、9月份后,相关钓鱼地址的活动更加频繁,钓鱼攻击有愈演愈烈的架势。整个2024年第三季度&a…

前端Election

一.什么是Election 1.一款应用广泛的跨平台和桌面应用开发框架。 2.本质 Election的本质是结合了Chromium与Node.js 3.构建 使用HTML ,CSS,JS等Web技术构建桌面应用程序。 只要最后能转换成html css js即可 二.流程模型 1.主进程 关于node.js的任何api都在这里调用 一个纯…

如何在Linux系统中使用SSH进行安全连接

如何在Linux系统中使用SSH进行安全连接 SSH简介 安装SSH 在Debian/Ubuntu系统中安装 在CentOS/RHEL系统中安装 启动SSH服务 验证SSH是否安装成功 SSH配置 配置监听端口 配置登录方式 SSH客户端 安装SSH客户端 使用SSH客户端 SSH密钥认证 生成SSH密钥对 复制公钥到远程服务器…

SpringBoot源码解析(一)

SpringBoot自动装配原理 SpringBootApplication注解 我们在使用SpringBoot时,通常使用的是SpringBootApplication这个注解,比如: 而这个注解的定义为下图,可以发现这个注解上有另外三个注解:SpringBootConfiguration…

BES2600WM---HiLink RM56 EVK

0 Preface/Foreword 0.1 路径 OpenHarmony/device_soc_bestechnic - 码云 - 开源中国 https://github.com/Hi-LinkDuino/RM56 1 环境搭建 1.1 安装依赖工具 sudo apt-get install build-essential gcc g make zlib* libffi-dev e2fsprogs pkg-config flex bison perl bc ope…

C# 编程语言学习教程

C# 编程语言学习教程 目录 C# 简介 1.1 什么是 C#1.2 C# 的特点1.3 C# 的应用领域 环境搭建 2.1 安装 Visual Studio2.2 创建第一个 C# 项目 基础语法 3.1 数据类型3.2 控制结构3.3 数组与字符串 面向对象编程 4.1 类与对象4.2 继承与多态4.3 接口与抽象类 常用库与框架 5.1 .…

PAT甲级-1092 To Buy or Not to Buy

题目 题目大意 Eva想要买珠子,但是只能按串买。如果串上有她想要买的所有珠子,那么输出“Yes”,再输出需要额外买几个珠子。如果串上缺少她想要的珠子,那么输出“No”,并输出缺少的珠子个数。其中,s1是商店…

使用WebAssembly优化Web应用性能

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 使用WebAssembly优化Web应用性能 引言 WebAssembly 简介 编译 WebAssembly 模块 使用 Emscripten 编译 C/C 代码 使用 Rust 编译…

【C语言】自定义类型(结构体、枚举、联合的详解)下

写在前面 书接上回:【C语言】自定义类型(结构体、枚举、联合的详解)上 在上中,不才独篇撰写了结构体的具体细节,本篇笔记主要是把剩下的自定义类型全部展示。 文章目录 写在前面二、位段2.1、位段的定义2.2、位段占用…

初始JavaEE篇 —— 文件操作与IO

找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程程(ಥ_ಥ)-CSDN博客 所属专栏:JavaEE 目录 文件介绍 Java标准库中提供操作文件的类 文件系统操作 File类的介绍 File类的使用 文件内容操作 二进制文件的读写操作…

CSP 2024 入门级第二轮 CSP-J 2024 复赛 第一题 扑克牌

一、题目阅读 [CSP-J 2024] 扑克牌 - 洛谷 二、题目解析 输入 去重 三、题目代码 #include <bits/stdc.h> using namespace std;int main() {map<string, bool> flag;int n, res 52;cin >> n;while (n--) {string s;cin >> s;if (!flag[s]) { // …

面试题:JVM(二)

1. 面试题 简述 Java 类加载机制?&#xff08;百度&#xff09; JVM类加载机制 &#xff08;滴滴&#xff09; JVM中类加载机制&#xff0c;类加载过程&#xff0c;什么是双亲委派模型&#xff1f; &#xff08;腾讯&#xff09; JVM的类加载机制是什么&#xff1f; &#x…

AUTOSAR CP MCAL微控制器抽象层介绍

AUTOSAR(Automotive Open System Architecture)即汽车开放系统架构,它将汽车电子控制单元(ECU)的软件底层做了一个标准的封装,使得开发者能够共用一套底层软件,并通过修改参数来匹配不同的硬件和应用层软件。AUTOSAR CP(Classic Platform)是AUTOSAR架构中的一个重要组…

ElastricSearch 原理以及简单实用(超级通俗)

提到非结构化数据的检索&#xff0c;常常用到 ElasticSearch&#xff0c;他是什么呢&#xff1f; ElasticSearch 是一个基于 Apache Lucene 的分布式搜索引擎&#xff0c;可以作为实时文档存储系统&#xff0c;且文档的每一个内容都可以被检索&#xff0c;能够处理 PB 级别的结…

在线培训知识库:企业培训的新篇章

在当今快节奏的商业环境中&#xff0c;员工培训已成为企业保持竞争力的关键。在线培训知识库作为一种新兴的培训工具&#xff0c;正逐渐成为企业培训体系的核心。它不仅能够提供灵活的学习方式&#xff0c;还能确保培训内容的及时更新和高效传播。本文将探讨在线培训知识库的重…

简单的kafkaredis学习之kafka

简单的kafka&redis学习整理之kafka 1. kafka 1.1 什么是消息队列 在学习Kafka之前我们先来看一下什么是消息队列&#xff0c;消息队列(Message Queue)&#xff1a;可以简称为MQ 例如&#xff1a;Java中的Queue队列&#xff0c;也可以认为是一个消息队列 消息队列&#x…

【连续多届检索,ACM出版】第四届大数据、人工智能与风险管理国际学术会议 (ICBAR 2024,11月15-17)--冬季主会场

第四届大数据、人工智能与风险管理国际学术会议 (ICBAR 2024)--冬季主会场 2024 4th International Conference on Big Data, Artificial Intelligence and Risk Management 会议官网&#xff1a;www.icbar.net 2024 4th International Conference on Big Data, Artificial I…

集成框架 -- 自定义二方包 starter

自定义starter 二方包 My-thread-pool-startermy-thread-pool-starter 整体架构 测试 MyTestAppApplication测试工程 my-test-app 结构测试项目的 pom.xml 二方包 My-thread-pool-starter POM 文件 <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi&…

如何看待AI技术的应用前景?

文章目录 如何看待AI技术的应用前景引言AI技术的现状1. AI的定义与分类2. 当前AI技术的应用领域 AI技术的应用前景1. 经济效益2. 社会影响3. 技术进步 AI技术应用面临的挑战1. 数据隐私与安全2. 可解释性与信任3. 技能短缺与就业影响 AI技术的未来发展方向1. 人工智能的伦理与法…

华为擎云(银河麒麟V10+麒麟9000C CPU)电脑总是弹出“选择新密钥环的密码”(20241030)

症状如下图&#xff1a; 网络上一般的解决方法都是安装 seahorse &#xff0c;例如这篇文章:银河麒麟系统清除桌面密钥环 不知道为什么&#xff0c;这对我的这台电脑并不可行。 麒麟系统用的是 Gnome 桌面。这个“密钥环”的弹出框是由 gnome-keyring-daemon 弹出的。这是一个…