Skip to content

Commit 414b6a0

Browse files
committed
2023-04-24-ChatGPT-Elasticsearch-私域数据上使用ChatGPT.md
1 parent 7a656b1 commit 414b6a0

3 files changed

Lines changed: 228 additions & 4 deletions

File tree

93.7 KB
Loading
19.7 KB
Loading

_posts/2023/2023-04/2023-04-24-ChatGPT-Elasticsearch-私域数据上使用ChatGPT.md

Lines changed: 228 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,12 @@ author: Franklinfang
2020

2121
近几个月来,人们对 ChatGPT 充满了热情,这是一种由 OpenAI 创建的开创性人工智能模型。但 ChatGPT 到底是什么?
2222

23+
基于强大的 GPT 架构,ChatGPT 旨在理解文本输入并生成类似人类的响应。GPT 代表“生成式预训练Transformer(Generative Pre-trained Transformer)”。Transformer 是一种尖端模型架构,彻底改变了自然语言处理 (NLP) 领域。这些模型在海量数据上进行了预训练,能够理解上下文、生成相关响应,甚至进行对话. 要了解更多关于 transformer 模型的历史和 Elastic Stack 中的一些 NLP 基础知识,请务必查看很棒的[Elastic ML 工程师 Josh Devins 的演讲](https://www.youtube.com/watch?v=SvvbMCwyOnU)
24+
2325

2426

2527

2628

27-
基于强大的 GPT 架构,ChatGPT 旨在理解文本输入并生成类似人类的响应。GPT 代表“生成式预训练Transformer(Generative Pre-trained Transformer)”。Transformer 是一种尖端模型架构,彻底改变了自然语言处理 (NLP) 领域。这些模型在海量数据上进行了预训练,能够理解上下文、生成相关响应,甚至进行对话. 要了解更多关于 transformer 模型的历史和 Elastic Stack 中的一些 NLP 基础知识,请务必查看很棒的[Elastic ML 工程师 Josh Devins 的演讲](https://www.youtube.com/watch?v=SvvbMCwyOnU)
2829

2930
ChatGPT 的主要目标是促进人机之间有意义且引人入胜的交互。通过利用 NLP 的最新进展,ChatGPT 模型可以提供广泛的应用程序,从聊天机器人和虚拟助手到内容生成、代码完成等等。这些人工智能驱动的工具已迅速成为无数行业的宝贵资源,帮助企业简化流程并增强服务。
3031

@@ -88,14 +89,237 @@ ElasticDoc ChatGPT 流程利用 Python 界面接受用户问题并为 Elasticsea
8889

8990
运行我们的 python 前端和 api 后端的服务器
9091

91-
## Elastic Cloud设置
92+
### Elastic Cloud设置
9293

9394
本节中的步骤假设您当前没有在 Elastic Cloud 中运行的 Elasticsearch 集群。如果你已经有一个 Elastic Cloud
9495

9596
的集群,可以跳到下一部分。
9697

97-
### 注册
98+
**注册**
9899

99100
如果您还没有 Elasticsearch 集群,您可以通过[Elastic Cloud](https://cloud.elastic.co/registration)注册免费试用。
100101

101-
![image](https://raw.githubusercontent.com/frankdevhub/frankdevhub.github.io/master/_posts/2023/2023-04/1ddae6f52507fbc2b0305f8272f6cc63.png)
102+
![image](https://raw.githubusercontent.com/frankdevhub/frankdevhub.github.io/master/_posts/2023/2023-04/1ddae6f52507fbc2b0305f8272f6cc63.png)
103+
104+
105+
**创建部署**
106+
107+
注册后,系统会提示您创建第一个部署。
108+
109+
![image](https://raw.githubusercontent.com/frankdevhub/frankdevhub.github.io/master/_posts/2023/2023-04/15e02c1196ba5b697d9825f05b7dbd2f.png)
110+
111+
112+
- 为您的部署创建一个名称。
113+
- 您可以接受默认的云提供商和区域,或单击“编辑设置”并选择其他位置。
114+
- 单击创建部署。很快将为您配置一个新的部署,您将登录到 Kibana。
115+
116+
**回到云端**
117+
118+
在继续之前,我们需要在 Cloud Console 中做几件事:
119+
120+
单击左上角的导航图标并选择管理此部署。
121+
122+
![image](https://raw.githubusercontent.com/frankdevhub/frankdevhub.github.io/master/_posts/2023/2023-04/f4844fc9182175bfc4244f1ff230ed4e.png)
123+
124+
添加机器学习节点。
125+
126+
- 返回 Cloud Console,单击左侧导航栏中部署名称下的Edit。
127+
128+
![image](https://raw.githubusercontent.com/frankdevhub/frankdevhub.github.io/master/_posts/2023/2023-04/193d1284520d5004a78018c913e5ca85.png)
129+
130+
131+
- 向下滚动到 Machine Learning instances 框并单击 +Add Capacity。
132+
-**Size per zone**下,单击并选择 2 GB RAM大小的机器学习节点
133+
134+
![image](https://raw.githubusercontent.com/frankdevhub/frankdevhub.github.io/master/_posts/2023/2023-04/c20e43128c8d69524db959321d96b645.png)
135+
136+
向下滚动并单击保存:
137+
138+
在弹出的 summarizing the architecture changes 窗口中,单击“Confirm”。
139+
140+
片刻之后,您的部署现在将能够运行机器学习模型!
141+
142+
重置 Elasticsearch 部署用户和密码:
143+
144+
单击部署名称下方左侧导航栏中的安全性。
145+
单击重置密码并使用重置进行确认。(注意:因为这是一个新集群,所以不应使用此 Elastic 密码。)
146+
下载为“elastic”用户新创建的密码。(我们将使用它从 Hugging Face 和我们的 python 程序中加载我们的模型。)
147+
148+
复制 Elasticsearch 部署云 ID。
149+
150+
单击您的部署名称以转到概览页面。
151+
在右侧单击复制图标以复制您的 Cloud ID。(保存此以备后用连接到 Deployment。)
152+
153+
### Eland
154+
155+
接下来,我们需要将embedding模型加载到 Elasticsearch 中,用于为我们的博客title生成向量,以及为用户的搜索问题生成向量。我们将使用由 SentenceTransformers 训练并托管在 Hugging Face 模型中心上的[all-distilroberta-v1模型](https://huggingface.co/sentence-transformers/all-distilroberta-v1)。在此示例中,我们之所以选择这个模式,是因为它是在涵盖广泛主题的非常大的数据集上训练的,适合一般用途。但是,我们并非一定要选择这个模型,**对于向量搜索用例,使用针对您的特定数据集进行微调的模型通常会提供最佳相关性。**
156+
157+
为此,我们将使用Elastic 创建的Eland python 库。该库提供了广泛的数据科学功能,但我们将使用它作为桥梁,将模型从 Hugging Face 模型中心加载到 Elasticsearch,以便它可以部署在机器学习节点上以供推理使用。
158+
159+
Eland 可以作为 python 脚本的一部分运行,也可以在命令行上运行。该存储库还为希望走这条路的用户提供了一个 Docker 容器。今天我们将在一个小型 python notebook中运行 Eland ,它可以在网络浏览器中免费运行在谷歌的 Colab 中。
160+
161+
打开[程序链接](https://github.com/jeffvestal/ElasticDocs_GPT/blob/main/load_embedding_model.ipynb)并单击顶部的“在 Colab 中打开”按钮以在 Colab 中启动笔记本。
162+
163+
![image](https://raw.githubusercontent.com/frankdevhub/frankdevhub.github.io/master/_posts/2023/2023-04/bb99e73973d0fd87f57629326a442092.png)
164+
165+
166+
将变量 hf_model_id 设置为模型名称。此模型已在示例代码中设置,但如果您想使用不同的模型可自行修改:
167+
168+
- ```hf_model_id='sentence-transformers/all-distilroberta-v1'```
169+
170+
- 从 Hugging Face 复制模型名称。最简单的方法是单击模型名称右侧的复制图标。
171+
172+
运行 cloud auth 部分,系统会提示您输入:
173+
174+
- Cloud ID(您可以在 Elastic Cloud 控制台中找到它)
175+
- Elasticsearch 用户名(最简单的方法是使用在创建部署时创建的“Elastic”用户)
176+
- Elasticsearch的密码
177+
178+
运行剩余的步骤:
179+
180+
- 这将从 Hugging face 下载模型,将其分块,并将其加载到 Elasticsearch 中。
181+
- 将模型部署(启动)到机器学习节点上。
182+
183+
### Elasticsearch 索引和网络爬虫
184+
接下来我们将创建一个新的 Elasticsearch 索引来存储我们的 Elastic 文档,将网络爬虫配置为自动抓取这些文档并为其编制索引,并使用摄取管道为文档title生成向量。
185+
186+
**请注意,您可以在此步骤中使用您的专有数据,以创建适合您的领域的问答体验。**
187+
188+
- 如果您尚未打开 Kibana,请从 Cloud Console 打开它。
189+
- 在 Kibana 中,导航到Enterprise Search -> Overview。单击创建 Elasticsearch 索引。
190+
191+
- 使用 Web Crawler 作为摄取方法,输入 elastic-docs 作为索引名称。然后,单击创建索引。
192+
193+
- 单击“**ingest Pipeline**”选项卡。
194+
- 单击 **Ingest Pipeline** 中的 **Copy and customize**
195+
- 单击 **Add Inference Pipeline**
196+
197+
- 为新管道输入名称 elastic-docs_title-vector。
198+
- 选择您在上面的 Eland 步骤中加载的经过训练的 ML 模型。
199+
- 选择title作为源字段。
200+
201+
- 单击**Continue**,然后在测试阶段再次单击**Continue**
202+
- 在 Review 阶段点击 Create Pipeline
203+
204+
更新 dense_vector 字段的映射。(注意:对于 Elasticsearch 8.8+ 版本,此步骤应该是自动的。)
205+
206+
- 在导航菜单中,单击 **Dev Tools**。如果这是您第一次打开 Dev Tools,您可能必须在带有文档的弹出窗口中单击“关闭”。
207+
在 Console 选项卡的 Dev Tools 中,使用以下代码更新dense_vector目标字段的映射。您只需将其粘贴到代码框中,然后单击第 1 行右侧的小箭头。
208+
209+
```json
210+
POST search-elastic-docs/_mapping
211+
{
212+
"properties": {
213+
"title-vector": {
214+
"type": "dense_vector",
215+
"dims": 768,
216+
"index": true,
217+
"similarity": "dot_product"
218+
}
219+
}
220+
}
221+
222+
```
223+
您应该会在屏幕的右半部分看到以下响应:
224+
```json
225+
{
226+
"acknowledged": true
227+
}
228+
```
229+
230+
- 这将允许我们稍后在title字段上运行 kNN 向量搜索。
231+
232+
配置网络爬虫以爬取 Elastic官方文档:
233+
234+
- 再次单击导航菜单,然后单击 Enterprise Search -> Overview。
235+
- 在内容下,单击索引。
236+
- 单击 search-elastic-docs。
237+
238+
- 单击“**Manage Domain**s”选项卡。
239+
- 单击“**Add domain**”。
240+
- 输入[https://www.elastic.co/guide/en](https://www.elastic.co/guide/en),然后单击验证域。
241+
- 检查运行后,单击**Add domain**。然后单击抓取规则。
242+
- 逐个添加以下爬行规则。从底部开始,逐步向上。规则按照第一个匹配进行评估。
243+
Disallow
244+
245+
Contains
246+
247+
release-notes
248+
249+
Allow
250+
251+
Regex
252+
253+
/guide/en/.*/current/.*
254+
255+
Disallow
256+
257+
Regex
258+
259+
.*
260+
261+
262+
- 准备好所有规则后,单击页面顶部的抓取。然后,单击“
263+
264+
**Crawl all domains on this index**”。
265+
266+
Elasticsearch 的网络爬虫现在将开始爬取文档站点,为title字段生成向量,并对文档和向量建立索引。
267+
268+
269+
第一次爬网需要一些时间才能完成。同时,我们可以设置 OpenAI API 凭证和 Python 后端。
270+
271+
## 与 OpenAI API 连接
272+
要向 ChatGPT 发送文档和问题,我们需要一个 OpenAI API 帐户和密钥。如果您还没有帐户,可以创建一个免费帐户,您将获得初始数量的免费积分。
273+
274+
- 前往[https://platform.openai.com](https://platform.openai.com)并点击注册。您可以通过电子邮件地址和密码进行注册,也可以使用Google或Microsoft登录。
275+
创建帐户后,您需要创建一个 API 密钥:
276+
277+
- 单击[API Key](https://platform.openai.com/account/api-keys)
278+
- 单击创建新密钥。
279+
- 复制新密钥并将其保存在安全的地方,因为您将无法再次查看该密钥。
280+
281+
## Python 后端设置
282+
283+
### 克隆或下载python程序
284+
285+
Github 代码链接
286+
287+
安装所需的 python 库。我们在具有隔离环境的 Replit 中运行示例程序。如果您在笔记本电脑或 VM 上运行它,最佳做法是为 python 设置一个VENV。
288+
运行 pip install -r requirements.txt
289+
290+
2.设置身份验证和连接环境变量(例如,如果在命令行上运行:export openai_api=”123456abcdefg789”)
291+
292+
- openai_api - OpenAI API Key
293+
- cloud_id - Elastic Cloud ID
294+
- cloud_user - Elasticsearch 集群用户
295+
- cloud_pass - Elasticsearch 用户密码
296+
297+
3.运行streamlit程序。有关 streamlit 的更多信息可以在其文档中找到。
298+
299+
Streamlit 有自己的启动命令:streamlit run elasticdocs_gpt.py
300+
这将启动网络浏览器,并将 url 打印到命令行。
301+
302+
## 聊天响应的示例
303+
304+
一切都已摄取且前端启动并运行后,您可以开始询问有关 Elastic 官方文档的问题。
305+
306+
询问“Show me the API call for an inference processor”现在会返回一个 API 调用的例子和有关配置设置的信息。
307+
308+
309+
询问将新集成添加到 Elastic Agent 的步骤:
310+
311+
312+
如前所述,允许 ChatGPT 仅根据训练过的数据回答问题的风险之一是它容易产生错误答案的幻觉。该项目的目标之一是为 ChatGPT 提供包含正确信息的数据,并让它制定答案。
313+
314+
那么当我们给 ChatGPT 一个不包含正确信息的文档时会发生什么?比方说,请它告诉您如何造船(Elastic 的官方文档不包含此内容):
315+
316+
317+
当 ChatGPT 无法在我们提供的文档中找到问题的答案时,它会退回到我们的提示指令,简单地告诉用户它无法回答问题。
318+
319+
## Elasticsearch 的强大检索 + ChatGPT 的强大功能
320+
321+
在这个例子中,我们展示了如何将Elasticsearch强大的搜索检索功能与GPT模型生成的最新进展的AI响应集成,从而将用户体验提升到一个全新的水平。
322+
323+
这些组件可以根据您的具体要求进行定制,并进行调整以提供最佳结果。虽然我们使用了Elastic网络爬虫来摄取公共数据,但您并不局限于此方法。你随意尝试其他embedding模型,尤其是那些针对特定领域数据进行微调的模型。
324+
325+
您今天可以尝试本博客中讨论的所有功能!要构建您自己的 ElasticDocs GPT 体验,请注册一个Elastic 试用帐户,然后查看此示例代码库以开始使用。

0 commit comments

Comments
 (0)