使用 OpenTelemetry 和 Langtrace 的 Elastic 分发跟踪基于 RAG 的聊天机器人

作者:来自 Elastic Bahubali Shetti

如何使用 Elastic 观察基于 OpenAI RAG 的应用程序。使用 Langtrace 对应用程序进行检测,收集日志、跟踪、指标,并了解 LLM 在 Kubernetes 上使用 OpenTelemetry 的 Elastic Distributions 的运行情况。

目前,大多数 AI 驱动的应用都专注于提升最终用户(例如 SRE)从 AI 中获得的价值。其中,主要的应用场景是各种 聊天机器人(Chatbots) 的构建。这些聊天机器人不仅依赖 大语言模型(large language models - LLMs),还结合 LangChain 等框架以及 检索增强生成(Retrieval Augmented Generation - RAG) 方法,以在对话过程中提升上下文信息的准确性。

Elastic 提供的 基于 RAG 的示例聊天机器人应用 展示了如何使用 Elasticsearch 与本地嵌入数据 结合,使搜索能够在查询过程中从 LLM 连接的知识库中提取最相关的信息。这是利用 Elasticsearch 构建 RAG 应用的优秀示例。但如何对这些 AI 应用进行监控呢?

Elastic 支持 原生 OpenTelemetry(OTel)SDKs、开源 OTel Collector,以及 Elastic 自有的 OpenTelemetry 发行版(EDOT),用于 生成式 AI(GenAI)应用和 Kubernetes(K8s) 的日志、指标和链路追踪。此外,通常还需要特定的库来跟踪应用的不同组件。在 GenAI 应用的追踪(Tracing)方面,以下是几种可选方案:

  • OpenTelemetry OpenAI Instrumentation-v2:可追踪 LLM 请求,并记录 OpenAI Python API 库的消息日志。(注意:v2 版本由 OpenTelemetry 官方构建,而非 v2 版本来自特定供应商,并非 OpenTelemetry 官方)
  • OpenTelemetry VertexAI Instrumentation:可追踪 LLM 请求,并记录 VertexAI Python API 库的消息日志。
  • Langtrace:一款商业可用的追踪库,支持所有 LLM,并且所有追踪数据都是 OTel 原生格式
  • Elastic EDOT:Elastic 近期在 EDOT 中增加了追踪功能(详情请参阅官方博客)。

从当前趋势来看,OpenTelemetry 正成为 AI 应用可观测性的事实标准,并且仍在不断完善其对 AI 追踪的支持。

在本篇博客中,我们将演示如何使用 Langtrace 以最少的代码实现对 基于 RAG 的聊天机器人应用 进行追踪和观测。此前,我们曾在博客中介绍过 如何使用 Langtrace 追踪 LangChain

在本次实践中,我们使用了 Langtrace OpenAI、Amazon Bedrock、Cohere 等多个 LLM 追踪功能,且全部集成在一个库中。

先决条件:

为了跟进,需要满足以下几个先决条件

  • Elastic Cloud 帐户 — 立即注册,并熟悉 Elastic 的 OpenTelemetry 配置。使用 Serverless 无需版本。使用常规云至少需要 8.17
  • Git 克隆基于 RAG 的 Chatbot 应用程序,并阅读有关如何启动它并熟悉它的教程。
  • 你最喜欢的 LLM(OpenAI、AzureOpen AI 等)上的帐户,带有 API 密钥
  • 熟悉 EDOT,了解我们如何通过 OTel Collector 从应用程序引入日志、指标和跟踪
  • Kubernetes 集群 — 我将使用 Amazon EKS
  • 还请查看 Langtrace 文档。

Elastic 中的应用程序 OpenTelemetry 输出

Chatbot-rag-app

你需要启动并运行的第一个项目是 ChatBotApp,启动后你应该会看到以下内容:

当你选择一些问题时,你将根据应用程序初始化时在 Elasticsearch 中创建的索引设置响应。此外,还会对 LLM 进行查询。

Elastic 中来自 EDOT 的跟踪、日志和指标

一旦你在 K8s 集群上安装了具有 EDOT 配置的 OTel Collector,并且 Elastic Cloud 启动并运行,你就会看到以下内容:

日志 - Logs:

在 Discover 中,你将看到来自 Chatbotapp 的日志,并能够分析应用程序日志、任何特定的日志模式(节省你的分析时间)以及查看来自 K8s 的日志。

Traces - 跟踪:

在 Elastic Observability APM 中,你还可以查看聊天机器人的详细信息,其中包括交易、依赖项、日志、错误等。

