【Dify】アノテーションの使い方|FAQの回答品質を安定させる方法

DifyでFAQ対応を運用していると、同じ意味の質問でも、AIが回答を作るたびに内容や言い回しが少しずつ変わることがあります。営業時間、料金、申請手順など、あらかじめ決めた内容をそのまま返したい質問では、この揺れが運用上の問題になります。
そこで使えるのが、Dify公式ドキュメントの「Annotation System(アノテーション返信)」です。登録した質問と意味が近い入力が設定したスコア閾値を超えると、新しい回答を生成せず、あらかじめ登録した回答を優先して返します。該当する回答がない場合は、通常のAI生成に進みます。
アノテーション返信が向いているのは、営業時間や申請方法のように、回答内容を固定したい質問です。敬語や文章のトーンだけを整える方法ではなく、登録済みのQ&Aそのものを再利用する機能として考えると違いが分かりやすくなります。
この記事では、アノテーション返信の仕組み、有効化、Q&Aの登録、スコア閾値と埋め込みモデル、ログを使った改善方法を解説します。

Difyのアノテーションとは?
Difyのアノテーションは、特定の質問に対して、あらかじめ登録した回答を優先して返すための機能です。Dify公式ドキュメントでは「Annotation System」と案内されています。
ユーザーの質問と登録済みの質問を意味の近さで照合し、設定したスコア閾値を超えた場合は、LLMに新しい回答を作らせず、登録済みの回答を返します。
該当するアノテーションがない場合は、通常のAI生成に進みます。
アノテーションでできること
アノテーションでは、質問と回答をQ&Aの組み合わせとして登録します。完全に同じ文章が入力された場合だけではなく、意味が近い質問も照合対象になります。
基本的な処理の流れは次のとおりです。
- よくある質問と回答をあらかじめ登録する
- ユーザーの質問と登録済みの質問を意味の近さで比較する
- スコア閾値を超えた場合は登録済みの回答を返す
- 該当しない場合は通常のAI生成へ進む
- どのアノテーションが使われたかを確認し、登録内容や設定を見直す
たとえば、「営業時間を教えてください」という質問を登録しておけば、「何時まで営業していますか」のように表現が異なる質問でも、意味が近いと判定された場合は同じ回答を返せます。
ただし、アノテーションは登録した回答の内容が正しいことを自動で保証する機能ではありません。料金、規約、申請手順などが変わった場合は、登録済みの回答も更新する必要があります。
アノテーションが向いている回答の条件
アノテーションが向いているのは、次のような回答です。
- 回答内容があらかじめ決まっている
- 質問の表現が変わっても、同じ内容を返したい
- AIにその場で文章を作らせる必要がない
- 営業時間、申請方法、料金案内など、回答のばらつきを避けたい
一方、社内資料を検索して質問ごとに回答を組み立てる場合はRAG、相談内容に応じて柔軟に答える場合は通常のLLMが適しています。
また、回答内容ではなく敬語や文章のトーンだけを揃えたい場合は、アノテーションではなくプロンプト側で調整します。
アノテーションの仕組み
アノテーション返信では、ユーザーの質問と登録済みの質問を意味の近さで比較します。
登録済みのQ&Aが単語まで完全に一致している必要はなく、設定した条件を満たす意味的に近い質問があるかを判定します。
回答までの流れ
アノテーション返信を有効にした場合、回答までの流れは次のようになります。
- ユーザーが質問を入力する
- Difyが登録済みのアノテーションから意味の近い質問を探す
- スコア閾値を超える質問が見つかった場合は、登録済みの回答を返す
- 該当するアノテーションがない場合は、通常のAI生成へ進む
- どのアノテーションが使われたかを記録し、登録内容や設定の改善に利用する
たとえば、「営業時間を教えてください」という質問と回答を登録している場合、「何時まで営業していますか」のように表現が異なる質問も照合対象になります。
条件に一致した場合は、LLMがその場で新しい文章を作るのではなく、登録済みの回答が使われます。
一方、一致する回答がない場合は、アプリに設定されている通常の処理へ進みます。
スコア閾値で一致を判定
スコア閾値は、ユーザーの質問と登録済みの質問が、どの程度近ければ一致とみなすかを決める基準です。
閾値を高くすると、意味がより近い質問だけに反応します。誤った質問に固定回答を返しにくくなる一方で、少し表現が変わっただけで一致しなくなる可能性があります。
閾値を低くすると、幅広い表現を拾いやすくなります。ただし、意味が異なる質問にも同じ回答を返してしまう可能性があるため注意が必要です。
すべてのアプリに共通する最適値はありません。最初から数値を決め打ちせず、実際の質問、ヒット履歴、誤った一致の有無を確認しながら調整します。具体的な調整方法は、後の「アノテーションの精度を上げるコツ」で説明します。
アノテーションとRAGの違い
アノテーションとRAGは、どちらも回答品質を整えるために使えますが、回答を作る仕組みが異なります。
アノテーションは、あらかじめ登録した質問と回答を照合し、条件に一致した場合に登録済みの回答を返します。営業時間、料金案内、申請方法など、回答内容を固定したい質問に向いています。
RAGは、ユーザーの質問に関連する情報をナレッジから検索し、その検索結果を材料としてLLMが回答を生成する仕組みです。社内規程やマニュアルなど、複数の資料から質問に応じた回答を作りたい場合に向いています。
つまり、アノテーションは「決めた回答を返す仕組み」、RAGは「関連資料を探し、その内容をもとに回答を作る仕組み」です。


