《向量数据库指南》让「引用」为 RAG 机器人回答增加可信度

在之前的文章中,我们已经介绍了如何用 Milvus 向量数据库以及 LlamaIndex 搭建基础的聊天机器人《Chat Towards Data Science |如何用个人数据知识库构建 RAG 聊天机器人?书接上回,如何用 LlamaIndex 搭建聊天机器人?》。

本文将继续使用 LlamaIndex,并在前两篇文章的基础上,修改代码来为我们的结果添加引用。TruEra 在他们的一篇 RAG 评估博客介绍了结果依据(Groundness),有兴趣的朋友可以点击链接查看。
 

  • 准备步骤

首先,安装 llama-index、python-dotenv、pymilvus 和 openai
 。

! pip install llama-index python-dotenv openai pymilvus

接着,设置 OpenAI 和 Zilliz Cloud (全托管的 Milvus 向量数据库),用 load_dotenv 函数拉取存储在.env 文件中的环境变量。随后,传入环境变量,使用os获取变量值。我们用 OpenAI 作为 LLM,Zilliz Cloud(https://zilliz.com.cn/cloud) 作为向量数据库。本例中,我们用 Zilliz Cloud 及 Collection 实现数据持久化。

import osfrom dotenv import load_dotenv
import openai
load_dotenv()
openai.api_key = os.getenv("OPENAI_API_KEY")
zilliz_uri = os.getenv("ZILLIZ_URI")
zilliz_token = os.getenv("ZILLIZ_TOKEN")

  • 设置参数

接下来,定义 RAG 聊天机器人的参数。我们必须设置 3 个参数:Embedding 模型、Milvus向量数据库和 LlamaIndex 数据传入。

首先,设置我们的 Embedding 模型。在本例中,我们用在之前的文章中用到的HuggingFace MiniLM L12 模型来抓取数据并转换为 Embedding 向量,同时可以通过 LlamaIndex 使用 HuggingFaceEmbedding 模块来加载这些数据。
 

from llama_index.embeddings import HuggingFaceEmbedding
embed_model = HuggingFaceEmbedding(model_name="sentence-transformers/all-MiniLM-L12-v2")

其次,设置向量数据库。由于 Zilliz Cloud 可以提供全托管的 Milvus 服务,我们可以使用MilvusVectorStore模块来连接 Zilliz Cloud。在此过程中,需要提供 URI、token 并定义 Collection名称、相似度类型和文本键。

此前,我们已经通过环境变量获取了 Zilliz Cloud URI 和 token,Collection 名称、相似度类型和文本键则沿用之前文章中的设置。

from llama_index.vector_stores import MilvusVectorStore
vdb = MilvusVectorStore(
    uri = zilliz_uri,
    token = zilliz_token,
    collection_name = "tds_articles",
    similarity_metric = "L2",
    text_key="paragraph"
)

最后,整合 LlamaIndex 数据抽象。我们需要的两个原生组件是服务上下文(service context)以及向量存储索引(vector store index),服务上下文用于传入一些预定义的服务,向量存储索引用于从向量数据库创建一个 LlamaIndex “索引”。在本例中,我们用服务上下文来传入 Embedding 模型,用现有的 Milvus 向量数据库和创建的服务上下文来创建向量索引。

from llama_index import VectorStoreIndex, ServiceContext
service_context = ServiceContext.from_defaults(embed_model=embed_model)
vector_index = VectorStoreIndex.from_vector_store(vector_store=vdb, service_context=service_context)

  • 为聊天机器人回答添加引用

引用和注释(Citation and attribution)能够进一步优化我们的 RAG 应用,可以通过引用和注释,了解回答的数据来源,并依此评估获得的回答有多准确。

LlamaIndex 通过其CitationQueryEngine模块提供了一种实现引用的简便方法,这个模块非常容易上手。用from_args并传入向量索引,便可创建一个引用查询引擎。由于之前在向量索引中定义了文本字段,所以不需要再额外添加任何东西。

from llama_index.query_engine import CitationQueryEngine
query_engine = CitationQueryEngine.from_args(
    vector_index
)

搭建了查询引擎后,便可以开始发送查询问题了。例如,我们向聊天机器人提问:“What is a large language model?(什么是大语言模型?)”。预期中,我们应该可以从 Towards Data Science 数据集中获取这个问题的答案。

res = query_engine.query("What is a large language model?")
from pprint import pprint
pprint(res)

下图为响应示例,响应中包含了回答和来源文本,我们可以根据来源判断得到的回答的准确性。

  • 总结

本文采用了引用和注释的方法来为机器人的回答增加可信度。可以说,引用和注释解决了 RAG 的两个常见问题,通过引用和注释,我们能够知道数据来源。同时,我们还能根据数据来源评估获得的回答有多准确。此外,我们在文章中还使用了 LlamaIndex 和 Zilliz Cloud,LlamaIndex 能帮我们轻松创建获取来源的引擎,而 Zilliz Cloud 帮我们轻松实现数据持久化。

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

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

相关文章

双指针算法: 有效三角形的个数

🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨ 🐻推荐专栏1: 🍔🍟🌯C语言初阶 🐻推荐专栏2: 🍔🍟🌯C语言进阶 🔑个人信条: 🌵知行合一 前言 声明…

【AI】人工智能和水下机器视觉

目录 一、初识水下机器视觉 ——不同点 ——难点 二、AI如何助力水下机器视觉 三、应用场景 四、关键技术 水下机器视觉,非常复杂,今天来简单讨论一下。因为目标识别更难。 水下机器视觉是机器视觉技术在水下环境中的应用,它与普通机器…

读元宇宙改变一切笔记07_硬件与互操作性(上)

1. 元宇宙的头号入口 1.1. 元宇宙最令人兴奋的地方在于,我们可以借此开发用来访问、渲染和操纵它的新设备 1.1.1. App Newton于1993年发布,是世界上第一款掌上电脑 1.2. 功能超强大又轻巧的AR和沉浸式VR头显 1.2.1.…

[小程序]定位功能实现

第一步:首先要认识三个小程序的 api wx.chooseLocation 和 wx.getLocation 和 wx.openLocation (1).wx.chooseLocation 用于在小程序中选择地理位置。当用户点击选择位置按钮时,小程序会调起地图选择界面,用户可以在地图上选择一个位置,并可以…

黑马程序员 Docker笔记

本篇学习笔记文档对应B站视频: 同学们,在前两天我们学习了Linux操作系统的常见命令以及如何在Linux上部署一个单体项目。大家想一想自己最大的感受是什么? 我相信,除了个别天赋异禀的同学以外,大多数同学都会有相同的…

vue文件在<template>中使用多个<el-main>报错(已解决)

目录 1.原理 2. 根据你的需求,自定义每个 组件的内容。你可以在 标签内部插入文本、其他组件、样式等。 3. 根据需要添加样式或其他属性到每个 组件。你可以使用 class、style 或其他属性来自定义每个组件的外观和行为。 4.一个可以运行的总代码如下 5.我的一…

D课堂 | 为什么网站搭建好了却无法访问?(上)

在上一期D课堂中,D妹教大家如何用最简单的方法快速搭建一个网站,相信很多小伙伴已经跃跃欲试,尝试去搭建自己的网站。(点击这里可以快速复习) 然而,有不少人明明每个步骤都跟着做了,但最后在浏览…

利用Monte Carlo进行数值积分(二)

进步空间很大的算法版本 话说去年6月的一个周六,我很无聊地发了一个帖子,写了一个自己感觉有点无聊的帖子。 Matlab多重积分的两种实现【从六重积分到一百重积分】https://withstand.blog.csdn.net/article/details/127564478 这个帖子居然成了我这种懒…

ESU毅速丨制造企业需不需要建设增材制造中心?

随着科技的不断发展,增材制造技术已经成为制造行业的新宠。越来越多的企业开始考虑建设增材制造中心,以提高生产效率、降低成本、加速产品创新。但是,对于制造企业来说,是否需要建设增材制造中心呢? 首先,我…

计算机网络安全教程(第三版)课后简答题答案大全[6-12章]

目录 第 6 章 网络后门与网络隐身 第 7 章 恶意代码分析与防治 第 8 章 操作系统安全基础 第 9 章 密码学与信息加密 第 10 章 防火墙与入侵检测 第 11 章 IP安全与Web安全 第 12 章 网络安全方案设计 链接:计算机网络安全教程(第三版)课后简答题答案大全[1-5…

引领行业赛道!聚铭网络入选安全419年度策划“2023年教育行业优秀解决方案”

近日,由网络安全产业资讯媒体安全419主办的《年度策划》2023年度优秀解决方案评选结果正式出炉,聚铭网络「高校大日志留存分析及实名审计解决方案」从众多参选方案中脱颖而出,被评为“教育行业优秀解决方案”,以硬核实力引领行业赛…

2024年AMC8历年真题练一练和答案详解(7),以及全真模拟题

今天是1月14日,2024年AMC8正式比赛的备考时间余额不多了,这两天大家都记得抽空参加官方的模拟考试,尤其是第一次参赛的孩子,家长一定要指导孩子自己参加模拟题,熟悉考试流程和环境,否则正式比赛不小心违规就…

强化学习应用(六):基于Q-learning的无人机物流路径规划研究(提供Python代码)

一、Q-learning简介 Q-learning是一种强化学习算法,用于解决基于马尔可夫决策过程(MDP)的问题。它通过学习一个价值函数来指导智能体在环境中做出决策,以最大化累积奖励。 Q-learning算法的核心思想是通过不断更新一个称为Q值的…

快速了解——逻辑回归及模型评估方法

一、逻辑回归 应用场景:解决二分类问题 1、sigmoid函数 1. 公式: 2. 作用:把 (-∞,∞) 映射到 (0, 1) 3. 数学性质:单调递增函数,拐点在x0,y0.5的位置 4. 导函数公式:f…

Python新年文字烟花简单代码

简单的Python新年烟花代码示例: import random import timedef create_firework():colors [红色, 橙色, 黄色, 绿色, 蓝色, 紫色]flashes [爆裂, 闪光, 旋转, 流星, 喷射]color random.choice(colors)flash random.choice(flashes)print(f"发射一枚{color…

imgaug库指南(22):从入门到精通的【图像增强】之旅

引言 在深度学习和计算机视觉的世界里,数据是模型训练的基石,其质量与数量直接影响着模型的性能。然而,获取大量高质量的标注数据往往需要耗费大量的时间和资源。正因如此,数据增强技术应运而生,成为了解决这一问题的…

汽车雷达:实时SAR成像的实现

摘要: 众所周知,点云成像是目前实现汽车雷达感知最流行的方案,尤其是采用多级联实现的4D点云成像雷达,这是目前最有希望实现产品落地的技术方案之一。 今天重点分享关于汽车雷达SAR成像相关技术内容,这也证实了4D点云成像雷达并不一定就是汽车雷达成像唯一的方案,在业内…

CPU告警不用愁,用C语言编写CPU使用率限制程序

现在云服务已经深入千家万户了,不仅商用,私用也很多。很多云服务厂商也都有配套的服务器安全模块,可以检测网络流量异常、内存占用量和CPU占用率,并且允许人工设置告警阈值。例如,CPU持续大于90%10分钟,那么…

14、强化学习Soft Actor-Critic算法:推导、理解与实战

基于LunarLander登陆器的Soft Actor-Critic强化学习(含PYTHON工程) Soft Actor-Critic算法是截至目前的T0级别的算法了,当前正在学习,在此记录一下下。 其他算法: 07、基于LunarLander登陆器的DQN强化学习案例&#…

微信小程序(三)页面配置与全局配置

注释很详细,直接上代码 新增内容: 页面导航栏的属性配置全局页面注册配置全局导航栏配置样式版本 源码:(标准的json是不能加注释的,但为了方便理解咱做个违背标准的决定) 页面:index.json {//这里是页面的配置文件&am…
最新文章