赞
踩
在准备开新坑之前,我已经很久很久很久没有更新,主要是前段时间太忙,再加上准备跳槽,所以时至今日,才有空洋洋洒洒的再一次回到这里来开始新的项目,最近也面试了货拉拉(过了没去),深度赋智(目前进入二面),目前尚且跳槽到另外一家国企工作。
这是一个全新的系列,在这个工程中,我们将偏向于实战化应用,让大模型落地,主打就是一个应用化(跟风化),并给出实现的全流程精细讲解和避坑指南。
最近看到很多基于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来作为向量存储。
项目中的层级和设计模式如下图:
工具 | 版本 |
---|---|
Anaconda | conda 23.7.2 |
Python | Python 3.9.6(请不要使用低于3.8或者高于3.11版本) |
Langchain | 0.0.265 |
Chromadb | 0.4.6(原先用的0.3.4,不过存在意料外的问题) |
Gradio | 3.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到磁盘中
由于装饰部分的代码没啥意义,也没啥好说的,所以我们就把那部分放给大家自行百度云盘获取,我们只放一些重要的python代码,如下是UIinit,py的源代码,它的效果图如下图所示:
所有的源代码如下链接获取:
UIinit.py 代码如下:
- import time
-
- from app_modules.presets import *
- import gradio as gr
-
- from application import *
- def main(IP,Port):
- with open("assets/custom.css", "r", encoding="utf-8") as f:
- customCSS = f.read()
- with gr.Blocks(css=customCSS, theme=small_and_beautiful_theme) as demo:
- gr.Markdown("""<h1><center>Intelligence Machine</center></h1>
- <center><font size=3>
- </center></font>
- """)
- state = gr.State()
-
- with gr.Row():
- with gr.Column(scale=3):
- kg_name = gr.Chatbot(label='已加载的知识库',height=300)
- kg_btn = gr.Button("刷新知识库")
- kg_btn.click(menberload,inputs=[], outputs=kg_name)
- file = gr.File(label="文件上传缓存",visible=True,file_types=['.txt'],file_count="multiple")
-
- with gr.Column(scale=4):
-
- with gr.Row():
- search = gr.Textbox(label='回答结果',lines=10)
- with gr.Row():
- use_pattern = gr.Radio(['知识库问答', '模型问答'], label="模式", value='知识库问答', interactive=True, every=1.0)
- with gr.Row():
- message = gr.Textbox(label='请输入问题')
- with gr.Row():
- clear_history = gr.Button("声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/153013推荐阅读
相关标签
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。