Skip to content

Commit 3d9a4db

Browse files
committed
更新格式
1 parent ef25ac4 commit 3d9a4db

File tree

1 file changed

+35
-33
lines changed

1 file changed

+35
-33
lines changed

README.md

+35-33
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22

33
> 为了便于阅读,已生成gitbook:https://liaokong.gitbook.io/llm-kai-fa-jiao-cheng/
44
5-
### 介绍
5+
>加了个 [CHANGELOG](CHANGELOG.md),更新了新的内容我会写在这里,方便之前看过的朋友快速查看新的更新内容
6+
7+
## 介绍
68

79
众所周知 OpenAI 的 API 无法联网的,所以如果只使用自己的功能实现联网搜索并给出回答、总结 PDF 文档、基于某个 Youtube 视频进行问答等等的功能肯定是无法实现的。所以,我们来介绍一个非常强大的第三方开源库:`LangChain`
810

@@ -17,9 +19,9 @@ LangChain 是一个用于开发由语言模型驱动的应用程序的框架。
1719

1820
> LLM 模型:Large Language Model,大型语言模型
1921
20-
###
22+
##
2123

22-
### 基础功能
24+
## 基础功能
2325

2426
LLM 调用
2527

@@ -45,73 +47,73 @@ Chains
4547
* 各种工具Chain
4648
* LangChainHub
4749

48-
### 必知概念
50+
## 必知概念
4951

5052
相信大家看完上面的介绍多半会一脸懵逼。不要担心,上面的概念其实在刚开始学的时候不是很重要,当我们讲完后面的例子之后,在回来看上面的内容会一下明白很多。
5153

5254
但是,这里有几个概念是必须知道的。
5355

54-
####
56+
##
5557

56-
#### Loader 加载器
58+
### Loader 加载器
5759

5860
顾名思义,这个就是从指定源进行加载数据的。比如:文件夹 `DirectoryLoader`、Azure 存储 `AzureBlobStorageContainerLoader`、CSV文件 `CSVLoader`、印象笔记 `EverNoteLoader`、Google网盘 `GoogleDriveLoader`、任意的网页 `UnstructuredHTMLLoader`、PDF `PyPDFLoader`、S3 `S3DirectoryLoader`/`S3FileLoader`
5961

6062
Youtube `YoutubeLoader` 等等,上面只是简单的进行列举了几个,官方提供了超级的多的加载器供你使用。
6163

6264
> https://python.langchain.com/en/latest/modules/indexes/document\_loaders.html
6365
64-
####
66+
###
6567

66-
#### Document 文档
68+
### Document 文档
6769

6870
当使用loader加载器读取到数据源后,数据源需要转换成 Document 对象后,后续才能进行使用。
6971

70-
####
72+
###
7173

72-
#### Text Spltters 文本分割
74+
### Text Spltters 文本分割
7375

7476
顾名思义,文本分割就是用来分割文本的。为什么需要分割文本?因为我们每次不管是做把文本当作 prompt 发给 openai api ,还是还是使用 openai api embedding 功能都是有字符限制的。
7577

7678
比如我们将一份300页的 pdf 发给 openai api,让他进行总结,他肯定会报超过最大 Token 错。所以这里就需要使用文本分割器去分割我们 loader 进来的 Document。
7779

78-
####
80+
###
7981

80-
#### Vectorstores 向量数据库
82+
### Vectorstores 向量数据库
8183

8284
因为数据相关性搜索其实是向量运算。所以,不管我们是使用 openai api embedding 功能还是直接通过向量数据库直接查询,都需要将我们的加载进来的数据 `Document` 进行向量化,才能进行向量运算搜索。转换成向量也很简单,只需要我们把数据存储到对应的向量数据库中即可完成向量的转换。
8385

8486
官方也提供了很多的向量数据库供我们使用。
8587

8688
> https://python.langchain.com/en/latest/modules/indexes/vectorstores.html
8789
88-
####
90+
###
8991

90-
#### Chain 链
92+
### Chain 链
9193

9294
我们可以把 Chain 理解为任务。一个 Chain 就是一个任务,当然也可以像链条一样,一个一个的执行多个链。
9395

94-
####
96+
###
9597

96-
#### Agent 代理
98+
### Agent 代理
9799

98100
我们可以简单的理解为他可以动态的帮我们选择和调用chain或者已有的工具。
99101

100102
执行过程可以参考下面这张图:
101103

102104
![image-20230406213322739](doc/image-20230406213322739.png)
103105

104-
#### Embedding
106+
### Embedding
105107

106108
用于衡量文本的相关性。这个也是 OpenAI API 能实现构建自己知识库的关键所在。
107109

108110
他相比 fine-tuning 最大的优势就是,不用进行训练,并且可以实时添加新的内容,而不用加一次新的内容就训练一次,并且各方面成本要比 fine-tuning 低很多。
109111

110112
> 具体比较和选择可以参考这个视频:https://www.youtube.com/watch?v=9qq6HTr7Ocw
111113
112-
###
114+
##
113115

114-
### 实战
116+
## 实战
115117

116118
通过上面的必备概念大家应该已经可以对 LangChain 有了一定的了解,但是可能还有有些懵。
117119

@@ -125,9 +127,9 @@ Youtube `YoutubeLoader` 等等,上面只是简单的进行列举了几个,
125127
>
126128
> 当然,如果有看不懂的也不用担心,可以继续往后看,第一次学习讲究的是不求甚解。
127129
128-
####
130+
###
129131

130-
#### 完成一次问答
132+
### 完成一次问答
131133

132134
第一个案例,我们就来个最简单的,用 LangChain 加载 OpenAI 的模型,并且完成一次问答。
133135

