TruLens

文章目录

    • 一、关于 TruLens
      • How it works
    • 二、安装
    • 三、快速使用
      • Get DataIn
      • Create Vector Store
      • Build RAG from scratch
      • Set up feedback functions.
      • Construct the app
      • Run the app


一、关于 TruLens

Evaluate and Track LLM Applications

  • 官网:https://www.trulens.org
  • github : https://github.com/truera/trulens
  • trulens_eval 文档:https://www.trulens.org/trulens_eval/getting_started/
  • trulens_explain :https://www.trulens.org/trulens_explain/getting_started/quickstart/
  • 社区:https://communityinviter.com/apps/aiqualityforum/josh
  • https://colab.research.google.com/drive/1n77IGrPDO2XpeIVo_LQW0gY78enV-tY9

TruLens提供了一套用于开发和监控神经网络的工具,包括大型语言模型。
这包括使用 TruLens Eval 评估LLM 和 基于LLM的应用程序,以及使用 TruLens Explain 评估深度学习可解释性的工具。
TruLens EvalTruLens Explain分别装在单独的包装中,可以单独使用。

不要只是查看你的llm应用程序! 使用TruLens系统地评估和跟踪您的LLM实验。
当您开发应用程序(包括提示、模型、检索器、知识来源等)时,TruLens Eval 是您了解其性能所需的工具。
细粒度、与堆栈无关的检测和全面的评估可以帮助您识别故障模式并系统地迭代以改进应用程序。

TruLens背后的核心概念,包括

  • 反馈功能:https://www.trulens.org/trulens_eval/getting_started/core_concepts/
  • The RAG Triad:https://www.trulens.org/trulens_eval/getting_started/core_concepts/rag_triad/
  • Honest, Harmless and Helpful Evals : https://www.trulens.org/trulens_eval/getting_started/core_concepts/honest_harmless_helpful_evals/

How it works

构建您的第一个原型,然后使用TruLens连接仪器和日志记录。

决定你需要什么反馈,并用TruLens指定它们与你的应用程序一起运行。

然后在易于使用的用户界面中迭代和比较应用程序的版本。

在这里插入图片描述


二、安装

pip install trulens-eval

使用源码安装

git clone https://github.com/truera/trulens.git
cd trulens/trulens_eval
pip install -e .

三、快速使用

在这个快速入门中,您将从头开始创建一个RAG,并学习如何记录它并获得LLM响应的反馈。

为了进行评估,我们将利用基础性、上下文相关性和答案相关性的“幻觉三元”。


你可以在 colab 中查看:

https://colab.research.google.com/github/truera/trulens/blob/main/trulens_eval/examples/quickstart/quickstart.ipynb


安装依赖

! pip install trulens_eval chromadb openai

import os
os.environ["OPENAI_API_KEY"] = "sk-..."

Get DataIn

this case, we’ll just initialize some simple text in the notebook.

university_info = """
The University of Washington, founded in 1861 in Seattle, is a public research university
with over 45,000 students across three campuses in Seattle, Tacoma, and Bothell.
As the flagship institution of the six public universities in Washington state,
UW encompasses over 500 buildings and 20 million square feet of space,
including one of the largest library systems in the world.
"""

Create Vector Store

Create a chromadb vector store in memory.

from openai import OpenAI
oai_client = OpenAI()

oai_client.embeddings.create(
        model="text-embedding-ada-002",
        input=university_info
    )

import chromadb
from chromadb.utils.embedding_functions import OpenAIEmbeddingFunction

embedding_function = OpenAIEmbeddingFunction(api_key=os.environ.get('OPENAI_API_KEY'),
                                             model_name="text-embedding-ada-002")

chroma_client = chromadb.Client()
vector_store = chroma_client.get_or_create_collection(name="Universities",
                                                      embedding_function=embedding_function)

添加 university_info 到嵌入数据库

vector_store.add("uni_info", documents=university_info)

Build RAG from scratch

Build a custom RAG from scratch, and add TruLens custom instrumentation.

from trulens_eval import Tru
from trulens_eval.tru_custom_app import instrument

tru = Tru()

class RAG_from_scratch:
    @instrument
    def retrieve(self, query: str) -> list:
        """
        Retrieve relevant text from vector store.
        """
        results = vector_store.query(
        query_texts=query,
        n_results=2
    )
        return results['documents'][0]

    @instrument
    def generate_completion(self, query: str, context_str: list) -> str:
        """
        Generate answer from context.
        """
        completion = oai_client.chat.completions.create(
        model="gpt-3.5-turbo",
        temperature=0,
        messages=
        [
            {"role": "user",
            "content": 
            f"We have provided context information below. \n"
            f"---------------------\n"
            f"{context_str}"
            f"\n---------------------\n"
            f"Given this information, please answer the question: {query}"
            }
        ]
        ).choices[0].message.content
        return completion

    @instrument
    def query(self, query: str) -> str:
        context_str = self.retrieve(query)
        completion = self.generate_completion(query, context_str)
        return completion

