前言
之前使用了多个基于向量库+chatGPT本地知识库产品,大概分析和比较了一下:
使用目前云服务产品的主要的缺陷主要是数据存储在云端,存在一些安全上的问题,思考如何部署本地的AI知识库,目前的选择有两个:
- 使用本地向量库+本地大模型,数据完全私有,如基于langchain+ChatGLM的本地知识库
- 使用本地向量库+chatGPT,请求时会把部分信息片断发送给chatGPT,如现在github上开源的一些工程
基于langchain+ChatGLM的本地知识库
项目地址:https://github.com/imClumsyPanda/langchain-ChatGLM/tree/master
基本原理:加载文件 -> 读取文本 -> 文本分割 -> 文本向量化 -> 问句向量化 -> 在文本向量中匹配出与问句向量最相似的top k个 -> 匹配出的文本作为上下文和问题一起添加到prompt中 -> 提交给LLM生成回答。
mac电脑内存>16G可考虑使用mac部署,不然会爆内存或者加载缓慢;请考虑云主机或者自己的电脑主机;本人尝试了16G M1 结果爆内存了
云主机安装
云主机主要是选择云服务厂商的机器,租用显卡进行部署,autoDL是其中口碑不错
安装参考:based ChatGLM with langchain | 基于本地知识的 ChatGLM 问答
注册autoDL选择个>16G GPU的进行部署,部署完基本可以直接用
使用体验
chatGLM模式
先使用chatGLM本身的知识进行回答,检查下基本的逻辑推理,从结果上看基本能回答个二三
知识库模式
选择知识库问答,尝试用一些业务文档或以及之前写的知识库喂一下,上传文档到知识库
能够回答上传文件中的一些知识并给予出处
有一定推理总结能力
对于不知道的会回答不知道不会瞎编
有一些信息无法从文档中提取,比如代客下单里面提到支持搜索的商品
如果问代客下单支持哪些商品却回答没有理解,不知道原因是啥,可能是给的文本不明确,可能需要再研究一下
开源项目本地部署
使用本地部署大模型+知识库的方式对机器要求过高,而且目前开源大模型效果并未达到chatGPT水平,综合价格和功能性考虑,考虑使用dify的本地部署版本。
部署方式见:docs.dify.ai
需要注意的点:
- 所有需要使用chatGPT做推理的工程都需要考虑如何访问openai的问题,可以选择自己搭代理或者使用成熟的产品如https://api2d.com/wiki/doc,这里我选择了api2d
如果需要使用api2d,则需要将代理地址配置到docker-compose.yaml
,api和worker下都要配置,后续的openai的key都需要使用api2d的key
设置完所有必须的环境变量后,运行
cd dify/docker
docker compose up -d
-
然后访问配置的nginx地址,查看页面是否有报错,如果有,通过docker attach到容器观察错误原因
-
大部分是配置错误,修改后将对应组件重新build
docker compose up -d --force-recreate --build xxx
-
然后再观察服务是否正常,上传文档后提问回答是否正确
未来可能的优化
对一知识库提问,返回的数据不准确的问题,可能的建议见https://github.com/GanymedeNil/document.ai
- 基于数据的优化
- 基于自训练的Embedding模型
- 基于 Fine-tune