LlamaIndex 实现 RAG(四)- RAG 跟踪监控

news2024/11/15 15:58:37

RAG 整个流程不复杂,集成三大部分包括文档解析并生成向量、根据查询问题查找语意相似的数据文档块、把查询问题和召回文档作为上下文的数据传给模型进行解答。大语言模型的应用开发和传统的开发方式区别很大,以前开发完成,只要逻辑正确,结果肯定是固定的,但是由于模型的特性,结果是基于概率计算的,加上自然语言的特殊性,近义词很多,每次回答都是正确的,但是返回的内容确不一样,可能是有些词改为了近义词,也可能描述的角度不一样了。

如果不加以控制,可能模型回答正确率就达不到要求,例如,如果模型正确率 60%,5 次回答中有 2 次是错的,这个用户就无法接受了。所以监控和评估对于 RAG 来讲就尤其重要,本文将介绍如何使用 LlamaIndex 进行 RAG 整体流程监控以及跟踪。

RAG监控

如何跟踪监控 RAG流程,监控的方式可以分为日志监控和可视化监控,日志监控可以提高开发阶段的效率,清晰的了解每一步 RAG 都做了什么,传的参数是什么,返回结果是什么。大语言模型的开发需要集成多方组件,而且大量使用提示词,如果链路很长,找问题是一个比较耗时的工作。下面将介绍如何通过日志方式和可视化的方式进行 RAG 的跟踪。

打开Log 日志

在 LlamaIndex 中通过以下代码打开 RAG 日志,运行 RAG 之后可以看到日志输出:

import logging
import sys

logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)
logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))

Log 中可以看出文档导入,文档搜索以后后续模型调用情况

  • 文档导入相关日志
    在这里插入图片描述
  • 搜索召回日志
    在这里插入图片描述
  • 大模型调用
    在这里插入图片描述
可视化跟踪

通过 Log 日志监控在开发阶段可以快速定位问题,但在测试环境定位问题比较困难,在大量的文字日志中查找问题是一个比较困难费时的事,在应用开发通常会使用 ES 全家桶对日志进行采集以及分析。LlamaIndex 同样集成了很多日志监控工具,在这里我们使用Arize Phoenix进行监控,Arize Phoenix 具体安装方式可以参考这篇文章。

安装 LlamaIndex Arize Phoenix 依赖库

pip install llama-index-callbacks-arize-phoenix  

发送监控数据到 arize-phoenix 服务端,

#首先启动服务
import phoenix as px
px.launch_app(host="0.0.0.0")  

接入数据

set_global_handler("arize_phoenix", endpoint="http://10.91.3.116:6006/v1/traces")
LlamaIndexInstrumentor().instrument()

进入 UI 管理界面 http://10.91.3.116:6006/,可以看到列表暂时没有数据

在这里插入图片描述
启动 RAG,程序运行完成之后,当回到列表页时可以看到 RAG 的端到端的运行过程传入的数据以及返回结果。
在这里插入图片描述
文档分块的详情
在这里插入图片描述

总结

LlamaIndex 中可以集成多种监控工具,现在开源、闭源的 AI 监控工具很多,无论选择何种工具,核心功能就是监控数据流、提示词、文档块。在测试过程中,需要根据大模型的返回进行评估,并根据结果进一步调优模型、提示词、Embedding 模型等等。RAG 过程数据非常重要,是后续优化的基础。下一篇我们看一下如何对 RAG 的结果进行评估,并持续优化 RAG 各个组件。

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

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

相关文章

解决IDEA 控制台中文乱码及无法输入中文

一、IDEA 控制台中文乱码: 问题描述: IntelliJ IDEA 如果不进行相关设置,可能会导致控制台中文乱码、配置文件中文乱码等问题。 解决方案: ①:设置字体为支持中文的字体: 点击菜单 File - > settings …

二分查找【算法 09】

二分查找算法详解 二分查找(Binary Search)是一种高效的查找算法,前提是数据必须是有序的。相比于线性查找,二分查找的时间复杂度从 O(n) 降低到了 O(log n),适合处理大规模的数据查找问题。本文将详细介绍二分查找的原…

Catf1ag CTF Crypto(六)

前言 Catf1agCTF 是一个面向所有CTF(Capture The Flag)爱好者的综合训练平台,尤其适合新手学习和提升技能 。该平台由catf1ag团队打造,拥有超过200个原创题目,题目设计注重知识点的掌握,旨在帮助新手掌握C…

集团数字化转型方案(十六)

为了全面推进集团的数字化转型,我们将实施一系列战略举措,包括整合最新的人工智能、大数据分析和云计算技术,升级企业资源规划(ERP)系统,实现业务流程的自动化与优化;同时,建立全方位…

计算机是如何工作的(2)

文章目录 一. 寄存器和存储器二. 操作系统二. 进程PCB1. pid2. 内存指针3. 文件描述符表4. 属性1) 状态2) 优先级3) 上下文4) 记账信息 一. 寄存器和存储器 存储器是内存和硬盘的通称 内存, 存储空间比硬盘小, 速度比硬盘快, 价格比硬盘高, 掉电后数据流失寄存器是CPU上的一个…

ORACLE EBS R12系统的安装及维护案例

引言: Oracle E-Business Suite (EBS) R12 是企业中广泛应用的一体化管理解决方案,涵盖了财务、人力资源、供应链等多个业务领域。以下将详细介绍如何在 Windows 系统上安装 Oracle EBS R12,并分享一些日常维护的技巧和最佳实践。 点击下载…

