如何利用 FastGPT 和 Dify.AI 构建你的第二个大脑

构建您的个人知识库

在信息爆炸的时代,我们每天接触到的数据量惊人,记忆所有信息几乎不可能。因此,一个个人知识库显得至关重要。它就像你的第二个大脑,帮您储存和整理重要信息,随时随地轻松访问。

检索增强生成(RAG,Retrieval-Augmented Generation) 是一种创新技术,外部数据源的相关信息整合到语言模型的输出中,增强了语言模型的输出能力。

这意味着 RAG 能查询更广泛的资源,提供比仅依赖训练数据的模型更准确和全面的答案。

RAG 的过程可以简化为两个主要步骤:

  1. 检索:当提出问题,RAG 首先在知识库中检索相关文档或信息。这类似于在图书馆中快速定位书籍,RAG 能迅速找到最相关信息。
  2. 生成:检索到信息后,RAG 结合这些信息和 LLM 生成详细准确的答案。这涉及到分析、整合信息,并以自然语言形式呈现。

RAG 的构建工具

技术进步使得构建和使用 RAG 系统变得简单,无需编写复杂代码。以下是两个推荐的平台,Dify.AIFastGPT

FastGPT

简单易用的可视化界面

自动数据预处理
基于 Flow 模块的工作流编排

FastGPT是一个功能强大的平台,支持创建 RAG 系统,提供数据可视化、自动化工作流程等功能。

FastGPT Card

以及官方文档:快速了解 FastGPT | FastGPT

  • 知识库构建:FastGPT 支持多种数据源,简化知识库构建。
  • 深入查询与使用:FastGPT 提供强大查询功能,支持自定义仪表板,直观展示数据。

Dify.AI

Dify.AI 一款开源的大语言模型(LLM) 应用开发平台,支持快速创建和部署基于 AI 的应用,包括对数百个模型的支持、直观的 Prompt 编排界面、高质量的 RAG 引擎以及灵活的 Agent 框架,并同时提供了一套易用的界面和 API。

Dify.AI Github Card

你可以直接使用Dify.AI云平台而无需自己部署,并且新用户还提供 200 次 GPT 免费试用额度,真正做到开箱即用。

云平台页面

应用模板

工具页面

下面我用一个实例来演示一下 Dify.AIFastGPT 两个平台如何构建知识库问答:

实例:基于我的博客知识的问答

实例中的Dify.AI 使用的的Dify 云平台,版本号是0.6.8, FastGPT 是部署在DigitalOcean的云服务器上,用的是 2c4g(2cpu 核心 4Gb 内容)的 Ubuntu 系统,FastGPT 采用的版本号是 4.8,使用我的DigitalOcean 推荐链接可以获得$200 额度。以上平台都为免费使用的是社区版。

无论是选择 Dify.AI 还是 FastGPT, 都需要准备对应的文本内容来构建知识库。

Dify.AI 构建知识问答

Dify.AI 支持的数据格式比较多,有 TXT、 MARKDOWN、 PDF、 HTML、 XLSX、 XLS、 DOCX、 CSV、 EML、 MSG、 PPTX、 PPT、 XML、 EPUB 等内容,也支持 Notion 同步,而 Web 站点同步还在开发中。

对于我的博客站点,同步文档要么使用Dify.AI 的 API ,要么等到 Dify.AI 更新站点同步功能之后使用。

我的使用的 halo 博客系统,有相应的获取博客文档的API,我可以先通过 API 获取所有的公开文章链接,再进行内容提取。

同时保证每次有新增文章都会发送通知触发自动化,然后会将内容增加到数据库,修改文章也会将修改内容同步到数据库。

博客文章

解析文章内容可以使用JinaReader,他会将你的网页内容转化为 markdown 格式,只需要在你的网页链接前面加上“https://r.jina.ai/”就可以获取内容,例如[文章使用Python城市交通大数据分析与可视化的研究案例](https://blog.renhai.online/archives/city-transportation-big-data-analytics-and-visualization-with-python)可以通过访问https://r.jina.ai/https://blog.renhai.online/archives/city-transportation-big-data-analytics-and-visualization-with-python来获取内容,如下:

image-20240519131951720

所以我们需要创建一个提供博客所有文章链接并且载入到数据库的自动化工作流。

使用自动化软件Make实现可视化工作流是一个好办法,或者你也可以直接使用 Python 或者 JS 脚本来实现。

准备好所有的 url 之后,利用 Dify 的 API 将文件批量导入:

from pathlib import Path
from dotenv import load_dotenv
import os
import requests

# 加载环境变量
load_dotenv()

