吴恩达AI系列:教你如何用Langchain封装一本书

教你快速上手AI应用——吴恩达AI系列教程

人工智能风靡全球,它的应用已经渗透到我们生活的方方面面,从自动驾驶到智能家居,再到医疗辅助和量化交易等等。他们逐渐改变了我们的生活方式,然而,对于许多人来说,AI仍然是一个神秘且无法理解的领域。

为了帮助更多的人理解并掌握AI技术,更享受AI带给人们便捷的服务,吴恩达博士开设了一系列的AI教程。接下来我们会通过几个项目的教程让大家学会如何用AI解决生活中的一些小问题,在AI时代来临之际,教会大家如何利用好这一有力的武器。

介绍吴恩达博士

编辑

吴恩达(英语:Andrew Ng,1976年4月18日—)是斯坦福大学计算机科学系和电气工程系的客座教授,曾任斯坦福人工智能实验室主任。

2011年,吴恩达在谷歌创建了谷歌大脑项目

2014年5月16日,吴恩达加入百度,负责“百度大脑

2017年12月,吴恩达宣布成立人工智能公司Landing.ai,担任公司的首席执行官。

5月初,DeepLearning.ai 创始人吴恩达联合 OpenAI 推出入门大模型学习的经典课程《ChatGPT Prompt Engineering for Developers》,迅速成为了大模型学习的现象级课程,获得极高的热度。后续,吴恩达教授又联合 LangChain、Huggingface 等机构联合推出了多门深入学习课程,助力学习者全面、深入地学习如何使用大模型并基于大模型开发完整、强大的应用程序。

在这篇博客中,我们将介绍吴恩达AI系列教程的第二部分,教你如何快速上手AI应用——我们将学习如何通过langchain构建向量数据库从而封装一本书,然后我们可以通过提问获取这本书相应的问题。

无论你是AI领域的初学者,还是有一定基础想要进一步提升的开发者。我们都能通过引导你让你在AI世界中发现自己的道路。

功能演示

让我们先来看看我们封装书籍后我们现在需要有防晒效果的全部衬衫以及对这些衬衫做一个总结:

编辑

我们可以看到模型会把所有的防晒衬衫全部信息表出来,并且会有一句很精炼的总结。

如何应用

首先我们要设置环境的配置

  • 安装 langchain python pip install langchain
  • 安装 docarray python pip install docarray
  • 安装 tiktoken python pip install tiktoken
  • 同时我们要设置自己的API_KEY环境变量

只需要您将API_KET填写在里面即可

编辑

我们先明白如何通过 langchain 调用模型

LangChain 是一个强大的框架,旨在帮助开发人员使用语言模型构建端到端的应用程序。它提供了一套工具、组件和接口,可简化创建由大型语言模型 (LLM) 和聊天模型提供支持的应用程序的过程。LangChain 可以轻松管理与语言模型的交互,将多个组件链接在一起,并集成额外的资源,例如 API 和数据库。

而 langchain 里面的模型主要分为三个类型:

LLM(大型语言模型) :这些模型将文本字符串作为输入并返回文本字符串作为输出。它们是许多语言模型应用程序的支柱。

聊天模型( Chat Model) :聊天模型由语言模型支持,但具有更结构化的 API。他们将聊天消息列表作为输入并返回聊天消息。这使得管理对话历史记录和维护上下文变得容易。

文本嵌入模型(Text Embedding Models) :这些模型将文本作为输入并返回表示文本嵌入的浮点列表。这些嵌入可用于文档检索、聚类和相似性比较等任务。

  • 首先调用LLM模型
from dotenv import load_dotenv, find_dotenv _ = load_dotenv(find_dotenv()) #读取环境变量  
​```然后我们问 llm 模型如何评价人工智能,他就会通过 langchain 自动调用你的 OPENAI_API_KEY 告诉你 llm 模型生成的答案:​```python from langchain.llms import OpenAI# auto read OPENAI_API_KEYllm = OpenAI(model_name="text-davinci-003",max_tokens=1024) llm("怎么评价人工智能")  

编辑

我们可以从图中看到,模型通过调用api接口回答了“怎么评价人工智能的回答”

