索引构造与信息检索:让 ChatGPT 成为 Selenium 问答助手

2023-11-07

这是chatgpt为我生成的3个标题,我选了第3个。

  1. 利用 Langchain 和 GPT 实现 Selenium 机器人自动问答

  2. 向量化存储和检索:如何用相似度搜索匹配 Selenium 知识?

  3. 索引构造与信息检索:让 ChatGPT 成为 Selenium 问答助手

之前有很多同学会问我一些有关selenium的问题,因为精力有限,不能一一回答。最近正好chatgpt为代表的生成式ai非常火爆,那么我们能不能训练一个有selenium知识的 机器人帮我回答问题呢?人的时间有限,但是机器人可以一直在线工作,妥妥的劳模了。

经过一番调研,我发现langchain这个库也许可以祝我一臂之力。

整体思路

整理思路很简单,就是gpt是预先训练好的模型,有自己的先见知识,这也是为什么我们问它问题它会给出答案的原因,因为它的模型里就固化了这些知识。然而gpt3模型用的数据应该是截止到2021年的,也就是2年多之前的数据了。尽管selenium总体迭代速度不快,但这两年也多多少少发生了一些变化,直接用gpt模型的先见知识可能会造成一些回答不准确的情况。

所以我们可以用gpt的两大能力,而不是先见知识。

  • 推断的能力。给出一些上下文,让gpt总结和推断问题的答案

  • 生成内容的能力

所以现在问题就变成了如何给gpt”灌“入最近的selenium知识?

其实我们可以在gpt的prompt里面加上一些实时的准确的上下文,然后让gpt去根据上下文内容实时的生成问题的答案,比如下面这个prompt

你是selenium问答机器人,你的任务是根据我提供的selenium相关信息来回答用户提出的问题。忘掉你之前的学到的知识,只用我提供的信息去回答。如果问题超出了我提供的信息范围,你就回答不知道。

==============
selenium的一些最新的介绍
...
...
...
==============
问题:selenium是什么?

这样一来任务就变成了如何根据用户的问题搜索相关的selenium知识? 这里就要用到向量化存储和检索了。

向量化存储和检索

先看看chatgpt的解释吧。

Q: 我是一个5岁的小孩,请给我解释一下什么是向量化存储和检索,要让我能看懂

A: 嘿,你好呀!向量化存储和检索是指将文本、图像或其他数据转换成一组数字,并使用这些数字来存储和查找信息。可以把这些数字看成是一个有很多数字的表格,每一个数字代表着这个信息的一个特征。比如说,对于一张图片,可以用数字来表示它的长宽、色彩等等特征。当我们需要查找信息时,可以用相似度来比较数字之间的差距,来找到和我们要查找的信息最相似的那一组数字,从而找到相关的信息。这个技术可以用在很多场合,比如说搜索引擎、推荐系统、图像识别和自然语言处理等等。

其实我们可以简单理解为相似度搜索。

我们要处理的问题是:用户输入问题,然后根据相似度,找到最匹配的一些相关材料,然后返回这些内容。这种工作向量化索引和检索是可以帮我们很好的完成的。

实现流程

这样我们可以把流程梳理清楚了,这里有两个流程,分别是爬一些selenium的数据,向量化之后存到向量化数据库里,可以理解成为是构造索引的过程;以及搜索用户提出的问题,给出相关答案,然后要求gpt生成内容,可以理解为信息检索和生成的过程。

索引构造过程

我随便在selenium的主页拿了3个页面的内容,分别是

  • https://www.selenium.dev/documentation/overview/

  • https://www.selenium.dev/documentation/overview/components/

  • https://www.selenium.dev/documentation/overview/details/

使用下面的js脚本可以直接拿到页面内容

document.querySelector('.td-content').textContent

我把内容保存在了se.txt文件里。下面是流程的简单分析

从se.txt中读取内容 -> 切分内容里的文本 -> 调用openai的向量化接口进行向量化 -> 将向量化过的内容保存在向量数据库中

检索及内容生成的过程

调用openapi接口向量化用户问题 -> 在向量数据库中搜索相关答案 -> 将问题和答案合成为prompt发送给gpt3.5 -> 展示gpt返回的内容

代码实现

from langchain.chains import RetrievalQA
from langchain.llms import OpenAI

from langchain.document_loaders import TextLoader
from langchain.embeddings import OpenAIEmbeddings
from langchain.text_splitter import CharacterTextSplitter
from langchain.vectorstores import Chroma
import sys

