背景介绍
在过去使用大模型的过程中,感受到大模型能力的持续提升。但是作为程序员,在基于不熟悉的框架开发新功能时,依旧需要持续查询官方文档。而大模型对特定框架的使用细节所知甚少,因此可能给出的回答不够准确。
比如之前在 快速搭建量化交易平台 时因为不熟悉相关框架就需要反复查看 Dash 和 backtrader 的官方文档寻找解决方案,这部分工作需要花费不少时间。
事实上单个项目的技术框架选型完成后就会稳定下来,因此是否可以直接基于框架的官方文档进行知识库问答。这样就可以避免重复的查询文档,节省时间。
这个问题初步评估应该是比较容易解决的,至少 RAG 看起来应该就是现成的解决方案。
本周周末,花费了 10 个番茄钟,快速搭建了一个官方文档查询的大模型应用,本篇文档记录下完整的实践过程,希望对大家有所帮助。
需求分析
简单梳理了一下需求,这个需求主要是利用采集的官方文档作为外部信息源,弥补大模型知识不足的问题。期望可以实现一个可视化的服务,接收到用户的查询时,结合官方文档给出更准确的答案。
简单分解下需求的实现流程:
- 实现文档爬取功能,基于提供的官方文档入口地址,爬取框架下所有官方技术文档;
- 支持根据官方文档搭建知识库;
- 接入大模型,执行完整的问答;
实践流程
因为期望能用最小的成本验证这个需求,所以期望尽可能基于现有的基础服务实现。
Dify 尝试
从之前调研的情况来看,Dify 应该是一个不错的选择,本身自带知识库构建的能力,也可以接入大量的外部拓展。
在 Dify 上构建知识库时发现,Dify 本身就提供了直接 Sync From Website
的能力,看起来真的可以一步到位的样子。
Dify 同步网站内容是基于 Firecrawl 实现的。但是实际测试 Dify 绑定 Firecrawl 会报错 500 异常:
反复尝试都是够不成功,看起来 Dify 这部分功能应该还有问题。
Firecrawl 尝试
Dify 支持不了,看起来知识库构建需要自己动手。考虑先离线爬取,之后再上传至 Dify 构建知识库。
简单看了下 Firecrawl 的官方文档,实现了一个快速的版本:
from firecrawl import FirecrawlApp
# 需要注册网站获取 API_KEY
API_KEY = ""
app = FirecrawlApp(api_key=API_KEY)
# 爬取目标网站,目前爬取的就是 Dify 的官方文档
url = "https://docs.dify.ai/v/zh-hans"
crawl_result =