导入 embedding 模型和向量存储组件

接下来我们会学习使用 embedding 模型和向量数据库做一个存储,利用 langchain 将我们的书籍进行封装。

  • 我们首先把 langchain 的一些功能的包加载下来:

python from langchain.chains import RetrievalQA #检索QA链,在文档上进行检索 from langchain.chat_models import ChatOpenAI #openai模型 from langchain.document_loaders import CSVLoader #文档加载器,采用csv格式存储 from langchain.vectorstores import DocArrayInMemorySearch #向量存储 from IPython.display import display, Markdown #在jupyter显示信息的工具 在本次小项目中,我们的数据使用 Dock Array 内存搜索向量存储中,作为一个内存向量存储,不需要连接外部数据库

  • 读取我们的户外户外服装目录书籍

我们首先可以在github仓库里获取该书籍[OutdoorClothingCatalog_1000.csv]

下载到本地后可以将该书上传到我们的 Cloud Studio 中,只需拖动即可上传:

  • 加载书籍文件
# 读取文件file = 'OutdoorClothingCatalog_1000.csv' loader = CSVLoader(file_path=file)# 查看数据import pandas as pd data = pd.read_csv(file,header=None) data  

编辑

可以看到我们通过查看数据发现他提供了一个户外服装的CSV文件,文件中有很多种类衣服与他们的介绍,我们可以将这些与语言模型结合使用

  • 创建向量存储

我们通过导入索引,即向量存储索引创建器:

python from langchain.indexes import VectorstoreIndexCreator #导入向量存储索引创建器

index = VectorstoreIndexCreator( vectorstore_cls=DocArrayInMemorySearch ).from_loaders([loader])  

之后问他一个问题,例如我们可以让他列一下带有防晒衣的衬衫,然后给我们总结一下

query ="Please list all your shirts with sun protection \ in a table in markdown and summarize each one." response = index.query(query)#使用索引查询创建一个响应,并传入这个查询 display(Markdown(response))#查看查询返回的内容  

我们就可以看到结果:

编辑

我们发现得到了一个 Markdown 的表格,其中包含了所有带有防晒衣的衬衫的名字与描述,还通过llm的总结得到了一个不错的总结“our shirts provide UPF 50+ sun protection, blocking 98% of the sun’s harmful rays. The Men’s Tropical Plaid Short-Sleeve Shirt is made of 100% polyester and is wrinkle-resistant”

语言模型与文档的结合使用

我们上面完成了一个书籍的存储以及调用语言模型回答里面的问题,而在我们的实际生活中如果想让语言模型与许多文档结合,怎么才能让他回答其中所有的内容呢?我们可以通过embedding和向量存储可以实现 - embedding 文本片段创建数值表示文本语义,相似内容的文本片段将具有相似的向量,这使我们可以在向量空间中比较文本片段

  • 向量数据库 向量数据库是存储我们在上一步中创建的这些向量表示的一种方式,我们创建这个向量数据库的方式是用来自传入文档的文本块填充它。 当我们获得一个大的传入文档时,我们首先将其分成较小的块,因为我们可能无法将整个文档传递给语言模型,因此采用分块 embedding 的方式储存到向量数据库中。这就是创建索引的过程。

通过运行时使用索引来查找与传入查询最相关的文本片段,然后我们将其与向量数据库中的所有向量进行比较,并选择最相似的n个,返回语言模型得到最终答案

首先我们通过创建一个文档加载器,通过CSV格式加载

