ChatGPT|如何通过ChatGPT问一本书的问题?

很多场景下需要私域数据,但是在使用ChatGPT对话回答是很泛或者没有相关答案,因此你就需要自己喂养数据,然后形成自己的私域数据数据集,以下就是用一本书作为例子,通过输入一本书问ChatGPT关于这本书其中的问题。其步骤如下:
(1)提取书中的内容;
(2)将书分为小块;
(3)建立语义索引;
(4)问书中的问题;

本文使用的是开源的书:pure-bash-bible中译版(https://github.com/dylanaraps/pure-bash-bible)

提取书中的内容

需要使用上一篇文章的LangChain库中和document_loaders模块。其中text_splitter库包含允许用户访问和操作来自不同来源的文本数据的函数和类。

a. UnstructuredPDFLoader,它用于从PDF文件加载和提取文本,PDF文件的路径指定为”xxxx.pdf“;
b. UnstructuredMarkdownLoader,它用于从Markdown文件加载和提取文本;
... 还有一些其他加载非结构化数据的库使用。

代码如下:

loader = UnstructuredMarkdownLoader("../docs/books/pure-bash-bible.md")
data = loader.load() # 加载文件数据
print(f'You have {len(data)} document(s) in your data')
print(f'There are {len(data[0].page_content)} characters in your document')

通过以上代码可以加载您需要训练的markdown文件,打印文本中大概多少字符。

将书分为小块

我们将把加载的文档分成更小的“页面”,每个页面有500个字符,目的是在我们向OpenAI提出问题时向它提供上下文信息。与其让 OpenAI 在我们每次提出问题时都阅读整本书,不如给它一小段相关信息来处理,这样效率更高、成本效益更高。

代码如下:

text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=200)
docs = text_splitter.split_documents(data)print(f'Now you have {len(docs)} documents')

现在我们已经完成了文本的准备工作,可以开始下一步了。

建立语义索引

创建文档的嵌入,为语义搜索做好准备,将使用向量库,这样就可以将更多书籍添加到我们的语料库中,而不必每次都重新阅读原始文档,这里我们使用向量库FAISS。既然说到向量库,那么先展开说一说什么是向量库。
向量库:在现实生活中非结构化数据的体量变得越来越多,所谓结构化数据指的是像音频、视频、图片,包括用户信息、分子式、时序数据,地理位置数据等,这些数据相比传统的结构化数据更贴合人的需求,它的描述能力更强,同时处理难度也更高。根据IDC的调查显示,未来80%以上的数据可能都是非结构化数据。但目前非结构化数据并没有被很好地利用起来。传统上非结构化数据往往都是通过AI去处理,各种各样的非结构化数据通过深度学习模型转化成Vector Embedding,即一组高维的稠密的数据,这组数据通过他们最近邻的关系,就可以更好的实现推理模型,因此向量数据库构建索引并存储Vector Embedding,让你能够去做比较快的相似查询。
FAISS库:是由Facebook开发的适用于稠密向量匹配的开源库,支持多种向量检索方式,包括内积、欧氏距离等,同时支持精确检索与模糊搜索。FAISS的使用是围绕着index这一对象进行的,index中包含了被索引的数据库向量以及对应的索引值。在构建 index时,需预先提供数据库中每个向量的维度d,随后通过add()的方式将被检索向量存入index中,最终通过search()接口获取与检索向量最邻近topk的距离及索引。

以下代码就是将上面拆分好的docs,建立向量库:

embeddings = OpenAIEmbeddings(openai_api_key=OPENAI_API_KEY)
store = FAISS.from_documents(docs, embeddings)
faiss.write_index(store.index, "langchain-pure-base-bible.index")
store.index = Nonewith open("faiss-book.pkl", "wb") as f:pickle.dump(store, f)

至此,我们已经将这本书分解成更小的文档,使用OpenAI嵌入将每个文档转换为一个向量,我们可以继续下一步,即构建实际的问答组件。

问书中的问题

