DifyでつくったAIが壊れた専門家になってしまったときの対処法


## 🧠 はじめに
- Dify学習のため、「IPA（情報処理推進機構）」の発信情報に詳しいAIチャットをDifyで構築してみました。
- "ITの知識と絡めてIPAの情報も教えてくれる優しい先輩"を作り上げようとしたものの...
- どんな質問にもIPAの説明しかしないが爆誕してしまった。
- 本記事では、その失敗と改善プロンプトの工夫を紹介します。

---

## 📕基本的な構成
Difyで以下のようなシンプルなチャットフローを作成しました。
入力プロンプトに対し、ナレッジベースを検索してLLMで回答するものです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117147/97f8918a-ea08-447a-b21f-0356b6128123.png)

それぞれのステップについて見ていきます。

### 知識検索
- IPAの情報をナレッジベースとして活用できるよう、IPAの公式よりいくつかPDFをダウンロードして登録しておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117147/f79c0053-20b1-449c-a7b0-bcac08ae2c30.png)

### LLM
- LLMには、以下のように対話の基本動作を設定します。
- Dify上で要件を入力すると、AIで自動的に生成してくれました。
- IPA関連の情報を含めつつ、ITについてフレンドリーに教えてくれる先輩です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117147/2be82f6e-b861-4845-b8b7-6a5470ce302b.png)

```
<instruction>
あなたは、ITに詳しいフレンドリーな先輩です。質問者はあなたに気軽に相談しています。  
IPA（情報処理推進機構）の資料を知識として参考にしつつ、質問者にとってわかりやすく、親しみやすい言葉で説明してください。

以下の方針にしたがって、自然な回答を作成してください。

1. 質問の意図をくみとって、まずはその問いに正面から答えるようにしてください。IPA資料に直接記述がない場合でも、関連する内容や一般的な知識をもとに補足してOKです。
2. 回答の語り口は、同僚に話すような自然で柔らかいものにしてください（例：「〜なんですよ」「たしかに気になりますよね」など）。
3. 難しい用語には補足を添えたり、なるべく簡単な言い換えを使ってください。
4. contextに含まれる情報は、関連する場合に引用して活用してください。ただしそれに縛られすぎず、質問者の理解を最優先してください。
5. 出力には「質問：」「回答：」のようなラベルを使わず、ユーザーへの自然な語りかけとして構成してください。

出力にはXMLタグを含めないでください。
</instruction>
<context>
{{#context#}}
</context>

<example>
ユーザーが「IPAって何してるところ？」と尋ねた場合、以下のように自然に返答してください。

IPAは、日本のIT分野の発展を支援するために設立された公的機関です。具体的には...
</example>

```

- これで完成です、早いですね。
    - Difyはローカル環境で構築しています。環境設定は別途必要です。
    - OpenAIのAPIキー設定が別途必要です。

---

## 🤖 なぜか「IPA紹介おじさん」になってしまったAI
- 早速使ってみましょう。質問を投げかけます。
- ユーザー：「今後の日本のIT産業における課題はなんですか？」
- AI：「おっと、IPAについて知りたいんですね。IPAとは情報処理推進機構の略でー」

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117147/a45f138a-f66b-4e2f-9be1-9babb3baed28.png)

- おやおや、聞いてもいないのにIPAについて説明を始めました...。
- どうやらナレッジベースとプロンプト設計のバイアスが強すぎたようです。

---

## 🧩 問題の構造を整理してみた
- Difyの構成：ナレッジベース × LLMノード（gpt-4/chat）
- プロンプトの構成が「IPAを中心に話せ」と強調しすぎていた可能性
- context重視すぎると、質問を無視する傾向が出ることもありそう

---

## 🔧 改善ポイント：プロンプトで先輩を“人格チューニング”する

- ナレッジベースのIPAに関して答えてくれることはよいのですが、質問には正しく答えるようにしましょう。
- プロンプトを以下のように修正してみます。先輩を正常に戻すためどうすればいいか、ChatGPTと相談して出てきた改善案です。

```
あなたは社内業務やIT分野に詳しい、親しみやすいAIアシスタントです。ユーザーの質問に対して、わかりやすく丁寧に説明することが求められています。

まずは質問の主旨を正しく理解し、その内容に正面から自然な語り口で答えてください。  
IPAのナレッジベースに関連情報が含まれている場合は、それを補足として活用して構いませんが、主軸はユーザーの質問に答えることにあります。

難しい用語や制度名などが出てきた場合は、できるだけ噛み砕いた説明や簡単な言い換えを入れてください。話し方はフレンドリーかつ丁寧にしてください（例：「〜なんですよ」「〜という感じです」など）。

以下はナレッジベースから検索された参考情報です。必要に応じて引用して構いませんが、それに縛られすぎず、ユーザーの疑問に親身に答えるようにしてください。

参考情報：
{% for item in context %}
{{#context#}}
{{#sys.query#}}
------------------------------
{% endfor %}

情報がまったく見つからない場合は、「ナレッジベースに該当する情報がありませんでした」と伝えた上で、分かる範囲で補足説明してください。
```

- ナレッジベースで得られたIPA情報に縛られすぎないようにしっかり設定しています。
- 念入りに2回ほど伝えています。

---

## ✅ 改善後の応答
- さて、上手いことチューニングができたはずなので、再度試してみます。
- ユーザー：「今後の日本のIT産業における課題はなんですか？」
- AI：「日本のIT産業が今後直面する大きな課題は、主に2つに分けられます。1つ目は「人材不足」ですー」

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117147/678ae35e-aeae-4a33-9518-eda0ac996b3a.png)

- 質問に正しく答えてくれるようになりました！

---

## 💡 学んだこと：Difyのプロンプトで正しい回答結果を得るには
- contextは便利だが“唯一の正解”にしないこと
- GPTはプロンプト次第で偏ってしまう
- ナレッジベースはあくまで補足であると強調すること

---

## 🚀 おわりに
- GPTはバカではないものの、“従順すぎる”ことがある気がします。
- 人間とのコミュニケーションに近く、指示は明確に言語化してあげることが大事。
- 様々な質問に意図通り回答してくれるかは、多くの試行が必要かもしれません。