Difyでアノテーションを有効化する手順
Dify公式APIドキュメントでは、アノテーション返信はChatflow、Chatbot、Agentアプリで利用できる機能として案内されています。
画面の名称や配置はDifyの更新によって変わることがありますが、基本的にはアプリの編集画面からFeaturesパネルを開き、Annotation Replyを有効にします。
設定方法
アノテーション返信を有効にする基本的な流れは次のとおりです。
- 対象となるアプリの編集画面を開く
- FeaturesまたはAdd Featuresと表示される機能設定パネルを開く
- Annotation Replyを有効にする
- スコア閾値を設定する
- 意味の近さを判定する埋め込みモデルを選択する
- 設定を保存し、想定した質問で動作を確認する
アノテーションに使用するQ&Aは、次の方法で登録・管理できます。
- Debug & PreviewやLogsの回答からアノテーションとして登録する
- Annotations画面から質問と回答を手動で追加する
- テンプレートを使ってQ&Aを一括インポートする
- 登録済みアノテーションのヒット履歴を確認する
最初から大量のQ&Aを登録する必要はありません。まずは営業時間や申請方法など、回答を固定する必要性が高い質問から登録し、実際の利用状況を見ながら追加します。
管理画面だけでなく、APIからアノテーション返信を有効化・無効化することもできます。APIでは、スコア閾値、埋め込みモデルの提供元、埋め込みモデル名を指定します。
APIによる設定方法は、Dify公式のConfigure Annotation Replyをご確認ください。
スコア閾値の初期設定
スコア閾値の基本的な役割は前章で説明しているため、この章では初期設定時の確認に絞ります。
スコア閾値に一律の正解はありません。登録した質問に対して、表現を変えた質問を用意し、回答結果を確認しながら調整します。
登録した質問に対して、次のような表現違いを用意して動作を確認します。
- 登録した質問とほぼ同じ表現
- 単語は違うが意味が同じ質問
- 一部の単語は似ているが意味が異なる質問
意味が同じ質問に反応しない場合は閾値を見直し、意味が異なる質問にも反応する場合は判定を厳しくします。公開前のテストだけで決めず、公開後のヒット履歴や誤った一致も確認しながら調整してください。
埋め込みモデルとは?
埋め込みモデルは、質問文を数値データに変換し、ユーザーの質問と登録済みの質問が意味的にどの程度近いかを比較するために使われます。
ここで選択する埋め込みモデルは、ユーザーへの回答文を生成するLLMとは役割が異なります。回答文を作るモデルではなく、質問同士の意味の近さを判定するためのモデルです。
利用できるモデルは、ワークスペースに設定されているモデルプロバイダーによって異なります。現在のワークスペースで利用可能な埋め込みモデルから選択してください。
埋め込みモデルを変更すると、登録済みアノテーションの埋め込みデータが再生成されます。運用開始後に変更する場合は、変更後に代表的な質問を使って一致判定を再確認してください。

