意味の分からん書類はAIに読ませろ！（Dify + RAG）

## 世の中の書類読むの辛い問題

僕は世の中の書類というものを読むのが非常に苦手です、読んでいても内容が頭に入ってこないです

例として、今回は新宿のやっている[経営力 強化支援事業補助金](https://www.city.shinjuku.lg.jp/content/000398780.pdf)というPDFファイルを見てみましょう（PDFをダウンロードしておいてください）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3886356/7cb1a99e-2b10-a4fa-9e10-debf63aef8e3.png)

この書類が悪いと言うわけではなく、必要な情報を過不足なく載せたらこういった内容になるんだろうな、といのも分かります

ですが頭から読んで内容を理解しようとするのも非常にバカバカしく思ったりもするわけです

こういった難解な書類を読むときのお供にAIを使いましょう、というのが今回のやりたいことです

下記のように**要約してもらって大筋を理解すると書類を読むのも多少楽になります**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3886356/33dc8db4-10c3-5cc5-a851-357b5981b0c2.png)

## 書類でRAGを構築する

[前回](https://hokosaki.com/blog/1cz481dy5g/)Difyの環境構築、OpenAIのAPIキーの設定、最小構成でオレオレAIを起動させるところまでやりました。（見てない人は見てね）

今回はもう一歩踏み込んでRAGの構築をメインに解説します

Difyにログインしたら[ナレッジ](https://cloud.dify.ai/datasets)という機能を使います

「ナレッジを作成」して以下の画面を出してください

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3886356/a2fcce7d-ecb2-e217-a0ca-8063d7b11823.png)

「テキストファイルからインポート」で[経営力 強化支援事業補助金](https://www.city.shinjuku.lg.jp/content/000398780.pdf)というPDFファイルをアップロードして、「次へ」を押してください

そうすると下記の意味のわからない画面が出ますが脳死で「保存して処理」を押してください（ここは後から弄れる）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3886356/9903004c-0f33-4054-3e16-90d633e4e81d.png)

最終的には下記のような感じで登録したPDFがナレッジに登録できます

そしたら[スタジオ](https://cloud.dify.ai/apps)であたらしいボットを作成します

チャットボット、Chatflowで名前は適当に入れて作成してください

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3886356/86d7b45d-4b0d-9579-abad-577d98842963.png)

目指すべきフローは下記の感じです

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3886356/16d6fe38-c7df-820e-95c9-6f517935412a.png)

「開始」と「LLM」の線の間の＋ボタンを押して「知識取得」を追加してください

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3886356/75ef0aa4-3a6f-4288-64d6-339265f21483.png)

そうすると目指したフローになります。

次は中身の設定です、いじるのは「知識取得」と「LLM」です

「知識取得」の「ナレッジ」のところのプラスボタンを押して、参照する知識を選択します。

このとき先ほどナレッジで登録したPDFファイルが選べます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3886356/df3e7e54-9b3c-1237-b357-94197c2c8821.png)

次はLLMの設定です

コンテキストの変数を設定を押したら下記のような選択肢が出てくるので、知識取得のresultを選択してください

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3886356/6ff99f41-7e55-a3d3-d721-c17f09f58189.png)

そうすると「コンテキスト機能を有効にするには、PROMPTにコンテキスト変数を記入してください。」と怒られます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3886356/59cc35f3-e3d3-48d1-7556-2a228c1c44f9.png)

なのでSYSTEMのところで/（スラッシュ）を入力してください

そうすると下記のような選択肢がでるので、コンテキストを選びます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3886356/318f13b5-ed05-e499-de60-619ddae4d2d7.png)

最終的に下記画像のようになったら設定は完了です

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3886356/9f14acfc-9453-fb18-9c65-0e177df163e6.png)

ボットを公開し、実行してみましょう

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3886356/00916cbe-fe39-851b-f44e-90e21d339774.png)

適当に「この資料の内容を要約して分かりやすく教えて」とか聞いてみると、先ほど登録したナレッジの内容に基づいてAIが返答を生成します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3886356/6f59a611-4625-fa67-084b-2083212a490c.png)

## AIの返答の質が低くねぇか問題

