查看原文
其他

利用 GPT-4 & LangChain 本地部署企业知识库(技术篇)

清风徐来 AI变现研习社 2024-06-01



这是《ChatGPT ,从入门到精通》 第 36 篇文章

阅读对象:企业管理人员,咨询公司、IT 经理、程序员,IT 人员。

笔者曾担任多年的 IT 经理,开发、实施过无数的信息系统,亲历过多次组织架构调整,也曾深耕过办公室、运营和投资口的工作,深知技术革新对管理的重要影响。

现在,AI 技术正席卷全球,而 ChatGPT 更是引领了这场革命,

我将为你揭开 AI 大潮下,管理、业务的技术和变更的秘密。

今天,就让我来告诉你,如何利用 ChatGPT 构建一个智能的企业知识库,提升个人和团队效率!

一、相关概念

1.什么是企业知识库

企业知识库是一个存储和管理企业内部各种知识和信息的系统,比如产品说明,客户反馈,员工培训,市场分析等等。

企业知识库可以帮助企业提高效率,节省成本,增强竞争力,促进创新和学习。

企业知识库的应用场景包括:

  • 新员工自助培训、答疑

  • 企业案例

  • 企业历史经验数据标准化。如房地产企业中,产品库,户型库,客户画像、各种单方成本、合同模版...

  • 员工个人也可以使用相关技术,实现类似chatpdf,chatdoc的快速知识总结。

2.什么是 LLM?

LLM 即大型语言模型,是一种人工智能技术,它可以根据给定的文本或问题生成自然语言的回答或内容。比如,你可以用语言模型来写文章,回答问题,生成对话等。一些知名的语言模型有:GPT-3,GPT-4,BERT,XLNet 等。

3.什么是 LangChain?

LangChain 是一个用于开发基于语言模型(LLM)的应用程序的框架。可以更轻松地构建可扩展的 AI/LLM 应用程序和聊天机器人。

开源地址:https://github.com/hwchase17/langchain

LangChain 可以将语言模型连接到其他数据源,比如 PDF 文件,网页,数据库等,并让语言模型与其环境进行交互。

LangChain 于 2023 年 3 月获得了 Benchmark Capital 的 1000 万美元种子轮融资,在近期又拿到了红杉 2000-2500 万美金的融资,估值已经提升到了 2 亿美金左右。

LangChain 可以轻松管理与语言模型的交互,将多个组件链接在一起,并集成额外的资源,例如 API 和数据库。其组件包括了模型(各类 LLM),提示模板(Prompts),索引,代理(Agent),记忆等等。

LangChain 的一些应用场景有:

  • 问答系统:你可以用 LangChain 来构建一个能够从特定文档或网页中回答问题的系统。
  • 聊天机器人:你可以用 LangChain 来构建一个能够与用户进行自然语言对话的机器人。
  • 代理程序:你可以用 LangChain 来构建一个能够根据用户的指令或问题执行一些任务或服务的程序。

4.GPT-4

GPT-4 是 OpenAI 公司创建的一种新的大型语言模型,可以生成类似于人类语音的文本。它改进了目前基于 GPT-3.5 的 ChatGPT 使用的技术。GPT-4常识点这里

GPT 是 Generative Pre-trained Transformer 的缩写,是一种深度学习技术,使用人工神经网络来像人类一样思考,书写。

GPT-4 比 GPT-3.5 更强大,更准确,更创造性,更安全。它可以处理更复杂和更多样化的任务,比如写歌,写剧本,做数学题,通过律师考试等。

5.什么是向量数据库?

通俗讲,AI 基于语义相似度而不是关键词匹配的方式,把各种数据组合在一起,可以提高搜索的准确性和相关性。这种组合方式叫做向量化。

本文使用 Pinecone.io ,是一个免费的在线向量数据库网站,以文本形式存储存储文件内容,以便稍后检索类似文档。

6.什么是 GPT4 PDF Chatbot Langchain

一个基于 GPT-4、Langchain 的 聊天机器人,可以阅读多个大型 PDF 文件融合给出答案。

GPT4 PDF Chatbot Langchain 项目的底层逻辑是将你提供的各种 PDF 文档转化成文本文件并将其融合分解,通过智能化技术,向量化到一个向量数据库中。

用户使用对话模型和 OpenAI 发起对话,AI 根据提示语,找到最相关的文档并通过 GPT 生成与需求最匹配的答案。