建立索引后,我们就可以查询这些文档以获取我们的答案。代码如下:

// 先加载前面训练好的语义索引
index = faiss.read_index(index_name)
with open(namespace, "rb") as f:docsearch = pickle.load(f)
docsearch.index = index// 使用ChatOpenAI接口
llm = ChatOpenAI(temperature=0, openai_api_key=OPENAI_API_KEY, verbose=True)
chain = load_qa_chain(llm, chain_type="stuff")// 调用OpenAI根据前面切割好的文档上下文回答问题
query_list = ["可以给一下shell的示例用法的代码么?", "for循环该如何使用?", "如何检查一个命令是否在用户的PATH中"]
for query in query_list:print("问题:", query)docs = docsearch.similarity_search(query, include_metadata=True)r = chain.run(input_documents=docs, question=query)print("结果:", r.encode('utf-8').decode('utf-8'))

ChatGPT回答如下:

问题:本书中条件表达式有哪些?

结果:本书中介绍了以下条件表达式:

  • if-then
  • if-then-else
  • if-elif-else
  • case-in-esac
  • 三元条件表达式

此外,还介绍了一些与条件表达式相关的内容,如布尔运算符、比较运算符、逻辑运算符等。


从上可以看出ChatGPT并不是直接用原文来回答,是的确将文档模型建立好,总结提炼出的回答。

到目前为止,如何问一本书的问题步骤介绍完成,我们也可以采取许多其他步骤来改进系统并使其更加有效。例如,我们可以通过在更大的问题和答案数据集上进行训练来提高系统的准确性,我们还可以在特定领域(例如,历史、科学等)上微调OpenAI模型,以提高其在与该领域相关的问题上的表现。(可以结合LangChain的介绍来做更多有趣的事情)

资料

(1)https://bennycheung.github.io/ask-a-book-questions-with-langchain-openai
(2)代码如下:

from langchain.chains.question_answering import load_qa_chain, load_summarize_chain
from langchain.chat_models import ChatOpenAI  # 使用高版本的langchain
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.vectorstores import FAISS
from langchain.document_loaders import UnstructuredMarkdownLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
import os
import faiss
import pickleOPENAI_API_KEY = os.environ["API_SECRET"]index_name = "langchain-pure-base-bible.index"
namespace = "faiss-book.pkl"def isExistTrainFile():return os.path.exists(index_name)def train():loader = UnstructuredMarkdownLoader("../docs/books/pure-base-bible.md")data = loader.load()print(f'You have {len(data)} document(s) in your data')print(f'There are {len(data[0].page_content)} characters in your document')text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=0)docs = text_splitter.split_documents(data)print(f'Now you have {len(docs)} documents')embeddings = OpenAIEmbeddings(openai_api_key=OPENAI_API_KEY)store = FAISS.from_documents(docs, embeddings)faiss.write_index(store.index, index_name)store.index = Nonewith open(namespace, "wb") as f:pickle.dump(store, f)def runPrompt():index = faiss.read_index(index_name)with open(namespace, "rb") as f:docsearch = pickle.load(f)docsearch.index = indexllm = ChatOpenAI(temperature=0, openai_api_key=OPENAI_API_KEY, verbose=True)chain = load_qa_chain(llm, chain_type="stuff")query_list = ["可以给一下shell的示例用法的代码么?", "for循环该如何使用?", "如何检查一个命令是否在用户的PATH中"]for query in query_list:print("问题:", query)docs = docsearch.similarity_search(query, include_metadata=True)r = chain.run(input_documents=docs, question=query)print("结果:", r.encode('utf-8').decode('utf-8'))if __name__ == "__main__":if not isExistTrainFile():train()runPrompt()

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

通过Springboot实现Excel转Jsonl格式文档

目的 用于Chatgpt模型训练 实现效果 Excel Jsonl 如何实现 引入maven依赖 <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>org.apache.poi</gro…

【ChatGPT|AI 工具】使用 ChatPDF,实现秒读论文