查看跟踪时,你将能够在跟踪中看到聊天机器人的交互。

  • 你将看到端到端 http 调用
  • 对 elasticsearch 的单独调用
  • 特定调用(例如调用操作)和对 LLM 的调用

你还可以获取跟踪的单独详细信息,并查看相关日志和与该跟踪相关的指标,

Metrics - 指标:

除了日志和跟踪之外,任何被检测的指标也将被纳入 Elastic。

按照如下步骤设置一切

为了在 K8s 上正确设置 Chatbot-app 并将遥测数据发送到 Elastic,必须设置以下几点:

  • Git 克隆 chatbot-rag-app,并修改其中一个 python 文件。
  • 接下来创建一个可以在 Kubernetes 中使用的 docker 容器。Chatbot-app 中的 Docker 构建很好用。
  • 收集所有需要的环境变量。在此示例中,我们使用 OpenAI,但可以为任何 LLM 修改文件。因此,你必须将一些环境变量加载到集群中。在 github repo 中有一个用于 docker 的 env.example。你可以选择需要或不需要的内容,并在下面的 K8s 文件中进行适当调整。
  • 设置你的 K8s 集群,然后使用适当的 yaml 文件和凭据安装 OpenTelemetry 收集器。这也有助于收集 K8s 集群日志和指标。
  • 利用下面列出的两个 yaml 文件确保你可以在 Kubernetes 上运行它。
  • Init-index-job.yaml - 使用本地公司信息在 elasticsearch 中启动索引
  • k8s-deployment-chatbot-rag-app.yaml - 初始化应用程序前端和后端。
  • 在 K8s 中针对 chatbot-app 服务的负载均衡器 URL 上打开应用程序
  • 转到 Elasticsearch 并查看 Discover 中的日志,转到 APM 并查找你的 chatbot-app 并查看跟踪,最后进行下一步。

使用 Langtrace 修改跟踪代码

一旦你使用 curl 命令下载应用程序并解压后,转到 chatbot-rag-app 目录:

curl https://codeload.github.com/elastic/elasticsearch-labs/tar.gz/main | 
tar -xz --strip=2 elasticsearch-labs-main/example-apps/chatbot-rag-app
cd elasticsearch-labs-main/example-apps/chatbot-rag-app

接下来打开 api 目录中的 app.py 文件并添加以下内容:

from opentelemetry.instrumentation.flask import FlaskInstrumentorfrom langtrace_python_sdk import langtracelangtrace.init(batch=False)FlaskInstrumentor().instrument_app(app)

插入到如下的代码中:

import os
import sys
from uuid import uuid4from chat import ask_question
from flask import Flask, Response, jsonify, request
from flask_cors import CORSfrom opentelemetry.instrumentation.flask import FlaskInstrumentorfrom langtrace_python_sdk import langtracelangtrace.init(batch=False)app = Flask(__name__, static_folder="../frontend/build", static_url_path="/")
CORS(app)FlaskInstrumentor().instrument_app(app)@app.route("/")

请参阅以粗体显示的项目,这些项目将添加到 langtrace 库和 opentelemetry flask 工具中。此组合将提供端到端跟踪,用于 https 调用,直至对 Elasticsearch 和 OpenAI(或其他 LLM)的调用。

创建 docker 容器

按原样使用 chatbot-rag-app 目录中的 Dockerfile 并添加以下行:

RUN pip3 install --no-cache-dir langtrace-python-sdk

进入 Dockerfile:

COPY requirements.txt ./requirements.txt
RUN pip3 install -r ./requirements.txt
RUN pip3 install --no-cache-dir langtrace-python-sdk
COPY api ./api
COPY data ./dataEXPOSE 4000

这使得 langtrace-python-sdk 能够安装到 docker 容器中,以便能够正确使用 langtrace 库。

收集适当的环境变量:

首先从 Elastic 收集环境变量:

Elastic 中索引初始化的环境:


ELASTICSEARCH_URL=https://aws.us-west-2.aws.found.io
ELASTICSEARCH_USER=elastic
ELASTICSEARCH_PASSWORD=elastic# The name of the Elasticsearch indexes
ES_INDEX=workplace-app-docs
ES_INDEX_CHAT_HISTORY=workplace-app-docs-chat-history

启动实例时,可以在 cloud.elastic.co 中找到 ELASTICSEARCH_URL。你需要在 Elastic 中设置用户和密码。

发送 OTel 仪器的环境需要以下内容:

OTEL_EXPORTER_OTLP_ENDPOINT="https://123456789.apm.us-west-2.aws.cloud.es.io:443"
OTEL_EXPORTER_OTLP_HEADERS="Authorization=Bearer xxxxx"

这些凭证可以在 Elastic 的 APM 集成下和 OpenTelemetry 下找到。

LLM 的环境

在此示例中,我们使用 OpenAI,因此只需要三个变量。

LLM_TYPE=openai
OPENAI_API_KEY=XXXX
CHAT_MODEL=gpt-4o-mini

下一步,Kubernetes yamls 中都需要所有这些变量。

设置 K8s 集群并使用 EDOT 加载 OTel Collector

此步骤在以下博客中概述。这是一个简单的三步过程。

此步骤将引入所有 K8s 集群日志和指标并设置 OTel 收集器。

设置 secrets、初始化索引并启动应用程序

现在集群已启动,并且你拥有环境变量,你需要:

  • 安装并使用变量运行 k8s-deployments.yaml
  • 初始化索引

基本上运行以下命令:

kubectl create -f k8s-deployment.yaml
kubectl create -f init-index-job.yaml

以下是你应该使用的两个 yaml。也可以在此处找到

k8s-deployment.yaml

apiVersion: v1
kind: Secret
metadata:name: genai-chatbot-langtrace-secrets
type: Opaque
stringData:OTEL_EXPORTER_OTLP_HEADERS: "Authorization=Bearer%20xxxx"OTEL_EXPORTER_OTLP_ENDPOINT: "https://1234567.apm.us-west-2.aws.cloud.es.io:443"ELASTICSEARCH_URL: "YOUR_ELASTIC_SEARCH_URL"ELASTICSEARCH_USER: "elastic"ELASTICSEARCH_PASSWORD: "elastic"OPENAI_API_KEY: "XXXXXXX"  ---
apiVersion: apps/v1
kind: Deployment
metadata:name: genai-chatbot-langtrace
spec:replicas: 2selector:matchLabels:app: genai-chatbot-langtracetemplate:metadata:labels:app: genai-chatbot-langtracespec:containers:- name: genai-chatbot-langtraceimage:65765.amazonaws.com/genai-chatbot-langtrace2:latestports:- containerPort: 4000env:- name: LLM_TYPEvalue: "openai"- name: CHAT_MODELvalue: "gpt-4o-mini"- name: OTEL_SDK_DISABLEDvalue: "false"- name: OTEL_RESOURCE_ATTRIBUTESvalue: "service.name=genai-chatbot-langtrace,service.version=0.0.1,deployment.environment=dev"- name: OTEL_EXPORTER_OTLP_PROTOCOLvalue: "http/protobuf"envFrom:- secretRef:name: genai-chatbot-langtrace-secretsresources:requests:memory: "512Mi"cpu: "250m"limits:memory: "1Gi"cpu: "500m"---
apiVersion: v1
kind: Service
metadata:name: genai-chatbot-langtrace-service
spec:selector:app: genai-chatbot-langtraceports:- port: 80targetPort: 4000type: LoadBalancer

Init-index-job.yaml

apiVersion: batch/v1
kind: Job
metadata:name: init-elasticsearch-index-test
spec:template:spec:containers:- name: init-index
#update your image location for chatbot rag appimage: your-image-location:latestworkingDir: /app/apicommand: ["python3", "-m", "flask", "--app", "app", "create-index"]env:- name: FLASK_APPvalue: "app"- name: LLM_TYPEvalue: "openai"- name: CHAT_MODELvalue: "gpt-4o-mini"- name: ES_INDEXvalue: "workplace-app-docs"- name: ES_INDEX_CHAT_HISTORYvalue: "workplace-app-docs-chat-history"- name: ELASTICSEARCH_URLvalueFrom:secretKeyRef:name: chatbot-regular-secretskey: ELASTICSEARCH_URL- name: ELASTICSEARCH_USERvalueFrom:secretKeyRef:name: chatbot-regular-secretskey: ELASTICSEARCH_USER- name: ELASTICSEARCH_PASSWORDvalueFrom:secretKeyRef:name: chatbot-regular-secretskey: ELASTICSEARCH_PASSWORDenvFrom:- secretRef:name: chatbot-regular-secretsrestartPolicy: NeverbackoffLimit: 4

使用 LoadBalancer URL 打开应用程序

运行 kubectl get services 命令并获取聊天机器人应用程序的 URL:

% kubectl get services
NAME                                 TYPE           CLUSTER-IP       EXTERNAL-IP                                                               PORT(S)                                                                     AGE
chatbot-langtrace-service            LoadBalancer   10.100.130.44    xxxxxxxxx-1515488226.us-west-2.elb.amazonaws.com   80:30748/TCP                                                                6d23h

使用应用程序并在 Elastic 中查看遥测数据。

访问 URL 后,你应该会看到我们在本博客开头描述的所有屏幕。

结论

使用 Elastic 的 Chatbot-rag-app,你可以了解如何构建基于 OpenAI 驱动的 RAG 聊天应用程序。但是,你仍然需要了解它的性能如何、是否正常工作等。使用 OTel、Elastic 的 EDOT 和 Langtrace 可以让你实现这一点。此外,你通常会在 Kubernetes 上运行此应用程序。希望本博客提供如何实现这一点的概述。

以下是其他跟踪博客:

使用 LLM(跟踪)实现应用程序可观察性 -

  • 使用 Langtrace 和 OpenTelemetry 观察 LangChain
  • 使用 OpenLit Tracing 观察 LangChain
  • 使用 OpenTelemetry 检测 LangChain

LLM 可观察性 -

  • 使用 GCP Vertex AI 集成提升 LLM 可观察性
  • AWS Bedrock 上的 LLM 可观察性
  • Azure OpenAI 的 LLM 可观察性
  • Azure OpenAI v2 的 LLM 可观察性

原文:Tracing a RAG based Chatbot with Elastic Distributions of OpenTelemetry and Langtrace — Elastic Observability Labs

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于机器学习的水文数据采集预测与可视化分析系统

【机器学习】基于机器学习的水文数据采集预测与可视化分析系统(完整系统源码开发笔记详细部署教程)✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 系统采用Python及Flask框架构建Web服务端,结合PyMySQL与MySQL实现数据…

三甲医院网络架构与安全建设实战

一、设计目标 实现医疗业务网/卫生专网/互联网三网隔离 满足等保2.0三级合规要求 保障PACS影像系统低时延传输 实现医疗物联网统一接入管控 二、全网拓扑架构 三、网络分区与安全设计 IP/VLAN规划表 核心业务配置(华为CE6865) interface 100G…

MySQL如何解决幻读?

目录 一、什么是幻读? 1.1 幻读的定义 1.2 幻读的示例 1.3 幻读产生的原因? 1.4?读已提交(Read Committed) 1.4.1 确定事务等级 1.4.2 非锁定读取 准备 示例 结论 1.4.3 锁定读取 准备 示例 分析 结论 1.5?可重…

Openssl之SM2加解密命令

### 1. 生成 SM2 私钥openssl genpkey -algorithm EC \-pkeyopt ec_paramgen_curve:sm2 \-out sm2_private_key.pem### 2. 从私钥导出 SM2 公钥openssl pkey -in sm2_private_key.pem \-pubout \-out sm2_public_key.pem### 3. 使用 SM2 公钥加密openssl pkeyutl -encrypt \-pu…

【含文档+PPT+源码】基于Python的图书推荐系统的设计与实现

课程简介: 本课程演示的是一款基于python的图书推荐系统的设计与实现,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Python学习者。 1.包含:项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行…

Nginx 安装及配置教程(Windows)【安装】

文章目录 一、 Nginx 下载 1. 官网下载2. 其它渠道 二、 Nginx 安装三、 配置四、 验证五、 其它问题 1. 常用命令2. 跨域问题 软件 / 环境安装及配置目录 一、 Nginx 下载 1. 官网下载 安装地址:https://nginx.org/en/download.html 打开浏览器输入网址 htt…

Spring Boot(8)深入理解 @Autowired 注解:使用场景与实战示例

搞个引言 在 Spring 框架的开发中,依赖注入(Dependency Injection,简称 DI)是它的一个核心特性,它能够让代码更加模块化、可测试,并且易于维护。而 Autowired 注解作为 Spring 实现依赖注入的关键工具&…

DeepSeek教unity------Dotween

1、命名法 Tweener(补间器):一种控制某个值并对其进行动画处理的补间。 Sequence(序列):一种特殊的补间,它不直接控制某个值,而是控制其他补间并将它们作为一个组进行动画处理。 Tw…

【JAVA实战】JAVA实现Excel模板下载并填充模板下拉选项数据

背景 有这样一个场景:前端下载Excel模板,进行数据导入,这个下载模板过程需要经过后端接口去数据库查询数据进行某些列的下拉数据填充,下拉填充的数据过程中会出现错误String literals in formulas can’t be bigger than 255 cha…