7. AI 后的知识库与传统知识库区别

AI 后的知识库比传统知识库更智能,可以根据提问的语境,给出不同的答案。

比如,很多公司会给新员工指定一个老员工,俗称“入职引导人",为新员工答疑解惑,辅助新员工尽快了解公司,熟悉工作流程,融入新的工作环境。

AI 后的知识库就可以起到“入职引导”的作用。

8. GPT4 PDF Chatbot Langchain 与 ChatPDF 的区别 

ChatPDF 也好, ChatDOC 也好(介绍点此处),是基于单个 PDF 文件给出答案,功能单一。

GPT4 PDF Chatbot Langchain 用于多个大型 PDF 文件,记忆力更强,综合分析能力更强,还可以融合多个知识源,提供快速和准确的相似度搜索和检索。

二、GPT4 PDF Chatbot Langchain 的工作流程

gpt4-pdf-chatbot-langchain 工作流程示意图如下:

分为两条主线:

1. 第一条"上传线"

准备一个或多个 PDF 文档;系统先把 PDF 转化成 TXT 文本文件;再把文本文件拆成很多一个一个的小块Chunk,然后把这些小块向量化到一个相量的数据库里面去。

2. 第二条“对话线”

用户通过AI聊天界面发起对话(类似于 chatgpt 对话),系统会自动携带 A 历史对话(如有),加上你这次的提问 B,提交给大语言模型 GPT4 或 GPT3.5,融合得到一个新的提问 C。

系统将提问 C,通过 OpenAI key 去查询 向量知识库,找到最相关的多条内容,再将内容融合,找出与用户提问最匹配的一个答案,通过大语言模型回复给用户。

三、准备工作

我们用最简单的方式来先做一个演示

为追求简单,我们本次不使用 python 编程工具

但还是需要完成一些准备。

我已经把本文提及的相关资源全部放到91aitools.cn网站了,可以点击“阅读原文” 访问,相关链接如下:

1. 一台可以上网的电脑或者一个服务器

有条件魔法上网为佳

2. gpt4-pdf-chatbot-langchain 安装程序

  • 通过 Github 克隆或下载
    https://github.com/mayooear/gpt4-pdf-chatbot-langchain
  • 通过网盘下载(约 2M)

链接: https://pan.baidu.com/s/1N1MOw2YjzQwU6L-B-JT5Vw?pwd=gs63 提取码: gs63

3. 准备 Openai API key

3.5 可用,4 更好

如果你没有 openai 的账号,

获取方法有两种:

方法 1:通过第三方,买一个 gpt3.5 的 key

官方的 chatgpt 账号可以免费申请 API key,申请后,软件公司会送你 5 美刀的试用额度

如果你没有官方的 chatgpt 账号,或者你不会科学上网,你可以找熟人共享一个,或者通过第三方直接买一个

(1)登录https://openaikey.xyz

建议 25 元人民币买一个 5 美刀的

不要买多,万一被封了也不心痛。

(2)输入手机或邮箱,方便取得 API-KEY

二选一即可,建议使用邮箱,如果你忘了 key 值可以通过邮箱找回

用微信或支付宝支付。

你会收到一封邮件,提示如下

登录邮件中的网址,凭卡密查询密码

请务必保存好这个 API-key。

这个 key 其实是第三方通过技术手段,到 OPENAI 官网批量取得的,也是 OPENAI 的官方 APIkey

方法 2(需科学上网):通过官网取得 OpenAI API Key

(1) 申请 chatgpt 账号

申请方法详见 《ChatGPT 保姆级注册教程(上)原生版》

(2) 生成 chatgpt 3.5 API key

你如果在官网注册了 chatgpt,默认开通 GPT3.5 API key,你可以生成很多个 key,方法如下:

回到 OpenAI 网站,点击右上角的 Account 按钮;在弹出的菜单栏中选择 view API Keys;点击 Create an API key 按钮

新建一个名称(方便记忆即可)

复制这个 KEY,再次强调,请务必妥善保存。通过官网注册获取的 API key 你忘了的话,是找不回来的,它只显示一次。

不过忘了也就简单,按此流程重新再生成一个。

4.准备 Pinecone API key

(1)注册pinecone数据库

登录https://www.pinecone.io

需魔法登录,输入谷歌邮箱或其他邮箱,你会收到一封邮件,6 位数验证码

返回 pinecone.io 录入 验证码,完成登录

(2)新建数据库索引