FAQ運用でのアノテーションの使い分け
FAQで扱う質問のすべてを、アノテーションに登録する必要はありません。
回答内容が決まっている質問はアノテーション、資料を検索して答える質問はRAG、その場の状況に応じて回答を組み立てる質問は通常のLLMというように、質問の性質に合わせて使い分けます。
アノテーションに向いている質問
アノテーションに向いているのは、次の条件に当てはまる質問です。
- 回答内容があらかじめ決まっている
- 質問の表現が変わっても、同じ内容を返したい
- 回答をLLMに自由生成させる必要がない
- 間違った案内や回答のばらつきを避けたい
- 登録後も回答内容を定期的に確認できる
具体例としては、次のような質問があります。
- 営業時間や休業日
- 申請窓口や基本的な申請手順
- サポート窓口の案内
- 返品やキャンセルに関する基本ルール
- 社内で繰り返し確認される定型的な質問
ただし、料金、規約、申請手順などは変更される可能性があります。アノテーションに登録したあとも、元の情報が更新されていないか定期的に確認してください。
アノテーションに向かない質問
次のような質問は、アノテーションだけで処理するのに向いていません。
- 質問ごとに複数の資料を確認する必要がある
- ユーザーの状況によって回答内容が変わる
- 最新情報やリアルタイムのデータが必要になる
- 一つの固定回答では対応できない相談
- 契約、法務、個人情報など、人による判断が必要になる
たとえば、「複数の社内規程を踏まえると、今回の申請は認められますか」という質問は、固定回答だけでは判断できません。
資料を検索して回答する必要がある場合はRAGを使い、個別判断が必要な場合は担当者へ引き継ぐなど、アノテーション以外の処理を組み合わせます。
アノテーション・RAG・通常生成の役割分担
それぞれの役割は、次のように整理できます。
- アノテーション:決めた回答をそのまま返す
- RAG:関連する資料を検索し、その内容をもとに回答を作る
- 通常のLLM:質問内容に応じて柔軟に回答を生成する
- 人による確認:個別判断や重要な最終確認を行う
アノテーションだけですべての質問へ対応しようとせず、回答内容を固定できる質問に限定して使うことが重要です。
最初に登録する質問を選ぶ
最初は、次の3つの条件を満たす質問から登録します。
- 頻繁に聞かれる
- 回答内容が決まっている
- 回答を間違えたり、変えたりしたくない
一度に大量のQ&Aを登録するのではなく、まずは数件から始めます。
登録後は、元の質問とほぼ同じ表現だけでなく、言い換えた質問や、一部の単語だけが似ている別の質問でもテストしてください。
実際のヒット履歴を確認しながら、登録する質問の追加、回答内容の更新、スコア閾値の調整を行います。
アノテーションの精度を上げるコツ
アノテーションは、Q&Aを登録しただけで完成する機能ではありません。
実際の質問に正しく一致しているか、関係のない質問に反応していないか、登録した回答が現在も正しいかを継続して確認する必要があります。
ここでは、質問文の登録方法、スコア閾値、ヒット履歴、回答内容の更新という4つの観点から、運用後の改善方法を整理します。
質問文はユーザーが実際に使う表現で登録する
アノテーションを登録するときは、運営側が使いたい表現だけでなく、ユーザーが実際に入力しそうな言い回しを意識することが重要です。
Difyのアノテーションは意味的な一致を見ますが、それでも実際の質問パターンに近い形で登録しておくほうが、ヒットの安定感は高まりやすくなります。
公式でも、どの質問がヒットし、どの質問がカバレッジの抜け漏れになっているかを追跡しながら改善する考え方が示されています。
たとえば、運営側は「営業時間を教えてください」と整った文章で考えがちですが、実際のユーザーは「何時まで?」「今日って何時に閉まる?」のように、もっとくだけた表現で聞くことがあります。
こうしたズレを埋める意識を持つだけでも、アノテーションの使い勝手はかなり良くなります。
最初は自分で想像して登録し、運用後は実際のログを見ながら表現を寄せていくのがおすすめです。
似た質問を一つにまとめすぎない
FAQを整備するときは、似ている質問を一つにまとめたくなりますが、まとめすぎると逆に精度が下がることがあります。
Difyでは、ユーザーの質問と登録済みアノテーションの意味的な近さを見て回答を返すため、質問の幅が広すぎると、微妙に違う意図まで同じ回答に吸い込まれてしまうことがあるからです。
たとえば、「料金について教えてください」という大きなくくりの質問を一つだけ作るよりも、「月額料金はいくらですか」「初期費用はかかりますか」「無料プランはありますか」のように分けたほうが、ユーザーの疑問に対して自然に答えやすくなります。
アノテーションは広くカバーするほど良いわけではなく、むしろ“答えを固定したい単位”で細かく分けたほうが安定しやすい機能です。
スコア閾値はログを見ながら調整する
スコア閾値は、一度設定したら終わりではありません。実際のヒット履歴を確認し、次の2つを分けて確認します。
- 意味が同じ質問なのにアノテーションが使われなかった
- 意味が異なる質問にアノテーションが使われた
前者が多い場合は、質問文の登録方法やスコア閾値を見直します。後者が発生している場合は、閾値を厳しくするだけでなく、登録した質問の範囲が広すぎないかも確認してください。
ヒット件数だけを増やすのではなく、意図した質問に正しい回答が返っているかを基準に調整します。
使われていないアノテーションは定期的に見直す
アノテーションは増やせば増やすほど良いわけではありません。
頻繁に使われるアノテーションと、まったく使われないアノテーションを追跡し、未使用のものは削除したり、成功しているパターンを拡張したりすることが推奨されます。
つまり、登録件数そのものよりも、実際に役立っているかどうかを見ることが大切です。
たとえば、最初にまとめてFAQを登録すると、その後ほとんど使われない項目が出てくることがあります。
そうしたアノテーションを放置すると、管理が煩雑になるだけでなく、見直しの優先順位も分かりにくくなります。
よく使われるものは磨き込み、使われないものは削除や統合を検討するほうが、全体として運用しやすくなります。
登録済みの回答を定期的に更新する
アノテーションが正しく一致していても、登録した回答自体が古くなっていれば、利用者へ誤った案内を返してしまいます。
特に、次の情報を含む回答は定期的な確認が必要です。
- 営業時間や休業日
- 料金やプラン
- 申請方法や必要書類
- キャンセルや返品の条件
- サポート窓口や問い合わせ先
- 社内規程や業務ルール
元の情報が変更された場合は、アノテーションの回答も更新します。よく使われるアノテーションほど影響が大きいため、ヒット回数が多い回答から優先して確認してください。
Dify上のヒット履歴だけでなく、回答の根拠となる公式ページや社内資料の更新も確認することが大切です。
アノテーションに関するよくある失敗
アノテーション運用で起こりやすい失敗は、質問の選び方、スコア閾値、登録後の確認不足に分けられます。
公開前と運用開始後に、次の点を確認してください。
- 回答内容が状況によって変わる質問まで登録していないか
- ヒット数を増やすためだけにスコア閾値を下げていないか
- 資料の検索や個別判断が必要な質問を固定回答にしていないか
- 意味が異なる質問に同じアノテーションが使われていないか
- 登録後にヒット履歴を確認しているか
- 使われていないアノテーションを放置していないか
- 料金、規約、申請方法など、登録した回答が古くなっていないか
- 最初から大量のQ&Aを登録しすぎていないか
アノテーションは、登録件数を増やすほど良くなる機能ではありません。回答を固定する必要がある質問に限定し、実際の利用状況を確認しながら追加・修正・削除します。
問題が起きたときは、スコア閾値だけを変更するのではなく、登録した質問の範囲、回答内容、実際の質問とのずれを順番に確認してください。
まとめ|アノテーションは決めた回答を安定して返す機能
Difyのアノテーション返信は、ユーザーの質問が登録済みの質問と意味的に一致した場合に、あらかじめ用意した回答を優先して返す機能です。
営業時間、申請方法、サポート窓口など、回答内容を固定したい質問に向いています。一方、複数の資料を検索する必要がある質問や、状況に応じた個別判断が必要な質問には、RAG、通常のLLM、人による確認を使い分けます。
アノテーションを運用するときは、次の点を確認してください。
- 回答を固定する必要がある質問だけを登録する
- スコア閾値と埋め込みモデルを設定する
- 表現を変えた質問でもテストする
- ヒット履歴と誤った一致を確認する
- 使われていないQ&Aや古くなった回答を見直す
最初から大量のQ&Aを登録する必要はありません。重要な質問から少しずつ登録し、実際の利用状況を見ながら追加・修正してください。
実際に問い合わせ対応チャットボットを作りたい場合は「問い合わせ対応チャットボットを作ろう」、問い合わせ自動化が自社に合うか判断したい場合は「問い合わせ対応をAIで自動化する方法」へ進んでください。