rag = RAG_from_scratch()

Set up feedback functions.

Here we’ll use groundedness, answer relevance and context relevance to detect hallucination.

from trulens_eval import Feedback, Select
from trulens_eval.feedback import Groundedness
from trulens_eval.feedback.provider.openai import OpenAI

import numpy as np

provider = OpenAI()

grounded = Groundedness(groundedness_provider=provider)

# Define a groundedness feedback function
f_groundedness = (
    Feedback(grounded.groundedness_measure_with_cot_reasons, name = "Groundedness")
    .on(Select.RecordCalls.retrieve.rets.collect())
    .on_output()
    .aggregate(grounded.grounded_statements_aggregator)
)

# Question/answer 
relevance between overall question and answer.
f_answer_relevance = (
    Feedback(provider.relevance_with_cot_reasons, name = "Answer Relevance")
    .on(Select.RecordCalls.retrieve.args.query)
    .on_output()
)


#  Question/statement relevance between question and each context chunk.
f_context_relevance = (
    Feedback(provider.context_relevance_with_cot_reasons, name = "Context Relevance")
    .on(Select.RecordCalls.retrieve.args.query)
    .on(Select.RecordCalls.retrieve.rets.collect())
    .aggregate(np.mean)
)

Construct the app

Wrap the custom RAG with TruCustomApp, add list of feedbacks for eval

from trulens_eval import TruCustomApp
tru_rag = TruCustomApp(rag,
    app_id = 'RAG v1',
    feedbacks = [f_groundedness, f_answer_relevance, f_context_relevance])

Run the app

Use tru_rag as a context manager for the custom RAG-from-scratch app.

with tru_rag as recording:
    rag.query("When was the University of Washington founded?")

tru.get_leaderboard(app_ids=["RAG v1"])
tru.run_dashboard()

2024-04-28(日)

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

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

相关文章

【Redis 开发】详细搭建Redis主从,并了解数据同步原理

Redis主从搭建 Redis主从搭建Redis的主从架构数据全同步原理数据的增量同步优化Redis主从集群 Redis主从 搭建Redis的主从架构 主从节点可以实现读写分离,将都大量的读操作分担与诸多从节点当中去 从节点可以叫做slave或者replica 如何搭建: 在一台…

node 项目启动报 ERROR Failed to compile with 1 errors 错误

问题 node项目通过npm run dev启动时出现ERROR Failed to compile with 1 errors 错误,具体信息如下: ✖ WebpackCompiled with some errors in 366.81msERROR Failed to compile with 1 errors …

如何买到“30元以下”的免备案服务器?

对于预算有限的个人和小型企业来说,30 元以下免备案服务器的价格非常亲民。用户可以以极低的成本获得所需的服务器资源,这对创业者、个人开发者、学生和站长来说简直不要太划算,毕竟配置可以升级真不够后面再付费升级也行。 何为“免备案”&…

xLua背包实践

准备工作 环境,代码 在C#代码方面我们需要准备单例模式基类,AB包管理器,lua解析器管理器 详情请见AB包管理器 xlua详解 然后是Xlua包和AB包,具体导入方法也在上面的链接中 然后是lua的三个文件 具体代码: JsonUtil…

主观赋权法、客观赋权法、组合赋权法、评价指标体系构建

在科研领域,为了对某个研究主题进行深入的探讨和评估,我们往往需要构建一套科学合理的评价体系,并为其中的各项评价指标赋予相应的权重。比如,在评价一项新技术的性能时,我们可能会考虑其创新性、实用性、成本效益等多…

git的学习笔记

git的学习使用 参考了书和好多网上搜到的连接,忘了记录参考的了,太多了()捋出来一个大致的较为全面的git个人使用流程。 (一)基本操作: 安装配置好git 创建目录 init 初始化一个仓库&#xff0…

Golang | Leetcode Golang题解之第55题跳跃游戏

题目&#xff1a; 题解&#xff1a; // 贪心算法 func canJump(nums []int) bool {cover : 0n : len(nums)-1for i : 0; i < cover; i { // 每次与覆盖值比较cover max(inums[i], cover) //每走一步都将 cover 更新为最大值if cover > n {return true}}return false } …

2024通信会|迈向智慧配电网建设新时代,锐捷网络发布双平面配电通信解决方案

近期,以“加快推进通信数智化,助力构建新型能源体系”为主题的2024年能源网络通信创新应用大会在四川成都圆满结束,会议围绕构建新型能源体系和新型电力系统建设需求,探讨能源网络通信创新应用的最新趋势与成果、“主、配、微”通信网一体化融合、配电通信网、通信数智化转型等…

