知识库几乎是 AI 创作的中心,能解决很多问题,例如 AI 幻觉(按着知识库的内容来输出,不会乱写)
在我教培业务中,搭建了一个内容知识库。根据这个知识库去生产小红书、公众号内容,能确保准确性,进而确保我账号人设的专业度。
但我发现,很少人在用知识库,大家的一个痛点就是把内容加进「知识库」这件事比较费劲。
虽然腾讯的 IMA 知识库能让大家把公众号文章等内容快速存到知识库里,但受限于知识库的能力、模型和工作流问题,这种形式只能日常问答一下,无法赋能业务。
今天就跟大家分享一下,dify 如何用爬虫抓取网络内容后写入知识库中。
我的业务是数学思维的教培,经常需要制作优秀的小红书笔记、公众号内容来吸引客户。但纯 AI 生成的内容幻觉严重,而且「不落地」
所以我打算新建一个「数学思维知识库」,把小红书、公众号上优秀的内容都存进去,然后再让 AI 基于知识库来做内容的生产,效率和效果都能有保证。
以公众号的内容为例,假设我看到一个不错的文章,怎么把它加入到我 Dify 知识库呢?
前期准备
1. 创建知识库
如图,创建一个用于装内容的知识库。这里,我们创建一个空的即可。
此时,要先从网址中,找到这个知识库 id在 datesets 和 documents 中间的就是了。
2. 新建 API 密钥
目前,Dify 暂没有可以直接写入数据库的插件,所以我们是通过 HTTP 请求来解决的。
而走 http 就需要密钥。按下图新建一个。
注意 ⚠️ 这个密钥是可以操作所有知识库的
接着在文档中,找到通过文本创建文档,这里的请求规则就是后面我们需要编写的。
3. 安装Firecrawl
因为我们是要爬网页上的内容,所以需要一个爬虫工具。
这里选择用 Firecrawl,可以直接在插件市场里找到安装。
然后根据提示到官网注册一个账号,拿到 API Key
⚠️ 注意:Firecrawl 实际只是有一定的免费额度。
以上准备工作完成,我们就可以开发工作流了。
老规矩,一步一步来,先做一个简单的,再做一个复杂的。
青铜:抓取单页面存入知识库
以下就是完整的工作流:
逻辑是从用户的输入内容中提取出网址,接着用 Firecrawl 去读取页面内容,再用 AI 提炼出标题和正文,最后存入知识库。
- 参数提取器
 
如图,很简单就不多说了。
- 单页面抓取
 
Firecrawl 是有多个工具可以选
但这里我们选单页面抓取就好了
设置返回的结果是 Markdown 格式
仅抓取主要内容为 True,就是把无关的页头页尾之类的删掉
其中,关键的地方在于「请求头」
要知道,所有网站都有反爬措施,尤其是公众号文章,正常去抓是会识别成机器人,返回错误结果的,如下图:
解决方案就是加个请求头,伪装成正常的浏览器:
{'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'}
这样就能正确把文章内容抓下来了。
- 参数提取器
 
目的是从返回的内容中把标题和正文识别出来。
注意在提示词中要让 AI 确保还原完整的内容,不要去做任何改动。
- 转义特殊符号
 
因为我们要走 HTTP 请求,对于内容的格式是特别敏感的,有点换行符之类的就会报错了。
这里我们直接插入一段代码,把里面的几乎所有特殊符号都做处理。
参考:
function main({arg1}) {
    return {
        content: arg1.replace(/\\/g, '\\\\').replace(/"/g, '\\"').replace(/\n/g, '\\n').replace(/\r/g, '\\r').replace(/\t/g, '\\t')
    }
}
- HTTP 请求:存进知识库
 
有了内容后,就可以新建 HTTP 请求节点。
这里有个小技巧,就是把前面 API 文档里的cURL示例,复制过来,能自动填入
然后点上面的「鉴权 API-Key」
按下图把知识库的密钥加进去。
还有个要点:Headers 里一定要加Content-Ty
