🐥

Difyで実現する「ハルシネーション抑制」のアーキテクチャ設計(プロンプト分割×自己採点)

に公開

はじめに

プロダクトマネージャーとしてAI導入プロジェクトに関わる中で、**「プロンプトエンジニアリングの限界」**を感じることはないでしょうか。

「あなたは優秀なコンサルタントです」と役割を与えたり、Few-Shotで例示を与えたりしても、業務レベルの複雑なタスクではどうしてもハルシネーション(もっともらしい嘘)や出力の揺らぎが発生します。

本記事では、ノーコードツール**「Dify」を活用し、「プロンプト分割(Chain of Thought)」「自己採点(Self-Correction)」**を組み合わせることで、ハルシネーションを一桁%台まで抑制した実装事例を紹介します。

課題:シングルプロンプトの限界

LLM(大規模言語モデル)に「抽出・分析・生成」といった複数の認知タスクを一度に要求すると、処理精度が著しく低下します。

  • 認知負荷の増大: 指示が長くなるほど、後半の指示が無視されやすくなる。
  • コンテキストの汚染: 不要な情報まで参照してしまい、回答がブレる。

これらはプロンプトの書き方ではなく、「アーキテクチャ(構造)」の問題です。

解決策:Difyによる構造化設計

解決策として、Difyのワークフロー機能を用い、処理を以下の3つのフェーズに分割・構造化しました。

1. プロンプト分割(Decomposition)

1つの巨大なプロンプトではなく、タスク単位でLLMノードを分割し、リレー形式で処理させます。

  • Step 1: Fact Extraction(事実抽出)
    • 入力データから、数値・固有名詞などの「事実」のみを抽出させ、JSON形式で出力する。推論は禁止。
  • Step 2: Logic Construction(論点整理)
    • 抽出された事実(JSON)のみを入力とし、比較・分析を行う。
  • Step 3: Drafting(ドラフト生成)
    • 分析結果を元に、最終的な回答文章を生成する。

2. 検査工程(Verification Workflow)

生成された回答をそのままユーザーに返すのではなく、**「検査用LLM」**を通します。
ここでは、「禁止ワードが含まれていないか」「推測で断定していないか」などをチェックさせ、NGの場合は修正ループを回します。

3. 自己採点(Self-Correction)

出力の品質を安定させるため、LLM自身にスコアリングを行わせます。

# スコアリングプロンプト例
以下の観点で出力内容を0〜5点で採点せよ。
- 論理性:事実に基づいているか
- 一貫性:矛盾がないか
- 安全性:推測を含んでいないか

合計スコアが15点未満の場合は、改善点を挙げて再生成せよ。

/////////////////////////////////////////////////////

このループをワークフローに組み込むことで、人間がレビューするコストを大幅に削減できました。

実装結果
このアーキテクチャを導入した結果、以下の改善が見られました。

ハルシネーション率: 導入前 約40% → 導入後 5%未満

回答の安定性: 出力フォーマットの崩れがほぼ消滅

メンテナンス性: プロンプトが機能ごとに分割されているため、修正の影響範囲が限定的

まとめ
AI導入においては、「魔法のようなプロンプト」を探すよりも、**「堅実なワークフロー設計」**を行う方が、結果として近道になります。 Difyのようなツールを活用し、LLMを「チャット相手」ではなく「処理モジュール」として扱う設計思想が重要です。

▼ 実装テンプレート(プロンプトセット)の配布
本記事で解説した「分割プロンプトの構成案」や「自己採点ロジック」「禁止事項チェックリスト」など、実務で即利用できる設計図(プロンプトセット)をnoteで公開しています。

自力での検証時間をショートカットしたい方は、以下を参照してください。

https://note.com/quick_fox2970/n/n86ba577c0868

Discussion