当前位置:   article > 正文

0基础搞工程-基于Chromadb+Chatglm6-2B私有知识库的智能回答系统-1_promptdb

promptdb

 Part1:前言,吹吹水系列

        在准备开新坑之前,我已经很久很久很久没有更新,主要是前段时间太忙,再加上准备跳槽,所以时至今日,才有空洋洋洒洒的再一次回到这里来开始新的项目,最近也面试了货拉拉(过了没去),深度赋智(目前进入二面),目前尚且跳槽到另外一家国企工作。

        这是一个全新的系列,在这个工程中,我们将偏向于实战化应用,让大模型落地,主打就是一个应用化(跟风化),并给出实现的全流程精细讲解和避坑指南。

Part2:基本的框架使用和项目设计

        最近看到很多基于Langchain+向量数据库+开源语言模型来实现一个私有的智能问答系统,因此本着研究(赶风口,凑热闹)的精神,所以也想来试试做一个前后端分离的框架,基本来说使用Langchian作为集成框架,Chromadb作为本地化知识库的存储,ChatGLM2-6B作为本地的LLM服务模型(并且将跑在CPU上),Gradio作为前端页面框架来实现。

        这一个项目将分为如下的几个部分(博客)来进行输出,并且将完全基于Python和少量CSS

1.项目的基本架构设计,langchain,chromadb,gradio的项目要求和基本的前端设计

2.基于web装载的chatglm2-6b的本地CPU部署(实现前后端分离技术)

3.基于chromadb的本地知识库搭建和系统联调,完成整个流程

        从业务的角度出发,我们可以拆解为如下的几个部分,一个是大模型交互工具,一个是本地化数据库能力,一个是前端调用框架,首先我们将ChatGLM2-6B部署在一台远端服务器上使用httpd服务,暴露一个接口使用post方法来进行访问,并得到输出,并将chromadb改造为使用远端部署的word2vector模型得到的embeddeding来作为向量存储。

        项目中的层级和设计模式如下图:

Part3:基本模式和业务流程

 Part4:环境设置部分

环境设置
工具版本
Anacondaconda 23.7.2
PythonPython 3.9.6(请不要使用低于3.8或者高于3.11版本)
Langchain0.0.265
Chromadb0.4.6(原先用的0.3.4,不过存在意料外的问题)
Gradio3.40.1(唯一不坑爹的东西)

        先说说环境上的坑,由于langchain和chromadb是大模型的附属产品,因此实际上在此之前他们不存在或者不太出名,因此对于Python版本的要求会稍微比较高,具体的奇葩情况如下:

1.由于Pytorch的缘故,对于Chromadb而言是不支持Python3.11.2版本的

2.对于langchain而言不建议使用低于Python3.8版本的解析器,因为太老的版本只能使用很古早时期的langchain

3.对于chromadb而言建议使用0.4.6,在开发中发现0.3.4版本缺少一个方法,对于0.3.4版本无法及时的从内存写到磁盘,只有结束进程时才会把内存数据lazy到磁盘中

Part5:前端页面和方法部分

        由于装饰部分的代码没啥意义,也没啥好说的,所以我们就把那部分放给大家自行百度云盘获取,我们只放一些重要的python代码,如下是UIinit,py的源代码,它的效果图如下图所示:

        所有的源代码如下链接获取:

https://pan.baidu.com/s/1Q5Uz74NjNnCU9PCSOGveGg?pwd=3qu3https://pan.baidu.com/s/1Q5Uz74NjNnCU9PCSOGveGg?pwd=3qu3        效果如图所示:

        UIinit.py 代码如下:

  1. import time
  2. from app_modules.presets import *
  3. import gradio as gr
  4. from application import *
  5. def main(IP,Port):
  6. with open("assets/custom.css", "r", encoding="utf-8") as f:
  7. customCSS = f.read()
  8. with gr.Blocks(css=customCSS, theme=small_and_beautiful_theme) as demo:
  9. gr.Markdown("""<h1><center>Intelligence Machine</center></h1>
  10. <center><font size=3>
  11. </center></font>
  12. """)
  13. state = gr.State()
  14. with gr.Row():
  15. with gr.Column(scale=3):
  16. kg_name = gr.Chatbot(label='已加载的知识库',height=300)
  17. kg_btn = gr.Button("刷新知识库")
  18. kg_btn.click(menberload,inputs=[], outputs=kg_name)
  19. file = gr.File(label="文件上传缓存",visible=True,file_types=['.txt'],file_count="multiple")
  20. with gr.Column(scale=4):
  21. with gr.Row():
  22. search = gr.Textbox(label='回答结果',lines=10)
  23. with gr.Row():
  24. use_pattern = gr.Radio(['知识库问答', '模型问答'], label="模式", value='知识库问答', interactive=True, every=1.0)
  25. with gr.Row():
  26. message = gr.Textbox(label='请输入问题')
  27. with gr.Row():
  28. clear_history = gr.Button("
    声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/153013
    推荐阅读
    相关标签