大家好,这里是五彩石编程,我是军哥。上一篇文章中我们讲过了fastgpt中的工作流调度,从这一篇文章开始,我们会慢慢的深入源码,了解fastgpt的底层实现,而熟悉源码的第1步,就从熟悉其目录结构开始吧!
一、概览
fastgpt是一个基于nextjs构建的项目,也就是说,是一个前后端一体化的js项目,我们先来看一下它整体的目录:
这里面有2个比较重要的目录:packages和projects,还有一些js项目常用的文件,比如:package.json。
packages目录里主要放一些功能上比较独立的代码,我们可以称之为模块级代码,很多核心的逻辑,都放在这个目录里面。
projects目录,则存放了页面的代码、api的入口等。
其它的目录都是辅助性的,平时不需要花太多的精力。
二、projects目录
先来看一下projects目录:
里面只有2个目录,核心的是app目录,在app的目录下,可以看到src、.env.local、next.config.js、package.json,这些文件其实已经表明了,这是一个基于nextjs的项目,这里面比较重要的是data和src目录,我们来展开看一下:
data目录下有一个config.json文件,这个文件是用来配置项目中用的到大模型、向量模型等的,还有一个pluginTemplates目录,这个目录下有几个json文件,而观察json文件的名字,我们可以看出其与系统插件中的几个插件貌似有些关联,实际上,这个目录下的文件正是系统插件的配置文件,感兴趣的可以打开json文件来了解一下一个插件是如何通过json文件来配置出来的。
在src这个目录下能看到一个pages目录,熟悉nextjs的同学,应该已经猜出来了,这里面放的就是前端的页面代码了:
通过名字我们也能够猜出来,app目录是和应用相关的页面、chat是和对话相关的页面、dataset是和知识库相关的页面。其中有一个比较重要的目录:api,后端接口的入口全部都在这个目录里面:
api这个目录里面有3个比较重要的目录:core、support、v1,有同学可能注意到我已经把v1目录展开了,并且展开了其下面的chat目录,里面是一个completions.ts文件,这个就是在fastgpt中,进行对话的入口之一,我们创建app,在app的对话页面进行对话,包括通过api key来进行对话,其接口都是completions.ts这个文件。
在fastgpt的源码中,很多地方都能看到core和support这两个目录,其实也可以看出作者对fastgpt功能上的划分,一些核心的功能模块,放到了core中,其它的支持性的功能模块就放到了support目录下了,展开来看一下:
可以看出,在作者的眼里,ai/app/chat/dataset/workflow是核心的模块,其它的都算是支持模块,这个和我们通过fastgpt页面感受到的基本上是一致的,fastgpt的主要功能就是大模型对话、工作流编排、知识库构建。
由于core和support中各子目录里面的文件的存放规则是高度相似的,我们以app这个目录为例,做一下说明,大家就可以理解其逻辑了:
这个目录里面有create.ts、del.ts、detail.ts、list.ts等,从名字大家应该也可以猜出来其用途了,create.ts是创建一个应用的接口,del.ts就是删除一个应用的接口,detail.ts就是获取应用详情的接口,而list.ts就是获取app列表的接口。
其他的像chat、dataset、support目录下的openapi、outlinkk、user等等,它们里面的文件的命名方式和app目录是高度相似的,这里就不多说了。
三、packages目录
packages目录下面只有四个目录,其中最重要的就是service这个目录了,所以这里就直接展开了:
service目录下面,我们同样看到了core和support目录,相信现在大家对这两个目录已经不陌生了,知道我们想了解的逻辑,大概率是放在这两个目录下的,确实,我们打开看一下:
和projects里面的core、support里面的目录保持了高度的相似性,由于这里面是功能模块化的代码,所以就没有必要全部展开细说了,挑两个目录来看一下:
先来看一下app这个目录,它下面有一个controller.ts,还有一个schema.ts,schema.ts里面放的是它在mongodb里面的数据结构相关的一些东西,controller.ts里面放的就是抽象出来的和app管理相关的一些模块级的代码。
这里再看一下workflow这个目录,这个目录和其他的目录结构不太一样,比如说上面的dataset、plugin这些目录,它们的目录结构和app是差不多的。workflow下面最重要的是dispatch这个目录,我们从名字应该也可以看出来这个是负责工作流调度的一些逻辑的,这里就先不展开讲了,等到我们讲到工作流调度的时候,再来详细的说一下这里的代码,目前大家只要知道各个目录的功能,在需要的时候知道大概要去哪里找代码就足够了。
四、结语
到这里,fastgpt的目录结构,基本上就讲完了,这一节主要讲了fastgpt中核心的几个目录,让大家对fastgpt项目,有个整体上的概念,其实还有很多细节,比如说跟docker相关的目录,和项目打包相关的文件、命令等,项目里面还有很多名字为v1的目录等,这些都需要大家在后面看代码的时候,慢慢的去熟悉去了解。
其实大家应该也可以看出来了,fastgpt是一个比较复杂的开源项目,经历了多次的版本迭代后,其代码的功能已经非常丰富了,目录结构也比较复杂了,但层级和条理还是非常清晰的,通过深入的了解,应该是可以学到很多东西的。
下一篇文章,我们将开始对fastgpt的两个核心之一:知识库,进行源码层面的解读,包括知识库的构建、知识库内容的检索等核心内容,感兴趣的小伙伴们,可以和军哥一起深入学习一下。
想了解更多fastgpt的知识,请微信搜索并关注“五彩石编程”公众号,军哥的文章将会持续同步更新。