ChatPDF 官网链接&#xff1a;https://www.chatpdf.com/ 步骤概要 在线使用&#xff0c;将PDF 拖拽至框框内即可。我这里使用了一个课后笔记作为输入PDF 使用限制&#xff1a; 解析成功后&#xff0c;会进入下一个聊天界面。 细心的同学会发现&#xff0c;它对PDF的内容&…

ChatGPT - 让ChatGPT更持久

文章目录 问题解决办法1。 先安装一个油猴2。 安装 ChatGPT HeartBeat 问题 解决办法 1。 先安装一个油猴 https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo 2。 安装 ChatGPT HeartBeat https://greasyfork.org/zh-CN/scripts/46…

您使用的ChatGPT错了!以下是如何领先于 99% 的 ChatGPT 用户

我们大多数人都错误地使用了 ChatGPT&#xff1a; 错误1&#xff1a;不在提示中包含示例。 错误2&#xff1a;忽略通过角色控制 ChatGPT 的行为。 错误3&#xff1a;让 ChatGPT 猜测内容&#xff0c;而不是向它提供一些信息。 通过3类有用的prompt工程掌握 ChatGPT的使用。 …

微软宣布推出由升级后的ChatGPT人工智能驱动的新Bing和Edge浏览器

微软官方今日凌晨宣布&#xff0c;推出由新款 OpenAI 语言模型支持的最新版本必应 Bing 搜索引擎与 Edge 浏览器&#xff0c;新的 Edge 浏览器增加可以聊天与写作的必应。微软称希望将必应体验带到所有浏览器&#xff0c;而不局限于 Edge。 微软 CEO 萨蒂亚纳德拉表示&#xff…

微软新Bing AI,带chat聊天写作等功能的搜索引擎简介

文章目录 可选前置操作将系统对软件的位置获取禁止更改默认区域 尝试更改现有MS账户注册地&#xff08;亲测不行&#xff09;在GPT和bing AI中搜索按步骤更改MS账户注册地址设置 / 账户管理右上角头像 / 我的个人资料国家或地区 / 编辑 结果 重新注册MS账户&#xff0c;设置注册…

微软推出首款 ChatGPT 版搜索引擎!ChatGPT 会成为下一代搜索引擎的标配吗?

省时查报告-专业、及时、全面的行研报告库 省时查方案-专业、及时、全面的营销策划方案库 【免费下载】2022年12月份热门报告盘点 ChatGPT的发展历程、原理、技术架构及未来方向 《ChatGPT&#xff1a;真格基金分享.pdf》 2023年AIGC发展趋势报告&#xff1a;人工智能的下一时代…

惊!不仅AI聊天!微软结合ChatGPT的新版Bing发现隐藏模式

最新消息&#xff1a;微软基于结合升级版ChatGPT AI聊天机器人技术&#xff0c;推出新版Bing搜寻引擎&#xff0c;具有四种不同特定情境与形式的聊天模式与使用体验&#xff1a;问答聊天式&#xff08;已开放测试&#xff09;、朋友模式&#xff08;开发中&#xff09;、助理模…

【关于ChatGPT的30个问题】4、ChatGPT会替代搜索引擎吗?/ By 禅与计算机程序设计艺术

4、ChatGPT会替代搜索引擎吗? 目录 4、ChatGPT会替代搜索引擎吗? 4、ChatGPT和搜索引

chatgpt赋能python:Python量化代码介绍

Python量化代码介绍 Python是一种高级编程语言&#xff0c;它已经成为量化投资和算法交易的主要语言。Python具有易学易用、快速迭代和广泛的生态系统&#xff0c;使得它成为量化领域的首选语言。在这篇文章中&#xff0c;我们将介绍Python量化代码的基础知识和最佳实践&#…

ChatGPT 指令知识要点

