1 功能

1.1 整体功能,想解决什么问题

  • 官方说明:FastGPT 是一个基于 LLM 大语言模型的知识库问答系统,提供开箱即用的数据处理、模型调用等能力。同时可以通过 Flow 可视化进行工作流编排,从而实现复杂的问答场景!
  • 个人体会:在不用编程的情况下,快速建立简单的本地知识库。

1.2 当前解决了什么问题,哪些问题解决不了

  • 作者团队可能是觉得大模型本身太单薄了,希望通过结合其它工具,做一个中间层的方案,用大模型解决更多问题。
  • 向下接入了多个大模型:GPT、Claude、Spark、ChatGLM 等;向上除了提供 很好用的 Web 工具,还提供了类似 OpenAI 的 API 供其它程序接入其功能,如:微信,飞书……;针对本地知识库,实现了数据的解析,存储,问答功能,并做了一些优化(评价本地知识库效果是一个非常复杂的问题,不在此讨论)。
  • 提供了工作流 Flow,个人感觉对于想开箱即用的人来说有些复杂;对于深度使用者略显单薄。
  • 计算 Embedding 以及答案的合成都需要连网使用。

1.3 提供哪些功能点,其中哪些是刚需

  • 基本的与大模型聊天问答功能
  • 本地知识库支持,虽然不是最先进最强大的技术栈,但对于中小规模的数据,个人数据是可用的,这是此项目的核心功能。
  • 支持手动录入知识,以回答重要的问题。
  • 包装一些常用功能,比如翻译,将一些定制 prompt 作成”应用“,以提供特定类型的服务。官方文档中展示了一些典型的使用场景,很有启发性。
  • 界面清晰,舒服。

1.4 用户使用难度,操作逻辑是否过于复杂

  • 最简单的方法就是直接用作者在官网部署的服务,没有难度。
  • 本地部署,尽管没有现成的文档,但有脚本 run.sh,可以启动多个 docker,也很好用。
  • 在我见过的 RAG Web 项目中,FastAI 界面是做的最好的

1.5 使用场景

  • 用 FastGPT 给单位的文档做个知识库,考虑到部署和学习成本,可能是目前性价比最高的方案。

2 技术栈

2.1 技术栈是什么

  • 工具
    • NextJs + TypeScript + ChakraUI
    • 代码量大部分由 TypeScript 编写。
  • 数据库
    • Postgres (Vector 版本:ankane/pgvector:v0.5.0)存储向量
    • MongoDB 用于存取其他数据,比如用户知识库的文本部分,聊天记录,不定长,可能被扩展的数据,便于文本检索。数据库_mongoDB
  • 其它
    • python:做了一些文档转换内容处理的工作,代码很少,几乎没用到。
    • go 语言:实现文档服务 DocSite

2.2 现有底层工具消化了哪些常用功能

  • 我对 JS 不太熟,看不太出来

2.3 代码分析(使用 cloc 工具统计)

  • github 项目下载内容 183M,主要为.git 和 DocSite
  • 代码主要由 TypeScript 编写,约 4.5W 行(不计生成的 JS 代码)
  • 核心代码在:FastGPT/projects/app/src

3 商业模式

  • 用户可以使用 FastGPT 源码 部署自己的工具,也可以在其官网使用现成的线上版服务。使用 openai 的服务时,费用同 openai;同时,还提供了一些其它的收费服务。为了合规,把名字的名字换了一下,一看价格就明白了。
  • 同时出售商业版,收费见:https://doc.fastgpt.in/docs/pricing/。
  • 开源产品,以服务方式提供,对用户来说也比较方便经济。

4 使用方法

  • 安装
1
cd FastGPT/files/deploy/fastgpt

配置 docker-compose.yml:如果已经启了一些本地服务,可能发生端口冲突,需要调整设置;另外,还要设置数据库的用户名密码,API_KEY 等。

1
. run.sh

这里使用 docker-compose 启动了多个 docker 容器,非常方便。

  • 使用

    在登录界面用 root/1234 登录(密码可在 docker-compose.yml 中设置)

5 个人体会

5.1 整体评价

FastGPT 是一个产品导向的工具,相对于其它 github 上的试验型工具,更像是一个完整的产品。在业务分析,使用场景,交互设计,界面设计,易用性方面都很优秀

另外,它提供 API 的方式与其它工具配合使用。利用 API_KEY 的方式,无缝替换 ChatGPT,从而引入本地知识和自定义问题及答案。对于二创,前端代码非常多,直接拿来也不好改,不如直接调用其 API

5.2 使用感受

作为最终用户,使用感受如下:

当组织或者个人有万千上万个文档,不太可能通过界面一个一个导入,需要使用 API 构建知识库

可以针对某一个知识库问答,它不仅给出答案,还给显示内容来源,可看到引用的原文,让答案有据可查,又不仅仅是搜索,我觉得这个真的是刚需

在产品设计方面,也看到了作者对产品功能的理解和对解决方案的设计。

可以把知识分为三层:

  • 手工录入的重要知识(常为问题答案对)
  • 从本地文档中获取的知识
  • 通用知识(LLM 自带)

6 参考