在信息爆炸的时代,我们每天接触到的数据量惊人,记忆所有信息几乎不可能。因此,一个个人知识库显得至关重要。它就像你的第二个大脑,帮您储存和整理重要信息,随时随地轻松访问。
检索增强生成(RAG,Retrieval-Augmented Generation) 是一种创新技术,外部数据源的相关信息整合到语言模型的输出中,增强了语言模型的输出能力。
这意味着 RAG 能查询更广泛的资源,提供比仅依赖训练数据的模型更准确和全面的答案。
RAG 的过程可以简化为两个主要步骤:
技术进步使得构建和使用 RAG 系统变得简单,无需编写复杂代码。以下是两个推荐的平台,Dify.AI[1] 和 FastGPT[2] :
简单易用的可视化界面
FastGPT是一个功能强大的平台,支持创建 RAG 系统,提供数据可视化、自动化工作流程等功能。
感兴趣的可以去它的 Github 主页查看。 以及官方文档:快速了解 FastGPT | FastGPT[3]
Dify.AI 一款开源的大语言模型(LLM) 应用开发平台,支持快速创建和部署基于 AI 的应用,包括对数百个模型的支持、直观的 Prompt 编排界面、高质量的 RAG 引擎以及灵活的 Agent 框架,并同时提供了一套易用的界面和 API。
你可以直接使用Dify.AI 的云平台[4]而无需自己部署,并且新用户还提供 200 次 GPT 免费试用额度,真正做到开箱即用。
云平台页面
应用模板
工具页面
下面我用一个实例来演示一下 Dify.AI 和 FastGPT 两个平台如何构建知识库问答:
实例中的Dify.AI 使用的的Dify 云平台[5],版本号是0.6.8[6], FastGPT 是部署在DigitalOcean[7]的云服务器上,用的是 2c4g(2cpu 核心 4Gb 内容)的 Ubuntu 系统,FastGPT 采用的版本号是 4.8[8],使用我的DigitalOcean 推荐链接[9]可以获得$200 额度。以上平台都为免费使用的是社区版。
无论是选择 Dify.AI 还是 FastGPT, 都需要准备对应的文本内容来构建知识库。
Dify.AI 支持的数据格式比较多,有 TXT、 MARKDOWN、 PDF、 HTML、 XLSX、 XLS、 DOCX、 CSV、 EML、 MSG、 PPTX、 PPT、 XML、 EPUB 等内容,也支持 Notion 同步,而 Web 站点同步还在开发中。
对于我的博客站点,同步文档要么使用Dify.AI 的 API [10],要么等到 Dify.AI 更新站点同步功能之后使用。
我的使用的 halo 博客系统,有相应的获取博客文档的API[11],我可以先通过 API 获取所有的公开文章链接,再进行内容提取。
同时保证每次有新增文章都会发送通知触发自动化,然后会将内容增加到数据库,修改文章也会将修改内容同步到数据库。
博客文章
解析文章内容可以使用JinaReader[12],他会将你的网页内容转化为 markdown 格式,只需要在你的网页链接前面加上“https://r.jina.ai/”就可以获取内容,例如文章使用Python城市交通大数据分析与可视化的研究案例[13]可以通过访问https://r.jina.ai/https://blog.renhai-lab.tech/archives/city-transportation-big-data-analytics-and-visualization-with-python来获取内容,如下:
image-20240519131951720
所以我们需要创建一个提供博客所有文章链接并且载入到数据库的自动化工作流。
使用自动化软件Make[14]实现可视化工作流是一个好办法,或者你也可以直接使用 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)
不过因为社区办免费用户文档的数据库上传配额只有 50 个文档,达到限额程序会报错显示“You have reached the limit of your subscription”。
dify 定价
接下来针对数据库构建知识问答。我们从模版中选择【知识库+聊天机器人】:
知识库+聊天机器人模版
在【知识检索】节点中添加我的博客数据库,
【知识检索】
在【LLM】对话模型选择模型,并且填入提示词。
image-20240519153629330
保存之后来测试一下:
以上就实现了最简单了一个问答流程了。
而 FastGPT 支持导入 txt, docx, csv, xlsx, pdf, md, html, pptx 文件,支持 url 读取静态网页内容、CSV 批量导入,仅商用版支持 Web 站点同步。同时,FastGPT 还支持手动输入一段文本。
来源
选择网页链接,每次只能选择 10 个链接,并且根据 css 选择器来定义你的文章的主要部分:
后面默认上传导入就行了。
对于我的博客站点,我希望他能实时同步,现在可以选择 FastGPT 导入博客文章的链接之后手动同步,或者
FastGPT 的手动同步
目前貌似只能手动导入和同步,希望官方能推出自动同步的方法。并且删除文章的时候,也不能批量删除,要么删除整个数据库,要么一篇篇删除。所以建议将一类文章放在同一个文件夹。
数据库处理完之后,新建一个应用:
新建应用
同样的,我们在简单编排中配置关联数据库和引导词。在右侧可以进行对话测试。
关于如何将飞书、钉钉、微信号、企业微信号或者微信公众号接入可以查看下列文章:
RAG 数据检索的回答优化主要是优化提示词和提高(知识)召回率,即问题问得好以及参考资料找的准。
比如 FastGPT 提供了【问题优化】功能,你可以将问题限定在某一领域,这样回答就更准确。
更多优化技巧以后再说,欢迎关注。
整体来说,Dify 和 FastGPT 都是适合初学者的大语言模型(LLM) 应用开发平台,简单易用。而 Dify 给新用户提供了免费的云平台,初期可以免费使用对话功能。FastGPT 更专注专注知识库训练,提供多种方法来提高(知识)召回率。并且 FastGPTd 的 API 接口更丰富。而 Dify 在知识库训练方面还较弱,但是 Dify 还提供了构建 AI 自动化的可能,并且支持 Agent。
根据我的需求,我在博客知识库构建会选择 FastGPT。AI 工作流会选择 Dify。
后续:
[[AI 工作流——以会议纪要和每周总结为例]]
[1]
Dify.AI: https://dify.ai/
[2]
FastGPT: https://doc.fastai.site/docs/intro/
[3]
快速了解 FastGPT | FastGPT: https://doc.fastai.site/docs/intro/
[4]
云平台: http://cloud.dify.ai/
[5]
Dify 云平台: http://cloud.dify.ai/
[6]
0.6.8: https://github.com/langgenius/dify/releases
[7]
DigitalOcean: https://m.do.co/c/c827c2651db2
[8]
4.8: https://github.com/labring/FastGPT/releases/tag/v4.8
[9]
DigitalOcean 推荐链接: https://m.do.co/c/c827c2651db2
[10]
Dify.AI 的 API : https://docs.dify.ai/v/zh-hans/guides/knowledge-base/maintain-dataset-via-api
[11]
API: https://demo.halo.run/webjars/swagger-ui/index.html?urls.primaryName=api.halo.run
[12]
JinaReader: https://jina.ai/reader
[13]
文章使用Python城市交通大数据分析与可视化的研究案例: https://blog.renhai-lab.tech/archives/city-transportation-big-data-analytics-and-visualization-with-python
[14]
Make: https://www.make.com/
[15]
接入飞书(社区文章) | FastGPT: https://doc.fastai.site/docs/use-cases/feishu/
[16]
对接 chatgpt-on-wechat | FastGPT: https://doc.fastai.site/docs/use-cases/onwechat/
[17]
接入微信和企业微信 | FastGPT: https://doc.fastai.site/docs/use-cases/wechat/