Skip to content

Commit 992e57d

Browse files
committed
#commit:ChatGPT 和 Elasticsearch的结合:在私域数据上使用ChatGPT
Signed-off-by: frankdevhub <frankdevhub@gmail.com>
1 parent 414b6a0 commit 992e57d

8 files changed

Lines changed: 41 additions & 28 deletions
115 KB
Loading

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

Lines changed: 41 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ Elasticsearch 的主要优势之一是其强大的 API,它可以与其他服
7373

7474
ElasticDoc ChatGPT 流程利用 Python 界面接受用户问题并为 Elasticsearch 生成混合搜索请求,结合 BM25 和 kNN 搜索方法从 Elastic的官方文档中查找最相关的文档,这些文档现已在 Elasticsearch 中编制索引。但是,**您不必使用混合搜索甚至向量搜索。Elasticsearch 可以灵活地使用最适合您需求的搜索模式,并为您的特定数据集提供最相关的结果。**
7575

76-
在检索到最佳结果后,该程序会为 OpenAI 的 ChatCompletion API 制作Prompt,指示它仅使用所选文档中的信息来回答用户的问题。此提示是确保 ChatGPT 模型仅使用官方文档中的信息、这是减少ChatGPT产生幻觉的关键。
76+
在检索到最佳结果后,该程序会为 OpenAI 的 ChatCompletion API 制作 `Prompt`,指示它仅使用所选文档中的信息来回答用户的问题。此提示是确保 ChatGPT 模型仅使用官方文档中的信息、这是减少ChatGPT产生幻觉的关键。
7777

7878
最后,该程序向用户展示 API 生成的响应和源文档的链接,提供无缝且用户友好的体验,集成了前端交互、Elasticsearch 查询和 OpenAI API 使用以实现高效的问答。
7979

@@ -135,20 +135,28 @@ ElasticDoc ChatGPT 流程利用 Python 界面接受用户问题并为 Elasticsea
135135

136136
向下滚动并单击保存:
137137