# 创建一个文档加载器,通过csv格式加载loader = CSVLoader(file_path=file) docs = loader.load()​```然后我们可以查看一下单独的文档,可以发现每个文档都对应了CSV中的一个块![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/ded6f2c36c7d4d2e8c9725a379e1da3b~tplv-k3u1fbpfcp-jj-mark:0:0:0:0:q75.image#?w=2190&h=362&s=88203&e=png&b=f7f7f7)​![](<> "点击并拖拽以移动")编辑之后我们可以对文档进行分块和 embedding ,当文档非常大的时候,我们需要对文档进行分块处理,因为如果在较大文件的情况下我们的索引和提取会占用较大的内存使得效率变得很低,但是在此次小实验中,我们的文档并不大所以不需要进行分块处理,仅仅去做一个 embedding 就可以了​```python''' 因为这些文档已经非常小了,所以我们实际上不需要在这里进行任何分块,可以直接进行embedding '''from langchain.embeddings import OpenAIEmbeddings #要创建可以直接进行embedding,我们将使用OpenAI的可以直接进行embedding类 embeddings = OpenAIEmbeddings() #初始化  
embed = embeddings.embed_query("Hi my name is Harrison")#让我们使用embedding上的查询方法为特定文本创建embedding print(len(embed))#查看这个embedding,我们可以看到有超过一千个不同的元素

我们的这个 embbding 可以查看到一千多个不同的元素,每个元素都是映射的数字值,组合起来就创建了这段文本的总体数值的表示

  • 接下来我们将 embedding 存储在向量存储中

为刚才的文本创建embedding,准备将它们存储在向量存储中,使用向量存储上的 from documents 方法来实现。 该方法接受文档列表、嵌入对象,然后我们将创建一个总体向量存储

db = DocArrayInMemorySearch.from_documents( docs, embeddings )

运行这个程序,我们就能得到存储了书籍的向量数据库了

编辑

这时我们可以通过一个类似查询的文本传会给向量数据库,我们可以让他返回一些文本:

query = "Please suggest a shirt with sunblocking" docs = db.similarity_search(query)#使用这个向量存储来查找与传入查询类似的文本,如果我们在向量存储中使用相似性搜索方法并传入一个查询,我们将得到一个文档列表 len(docs)

编辑

可以看到返回了四个文档,同时我们可以打开第一个文档:

你可以看到,第一个文档的确是关于防晒的衬衫相关的内容

如何回答跟我们文档相关的问题

要回答和我们文档相关的问题我们需要通过检索器支持查询和返回文档的方法,并且通过导入语言模型的方式进行文本生成并返回自然语言响应

所以我们应该先做的第一步是创建检索器通用接口以及导入语言模型

retriever = db.as_retriever() #创建检索器通用接口 llm = ChatOpenAI(temperature = 0.0,max_tokens=1024) #导入语言模型 qdocs = "".join([docs[i].page_content for i in range(len(docs))])# 将合并文档中的所有页面内容到一个变量中
  • 通过调用语言模型来问问题
response = llm.call_as_llm("Question: Please list all your shirts with sun protection in a table in markdown and summarize each one.") #列出所有具有防晒功能的衬衫并在Markdown表格中总结每个衬衫的语言模型

然后我们可以通过 markdown 形式查看语言模型通过调用语言模型的总结,以及在文本中存在的关于防晒功能衬衫的所有信息

这样我们就得到了我们想要的结果!

如果有多个文档,那么我们可以使用几种不同的方法

  • Map Reduce

将所有块与问题一起传递给语言模型,获取回复,使用另一个语言模型调用将所有单独的回复总结成最终答案,它可以在任意数量的文档上运行。可以并行处理单个问题,同时也需要更多的调用。它将所有文档视为独立的

  • Refine

用于循环许多文档,际上是迭代的,建立在先前文档的答案之上,非常适合前后因果信息并随时间逐步构建答案,依赖于先前调用的结果。它通常需要更长的时间,并且基本上需要与Map Reduce一样多的调用

  • Map Re-rank

对每个文档进行单个语言模型调用,要求它返回一个分数,选择最高分,这依赖于语言模型知道分数应该是什么,需要告诉它,如果它与文档相关,则应该是高分,并在那里精细调整说明,可以批量处理它们相对较快,但是更加昂贵

  • Stuff

将所有内容组合成一个文档

在这里我们就不举太多例子,欢迎各位进入 Cloud Studio 自己体验!!!

如何学习AI大模型?

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

在这里插入图片描述

👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

在这里插入图片描述

1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集

👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

在这里插入图片描述

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

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

相关文章

一篇文章带你彻底搞懂十大经典排序之——快速排序