登录后点击“indexes”-》create index

(3) 取得 Pinecone 参数

需要三个参数,后面配置本地文件需要用到。

三个参数是 PINECONE_API_KEY、PINECONE_ENVIRONMENT、PINECONE_INDEX_NAME

取值如下:

PINECONE_API_KEY 隐藏了,点"眼睛"图标就看得到,或者点中间的文档图标进行复制

四、本地知识库配置流程

 gpt4-pdf-chatbot-langchain项目基于 python 语言

但本次演示不使用 python 开发软件

1.将前面下载的安装包解压到到本地

建议解压一个英文名的盘符

2.配置环境文件 “.env.example ”

在 gpt4-pdf-chatbot-langchain 文件夹中,找到“.env.example” 文件,使用记事本打开

将之前取得的 openai key,以及在 pinecone 取得的三个参数复制到.env.example 文件的如下位置

将 “.env.example”文件另存为“ .env”文件

环境配置完成。

3. 安装 Node

Node 是一个运行时环境

需要 Node 18 版本以上

检查 Node 和 npm 的版本的方法很简单,只需要在 dos 界面中输入以下命令:

node -v

按以下操作,进入 dos 界面

没有安装就到 https://nodejs.org ,下载

下载后直接安装,全部默认

安装后进入 dos,输入 node -v,可以看到 node 已经安装完成:

4. 安装项目运行需要的环境文件

(1)安装 Yarn 包管理器

在 gpt4-pdf-chatbot-langchain 的 dos 目录下

运行 npm install yarn -g 命令,全局安装 Yarn 包管理器

npm install yarn -g

(2)安装 Yarn 包

在 dos 界面,继续输入

yarn install


完成安装后 如下:

注意,必须在 gpt4-pdf-chatbot-langchain 的 dos 目录下运行上述代码

安装后,在项目文件目录下,新增了一个 node_modules 文件夹。

5. 其他配置

(1)配置 pinecone 上数据文件位置

在 gpt4-pdf-chatbot-langchain-main\config 文件夹下

找到 pinecone.ts ,用记事本打开,找到 pdf-test,这个是将你的文件保存在 pinecone 网站上的文件夹名称。

可以更改,也可以暂时不改。等到有实际案例需要区分再改。

比如,你有多个知识库,又不想让他们内容融合,可以修改这个保存位置

(2)修改 makechain.ts

  • 修改对 AI 的引导词

在 gpt4-pdf-chatbot-langchain-main\utils 文件夹下

找到 makechain.ts 文件,记事本打开,找到 const QA_PROMPT 字段

这里给 AI 的一个默认提示,意思是

“你是一个有用的 AI 助手。使用下面的上下文来回答最后的问题。如果你不知道答案,只需说你不知道。请不要试图编造答案。如果问题与上下文无关,请礼貌地回答说你只回答与上下文相关的问题。”

可以根据需要修改,新手建议保持默认。

  • 修改默认 GPT 版本

还是在 makechain.ts 文件中,找到 modelName,默认值是 gpt-3.5-turbo 如果你使用 GPT4,可以在这里修改。

6. 上传文件到知识库

在项目目录下,新增一个文件夹 docs

将你的知识类文件复制进去

可以传一个,也可以传多个 PDF 文件

7.启动文件解析

还是 dos 界面(仍然在项目目录下)

输入

npm run ingest

系统启动文件解析,如下所示。

这一步,是将你的 PDF 文档转化为人工智能能够识别的向量文件。

8.启动对话界面

还是 dos 界面(仍然在项目目录下),输入

npm run dev

完成服务启动,看到以下界面

默认网址为http://localhost:3000

复制这个网址到你的浏览器地址栏,回车,进入以下界面:

至此,AI 知识库已经部署到本地。

现在,你可以与 AI,基于你上传的文件进行对话了。

五、对话简介

1.对话框简介

对话框上面是 AI 融合回答的问题,下面是 AI 引用的原文(默认 4 条)

2.不能关闭 DOs 框

关闭后http://localhost:3000 网址会报错

3.AI 回答范围

在 gpt4-pdf-chatbot-langchain 中,AI 只会基于你复制到知识库的文件内容,来回答问题,因为它被定位于一个 私有的知识库问答机器人

4.新增文件怎么办?

复制文件到 docs 文件夹,按 ctrl+c 中断 DOS 进程

回到提示符,重新运行 npm run ingest 和 npm run run