【深度学习】计算机视觉(CV)-目标检测-DETR(DEtection TRansformer)—— 基于 Transformer 的端到端目标检测

1.什么是 DETR? DETR(DEtection TRansformer) 是 Facebook AI(FAIR)于 2020 年提出的 端到端目标检测算法,它基于 Transformer 架构,消除了 Faster R-CNN、YOLO 等方法中的 候选框(…

IDEA + 通义灵码AI程序员:快速构建DDD后端工程模板

作者:陈荣健 IDEA 通义灵码AI程序员:快速构建DDD后端工程模板 在软件开发过程中,一个清晰、可维护、可扩展的架构至关重要。领域驱动设计 (DDD) 是一种软件开发方法,它强调将软件模型与业务领域紧密结合,从而构建更…

责任链模式原理详解和源码实例以及Spring AOP拦截器链的执行源码如何使用责任链模式?

前言 本文首先介绍了责任链的基本原理,并附带一个例子说明责任链模式,确保能够理解责任链的前提下,在进行Spring AOP执行责任链的源码分析。责任链模式允许将多个处理对象连接成链,请求沿着链传递,直到被处理或结束。每…

React 与 Vue 对比指南 - 上

React 与 Vue 对比指南 - 上 本文将展示如何在 React 和 Vue 中实现常见功能&#xff0c;从基础渲染到高级状态管理 Hello 分别使用 react 和 vue 写一个 Hello World&#xff01; react export default () > {return <div>Hello World!</div>; }vue <…

大模型开发实战篇7:语音识别-语音转文字

语音识别大模型&#xff0c;是人工智能领域的一项重要技术&#xff0c;它能够将人类的语音转换为文本。近年来&#xff0c;随着深度学习技术的不断发展&#xff0c;语音识别大模型取得了显著的进展&#xff0c;并在各个领域得到了广泛应用。 主流语音识别大模型 目前&#xf…

向量的点乘的几何意义

源自AI 向量的点乘&#xff08;Dot Product&#xff09;在几何和图形学中有重要的意义。它不仅是数学运算&#xff0c;还可以用来描述向量之间的关系。以下是点乘的几何意义及其应用&#xff1a; 1. 点乘的定义 对于两个向量 a 和 b&#xff0c;它们的点乘定义为&#xff1a;…

国产芯片汽车气压表pcba方案

汽车气压表的基本原理是利用气压传感器将气体气压转换为电信号&#xff0c;再通过电子芯片电路进行处理传输&#xff0c;再将这些信息转发给显示屏显示。常见的传感器包括模拟气压传感器和数字气压传感器。其中&#xff0c;模拟气压传感器是目前应用最广泛的传感器之一&#xf…

解锁机器学习核心算法 | K -近邻算法:机器学习的神奇钥匙

一、引言 今天我们继续学习机器学习核心算法 —— K - 近邻&#xff08;K-Nearest Neighbors&#xff0c;简称 KNN&#xff09;算法。它就像是一位经验丰富的 “老江湖”&#xff0c;以其简单而又强大的方式&#xff0c;在众多机器学习任务中占据着不可或缺的地位。 K - 近邻…

如何在Windows 10操作系统中安装并配置PHP集成软件XAMPP

步骤1&#xff1a;下载XAMPP安装包 访问XAMPP官网&#xff1a; 打开浏览器&#xff0c;进入XAMPP官方网站&#xff1a;https://www.apachefriends.org/index.html 选择XAMPP版本&#xff1a; 在XAMPP的下载页面上&#xff0c;选择适合Windows的最新稳定版本下载&#xff08;例…

【DeepSeek】本地部署,保姆级教程

deepseek网站链接传送门&#xff1a;DeepSeek 在这里主要介绍DeepSeek的两种部署方法&#xff0c;一种是调用API&#xff0c;一种是本地部署。 一、API调用 1.进入网址Cherry Studio - 全能的AI助手选择立即下载 2.安装时位置建议放在其他盘&#xff0c;不要放c盘 3.进入软件后…

Python 入门教程(2)搭建环境 | 2.3、VSCode配置Python开发环境

文章目录 一、VSCode配置Python开发环境1、软件安装2、安装Python插件3、配置Python环境4、包管理5、调试程序 前言 Visual Studio Code&#xff08;简称VSCode&#xff09;以其强大的功能和灵活的扩展性&#xff0c;成为了许多开发者的首选。本文将详细介绍如何在VSCode中配置…