@@ -151,7 +153,7 @@ llm("怎么评价人工智能")
151153

152154
这时,我们就可以看到他给我们的返回结果了,怎么样,是不是很简单。
153155

154-
#### 通过 Google 搜索并返回答案
156+
### 通过 Google 搜索并返回答案
155157

156158
接下来,我们就来搞点有意思的。我们来让我们的 OpenAI api 联网搜索,并返回答案给我们。
157159

@@ -227,7 +229,7 @@ agent.run("What's the date today? What great events have taken place today in hi
227229

228230
> Chatgpt 只能给官方赚钱,而 Openai API 能给我赚钱
229231
230-
#### 对超长文本进行总结
232+
### 对超长文本进行总结
231233

232234
假如我们想要用 openai api 对一个段文本进行总结,我们通常的做法就是直接发给 api 让他总结。但是如果文本超过了 api 最大的 token 限制就会报错。
233235

@@ -303,7 +305,7 @@ chain.run(split_documents[:5])
303305

304306
`map_rerank`: 这种一般不会用在总结的 chain 上,而是会用在问答的 chain 上,他其实是一种搜索答案的匹配方式。首先你要给出一个问题,他会根据问题给每个 document 计算一个这个 document 能回答这个问题的概率分数,然后找到分数最高的那个 document ,在通过把这个 document 转化为问题的 prompt 的一部分(问题+document)发送给 llm 模型,最后 llm 模型返回具体答案。
305307

306-
#### 构建本地知识库问答机器人
308+
### 构建本地知识库问答机器人
307309

308310
在这个例子中,我们会介绍如何从我们本地读取多个文档构建知识库,并且使用 Openai API 在知识库中进行搜索并给出答案。
309311

@@ -345,7 +347,7 @@ print(result)
345347

346348
> 关于 Openai embeddings 详细资料可以参看这个连接: https://platform.openai.com/docs/guides/embeddings
347349
348-
#### 构建向量索引数据库
350+
### 构建向量索引数据库
349351

350352
我们上个案例里面有一步是将 document 信息转换成向量信息和embeddings的信息并临时存入 Chroma 数据库。
351353

@@ -444,7 +446,7 @@ chain.run(input_documents=docs, question=query)
444446

445447
![image-20230407001803057](doc/image-20230407001803057.png)
446448

447-
#### 使用GPT3.5模型构建油管频道问答机器人
449+
### 使用GPT3.5模型构建油管频道问答机器人
448450

449451
在 chatgpt api(也就是 GPT-3.5-Turbo)模型出来后,因钱少活好深受大家喜爱,所以 LangChain 也加入了专属的链和模型,我们来跟着这个例子看下如何使用他。
450452

@@ -532,7 +534,7 @@ chat = ChatOpenAI(streaming=True, callback_manager=CallbackManager([StreamingStd
532534
resp = chat(chat_prompt_with_values.to_messages())
533535
```
534536

535-
#### 用 OpenAI 连接万种工具
537+
### 用 OpenAI 连接万种工具
536538

537539
我们主要是结合使用 `zapier` 来实现将万种工具连接起来。
538540

@@ -590,7 +592,7 @@ agent.run('请用中文总结最后一封"******@qq.com"发给我的邮件。并
590592

591593
这只是个小例子,因为 `zapier` 有数以千计的应用,所以我们可以轻松结合 openai api 搭建自己的工作流。
592594

593-
#### 一些有意思的小Tip
595+
### 一些有意思的小Tip
594596

595597
**执行多个chain**
596598

@@ -685,7 +687,7 @@ output_parser.parse(llm_output)
685687

686688
![image-20230406000017276](doc/image-20230406000017276.png)
687689

688-
#### **爬取网页并输出JSON数据**
690+
### **爬取网页并输出JSON数据**
689691

690692
有些时候我们需要爬取一些结构性比较强的网页,并且需要将网页中的信息以JSON的方式返回回来。
691693

@@ -734,7 +736,7 @@ print(response['output'])
734736
我们可以看到,他很好的将格式化后的结果输出了出来
735737
![image-20230510234934.png](doc/image-20230510234934.png)
736738

737-
#### **自定义agent中所使用的工具**
739+
### **自定义agent中所使用的工具**
738740

739741
```python
740742
from langchain.agents import initialize_agent, Tool
@@ -801,7 +803,7 @@ ai_response = chat(history.messages)
801803
print(ai_response)
802804
```
803805

804-
#### **使用 HuggingFace 模型**
806+
### **使用 HuggingFace 模型**
805807

806808
使用 HuggingFace 模型之前,需要先设置环境变量
807809

@@ -858,7 +860,7 @@ print(llm_chain.run(question))
858860
* 可以使用本地的 GPU
859861
* 有些模型无法在 HuggingFace 运行
860862

861-
#### **通过自然语言执行SQL命令**
863+
### **通过自然语言执行SQL命令**
862864

863865
我们通过 `SQLDatabaseToolkit` 或者 `SQLDatabaseChain` 都可以实现执行SQL命令的操作
864866

@@ -896,7 +898,7 @@ db_chain.run("How many employees are there?")
896898

897899
[https://python.langchain.com/en/latest/modules/chains/examples/sqlite.html](https://python.langchain.com/en/latest/modules/chains/examples/sqlite.html)
898900

899-
### 总结
901+
## 总结
900902

901903
所有的案例都基本已经结束了,希望大家能通过这篇文章的学习有所收获。这篇文章只是对 LangChain 一个初级的讲解,高级的功能希望大家继续探索。
902904

0 commit comments

Comments
 (0)