一、递归实现快速排序 1.基本思想 通过一趟排序将待排序记录分割成独立的两部分&#xff0c;其中一部分记录的关键字均比两一部分的关键字小&#xff0c;则课分别对这两部分记录继续进行排序&#xff0c;已达到整个序列有序。 2.算法描述 快速排序使用分治法来吧一个“串”…

QT中利用qss来创建一个圆角矩形窗口,并利用Qt::WA_TranslucentBackground属性解决留白问题

1、效果 2、实现 QWidget#centralwidget {border-radius: 30px solid default;border-image: url(:/images/bk<

探索认知智能的未来:知识图谱的崛起

知识图谱点燃语言模型的潜能 ©作者| 潇潇 来源|神州问学 一、 人工智能的三个层次 在人工智能的发展历程中&#xff0c;我们见证了从简单计算到复杂认知的飞跃。人工智能的发展可以概括为三个主要层次&#xff1a;计算智能、感知智能和认知智能。这三个层次不仅代表了技…

支持向量回归原理详解及Python代码示例

支持向量回归原理详解 支持向量回归&#xff08;Support Vector Regression, SVR&#xff09;是支持向量机&#xff08;SVM&#xff09;的一种扩展&#xff0c;用于回归问题。SVR通过寻找一个最佳的回归超平面&#xff0c;使得尽可能多的数据点落在超平面附近的ε-管内&#xf…

eNSP中VRRP的配置和使用