def create_index():
 loader = TextLoader('./se.txt', encoding='utf8')
 documents = loader.load()
 text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
 docs = text_splitter.split_documents(documents)

 embeddings = OpenAIEmbeddings()
 
 vectordb = Chroma.from_documents(documents=docs, embedding=embeddings, persist_directory='.')
 vectordb.persist()
 vectordb = None

def query(question: str):
 # Load from existing index
 # Now we can load the persisted database from disk, and use it as normal. 
 embeddings = OpenAIEmbeddings()
 vectordb = Chroma(persist_directory='.', embedding_function=embeddings)
 
 retriever = vectordb.as_retriever(search_kwargs={"k": 1})
 qa = RetrievalQA.from_chain_type(llm=OpenAI(), chain_type="stuff", retriever=retriever)
 res = qa.run(question)
 print("=" * 20)
 print(res)

if __name__ == "__main__":
 cmd = "q"
 if len(sys.argv) > 1:
  cmd = sys.argv[-1]

if cmd in ['c', 'create']:
 create_index()
elif cmd in ['q', 'query']:
 query("how selenium control the browsers")
else:
 print(f"unsupport cmd {cmd}")

下面是chatgpt对上面这段代码的解释

这是一段 Python 代码,其目的是建立一个问答系统,可以对输入的自然语言问题进行回答。具体地,代码中使用了以下库和模块:

  • langchain.chains:其中包含了一个叫做 RetrievalQA 的类,该类封装了一个检索模型和一个答案提取模型,用于回答问题。

  • langchain.llms:其中包含了一个叫做 OpenAI 的类,用于连接 OpenAI API 并执行自然语言任务。

  • langchain.document_loaders:其中包含了一个叫做 TextLoader 的类,用于从本地文件系统中加载文档。

  • langchain.embeddings:其中包含了一个叫做 OpenAIEmbeddings 的类,用于计算文本的向量表示。

  • langchain.text_splitter:其中包含了一个叫做 CharacterTextSplitter 的类,用于将长文本切分为小段落。

  • langchain.vectorstores:其中包含了一个叫做 Chroma 的类,用于构建向量数据库,并提供了向量检索的功能。

代码中的 create_index 函数用于创建向量数据库,具体地,它首先使用 TextLoader 加载一个名为 se.txt 的文本文件,并使用 CharacterTextSplitter 将该文本文件分成多个小段落。然后,它使用 OpenAIEmbeddings 计算每个小段落的向量表示,并使用 Chroma 构建向量数据库,并将其持久化到本地文件系统中。

代码中的 query 函数用于回答问题,具体地,它首先加载之前创建的向量数据库,并使用 Chroma 将输入的自然语言问题转化为向量表示,并在向量数据库中进行检索,找到最相关的文本段落。然后,它使用 RetrievalQA 类的实例对文本段落进行答案提取,并将结果打印输出到控制台。

在 __main__ 函数中,代码首先解析命令行参数,如果没有参数或者参数为 q 或 query,则调用 query 函数回答问题;如果参数为 c 或 create,则调用 create_index 函数创建向量数据库;否则,打印错误信息。

只能说解释的比我好。另外RetrievalQA这个类实际上是一问一答,并没有多轮对话的能力。

效果

Q: How selenium control the browsers

Using embedded DuckDB with persistence: data will be stored in: .
====================
 Selenium controls web browsers by remotely controlling browser instances and emulating a user's interaction with the browser. It allows users to simulate common activities such as entering text into fields, selecting drop-down values, checking boxes, and clicking links in documents. Additionally, it provides many other controls such as mouse movement, arbitrary JavaScript execution, and more.

如果不自己灌数据的话,这个问题的答案是这样的

Selenium is an open-source testing tool that can control the browsers and automate web-based applications. Selenium uses the WebDriver protocol to control different browsers such as Chrome, Firefox, Safari, Internet Explorer, Edge, and Opera.

When a test script interacts with Selenium's API commands such as findElement(), click(), sendKeys(), etc., it creates a request using the WebDriver protocol. The request is then sent to a browser-specific driver (such as chromedriver.exe for Google Chrome), which interprets the command and sends instructions to the browser through its own API.

The browser executes those instructions and returns results back to the driver. The driver then processes these results and sends them back to Selenium along with any relevant information about errors or exceptions encountered during execution.

