エンジニアがドキュメントを読む時代は終わりました（Dify + RAG + Firecrawl）

みなさん公式ドキュメントって読みますか？
最近は自分は公式ドキュメントを読むことがめっきり減りました
今回はその方法を伝授したいと思います

## 今回の成果物

ドキュメントの内容（今回は [next.jsのドキュメント](https://nextjs.org/docs) ） を全てRAGに突っ込みLLMに回答させます

以下のURLでNext.jsのドキュメントの内容からRAGを構築したチャットボットが利用できるので試してみてください
https://dify.hokosaki.com/chat/a6DQi1eVR952cpy1

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3886356/8701ce9f-66c2-a50c-7535-75a2ae3e56ae.png)


## どうやって作るのか

Dify + RAG + Firecrawlで構築します

以下の２つの記事でDifyの構築方法は説明したので、まだDifyを使ってみたことがない人は先にこの記事を見てください

https://hokosaki.com/blog/1cz481dy5g/
https://hokosaki.com/blog/dify-and-rag/

### 推奨: Difyのセルフホスティング

Difyをセルフホスティングするとクラウド版の制限を全て無視できるのでオススメです

DifyありがてぇことにDocker composeでセルフホスティングする方法を教えてくれているので

https://docs.dify.ai/v/ja-jp/getting-started/install-self-hosted/docker-compose

の内容をそのままデプロイしちゃいましょう

AWSだとEC2, GCPだとGCEが簡単です。
**RDBもRedisも全てDocker composeのままで大丈夫です。意外と不便しません**
RDSとか使うと高いのであまりおすすめしません。Supabaseを使えという記事も出てきますが個人で使用する分にはDocker composeで問題ないです

### 必須: Firecrawlのセルフホスティング

DifyでwebサイトからRAGを構築するのはFirecrawlしか使えないのですが、クラウド版は無料枠が狭すぎるのでオススメしません。

https://www.firecrawl.dev/

節約したい人はぜひセルフホスティングしましょう
**セルフホスティングすると無限にWebページからRAGを構築できるようになるので生産性が爆上がりします**

詳しくはFirecrawlのリポジトリに構築方法が書いてあります

https://github.com/mendableai/firecrawl/blob/main/CONTRIBUTING.md

自分はDocker composeの中身をいじって3002番で立ち上がっているAPIをnginxで443にリバースプロキシして使っています
環境はGCPのGCEで動かしています

うまく動くと
`https://{URL}/admin/@/queues/`

で以下のURLが出ます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3886356/c59a1f90-9682-befb-d7c5-784cdc115015.png)

そこまで設定できたらDifyの設定からデータソースを自分でホスティングしているFirecrawlに宛先を変えましょう

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3886356/257f6302-a61a-e82d-b043-1f0c2c3d99e8.png)

API KEYは.envのTEST_API_KEYの値を入れとけば動きます

## RAGを構築する

あとはDifyのナレッジ管理画面でクローリングして欲しいURLを入力します
制限は思い切って1000ぐらいいっちゃっていいでしょう、セルフホスティングしてればお金はかかりません

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3886356/5cec601f-ae17-07b8-36bb-23fba98d1f7c.png)

https://nextjs.org/docs の配下を全てクローリングしたら400ページくらいありますが、えいやとナレッジを作成してください

**力こそパワー**

ナレッジの設定は以下の感じでやっています、ハイブリッド検索だったらあとは誤差です

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3886356/a703eb93-a22b-2aae-fd1b-a74222a880ab.png)

あとは以前紹介したのと同じようにRAGとBotを繋げてください


上で紹介したボットの設定は以下のような感じで書いてます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3886356/91444a78-1c86-0de2-1ed3-82d508989341.png)

## 使ってみる

今まで英語のドキュメントのページを開いて英語を翻訳し、内容を汲み取ろうとしていましたが、その時代は終わりました
**AIに聞いてください**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3886356/9075d3bc-95c6-291c-de0a-3f4f55c07d3b.png)

https://nextjs.org/docs/app/building-your-application/rendering/partial-prerendering
の内容が分からなかったら一旦AIに聞いてみましょう

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3886356/cd6dbafa-1182-74b3-675d-7a8476c9aeb3.png)

ドキュメントを見るのを0にすることは出来ませんが、ドキュメントを細部まで読み込まなくてもAIが学習を手助けしてくれます

### 他のドキュメントでも使える？

もちろんです
勉強したい技術があったら一旦公式ドキュメントの内容をRAGにぶち込むようにしています
**この勉強方法は非常におすすめです**

## Firecrawlたまに死ぬ問題

Firecrawlを使っているとたまにキューが溜まったまま動作が止まっていることがあります
そういう時はキューをリセットします

```
sudo docker compose exec redis redis-cli flushall
```

これでも復活しない場合はdocker composeをダウンしてもう一回アップすると治ったりします
Firecrawlはステートレスで動くので環境を何回ぶっ壊しても大丈夫です

## 最後に

株式会社ホコサキではDifyのコントリビューターの経験もある代表が、現場で実際に使えるDifyの構築をお手伝いできます。

ご興味ありましたらぜひご相談くださいませ