5. 不同的文件互相干扰如何处理?

在 pinecone.ts 文件中,修改默认文件夹

修改方式详见 第四条第 5 款“其他配置”

6.原始文件必须是 PDF 文件吗?

答:是的,必须是 PDF 文件。

你可以转化,方法如下:

  • 方法 1:每个另存为 Pdf

  • 方法 2:三方工具 Word 批量转 PDF 工具,PDF Candy Desktop Pro 等工具

  • 方法 3:python,我让 BING 写了个代码如下:

# 导入需要的模块
import os
import comtypes.client
import tqdm # 用于显示进度条

# 定义一个函数,把Office文件转换为.pdf文件
def office2pdf(office_file, pdf_file):
    # 根据文件的扩展名,确定应用对象的类型
    ext = os.path.splitext(office_file)[1]
    if ext == '.doc' or ext == '.docx':
        app = 'Word.Application'
        format = 17 # wdFormatPDF
    # elif ext == '.xls' or ext == '.xlsx':
    #     app = 'Excel.Application'
    #     format = 0 # xlWorkbookDefault
    # elif ext == '.ppt' or ext == '.pptx':
    #     app = 'PowerPoint.Application'
    #     format = 32 # ppSaveAsPDF
    else:
        return # 不支持的文件类型,直接返回
    # 创建应用对象
    office = comtypes.client.CreateObject(app)
    # 打开Office文件
    doc = office.Documents.Open(office_file)
    # 保存为.pdf文件
    doc.SaveAs(pdf_file, FileFormat=format)
    # 关闭Office文件
    doc.Close()
    # 退出应用
    office.Quit()

# 获取当前目录
current_dir = os.getcwd()
# 定义一个列表,存放支持的文件扩展名
extensions = ['.doc''.docx''.xls''.xlsx''.ppt''.pptx']
# 初始化一个列表,存放需要转换的文件路径
files_to_convert = []
# 遍历当前目录及其子目录
for root, dirs, files in os.walk(current_dir):
    # 对于每个文件
    for file in files:
        # 如果文件的扩展名在支持的列表中
        if file.endswith(tuple(extensions)):
            # 获取文件的完整路径
            office_file = os.path.join(root, file)
            # 把文件路径添加到列表中
            files_to_convert.append(office_file)

# 获取需要转换的文件总数
total_files = len(files_to_convert)
# 初始化一个计数器,记录转换的文件数
count = 0

# 创建一个进度条对象,设置最大值为总文件数,设置描述为"转换中"
pbar = tqdm.tqdm(total=total_files, desc="转换中")

# 对于每个需要转换的文件路径
for office_file in files_to_convert:
    # 获取文件的名称(不含扩展名)
    file_name = os.path.splitext(office_file)[0]
    # 生成.pdf文件的完整路径
    pdf_file = file_name + '.pdf'
    # 调用函数,转换文件格式
    office2pdf(office_file, pdf_file)
    # 更新计数器
    count += 1
    # 更新进度条,增加1个单位
    pbar.update(1)

# 关闭进度条对象
pbar.close()

# 打印提示信息,告诉你转换完成
print(f'已完成{count}个文件的转换。')

在 pycharm 运行如下

我导了某个集团的全套流程进去,快 400 个文件用了半个小时

7.对话过程中必须魔法么?

答:需要。

8.如何让局域网其他用户可以访问?

答:建议你咨询 IT 人员,并不复杂。

最简单的办法,看你本机在局域网的 IP 是多少

比如 是192.168.2.108,就通过以下网址访问(前提是网管未设置限制)

http://192.168.2.108:3000

如下图:


9.中文支持似乎不是很友好

答:是的,目前正在完善中。


总结:

今天我们介绍了使用 GPT-4 & LangChain,构建基于企业知识库的智能对话机器人的概念、基础步骤。

本篇侧重于技术,下篇将侧重于应用。

别忘了关注、收藏、点赞、分享 哦!以便第一时间收到更多更好玩儿的 ChatGPT 技巧分享哦。

「礼包 1」 只需在本公众号内回复“炼丹”,即可 获得 stable-diffusion 相关资源

「礼包 2」 只需在本公众号内回复“AI”,即可免费获得我们为您精心准备的学习大礼包。

「礼包 3 学习群」 如果你想学习 AI 知识,欢迎加入我们的学习群。请后台发送“入群”或扫描下方二维码。


继续滑动看下一个
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存