基于此,本篇继续带领大家搭建一个基于本地知识库检索的问答系统。
有同学说 Coze 不也可以实现同样功能么?
是的,不过在 Coze 上,你需要把知识库文件文件上传到 Coze 的服务器。如果对数据安全有要求,那么搭建本地私有的知识库就更有必要了。
而且,就目前的体验而言,相比下面介绍的 FastGPT,Coze 的知识库检索略逊色一些。
FastGPT,给 GPT 插上本地私有知识库的翅膀,让它可以利用你的领域知识回答问题。
有同学问:和 dify 有什么区别?
相比 dify,FastGPT 在知识库召回上更优,而 dify 产品功能更为丰富,适合 demo 搭建。
传送门:https://github.com/labring/FastGPT
1. FastGPT 部署
前两篇,我们分别搞了一台本地 Linux 虚拟机和一台云服务器:
- Windows上安装Linux子系统,搞台虚拟机玩玩
- 玩转云服务:手把手带你薅一台腾讯云服务器,公网 IP。
接下来,就把 OneAPI 部署在这台云服务器上,如果你用本地 Linux 虚拟机也是没问题的。
因为本项目还依赖其他服务,所以我们采用 docker-compose 的方式来进行部署,简单几步就能搞定,大大降低小白的部署门槛。
不了解 docker 的小伙伴可以看这里:【保姆级教程】Linux系统如何玩转Docker
1.1 下载配置文件
打开一个终端:
mkdir fastgpt
cd fastgpt
curl -O https://raw.githubusercontent.com/labring/FastGPT/main/projects/app/data/config.json
curl -o docker-compose.yml https://raw.githubusercontent.com/labring/FastGPT/main/files/docker/docker-compose-pgvector.yml
从 docker-compose.yml 中可以看出:FastGPT 用到的大模型需要兼容 OpenAPI 格式。
没关系,因为上一篇我们已经完成了 OneAPI + MySQL 的部署,只需要把 OneAPI 的 base_url 和 API Key 填入 yml 文件如下位置:
如果没有部署OneAPI,也没关系,这个 docker-compose.yml 文件包含了 OneAPI 的部署,可以先进入下面的1.3 服务启动
。
等 OneAPI 启动后,参考:oneapi,在 OneAPI 中手动复制令牌,填到上面 CHAT_API_KEY
的位置。
填写完成后,记得重启 FastGPT 容器:docker restart fastapi
。
1.2 模型配置
知识库的构建,需要使用向量模型将一段文本转换成向量。在 OneAPI 中我们加入的 GLM 渠道,是支持向量模型的。
为此,需要在 config.json 中将用到的对话模型和向量模型加入进来:
- 对话模型:采用 “glm-4”
- 向量模型:采用 “embedding-2”
"vectorModels": [
{
"model": "embedding-2", // 模型名(与OneAPI对应)
"name": "Embedding-1", // 模型展示名
"avatar": "/imgs/model/openai.svg", // logo
"charsPointsPrice": 0, // n积分/1k token
"defaultToken": 700, // 默认文本分割时候的 token
"maxToken": 3000, // 最大 token
"weight": 100, // 优先训练权重
"defaultConfig": {}, // 自定义额外参数。例如,如果希望使用 embedding3-large 的话,可以传入 dimensions:1024,来返回1024维度的向量。(目前必须小于1536维度)
"dbConfig": {}, // 存储时的额外参数(非对称向量模型时候需要用到)
"queryConfig": {} // 参训时的额外参数
}
]
1.3 服务启动
如果服务器是国内的 IP,建议将 docker-compose.yml 文件中的镜像都改为阿里云的镜像。
配置好 docker-compose.yml 文件后,采取如下命令一键启动:
sudo docker-compose up -d
看到下图,说明正在拉取镜像:
打开宝塔面板,可以看到服务已经在运行中:
1.4 启动失败解决
如果某个容器启动失败,可以采用如下命令重启:
docker restart oneapi
docker restart fastapi
如果还是不行,把 docker 重启试试:
sudo systemctl restart docker
可能有的小伙伴之前在服务器上安装过 MySQL,3306端口被占用,导致这里的 MySQL 容器启动失败。因此,可以终止已安装的 mysql 服务,再重新执行 sudo docker-compose up -d
。
2. FastGPT 应用
2.1 登录 FastGPT
在 docker-compose.yml 配置文件中找到 FastGPT 的端口号:3000。
浏览器中打开:http://IP:Port,例如:http://101.33.210.xxx:3000/。
如果上述地址打不开,需要到服务器中把 3000/3001/3306 端口的防火墙打开。如果你用的是腾讯云服务器,具体操作见:玩转云服务:手把手带你薅一台腾讯云服务器。
防火墙打开后,上述地址就可以访问了,初始账号名 root,密码 1234:
2.2 新建知识库
我们需要先把知识库准备好,便于后续调用。
左侧菜单栏选择知识库,右上角新建:
进来后,点击下面的配置,将索引模型改为 Embedding-1,因为这个才是我们在1.2 模型配置
部分加入的向量模型,而 Embedding-2 对应的是默认 GPT 的 "text-embedding-ada-002"模型。配置修改完成,记得保存。
然后上传文件,这里为了跑通测试流程,我选择了文本格式,并简单填写了一些内容:
等待处理,最后文本状态是“已就绪”就是 OK 了。
最后,我们来测试一下,看能否检索到对应内容:
Ok,知识库搭建完毕!
2.3 新建应用
登录 FastGPT 后,先新建一个简易应用:
进入应用后,AI 模型:需要选择刚才放到 config.json 中的 glm 模型。
然后,把刚刚建立的知识库,关联进来。
配置完成后,我们在右侧调试一下。比如我问他 “猴哥是谁”,他会先从知识库中检索到相关信息再回答我:
如果调试没问题了,再点击右上角 发布
。成功后,你就拥有一个本地私有知识库增强的 LLM 了。
2.4. API 调用
为了在应用中能够调用刚发布的机器人,我们还需要一个兼容 OpenAI 格式的 API。
别急,FastGPT 也帮你搞定了!
如下图,在刚才发布的应用中间,点击 发布渠道
-> API 访问
,右侧点击新建,将密钥保存下来,这就是 api_key。
base_url 在哪?红色方框处自取👇
有了 api_key 和 base_url,API 调用就很容易了,关注我的老朋友可能已经非常熟悉以下测试代码(记得 base_url 后面加上/v1
):
from openai import OpenAI
model_dict = {
'fastgpt': {
'api_key': 'fastgpt-zWqC4UyMKMdWrtFLCJ3Jgma7CkcScKbkxW4Xf42',
'base_url': 'http://101.33.210.xxx:3000/api/v1',
'model_name': 'glm-4'
}
}
class LLM_API:
def __init__(self, api_key, base_url, model):
self.client = OpenAI(
api_key=api_key,
base_url=base_url,
)
self.model = model
def __call__(self, messages, temperature=0.7):
completion = self.client.chat.completions.create(
model=self.model,
messages=messages,
temperature=temperature,
)
return completion.choices[-1].message.content
if __name__ == '__main__':
model = 'fastgpt'
llm = LLM_API(model_dict[model]['api_key'], model_dict[model]['base_url'], model_dict[model]['model_name'])
user_question = "猴哥是谁"
messages = [{"role": "user", "content": user_question},]
print(llm(messages))
还记得么?上一篇中,我们采用 chatgpt-on-wechat
搭建了一个微信机器人。
如果把上述 api_key 和 base_url 放到 chatgpt-on-wechat
的配置文件 config.json 中,不就相当于让我们的微信机器人也拥有了基于私有知识库回答问题的能力?
感兴趣的小伙伴赶紧试试吧~
写在最后
如果说,OneAPI 帮你一键封装好所有 LLM 的调用接口,实现 LLM 自由~
那么,FastGPT 则为你的 LLM 插上了知识库的翅膀,实现私有知识库自由~
祝大家借助 OneAPI+FastAPI 玩转大模型,开发出更多 AI 创意应用。
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。