# 获取 Dify API 相关信息
dataset_id = os.getenv('DIFY_DATASET_ID') # <<< 填入你的数据库id 在链接中获得
token = os.getenv('DIFY_TOKEN') # <<< 填入你的token 同样在API数据库的右上角获取
url = f"https://api.dify.ai/v1/datasets/{dataset_id}/document/create_by_file"

# 设置 Dify 数据处理参数 indexing_technique选择high_quality会选择
payload = {'data': '{"indexing_technique":"high_quality","process_rule":{"rules":{"pre_processing_rules":[{"id":"remove_extra_spaces","enabled":true},{"id":"remove_urls_emails","enabled":true}],"segmentation":{"separator":"###","max_tokens":500}},"mode":"custom"}}'}

# 获取所有 Markdown 文件
files_to_process = Path('./output/mk').rglob('*.md')

# 遍历处理每个文件
for file in files_to_process:
    # 跳过 README.md 文件
    if file.name == 'README.md':
        continue

    # 获取文件名和路径
    filename = file.name
    filepath = file.absolute()
    print(f'处理文件: {filename}, 路径: {filepath}')

    # 构建文件上传数据
    files = [('file', (filename, open(filepath, 'rb'), 'application/octet-stream'))]

    # 设置请求头
    headers = {'Authorization': f'Bearer {token}'}

    # 发送请求到 Dify API
    response = requests.request("POST", url, headers=headers, data=payload, files=files)

    # 检查请求是否成功
    if response.status_code != 200:
        print(f'文件 {filename} 处理失败')
    else:
        print(f'文件 {filename} 处理完成')
        print(response.text)  # 打印 API 返回的信息

        # 将文件移动到已处理文件夹
        Path('已处理').mkdir(exist_ok=True)

不过因为 Cloud 平台免费用户在单个数据库的文档上传配额只有 50 个文档,达到限额程序会报错显示“You have reached the limit of your subscription”。

dify 定价

接下来针对数据库构建知识问答。我们从模版中选择【知识库+聊天机器人】:

知识库+聊天机器人模版

在【知识检索】节点中添加我的博客数据库,

【知识检索】

在【LLM】对话模型选择模型,并且填入提示词。

保存之后来测试一下:

测试对话

以上就实现了最简单了一个问答流程了。

FastGPT 构建知识文档

而 FastGPT 支持导入 txt, docx, csv, xlsx, pdf, md, html, pptx 文件,支持 url 读取静态网页内容、CSV 批量导入,仅商用版支持 Web 站点同步。同时,FastGPT 还支持手动输入一段文本。

来源

选择网页链接,每次只能选择 10 个链接,并且根据 css 选择器来定义你的文章的主要部分:

后面默认上传导入就行了。

对于我的博客站点,我希望他能实时同步,现在可以选择 FastGPT 导入博客文章的链接之后手动同步,或者

FastGPT 的手动同步

目前貌似只能手动导入和同步,希望官方能推出自动同步的方法。并且删除文章的时候,也不能批量删除,要么删除整个数据库,要么一篇篇删除。所以建议将一类文章放在同一个文件夹。

数据库处理完之后,新建一个应用:

新建应用

同样的,我们在简单编排中配置关联数据库和引导词。在右侧可以进行对话测试。

关于如何将飞书、钉钉、微信号、企业微信号或者微信公众号接入可以查看下列文章:

优化

RAG 数据检索的回答优化主要是优化提示词和提高(知识)召回率,即问题问得好以及参考资料找的准。

比如 FastGPT 提供了【问题优化】功能,你可以将问题限定在某一领域,这样回答就更准确。

更多优化技巧以后再说,欢迎关注。

Dify 和 FastGPT 构建知识库总结

整体来说,Dify 和 FastGPT 都是适合初学者的大语言模型(LLM) 应用开发平台,简单易用。而 Dify 给新用户提供了免费的云平台,初期可以免费使用对话功能。FastGPT 更专注专注知识库训练,提供多种方法来提高(知识)召回率。并且 FastGPTd 的 API 接口更丰富。而 Dify 在知识库训练方面还较弱,但是 Dify 还提供了构建 AI 自动化的可能,并且支持 Agent。

根据我的需求,我在博客知识库构建会选择 FastGPT。AI 工作流会选择 Dify。

后续:

  • [ ] [[AI工作流——以会议纪要和每周总结为例]]

如果你对本文章有什么意见、对如何制作文中的图表感兴趣、或者有其它任何问题建议在本文的博客评论区留言,说不定你的问题别人也遇到了。

如果你觉得本文对你有帮助,欢迎访问我的爱发电支持我,或者对此文章进行赞赏。

donate

其他平台账号:
wechat


如何利用 FastGPT 和 Dify.AI 构建你的第二个大脑
https://blog.renhai.online/archives/dify-and-fastgpt-for-RAG
作者
Renhai
发布于
2024年05月21日
更新于
2024年06月17日
许可协议