基于imx6ull平台opencv的图像采集、ffmpeg推流和Windows端拉流(多线程)

目录 一、概述二、环境要求2.1 硬件环境2.2 软件环境三、开发流程3.1 编写测试3.2 验证功能一、概述 本文档是针对imx6ull平台opencv的图像采集、ffmpeg推流和Windows端拉流。首先创建一个线程opencv通过摄像头采集视频图像,接着再创建两个线程,其中一个线程获取采集的视频图…

Python编码系列—Python中的HTTPS与加密技术:构建安全的网络通信

🌟🌟 欢迎来到我的技术小筑,一个专为技术探索者打造的交流空间。在这里,我们不仅分享代码的智慧,还探讨技术的深度与广度。无论您是资深开发者还是技术新手,这里都有一片属于您的天空。让我们在知识的海洋中…

驾驭高效编程:一探C++ STL的奥秘

1.什么是STL 2.:STL的版本 2.1:原始版本 2.2:P.J版本 2.3:RW版本 2.4:SGI版本 3:STL的六大组件 4:如何学习STL 5:STL的缺陷 1.什么是STL STL(standdard template library-标准模板库):是C标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包含数据结构与算法软…

MJJ 必备自建 IDC 系统 WHMCS 开心版 圆你一个老板梦

本文首发于只抄博客,欢迎点击原文链接了解更多内容。 前言 WHMCS 是我们买 VPS 的最常见到的 IDC 系统,最近为了写 VPS 库存监控脚本,自己搭了一个 WHMCS 用来测试,顺便分享一下如何搭建属于自己的 WHMCS,圆你一个老板梦。WHMCS 开心版仅限学习、开发使用,商业用途请前往…

Linux内核学习之中断处理

Linux内核学习之中断处理 0 前言1 中断处理程序的嵌套执行1 Linux对x86异常的处理Linux中向量用途1 Linux中的中断门描述符Linux中的中断描述符硬中断软中断和tasklet软中断tasklet[^2]ksoftirqd内核线程kworker内核线程 0 前言 文本基于x86架构讲解Linux中对中断的处理&#…

Telink泰凌微如何添加Lib库

基于TLSR8258 SDK:b85m_ble_single_connection_sdk 1.首先把lib文件放在sdk的proj_lib文件夹中 2. properties - c/c build - Settings - TC32 C Linker - Libraries,把文件添加到编译设置中。注意添加的库文件名需要删除“lib前缀”。例如&#xff1…

外贸管理软件一般都有哪些功能

外贸管理软件通常被设计来帮助国际贸易企业高效管理其业务流程。这类软件的功能多样,这里以神卓外贸管理软件为例, 以下是一些常见的核心功能模块: 客户关系管理 (CRM) 客户信息管理询盘与报价管理销售机会跟踪 订单管理 订单生成与处理发货…

Codeforces Round 916 (Div. 3) E1. Game with Marbles(博弈论*1400)

感觉很难想。 如果你直接想的话,你就会发现有很多做法可以选择,而你根本不知道应该选哪个。 这时候可以先假设鲍勃已经取走了爱丽丝的所有的颜色的弹珠,(并且以每个颜色一个弹珠的代价)。 这时候每一项得分就是 S i …

Linux简单介绍(2)

四、软件管理机制 4.1 Linux软件管理介绍 有一个很好的软件生态圈支持,才是一个优秀、值得广泛使用的操作系统平台。比如PC端的window操作系统、mac操作系统,手机端的IOS系统,Android系统等。在这些操作系统上安装软件,方便的不能…

思特威-秋招正式批-笔试

1.在全局数据区中分配空间的变量类型有哪些 2.new和malloc的区别 3. class CData{unsigned short m_uilndex, m_uilndexFlag 9; int m_iData[10]; int m_iType;int iGetDataType() {return m_iType;} public: CData(); }CData::CData(), m_iType(5) {string strTxt "…

自修C++Primer----3.4迭代器(iterator)的介绍

目录 1.迭代器的使用 1.1迭代器运算符 1.2从一个元素指向下一个元素 1.3迭代器的类型 1.4begin和end操作符 1.5解引用操作符和成员访问 1.6引入迭代器失效 1.7全部改成大写的一个练习 2.使用迭代器运算 我们可以使用下标运算符访问string里面的字符或者是这个vector里面…

浅谈二分算法

浅谈二分算法 二分 首先知道一下二分是什么。 二分,是一种快速处理大型数据的方法。基本逻辑是折半查找。 设有一个共有 n n n 个数字的数组,要从中查询某个元素,就可以用二分查找。 注:这里的数组默认其成员数值具有单调性…

C++类和对象(总篇)

文章目录 C类和对象1、类的定义1.1类定义格式1.2访问限定符1.3类域 2、实例化2.1实例化概念 3、this指针4、类的默认成员函数5、构造函数5.1构造函数的特点5.2实例分析 6、析构函数6.1析构函数的特点6.2实例分析 7、拷贝构造函数7.1 拷贝构造函数的特点7.2实例分析7.3浅拷贝和深…

Linux中断管理

Linux 内核提供了完善的中断框架,我们只需要申请中断,然后注册中断处理函数即可,使用非常方便,不需要一系列复杂的寄存器配置。 1.Linux中断简介 中断号 每个中断都有一个中断号,通过中断号即可区分不同的中断,有的资料也把中断号叫做中断线。在 Linux 内核中使用一个 int 变…