7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Posted at

🧠 はじめに

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

📕基本的な構成

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

image.png

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

知識検索

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

image.png

LLM

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

image.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

  • おやおや、聞いてもいないのに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

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

💡 学んだこと:Difyのプロンプトで正しい回答結果を得るには

  • contextは便利だが“唯一の正解”にしないこと
  • GPTはプロンプト次第で偏ってしまう
  • ナレッジベースはあくまで補足であると強調すること

🚀 おわりに

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?