一、背景
最近人工智能(AI)非常热门,许多内部系统都希望能够利用GPT实现一些基础知识的问答和分析功能。
但是往往是需要"喂"给GPT很多内容。举个简单的例子,例如我如果直接问GPT我们公司里面接口自动化相关的接入问题咨询可以找谁,它是没有办法直接回答的,我们必须先给它前置的知识。
但是GPT对于上下文的Token总量也会有一定的限制,且不好维护。
利用RAG(Retrieval-Augmented Generation)模型,将知识录入到知识库中,然后根据问题的相似度检索出最相似的答案,是目前一个比较流行的方案。
RAG的工作流程通常包括以下几个步骤:
-
检索阶段:给定一个输入查询,系统首先从一个大型文档库中检索出与查询相关的文档或片段。这一阶段通常使用信息检索技术,如向量检索等。
-
生成阶段:在检索到相关文档后,生成模型会利用这些文档的信息来生成最终的回答或文本。这一阶段的目标是将检索到的信息与输入查询结合起来,生成更为准确和上下文相关的输出。
RAG的优势在于它能够利用知识库的信息,从而在生成文本时提供更丰富的背景知识,尤其在面对复杂问题或需要特定知识的任务时,表现得尤为出色。这种方法在问答系统、对话生成和文本摘要等任务中得到了广泛应用。
目前市面上有很多开源版本的工具可以支持在本地部署使用,而且后续还可以根据需要自定义内容,非常方便。
我们质量效能组目前主要使用的是FastGPT,下面我将以FastGPT为例介绍本地搭建的步骤。
二、平台介绍
目前市面上RAG(补充知识)的产品还是比较多的,总体功能也比较类似,基础功能都大差不差。我们内部的同学也试用了一段时间dify。
FastGPT可以设置开场白、标注预期回答、提供比较多的参数调整回答,功能更为全面,知识库检索效果相对比较好。
FastGPT 是一个基于大语言模型的知识库问答系统。它可以:
-
通过导入文档或已有问答对进行训练。
-
自动数据预处理,提供手动输入、直接分段、CSV等多种数据导入途径,其中"直接分段"支持通过PDF、WORD、Markdown和CSV文档内容作为上下文。
-
FastGPT会自动对文本数据进行预处理、向量化和QA分割,节省手动训练时间,提升效能。
-
api集成,支持外部平台调用openApi实现问答。
源码地址:
https://github.com/labring/FastGPT
系统部署可以分成两种 :
-
基于源码的部署,优点是能修改源码,可以自定义添加一些的功能,例如我们在自己搭建的平台上增加了内部文档扫描录入的功能。
-
基于docker镜像部署,优点是部署简单。
三、镜像部署
镜像部署是使用docker-compose实现,在docker-compose中配置FastGPT服务和它所有依赖的服务,通过 docker-compose up -d 一键启动。
1.安装docker和docker-compose的参考步骤如下,如果已经安装,可以跳过这一步。
# 安装 Docker``curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun``systemctl enable --now docker``# 安装 docker-compose```curl -L https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose```chmod +x /usr/local/bin/docker-compose``# 验证安装``docker -v``docker-compose -v``# 如失效,自行百度~
2.新建文件夹,下载配置文件和docker-compose.yml文件
mkdir fastgpt``cd fastgpt``curl -O https://raw.githubusercontent.com/labring/FastGPT/main/projects/app/data/config.json` `# pgvector 版本``curl -o docker-compose.yml https://raw.githubusercontent.com/labring/FastGPT/main/files/docker/docker-compose-pgvector.yml
在docker-compose.yml文件中,可以看到部署FastGPT 实际会部署多个服务,包括postgrepsql和mongo等。
其中,postgrepsql用于存储向量数据,而mongo用于存储一些业务数据。
计算机并不像人一样能够直接理解文字。人们发明了一种叫做"向量",向量可以简单地理解成一组数字的列表。
通过数学的方法,我们可以用向量之间的距离来判断它们之间的相似程度。这就好像我们在图书馆里找书一样,我们可以根据书的内容找到相似的书。
使用数据库工具连接并打开postgrepsql数据库,可以看到FastGPT将问题转换成向量的格式。用于问题的检索。
在这个docker-compose.yml配置文件中我们需要修改OPENAIBASEURL和CHATAPIKEY参数。对于镜像相关内容不太熟悉的同学,建议保持其他默认设置即可。
OPENAIBASEURL和CHATAPIKEY的格式参考如下,OPENAIBASEURL的地址后面都会跟着一个v1:
OPENAI_BASE_URL=https://oneapi.qunhequnhe.com/v1``CHAT_API_KEY=sk-FuotRXTXUm145tQaC97bxxx12c4eFfA77f175bF7E921F1
注意 :如果已经有现成的postgrepsql或mongo等服务,理论上也可以使用自己的。
比如你已经有现成的mongo服务,在docker-compose.yml中可以移除docker-compose.yml文件中关于mongo服务的部分,记得顺便移除其他服务启动的时候对该mongo的dependson,然后将MONGODBURI中配置现有mongo的地址。但是不太建议这要做,因为FastGPT会依赖数据库的一些特性,自己的mongo、postgresql数据库很有可能是不支持的,比如postgresql是需要支持向量的。
我还发现一个比较坑的点,最新版默认启动的配置里面是有带sand-box的,目前我没有发现它的必要性,反而启动了sand-box,导致了地址冲突,监控平台无法监控到我们这台机器了,删除后解决。
修改完docker-compose.yml 配置后,执行 docker-compose up -d 就可以启动。如果需要终止就执行 docker-compose down。
正常如果启动没有问题,可以通过 ip:3000(默认端口)访问服务,默认登录用户名为root , 密码1234。
如果无法访问,大概率是数据库启动出错了,可以试试用数据库连接工具连接试试, 也有可能是防火墙的问题,配置下就行。
如果mongo连不上,大概率mongo没有启起来,需要修改docker-compose.yml关于mongo的部分。
openssl rand -base64 756 > ./mongodb.key``chmod 600 ./mongodb.key``# 修改密钥权限,部分系统是admin,部分是root``chown 999:root ./mongodb.key
mongo:` `image: registry.cn-hangzhou.aliyuncs.com/fastgpt/mongo:5.0.18` `container_name: mongo` `restart: always` `ports:` `- 27017:27017` `networks:` `- fastgpt` `command: mongod --keyFile /data/mongodb.key --replSet rs0` `environment:` `- MONGO_INITDB_ROOT_USERNAME=myusername` `- MONGO_INITDB_ROOT_PASSWORD=mypassword` `volumes:` `- ./mongo/data:/data/db` `- ./mongodb.key:/data/mongodb.key
# 查看 mongo 容器是否正常运行``docker ps``# 进入容器``docker exec -it mongo bash` `# 连接数据库(这里要填Mongo的用户名和密码)``mongo -u myusername -p mypassword --authenticationDatabase admin` `# 初始化副本集。如果需要外网访问,mongo:27017 。如果需要外网访问,需要增加Mongo连接参数:directConnection=true``rs.initiate({` `_id: "rs0",` `members: [` `{ _id: 0, host: "mongo:27017" }` `]``})``# 检查状态。如果提示 rs0 状态,则代表运行成功``rs.status()
四、源码部署
由于FastGPT的源码是支持本地打包并启动的,所以我们在服务器上做下载源码、打包、启动的操作,就也可以远程访问启动后的服务。
打包和启动的命令如下:
npm install -g pnpm``pnpm i``cd projects/app``pnpm install``pnpm start
打包启动前,我们需要在 projects/app 下找到.env.template文件,新建一个.env.local 同路径下 ,将 .env.template的配置,复制到.env.local 中,修改配置MONGODBURI(mongodb的地址)、PGURL(postgresql的地址)、OPENAIBASEURL(openApi的地址)、CHATAPIKEY(openApi的key)
有时候我们希望使用源码部署,但是有没有现成的Mongo和postgresql。
我们可以先使用上面docker镜像部署的方式,先把这两个数据库部署了,在 .env.local文件中配置这两个数据库的连接地址。然后打包并启动。
我们公司的部署平台是moon,moon的部署流程是先下载源码,然后读取源码根目录下的appconfig的文件夹下的buildDockerfile文件执行,生成一个K8s pod。
因此我们在源码的根目录新建一个appconfig文件夹,然后新建一个buildDockerfile文件:
FROM node:18.15-alpine AS builder``COPY . /usr/src/app``WORKDIR /usr/src/app``RUN npm install -g pnpm``RUN pnpm i``ENTRYPOINT ["sh", "-x", "/usr/src/app/_appconfig/start.sh"]
start.sh文件如下:
#!/bin/bash``cd /usr/src/app/projects/app;pnpm install;pnpm start
镜像的node版本建议最好能大于18 , 不然可能会报错。
五、OpenApi外部使用
登录后,申请一个token:
代码示例:
POST http://10.1.9.40:3000/api/v1/chat/completions`` ``{` `"chatId": "abcd",` `"stream": false,` `"detail": false,` `"messages": [` `{` `"content": "澳门面积多大",` `"role": "user"` `}` `]``}
-
chatId 如果是非null , 同一个,就会看上下文
-
stream 字段表示是否返回的时候是一个一个字返回
-
detail 表示是否展示详情
注意:需要加一个header ,value 是我们上面申请到的值。
下图可以看出,确实是能带上上下文的。
六、总结
1、FastGPT平台的搭建,如果大部分都使用默认的配置,还是比较简单的,官方的文档写的也比较详细。
-
我的踩坑原因主要来自于不使用默认的配置,例如使用自己的数据库、修改默认的端口这些。导致多花了不少的时间。
-
平台的维护成本不高,需要维护的主要是mongo和postgresql数据库,mongo存储了所有的业务数据,例如账户密码,应用信息,调用记录等等。
-
postgresql存储的是知识库信息。之前想使用自己的数据库的原因是怕docker创建的数据库数据的丢失,目前我们知识库已经录入了5w多条知识,已经有不少组使用知识库加OpenApi的方式,在做一些小助手问答,因此我后续还需要考虑数据备份防丢失的问题。
2、FastGpt 从我们部署到现在也已经快一年的时间,有很多功能都做了升级,并且postgresql的向量库的版本也做了升级,效果应该会相较于目前我们部署的版本会有比较多的提升,计划近期排期对我们平台做一个升级。
3、对于通过镜像部署的FastGpt,升级是比较简单的,按照官方文档的教程,只需要按照顺序一个版本一个版本升级即可。但是使用源码部署的FastGpt需要考虑的就比较多了,这个也是使用源码部署的一个缺点。
如何学习AI大模型?
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;
第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;
第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;
第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;
第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;
第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;
第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。
👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集
👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