一、基础配置 1.新建拓扑图 2.配置vlan a.CORE-S1 <Huawei>system-view [Huawei]sysname CORE-S1 [CORE-S1]vlan 10 [CORE-S1-vlan10]vlan 20 [CORE-S1-vlan20]vlan 30 b.CORE-S2 <Huawei>system-view [Huawei]sysname CORE-S2 [CORE-S2]vlan 10 [CORE…

240627_图像24位深度(RGB图)转为8位深度(单通道图)

240627_图像24位深度&#xff08;RGB图&#xff09;转为8位深度&#xff08;单通道图&#xff09; 在使用网络上下载下来的一部分图像分割数据集时&#xff0c;有些标签图你看着是一个黑白图&#xff0c;但是他还是有可能是一张RGB三通道图&#xff0c;具体怎么区分呢。右击图…

FPGA - 图像灰度化

一&#xff0c;灰度图像概念 灰度数字图像是每个像素只有一个采样颜色的图像。这类图像通常显示为从最暗黑色到最亮的白色的灰度&#xff0c;尽管理论上这个采样可以任何颜色的不同深浅&#xff0c;甚至可以是不同亮度上的不同颜色。灰度图像与黑白图像不同&#xff0c;在计算机…

如何预防和处理他人盗用IP地址?

IP地址的定义及作用 解释 IP 地址在互联网中的作用。它是唯一标识网络设备的数字地址&#xff0c;类似于物理世界中的邮政地址。 1、IP地址盗窃的定义 解释一下什么是IP地址盗用&#xff0c;即非法使用他人的IP地址或者伪造IP地址的行为&#xff0c;这种行为可能引发法律和安…

hadoop离线与实时的电影推荐系统-计算机毕业设计源码10338

摘 要 随着互联网与移动互联网迅速普及&#xff0c;网络上的电影娱乐信息数量相当庞大&#xff0c;人们对获取感兴趣的电影娱乐信息的需求越来越大,个性化的离线与实时的电影推荐系统 成为一个热门。然而电影信息的表示相当复杂&#xff0c;己有的相似度计算方法与推荐算法都各…

02逻辑代数与硬件描述语言基础

2.1 逻辑代数&#xff08;简单逻辑的运算&#xff09; 2.2 逻辑函数的卡诺图&#xff08;从图论的角度&#xff09;化简法 2.3 硬件描述语言Verilog HDL基础&#xff08;研究生阶段才用得到&#xff09; 要求&#xff1a; 1、熟悉逻辑代数常用基本定律、恒等式和规则。 2、掌握…

武汉高校大学智能制造实验室数字孪生可视化系统平台建设项目验收

随着科技的不断进步和工业4.0的深入推进&#xff0c;智能制造已成为现代工业发展的重要方向。在这一背景下&#xff0c;武汉高校大学智能制造实验室积极响应国家号召&#xff0c;致力于将先进的数字孪生技术与智能制造教育相结合&#xff0c;打造了一个集教学、实训、科研于一体…

【JavaScript】事件绑定

目录 一、什么是事件 二、常见事件 2.1 鼠标事件 2.2 键盘事件 2.3 表单事件 2.4 页面加载事件 三、浏览器弹窗三种方式 四、事件绑定函数方式 五、事件触发方式 一、什么是事件 事件就是行为动作。在HTML中事件可以是浏览器的行为&#xff0c;也可以是用户的行为。当这些行为发…

基于esp-idf的arm2d移植

什么是ARM2D Arm在Github上发布了一个专门针对“全体” Cortex-M处理器的2D图形加速库——Arm-2D 我们可以简单的把这个2D图形加速库理解为是一个专门针对Cortex-M处理器的标准“显卡驱动”。虽然这里的“显卡驱动”只是一个夸张的说法——似乎没有哪个Cortex-M处理器“配得上…

丝杆支撑座:滚珠丝杆稳定运行的守护者!

丝杆支撑座是丝杆和电机之间连接的重要组成部分&#xff0c;发挥着非常重要的功能。提到丝杆支撑座和滚珠丝杆&#xff0c;很多人都会想到支撑关系&#xff0c;但丝杆支撑座作为滚珠丝杆系统中至关重要的角色&#xff0c;其作用远不止于简单的支撑。 丝杆支撑座安装过程非常简单…

绘唐3是免费的吗?

绘唐科技是一家中国电子信息产品制造商和供应商&#xff0c;成立于2005年。公司主要经营智能硬件、智能穿戴设备、智能家居设备和智能交通设备等领域的产品开发和销售。绘唐科技拥有强大的研发团队和制造能力&#xff0c;能够为客户提供定制化的产品解决方案。 绘唐科技的产品种…

CS-隐藏防朔源-数据转发-iptables(Linux自带的防火墙)

免责声明:本文仅做技术交流与学习... 目录 准备环境: 1-iptables转发机设置转发: 2-CS服务器配置iptables服务器的IP 准备环境: 两台外网服务器. --iptables服务器就是做一个中转...封了中转就没了... 1-iptables转发机设置转发: iptables -I INPUT -p tcp -m tcp --dport 8…

ACC:Automatic ECN Tuning for High-Speed Datacenter Networks 相关知识点介绍(一)

目录 ACC&#xff08;Adaptive Congestion Control&#xff09; 总结 结合 ACC 和 ECN ECN ECN&#xff08;Explicit Congestion Notification&#xff09; 静态 ECN 动态 ECN 对比 总结 FCT——flow completion time 具体解释 小鼠流和大象流 小鼠流&#xff08;…

【最新综述】基于伪标签的半监督语义分割

Semi-Supervised Semantic Segmentation Based on Pseudo-Labels: A Survey 摘要&#xff1a; 语义分割是计算机视觉领域的一个重要而热门的研究领域&#xff0c;其重点是根据图像中像素的语义对其进行分类。然而&#xff0c;有监督的深度学习需要大量数据来训练模型&#xff…

GPT-5的到来:智能飞跃与未来畅想

IT之家6月22日消息&#xff0c;在美国达特茅斯工程学院的采访中&#xff0c;OpenAI首席技术官米拉穆拉蒂确认了GPT-5的发布计划&#xff0c;预计将在一年半后推出。穆拉蒂形象地将GPT-4到GPT-5的飞跃比作高中生到博士生的成长。这一飞跃将给我们带来哪些变化&#xff1f;GPT-5的…

电路笔记(电源模块):TPS82130降压模块

芯片引脚说明 Layer 1 1 2 3 4 5 6 7 8 SS/TR PG FB VOUT EN VIN GND VOUT Thermal Pad 使能引脚&#xff0c;高电平启动。 反馈参考引脚。 连接到该引脚的外部电阻分压器对输出电压进行编程。 电源开漏输出引脚。 软启动和电压跟踪引脚。 上拉电阻可以连接到任何低于6V的电压。…