In summary, Selenium controls browsers by communicating directly with their respective drivers using protocols specific to those drivers in order to manipulate webpage elements programmatically.

看上去更好一点,但使用的是先见知识,不一定能保证正确性和实时性。不过对于这个问题,chatgpt生成的回答已经是非常完美了。

总结

让chatgpt给我写个总结。

这篇文章提出了使用生成式AI ChatGPT和LangChain库训练一个Selenium知识问答机器人的想法。机器人需要灌入最新的Selenium知识并使用向量化存储和检索来搜索相关材料以回答用户的问题。文章介绍了实现流程,包括爬取Selenium数据、向量化存储和检索、信息检索和生成内容。

这项技术非常适合构建专有领域的知识库,比如法律咨询,医疗咨询等。另外配合一些代码切片的库还可以实现代码生成功能。

总之AI技术可以让我们用非常低的成本实现一些之前很难去搞定的工作,确实挺有意思的。

最后: 为了回馈铁杆粉丝们,下方这份完整的软件测试视频学习教程已经整理上传完成,朋友们如果需要可以自行免费领取【保证100%免费】

在这里插入图片描述

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

全套资料获取方式:

在这里插入图片描述

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

索引构造与信息检索:让 ChatGPT 成为 Selenium 问答助手 的相关文章

  • 2种方法,教你使用Python实现接口自动化中的参数关联

    通常在接口自动化中 经常会参数关联的问题 那么什么是参数关联 参数关联就是上一个接口的返回值会被下一个接口当做参数运用 其中Python中可以实现参数关联的方法有很多种 今天小编给大家介绍下 如何通过Python来实现接口自动化中的参数关联
  • RF自动化环境安装+自动化实例解析

    RF定义 通用型的 自动测试框架 绝大部分的软件的的自动化系统都可以采用它 特点 测试数据文件 Test Data 对应一个个的测试用例 测试数据文件里面使用的功能小模块叫关键字 由测试库 Test Library Robot Framew
  • Jenkins 插件下载速度慢、安装失败了!我教你怎么解决!

    Jenkins部署完毕 如果不安装插件的话 那它就是一个光杆司令 啥事也做不了 所以首先要登陆管理员账号然后点击系统管理再点击右边的插件管理安装CI CD必要插件 但是问题来了 jenkins下载插件速度非常慢 而且经常提示下载插件失败 真
  • APP端网络测试与弱网模拟

    当前APP网络环境比较复杂 网络制式有2G 3G 4G网络 还有越来越多的公共Wi Fi 不同的网络环境和网络制式的差异 都会对用户使用app造成一定影响 另外 当前app使用场景多变 如进地铁 上公交 进电梯等 使得弱网测试显得尤为重要
  • 新入职一个00后卷王,每天加班到2点,太让人崩溃了····

    在程序员职场上 什么样的人最让人反感呢 是技术不好的人吗 并不是 技术不好的同事 我们可以帮他 是技术太强的人吗 也不是 技术很强的同事 可遇不可求 向他学习还来不及呢 真正让人反感的 是技术平平 却急于表现自己的人 每天加班到12点 在老
  • 软件测试|Pydantic详细介绍与基础入门

    简介 Pydantic 是一个强大的 Python 库 用于数据验证和解析 特别是用于处理 JSON 数据 它的主要目标是使数据验证和解析变得简单 直观和可维护 本文将介绍 Pydantic 的基础知识 包括如何定义模型 验证数据以及处理错
  • 软件测试|Python中如何提取列表中索引为奇数的元素

    简介 在Python中 我们经常需要从列表中提取特定位置的元素 如果我们想要提取列表中索引为奇数的元素 可以使用一些简单的方法来实现这一目标 本文将介绍如何在Python中提取列表中索引为奇数的元素 并提供示例代码来帮助大家更好地理解这个过
  • 软件测试|SQLAlchemy环境安装与基础使用

    简介 SQLAlchemy 是一个强大的 Python 库 用于与关系型数据库进行交互 它提供了高度抽象的对象关系映射 ORM 工具 允许使用 Python 对象来操作数据库 而不必编写原生SQL查询 本文将介绍如何安装 SQLAlchem
  • 软件测试|sqlalchemy relationship

    简介 SQLAlchemy是一个流行的Python ORM 对象关系映射 库 它允许我们以面向对象的方式管理数据库 在SQLAlchemy中 relationship 是一个重要的功能 用于建立表之间的关系 在本文中 我们将详细探讨 rel
  • Go 语言运算符详解:加法、算术、赋值、比较、逻辑和位运算符全面解析

    运算符用于对变量和值执行操作 加号运算符 将两个值相加 如下面的示例所示 示例代码 package main import fmt func main var a 15 25 fmt Println a 尽管加号运算符通常用于将两个值相加
  • 深入了解 Python MongoDB 查询:find 和 find_one 方法完全解析

    在 MongoDB 中 我们使用 find 和 find one 方法来在集合中查找数据 就像在MySQL数据库中使用 SELECT 语句来在表中查找数据一样 查找单个文档 要从MongoDB的集合中选择数据 我们可以使用 find one
  • 跨平台UI自动化框架:Airtest,游戏开发和应用测试的利器

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 一篇文章带你了解Python常用自动化测试框架——Pytest

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • Jmeter 性能-阶梯式性能指标监听

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • msyql 异常,别干着急,70%的问题都在这里!

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 开眼了,自动化测试还能这样用?

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 新手也能看懂的【前端自动化测试入门】!

    前言 最近在网上搜索前端自动化测试相关的文档 但是发现网上的文章都是偏使用 没有把一些基础概念说清楚 导致后续一口气遇到一些 karma Jasmine jest Mocha Chai BDD 等词汇的时候很容易一头雾水 这次一方面整理一下
  • 月薪2W的软件测试工程师,到底是做什么的?

    在生活中 我们常常会遇到以下几种窘迫时刻 准备骑共享单车出行 却发现扫码开锁半天 车子都没有反应 手机导航打车 却发现地图定位偏差很大 司机总是跑错地方 买个水 却遭遇自动售货机吐币 或者不找零钱 好不容易休息打个游戏 却一直出现卡顿 闪退
  • 「优选算法刷题」:快乐数

    一 题目 编写一个算法来判断一个数 n 是不是快乐数 快乐数 定义为 对于一个正整数 每一次将该数替换为它每个位置上的数字的平方和 然后重复这个过程直到这个数变为 1 也可能是 无限循环 但始终变不到 1 如果这个过程 结果为 1 那么这个
  • 如何应对Android面试官-> 玩转 ViewPager 懒加载

    前言 ViewPager 缓存页面与预加载机制 通常我们 ViewPager 在使用的是一般都是结合 Fragment 一起使用 我们先来搭一个简单的使用界面 最终搭建出来的效果如下 简单的 ViewPager Fragment 的实现 比