先ほど質問してみたら思ったよりAIの返答の質が低いなと思いませんでしたか？（ちゃんと要約できていない）

RAGの構築とAIの返答の品質を上げたい場合、以下のことをやると効果的です

- ナレッジの検索設定を変更する
    
- LLMのモデルを変える
    
- プロンプトで適切な指示を出しておく
    

### ナレッジの検索設定を変更する

検索設定を変更する前にcohereというサービスに課金してください

私はcohereの回し者ではないですが、cohereの提供しているサービスは品質が高くRAGをもっと使いこなそうと思ったら、今のところcohereのモデルがベストプラクティスだと感じているためです

少し難しいですがcohereのrerankモデルがRAGの構築に非常に有用なのです

あんまりお金はかからないので安心してください

[cohereに登録し](https://dashboard.cohere.com/welcome/register)、[クレカの登録](https://dashboard.cohere.com/billing)までいったら

[https://dashboard.cohere.com/api-keys](https://dashboard.cohere.com/api-keys)

でAPIキーを入手します（**この時Trial Keyではなく新しいProduction keyを作ってください**）

Difyに戻って、「設定」→「モデルプロバイダー」→「cohere」→「セットアップ」で先ほど入手したAPIキーを貼り付けましょう

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3886356/2979bfb5-9350-5ba3-2c55-aecf8d738b67.png)

これでcohereの設定が完了しました

次に先ほど設定したナレッジの画面に行き、ナレッジの設定で、以下のように設定します

変わったのは「埋め込みモデル」と「検索設定」です、この部分をcohereの提供しているモデルにします

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3886356/0790e8fe-0129-c47f-c52f-1f6935643137.png)

その後、スタジオから先ほど作ったボットの知識取得の検索設定も少しいじります

RERANK設定を選びRerankモデルを同様にcohereにしましょう

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3886356/07a6055b-71ed-a83c-5cf4-d24c85f04069.png)

そしてボットを更新してアプリを再実行してみましょう

「この資料の内容を要約して分かりやすく教えて」と聞いた場合にまた違った結果が返ってきたのがわかると思います（多少わかりやすくなった）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3886356/acf074c6-470a-a889-b771-5a8ef2b5681c.png)

### LLMのモデルを変える

前回ChatGPTのAPIキーを入手したと思いますがChat GPTにもいくつかモデルがあり、性能が高いのがgpt-4, gpt-4oなどです

LLMの設定でモデルを変更し、違う結果が返ってくるのをみてもらえればいいと思います

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3886356/c8648832-cc78-e4b5-773f-78a238bfc5a5.png)

ChatGPT以外だとAnthropicのClaudeがおすすめです

というよりChatGPTよりもいい結果を出してくれます

私はよくClaude3 haikuを使います（一番使い勝手がいいと思っています）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3886356/7dd31153-923b-c98f-ea9d-d8ceb045efcc.png)

AnthropicのClaudeもOpenAIと同じように、アカウントを作成、支払い方法の設定、[APIキーの発行](https://console.anthropic.com/settings/keys)をし、Dify上のモデルプロバイダーでAPIキーを設定することで使用できます

### プロンプトで適切な指示を出しておく

LLMの設定でSystem プロンプトに適切な指示を出しておくと回答の結果が良くなります

所謂プロンプトエンジニアリングというやつです

```
あなたは優秀な融資担当職員です。
質問に対し、誰もがわかるように事実に基づいて回答するのが、あなたの仕事です。
回答は日本語で回答してください
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3886356/ba22bf74-6686-c5da-1e55-24d166a577cb.png)

### 結果

結果が良くなったのか？というのは自分の判断になりますが、なんとなく品質は高くなったように感じます  

[](https://assets.st-note.com/img/1726382119-EV7NA5y2ClDm8tYBWo1F4QcO.png?width=2000&height=2000&fit=bounds&quality=85)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3886356/8f71eb05-22b8-08f6-e4aa-942f14cdf538.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3886356/3abf3e1d-97d6-1f0c-3471-2b2cc706acda.png)

もちろんAIに聞いて100%回答が合っているという保証もないので、資料を見つつAIに補助してもらいながら読むのがいいと思います

  

## 最後に

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

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