ChatGPT从入门到精通&#xff0c;一站式掌握办公自动化/爬虫/数据分析和可视化图表制作 全面AI时代就在转角 道路已经铺好了 “局外人”or“先行者” 就在此刻 等你决定1、ChatGPT从入门到精通&#xff0c;一站式掌握办公自动化/爬虫/数据分析和可视( 点击观看完整版本 )https…

ChatGPT如何生成可视化图表-示例中国近几年出生人口

本教程收集于&#xff1a;AIGC从入门到精通教程汇总 ChatGPT本身不能直接生成可视化图表&#xff0c;但可以配合其他可视化工具或库 方法一&#xff1a;前端可视化开发库 Echarts&#xff08;地址&#xff1a;Apache ECharts &#xff09; 方法二&#xff1a;现有Python库。…

这个ChatGPT插件可以远程运行代码,还生成图表

来源&#xff1a;DeepHub IMBA 本文约900字&#xff0c;建议阅读4分钟ChatGPT的插件使数据科学成为一种简单、愉快的体验。 我们做数据分析时一般都是使用这样的流程来进行&#xff1a;运行jupyter notebook、安装库、解决依赖关系和版本控制&#xff0c;数据分析&#xff0c;生…

抱抱脸:ChatGPT背后的算法——RLHF | 附12篇RLHF必刷论文

文 | 卖萌酱 大家好&#xff0c;我是卖萌酱。 前几天&#xff0c;抱抱脸公司&#xff08;HuggingFace&#xff09;发表了一篇博客[1]&#xff0c;详细讲解了ChatGPT背后的技术原理——RLHF。 笔者读过之后&#xff0c;觉得讲解的还是蛮清晰的&#xff0c;因此提炼了一下核心脉络…

ChatGPTAI画图-微信小程序 Robot Buddy

同时拥有ChatGPT的聊天功能和AI画图功能的微信小程序&#xff0c;欢迎大家体验&#xff1a; 微信搜索小程序“Robot Buddy”或者扫描下方二维码即可使用&#xff1a;

Midjourney 能识图了,这是个好事儿吗?

进化 前些日子&#xff0c;有人发了这样一张图&#xff0c;揶揄现在的 AI 检测器。说是「魔法战胜了魔法」。 这张图&#xff0c;是用 AI 生成的。但是 AI 检测器显然没有发现。在它看来&#xff0c;这张图片「天然成分」有93%&#xff1b;人工智能生成的可能性&#xff0c;只有…

OpenAI无意间发现了一个有史以来最赚钱的商业模式

正如这些论文所说那样&#xff0c;引发人工智能革命的论文有个朗朗上口的标题&#xff1a;注意力就是你的全部所需&#xff08;Attention is All You Need.&#xff09;。 这篇论文的作者是 Google Brain 的一支团队&#xff0c;发表于 2017 年&#xff0c;里面介绍了现在已经十…

我决定给 ChatGPT 做个缓存层 >>> Hello GPTCache

&#x1f31f; 写在前面 黄老板的一句【AI 的 iPhone 时刻已至】震撼了半个科技圈。或许&#xff0c;应该把这句话再扩展一下&#xff1a;AI 的 iPhone 时刻早已势不可挡&#xff0c;它不是平静随和地跟大家 say hi&#xff0c;而是作为一个强悍的巨人携着一把名为 ChatGPT 的斧…

ModaHub魔搭社区:我决定给 ChatGPT 做个缓存层GPTCache

目录 由一次午饭时闲聊开始的项目…… LLM 缓存层的可行性到底有多少? 为什么不是 Redis? 从零搭建 GPTCache

修改几行代码就让LLM应用提速100多倍!这个团队两周搭建ChatGPT缓存层,曾被老黄OpenAI点赞...

允中 发自 凹非寺量子位 | 公众号 QbitAI ChatGPT爆火&#xff0c;为何大模型却依然没有得到广泛的应用&#xff1f; 原因无它&#xff0c;受制于性能和成本。 最近&#xff0c;有这样一个项目引发业内关注和讨论——GPTCache&#xff08;https://github.com/zilliztech/GPTCac…