41-数组 _ 数组作为函数参数

41-1 冒泡排序函数的设计 数组传参的时候&#xff0c;形参有2种写法&#xff1a; 1、数组 2、指针 往往我们在写代码的时候&#xff0c;会将数组作为参数传个函数 如&#xff1a;实现一个冒泡排序&#xff0c;将数组的数据排成升序 冒泡排序的核心思想&#xff1a; 1、两…

NGINX发布动态页面的方法

一、建立 [rootserver100 html]# vim index.php [rootserver100 html]# pwd /usr/share/nginx/html 二、下载PHP文件 [rootserver100 conf.d]# dnf install php.x86_64 -y 正在更新 Subscription Management 软件仓库。 无法读取客户身份 本系统尚未在权利服务器中注册。可…

国内十大CRM软件盘点2024:专家推荐+用户真实反馈

Zoho CRM软件即客户关系管理系统&#xff0c;这个概念自1999年由GartnerGroup公司提出以来逐渐演变&#xff0c;最初是为了填补ERP系统在客户关系管理方面的缺失&#xff0c;后来发展成了企业战略中不可或缺的工具。随着企业对客户管理的重视程度不断提升&#xff0c;越来越多的…

Socket套接字(UDP数据报)篇

Socket 概念数据报套接字DatagramSocketDatagramPacketInetSocketAddress 小结 概念 Socket套接字,是由系统提供用于网络通信的技术,是基于TCP/IP协议的网络通信的基本操作单元. 基于Socket套接字的网络程序开发就是网络编程. 数据报套接字 使用的是UDP(User Datagram Protocol…

IGM焊接机器人RTE 495伺服电机维修详情一览

在当今科技迅速发展的时代&#xff0c;机器人已成为各行各业不可或缺的重要工具。IGM机器人便是其中之一&#xff0c;其工业机械手伺服马达作为机器人的关键部件&#xff0c;确保机器人能够高效、稳定地运行。当出现IGM焊接机器人RTE 495伺服电机故障问题时&#xff0c;及时进行…

【推荐】2024年必备的技术学习网站

在学习 Java 的过程中&#xff0c;你都在用哪些网站查找资料和学习呢&#xff1f;以下是 V 哥在日常工作和学习中&#xff0c;经常会使用到的网站&#xff0c;有哪些是与 V 哥不约而同都在用的呢&#xff0c;下面来一一介绍一下&#xff1a; 1、百度开发者搜索 你是不是日常在…

[Algorithm][分治 - 归并排序][排序数组][交易逆序对的总数][计算右侧小于当前元素的个数][翻转对]详细讲解

目录 0.原理讲解1.排序数组1.题目链接2.代码实现 2.交易逆序对的总数1.题目链接2.算法原理详解3.代码实现 3.计算右侧小于当前元素的个数1.题目链接2.算法原理详解3.代码实现 4.翻转对1.题目链接2.算法原理详解3.代码实现 0.原理讲解 归并排序的流程充分的体现了**「分⽽治之」…

使用CSgetshell到3389端口远程桌面

中间使用了这个Akagi64.exe提权&#xff0c;网上可以找到&#xff0c;高版本的cs网上也可以找到。

Linux系统编程---线程池并发服务器

模型原理分析&#xff1a; 线程池的关键优势在于它减少了每次任务执行时创建和销毁线程的开销 线程池的组成主要分为 3 个部分&#xff0c;这三部分配合工作就可以得到一个完整的线程池&#xff1a; 1. 任务队列&#xff0c;存储需要处理的任务&#xff0c;由工作的线程来处理…

Linux网络服务-DHCP

一、DHCP工作原理 DHCP&#xff08;Dynamic Host Configuration Protocol&#xff0c;动态主机配置协议&#xff09;&#xff1a;用于自动获取IP地址 1.客户端会发送一个广播DHCP Discover报文去寻找DHCP服务器 2.客户端只会接收第一个回复的DHCP服务器的报文 3.服务器会发…

MATLAB非均匀网格梯度计算

在matlab中&#xff0c;gradient函数可以很方便的对均匀网格进行梯度计算&#xff0c;但是对于非均匀网格&#xff0c;但是gradient却无法求解非均匀网格的梯度&#xff0c;这一点我之前犯过错误。我之前以为在gradient函数中指定x&#xff0c;y等坐标&#xff0c;其求解的就是…

Python异步Redis客户端与通用缓存装饰器

前言 这里我将通过 redis-py 简易封装一个异步的Redis客户端&#xff0c;然后主要讲解设计一个支持各种缓存代理&#xff08;本地内存、Redis等&#xff09;的缓存装饰器&#xff0c;用于在减少一些不必要的计算、存储层的查询、网络IO等。 具体代码都封装在 HuiDBK/py-tools: …
最新文章