随机推荐

  • 如何开通TikTok广告账户?

    如何开通TikTok广告账户 大家好 我是项柚 一个专注于讨论TikTok玩法的跨境电商自媒体人 每天不断输出干货给需要的朋友 希望大家能少走弯路 TikTok Ads是TikTok广告投放的管理后台 汇集多款海外流量产品 覆盖 150 多
  • 数据库单表数据过亿_最受欢迎的三大数据库,你用过吗?

    随着市场的多元化 需求场景多样化 数据库也层出不穷 来适应不同的业务场景 今天小编就给大家总结一下目前下面来总结下目前最受欢迎的三大数据库 快来看看你有没有用过吧 1 MySQL MySQL是一种关系型数据库管理系统 关系数据库将数据保存在
  • C#和.NET FrameWork概述

    NET FrameWork是什么 NET FrameWork是由微软开发的一种面相对象的环境框架 特点如下 多平台 可在各种计算机 服务器 手机上运行 标准化通讯协议 如XML HTTP JSON等 安全性 CLR检查并确保参数及数据对象的
  • imx6之camera mipi

    1 IPU imx6qp有2个IPU 每个IPU有2个CSI 这个CSI并不是MIPI CSI 是内部的功能模块 static struct mipi csi2 platform data mipi csi2 pdata chans 4 m
  • js计算大额数据当中丢失精度以及消除科学计数法解决方案—decimal.js的使用

    目录 decimal js使用场景 decimal js介绍 decimal js使用 1 安装依赖 2 引入并使用 decimal js函数封装 decimal js使用场景 js有精度问题 对于一些金额的计算就总是与偶莫名其妙的问题 d
  • Java实战系列(1):SpringBoot+ShardingSphere实现多数据源切换

    主要组件版本信息 SpringBoot 2 2 8 RELEASE MyBatis Plus 3 3 2 ShardingSphere 4 0 0 RC2 需求说明 在企业开发中 如果业务数据分布在不同的数据源 那么我们就希望在访问业务数据
  • Linux查看进程和线程的CPU使用率、内存占用情况(找出那个捣蛋鬼)

    查看 cpu 占用率高的线程 ps H eo user pid ppid tid time cpu cmd sort cpu 例如 2 查看占用内存最多的程序 ps aux head 1 ps aux grep v PID sort rn
  • column in where clause is ambiguous MySQL异常

    在多表连接查询中 若连接条件字段在多个表中同名 却没有使用全限定名称 如 logicdeleteFlag 执行时会报这个异常 MySQL没办法识别 这个字段指的是哪个表的字段 必须使用全限定名称 如 tableName logicdelet
  • 尽量以const、enum、inline替换 #define——条款02

    这个条款或许改为 宁可以编译器替换预处理器 比较好 因为或许 define 不能被视为语言的一部分 一 比如定义一个宏 define ASPECT RATIO 1 653 这个ASPECT RATIO也许从未被编译器看见 也许在编译器开始处
  • [开发心得]Electron应用自动升级 autoUpdater的使用。

    前言 博主主攻后端 对于electron自动升级也是费了非常多的事儿 github gitee也下载了很多源码 发现案例可能好用 但是很难融入公司的项目 要注意的点如下 1 Electron版本问题 2 Electron Vue版本问题 我
  • 点评10款Github上最火爆的国产开源项目

    衡量一个开源产品好不好 看看产品在Github的Star数量就知道了 由此可见 Github已经沦落为开源产品的 大众点评 了 一个开源产品希望快速的被开发者知道 快速的获取反馈 放到Github上面就可以了 AD WOT2015 互联网运
  • 数组元素的比较

    Java 1 0 和 1 1 的类库缺少许多特性 其中之一就是缺少算法操作 甚至是简单的排 序操作都没有 对于盼望能得到一个无所不有的标准类库的人来说 缺少这些操作是很 难以理解的 幸好 Java 2 对此作了补救 至少解决了排序问题 书写
  • 如何搭建自己的图床(GitHub版)

    文章目录 1 图床的概念 2 用GitHub创建图床服务器 2 1 新建仓库 2 2 生成Token令牌 2 3 创建img分支和该分支下的img文件夹 可选 3 使用PicGo软件上传图片 3 1 下载PicGo软件 3 2配置PicGo
  • 一张表格分成两页打印_word一页内容怎么分成两页打印

    word一页内容怎么分成两页打印 我们经常在打印时会选择把两页A4打在一张A3上 但有的时候也会需要把一张A3的内容分成两页A4来打印 那么 如何进行操作呢 下面就来看看小编的做法吧 调整页面布局 页面设置 纸张 将纸张大小有A3修改为A4
  • 如何用python画雪人_小雪人图案

    效果图如下 代码如下 import turtle t turtle Turtle t speed 0 右眼睛 t up t goto 80 80 t down t begin fill t circle 20 t end fill 右眉毛
  • blender bpy入门笔记

    目录 bpycv 加载 渲染demo 可以导出图片 但是图片为空 导出obj模型 随机旋转 录制常见脚本 渲染属性 胶片 gt 透明 其他命令 bpycv https github com DIYer22 bpycv 加载 渲染demo i
  • MMSegmentation训练自己的分割数据集

    首先确保在服务器上正常安装了MMSeg 注意安装完还需建立与自己的数据集之间的软连接 官方安装教程如下 https github com open mmlab mmsegmentation blob master docs get star
  • Python flask-restful 框架讲解

    1 简介 Django 和 Flask 一直都是 Python 开发 Web 的首选 而 Flask 的微内核更适用于现在的云原生微服务框架 但是 Flask 只是一个微型的 Web 引擎 所以我们需要扩展 Flask 使其发挥出更强悍的功
  • RedisTemplate和StringRedisTemplate的区别

    RedisTemplate和StringRedisTemplate的区别 1 两者的关系是StringRedisTemplate继承RedisTemplate 2 两者的数据是不共通的 也就是说StringRedisTemplate只能管理
  • 索引构造与信息检索:让 ChatGPT 成为 Selenium 问答助手

    这是chatgpt为我生成的3个标题 我选了第3个 利用 Langchain 和 GPT 实现 Selenium 机器人自动问答 向量化存储和检索 如何用相似度搜索匹配 Selenium 知识 索引构造与信息检索 让 ChatGPT 成为