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

news2024/9/24 7:21:50

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

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

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

索引构造与信息检索:让 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%免费】

在这里插入图片描述

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

全套资料获取方式:

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

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

相关文章

数据结构 - 线性表的顺序存储

一、顺序存储定义: 把逻辑上相邻的数据元素存储在物理上相邻的存储单元中。简言之,逻辑上相邻,物理上也相邻顺序表中,任一元素可以随机存取(优点) 二、顺序表中元素存储位置的计算 三、顺序表在算法中的实…

bootstrap-modal调用ajax后不经过回调函数

说明:我用的是boostrap的弹框,表单用的是layui的,个人觉得bootstrap比layui的弹框好看点,能自适应高度。 如图:点击保存后里面的内容不执行 原因:type用的是submit 解决:把submit改为button

数智赋能共筑未来,聚好看DBdoctor亮相中国数据库技术大会

8月16日—18日,第14届中国数据库技术大会(DTCC-2023)在北京国际会议中心举行。作为国内数据库领域规模最大的技术交流盛会,吸引了众多业内知名企业和数百名行业专家参加。聚好看携新内核级数据库性能洞察新产品DBdoctor亮相,吸引来自数据库管理专业人士关注。 数据库性能问题诊…

上位机一般的开发工具有哪些?

上位机开发工具是用于开发和构建上位机应用程序的软件工具。它们提供了一系列功能和资源,帮助开发人员设计、编写和调试上位机应用程序。以下是一些常见的上位机开发工具:Visual Studio:作为一种集成开发环境(IDE)&…

车辆PEPS无钥匙方案

汽车无钥匙系统(PEPS无钥匙方案)作为车辆智能化变革下的一项创新技术,正在被广泛应用于各种车型中。PEPS无钥匙方案主要具有三项功能,即PKE(Passive Keyless Entry)被动式无钥匙进入、RKE(Remot…

LabVIEW开发住宅系统数据采集和监测系统

LabVIEW开发住宅系统数据采集和监测系统 由于不断需要平衡电力生产和消费,电力市场是最复杂的市场。在整合大量可变可再生能源(如风能和太阳能)时,这尤其是一个挑战。储能似乎是一种理想的解决方案,但是电能难以有效存…

Tip-Adapter: Training-free Adaption of CLIP for Few-shot Classification

Tip-Adapter: Training-free Adaption of CLIP for Few-shot Classification (Paper reading) Renrui Zhang,Shanghai AI Laboratory,ECCV2022,Cited:45,Code,Paper 1. 前言 对比式视觉-语言预训练,也称…

(三)Linux中卸载docker(非常详细)

docker 卸载 使用yum安装docker 如需卸载docker可以按下面步骤操作: 1、停止docker服务 systemctl stop docker 2、查看yum安装的docker文件包 yum list installed |grep docker 3、查看docker相关的rpm源文件 rpm -qa |grep docker 4、删除所有安装的docke…

python 开发环境(PyCharm)搭建指南

Python 的下载并安装 参考:Python基础教程——搭建Python编程环境 下载 Python Python 下载地址:官网 (1)点击【Downloads】>>>点击【Windows】>>>点击【Python 3.x.x】下载最新版 Python; Pyt…

linux学习(软硬链接+静态库)[15]

软硬链接 软链接(symbolic link)和硬链接(hard link)是操作系统中用于创建文件或目录之间关联的两种方式。 软链接是一个特殊的文件,它包含了指向目标文件或目录的路径。软链接可以跨文件系统,并且可以指…

vue3+ts+vite项目页面初始化loading加载效果

简介 一分钟实现 vue-pure-admin 同款项目加载时的 loading 效果 一、先看效果 1.1 静态效果 1.2 动态效果 二、上代码 核心代码在body里面&#xff0c;代码中已标明。找到你项目的 index.html &#xff0c;复制粘贴进去即可 <!DOCTYPE html> <html lang"en…

购车小记:辅助驾驶(锋兰达双擎领先版(14W落地)/锐放双擎先锋版(心里预期13W落地))

文章目录 引言I 试驾L2辅助驾驶II 优惠2.1 补贴2.2 坚持免息2.3 礼包III 车型对比3.1 锐放双擎先锋3.2 锋兰达双擎领先版引言 最近想买辆代步车,关注了锐放、锋兰达。 记录下心得。 流程:多家店对比落地价、礼包、政府补贴;合同没有确定不交意向金。 不要因为价格优惠/政府…

vue3-ts- element-plus新增组件-过滤

新增组件-所有值为空时过滤 <el-form-item label"家庭成员"><divclass"username-box"v-for"(item, index) in form.namelist":key"index"><div>姓名&#xff1a;<el-input v-model"item.name" placeho…

【论文阅读】HOLMES:通过关联可疑信息流进行实时 APT 检测(SP-2019)

HOLMES: Real-time APT Detection through Correlation of Suspicious Information Flows S&P-2019 伊利诺伊大学芝加哥分校、密歇根大学迪尔伯恩分校、石溪大学 Milajerdi S M, Gjomemo R, Eshete B, et al. Holmes: real-time apt detection through correlation of susp…

Redis有什么作用?面试题答案

参考答案 Redis是一种开源的内存数据库,它具有多种作用和用途。以下是Redis的主要作用: 缓存:Redis最常见的用途是作为缓存存储,将常用的数据存储在内存中,以提高读取速度。由于Redis是基于内存的,因此读取操作非常快速,适用于需要频繁读取的应用程序。 数据库:Redis可…

无人机工程安全巡检:主要应用与实施策略

无人机工程安全巡检是指使用无人机技术&#xff0c;对工程项目进行系统的、周期性的监测和检查&#xff0c;以确保工程的安全性、稳定性及其与设计的符合性。这包括但不限于建筑物、桥梁、道路、隧道、大坝等各种大型工程项目。无人机工程安全巡检不仅大大提高了效率&#xff0…

Revit 3D高效处理:cad exchanger sdk 3.21 Crack

3D 格式概述&#xff1a;Revit Revit 已成为寻求高效、准确的建筑信息建模的专业人士的首选解决方案。在这篇引人入胜的功能概述中了解 Revit 的特性和影响。 什么是Revit&#xff1f; Autodesk Revit 是一款流行的 CAD 软件&#xff0c;重点关注 BIM&#xff0c;被建筑师、工…

Mybatis模糊查询的问题

使用${}方式模糊查询&#xff0c;出错。 mapper 对应的 xml&#xff0c;注释掉的两种方式都可以得到数据&#xff0c;只有第三种出错 测试方法 结果 不知道为啥会出现这个 %root%&#xff0c;使用其他两种方式结果没问题&#xff0c;不知道问题出在哪里了。

opencv进阶11-LBPH 人脸识别(人脸对比)

人脸识别的第一步&#xff0c;就是要找到一个模型可以用简洁又具有差异性的方式准确反映出每个人脸的特征。识别人脸时&#xff0c;先将当前人脸采用与前述同样的方式提取特征&#xff0c;再从已有特征集中找出当前特征的最邻近样本&#xff0c;从而得到当前人脸的标签。 OpenC…

Linux知识点 -- Linux多线程(二)

Linux知识点 – Linux多线程&#xff08;二&#xff09; 文章目录 Linux知识点 -- Linux多线程&#xff08;二&#xff09;一、线程互斥1.背景概念2.多线程访问同一个全局变量3.加锁保护4.问题5.锁的实现 二、线程安全1.可重入与线程安全2.常见情况3.可重入与线程安全的联系 三…