使用 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.pswp.cn/news/895995.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/895995.shtml
英文地址,請注明出處:http://en.pswp.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中配置…