138-
在弹出的 summarizing the architecture changes 窗口中,单击“Confirm”。
138+
![image](https://raw.githubusercontent.com/frankdevhub/frankdevhub.github.io/master/_posts/2023/2023-04/541d3fd9edf930b1d369c4136f3428bc.png)
139+
140+
在弹出的 **summarizing the architecture changes** 窗口中,单击“Confirm”。
141+
142+
![image](https://raw.githubusercontent.com/frankdevhub/frankdevhub.github.io/master/_posts/2023/2023-04/d8447c6adb30c5a17e7fbfa6d1c33e3e.png)
139143

140144
片刻之后,您的部署现在将能够运行机器学习模型!
141145

142146
重置 Elasticsearch 部署用户和密码:
143147

144-
单击部署名称下方左侧导航栏中的安全性。
145-
单击重置密码并使用重置进行确认。(注意:因为这是一个新集群,所以不应使用此 Elastic 密码。)
146-
下载为“elastic”用户新创建的密码。(我们将使用它从 Hugging Face 和我们的 python 程序中加载我们的模型。)
148+
- 单击部署名称下方左侧导航栏中的安全性。
149+
- 单击重置密码并使用重置进行确认。(注意:因为这是一个新集群,所以不应使用此 Elastic 密码。)
150+
- 下载为“elastic”用户新创建的密码。(我们将使用它从 Hugging Face 和我们的 python 程序中加载我们的模型。)
151+
152+
![image](https://raw.githubusercontent.com/frankdevhub/frankdevhub.github.io/master/_posts/2023/2023-04/31821424162e7012ce41a01d69457a5b.png)
147153

148154
复制 Elasticsearch 部署云 ID。
149155

150-
单击您的部署名称以转到概览页面。
151-
在右侧单击复制图标以复制您的 Cloud ID。(保存此以备后用连接到 Deployment。)
156+
- 单击您的部署名称以转到概览页面。
157+
- 在右侧单击复制图标以复制您的 Cloud ID。(保存此以备后用连接到 Deployment。)
158+
159+
![image](https://raw.githubusercontent.com/frankdevhub/frankdevhub.github.io/master/_posts/2023/2023-04/c20e43128c8d69524db959321d96b645.png)
152160

153161
### Eland
154162

@@ -169,6 +177,8 @@ Eland 可以作为 python 脚本的一部分运行,也可以在命令行上运
169177

170178
- 从 Hugging Face 复制模型名称。最简单的方法是单击模型名称右侧的复制图标。
171179

180+
![image](https://raw.githubusercontent.com/frankdevhub/frankdevhub.github.io/master/_posts/2023/2023-04/36903df161604048ff58749f3f97777e.png)
181+
172182
运行 cloud auth 部分,系统会提示您输入:
173183

174184
- Cloud ID(您可以在 Elastic Cloud 控制台中找到它)
@@ -181,19 +191,26 @@ Eland 可以作为 python 脚本的一部分运行,也可以在命令行上运
181191
- 将模型部署(启动)到机器学习节点上。
182192

183193
### Elasticsearch 索引和网络爬虫
194+
184195
接下来我们将创建一个新的 Elasticsearch 索引来存储我们的 Elastic 文档,将网络爬虫配置为自动抓取这些文档并为其编制索引,并使用摄取管道为文档title生成向量。
185196

186197
**请注意,您可以在此步骤中使用您的专有数据,以创建适合您的领域的问答体验。**
187198

188199
- 如果您尚未打开 Kibana,请从 Cloud Console 打开它。
189200
- 在 Kibana 中,导航到Enterprise Search -> Overview。单击创建 Elasticsearch 索引。
190201

202+
![image](https://raw.githubusercontent.com/frankdevhub/frankdevhub.github.io/master/_posts/2023/2023-04/7e6617eea0a0cbf74a42ae92f403af9c.png)
203+
191204
- 使用 Web Crawler 作为摄取方法,输入 elastic-docs 作为索引名称。然后,单击创建索引。
192205

206+
![image](https://raw.githubusercontent.com/frankdevhub/frankdevhub.github.io/master/_posts/2023/2023-04/00b184a0dc5540311658a26be6448d0e.png)
207+
193208
- 单击“**ingest Pipeline**”选项卡。
194209
- 单击 **Ingest Pipeline** 中的 **Copy and customize**
195210
- 单击 **Add Inference Pipeline**
196211

212+
![image](https://raw.githubusercontent.com/frankdevhub/frankdevhub.github.io/master/_posts/2023/2023-04/3ddab2ea41cc05f30caa8b99ea8d638a.png)
213+
197214
- 为新管道输入名称 elastic-docs_title-vector。
198215
- 选择您在上面的 Eland 步骤中加载的经过训练的 ML 模型。
199216
- 选择title作为源字段。
@@ -240,35 +257,28 @@ POST search-elastic-docs/_mapping
240257
- 输入[https://www.elastic.co/guide/en](https://www.elastic.co/guide/en),然后单击验证域。
241258
- 检查运行后,单击**Add domain**。然后单击抓取规则。
242259
- 逐个添加以下爬行规则。从底部开始,逐步向上。规则按照第一个匹配进行评估。
243-
Disallow
244-
245-
Contains
246260

247-
release-notes
248-
249-
Allow
250-
251-
Regex
252-
253-
/guide/en/.*/current/.*
254-
255-
Disallow
256-
257-
Regex
258-
259-
.*
261+
| Disallow | Contains | release-notes |
262+
| :-----| ----: | :----: |
263+
| Allow | Regex | /guide/en/.*/current/.* |
264+
| Disallow | Regex | * |
260265

266+
![image](https://raw.githubusercontent.com/frankdevhub/frankdevhub.github.io/master/_posts/2023/2023-04/9c0a4bee0e20ac1b5cee83b6ccf82497.png)
261267

262268
- 准备好所有规则后,单击页面顶部的抓取。然后,单击“
263269

264270
**Crawl all domains on this index**”。
265271

272+
![image](https://raw.githubusercontent.com/frankdevhub/frankdevhub.github.io/master/_posts/2023/2023-04/42aa39401404496572573b5b07411ada.png)
273+
266274
Elasticsearch 的网络爬虫现在将开始爬取文档站点,为title字段生成向量,并对文档和向量建立索引。
267275

276+
![image](https://raw.githubusercontent.com/frankdevhub/frankdevhub.github.io/master/_posts/2023/2023-04/8db3fca2a71d8628b1956ad70d65bf3b.png)
268277

269278
第一次爬网需要一些时间才能完成。同时,我们可以设置 OpenAI API 凭证和 Python 后端。
270279

271280
## 与 OpenAI API 连接
281+
272282
要向 ChatGPT 发送文档和问题,我们需要一个 OpenAI API 帐户和密钥。如果您还没有帐户,可以创建一个免费帐户,您将获得初始数量的免费积分。
273283

274284
- 前往[https://platform.openai.com](https://platform.openai.com)并点击注册。您可以通过电子邮件地址和密码进行注册,也可以使用Google或Microsoft登录。
@@ -278,13 +288,16 @@ Elasticsearch 的网络爬虫现在将开始爬取文档站点,为title字段
278288
- 单击创建新密钥。
279289
- 复制新密钥并将其保存在安全的地方,因为您将无法再次查看该密钥。
280290

291+
![image](https://raw.githubusercontent.com/frankdevhub/frankdevhub.github.io/master/_posts/2023/2023-04/c847092e93ba9d7513e04721524dbc37.png)
292+
281293
## Python 后端设置
282294

283295
### 克隆或下载python程序
284296

285-
Github 代码链接
297+
[Github 代码链接](https://github.com/jeffvestal/ElasticDocs_GPT/blob/main/elasticdocs_gpt.py)
298+
299+
安装所需的 python 库。我们在具有隔离环境的 Replit 中运行示例程序。如果您在笔记本电脑或 VM 上运行它,最佳做法是[为 python 设置一个VENV。](https://docs.python.org/3/library/venv.html)
286300

287-
安装所需的 python 库。我们在具有隔离环境的 Replit 中运行示例程序。如果您在笔记本电脑或 VM 上运行它,最佳做法是为 python 设置一个VENV。
288301
运行 pip install -r requirements.txt
289302

290303
2.设置身份验证和连接环境变量(例如,如果在命令行上运行:export openai_api=”123456abcdefg789”)
@@ -294,10 +307,10 @@ Github 代码链接
294307
- cloud_user - Elasticsearch 集群用户
295308
- cloud_pass - Elasticsearch 用户密码
296309

297-
3.运行streamlit程序。有关 streamlit 的更多信息可以在其文档中找到
310+
3.运行streamlit程序。有关 streamlit 的更多信息可以在其[文档](https://docs.streamlit.io/library/get-started/installation)中找到
298311

299-
Streamlit 有自己的启动命令:streamlit run elasticdocs_gpt.py
300-
这将启动网络浏览器,并将 url 打印到命令行。
312+
- Streamlit 有自己的启动命令:streamlit run elasticdocs_gpt.py
313+
- 这将启动网络浏览器,并将 url 打印到命令行。
301314

302315
## 聊天响应的示例
303316

51.2 KB
Loading
35.2 KB
Loading
10.5 KB
Loading
5.27 KB
Loading
162 KB
Loading
61.4 KB
Loading

0 commit comments

Comments
 (0)