ローカルエージェント型RAGパイプラインの構築:LangGraphとDSPyのための10のエリートプロンプト

10 Elite Prompts for LangGraph & DSPy

2024年の「ブラインドRAG」パイプラインを覚えていますか?PDFを埋め込み、トップkのチャンクをコンテキストウィンドウに押し込み、最善を祈るだけでした。

そのアーキテクチャはもう終わりです。

2026年、エージェンシックRAGが唯一実用的なエンタープライズ標準です。私たちはもはや受動的な検索システムを構築しているのではなく、推論エンジンを構築しています。「検索」から「推論」へのシフトは、経済的な計算式を完全に変えました。私たちはトークンのためだけにお金を払っているのではなく、推論ステップを最適化しているのです。

今日は、ローカルエージェンシックスタックに深く入り込みます:LangGraphオーケストレーション、GraphRAGメモリ、SLM(Llama-5-8BやPhi-5のような小型言語モデル)を自社のハードウェアで実行することです。NVIDIA Blackwell B200にデプロイする場合でも、エッジネイティブなNPU上でも、目標は同じです:ゼロトラスト、ゼロレイテンシ、自律的な知性。


2026年のスタック:「標準的」RAGが失敗する理由

過去の「検索してから生成」ループは、状態を欠いていたために失敗しました。自己修正ができなかったのです。ベクトル検索がゴミを返せば、LLMはゴミを幻覚しました。

現代のエージェンシックRAGパイプラインは、以下によってこれを解決します:

  1. グラフ+ベクトルハイブリッド(GraphRAG):埋め込みを保存するだけではありません。関係性を保存します。ナレッジグラフ(Neo4jやFalkorDBなど)は構造化データ(エンティティ)を処理し、ベクトルストア(Weaviate/Chroma)は非構造化のニュアンスを処理します。
  2. 循環推論(LangGraph):線形チェーンは時代遅れです。モデルがループバックし、自身の検索結果を批判し、コンテキストが不十分な場合は再クエリできる循環グラフを使用します。
  3. コンパイル済みプロンプト(DSPy):2025年に手書きプロンプトは止めました。今ではプロンプトをコンパイルします。DSPyを使用して、プロンプトをモデルの重みのように扱い、検証セットに対して数学的に最適化します。

ハードウェア注意:このガイドでは、量子化されたSLM(GGUF/EXL2)をコンシューマーハードウェア(RTX 5090)またはエンタープライズエッジノード(NVIDIA L40S / Blackwell B200)で実行していることを前提としています。


設計図:10のエリートプロンプトと構成

以下は、2026年のプロダクショングレードのエージェンシックRAGシステムを定義する構成です。これらはLangGraphの状態定義、DSPyシグネチャ、システム2推論プロンプトをカバーします。

1. 「スーパーバイザー」ノード(LangGraphルーティング)

このシステムプロンプトはグラフの中心に位置し、ベクトルDB、ナレッジグラフ、または直接返信のいずれにクエリを送るかを決定します。

役割: マスターオーケストレーター(エージェンシックルーター)
目標: データ要件に基づき、ユーザークエリを適切なワーカーノードにルーティングする。

ルーティングロジック:
1. クエリが事実定義または特定のエンティティ関係を必要とする場合(例:「エンジニアリングVPに報告するのは誰?」):
   -> 「ツール: KNOWLEDGE_GRAPH」を返す
2. クエリが主題探索またはファジーマッチングを必要とする場合(例:「昨年の第3四半期レポートのセンチメントを要約せよ」):
   -> 「ツール: VECTOR_STORE」を返す
3. クエリが挨拶またはメタ質問の場合:
   -> 「DIRECT_REPLY」を返す

重要: 質問に自分で答えてはならない。ルーティングのみを行う。
入力: {user_query}

2. 幻覚採点官(自己反省)

グラフ内の重要な「チェック」ノード。スコアが低い場合、エージェントは事実上、再度検索するために「ループ」バックします。

役割: QA監査官
タスク: 検索された文書に対して生成された回答を採点する。

入力:
- [文書]: {retrieved_chunks}
- [生成された回答]: {agent_response}

指示:
1. 「幻覚」をチェック: 回答に文書に存在しない事実が含まれているか?
2. 「関連性」をチェック: 回答はユーザーの核心的な意図に対処しているか?

出力はJSONのみ:
{
  "binary_score": "yes"(接地されている場合)または"no",
  "reasoning": "失敗の簡単な説明",
  "action": "retry_query"または"pass"
}

3. DSPyシグネチャ(コンパイル済み推論)

長いプロンプトを書くのはやめましょう。シグネチャを定義し、DSPyコンパイラに指示の最適化を任せます。

import dspy

class GenerateAnswer(dspy.Signature):
    """
    コンテキストに厳密に基づいて質問に答える。
    コンテキストが不足している場合は、「コンテキスト不足」を出力する。
    """
    context = dspy.InputField(desc="グラフおよびベクトルストアから検索されたチャンク")
    question = dspy.InputField()
    reasoning_trace = dspy.OutputField(desc="連鎖思考の論理ステップ")
    answer = dspy.OutputField(desc="最終的な簡潔な回答と[DocID]引用")

# 2026年では、BootstrapFewShotオプティマイザに例と指示を自動的に埋めさせます。

4. クエリ書き換えエージェント(マルチホップ)

検索前に、このエージェントは複雑な質問を原子的なサブクエリに分解します。

役割: クエリ分解エンジン(システム2)
タスク: 入力を原子的で実行可能な検索ステップに分解する。

ユーザークエリ: 「2024年の欧州支店の収益と2025年の米国支店の収益を比較せよ。」

出力計画:
1. query_vector_store("欧州支店 収益 2024 財務報告書")
2. query_vector_store("米国支店 収益 2025 財務報告書")
3. calculate_diff(ステップ1, ステップ2)

5. MCP(モデルコンテキストプロトコル)ツール定義

2026年、エージェントはMCPを話します。このシステムプロンプトは、ローカルSLMが標準プロトコルを介して外部ツールとどのように相互作用するかを定義します。

システム: あなたはモデルコンテキストプロトコル(MCP)を介して接続されたエージェントです。
利用可能なツール:
- {
    "name": "search_internal_docs",
    "description": "会社Wikiに対するセマンティック検索。",
    "schema": {"query": "string", "filter_date": "YYYY-MM-DD"}
  }

プロトコル:
1. ツールを呼び出すには、`tool_use`を含むJSONブロックを出力する。
2. 続行する前に`tool_result`メッセージを待つ。
3. ツール出力を捏造してはならない。

6. コンテキスト圧縮エージェント(長文コンテキスト最適化)

100万トークンのウィンドウがあっても、ノイズは推論を殺します。生成前に50の文書を5つのキーポイントに蒸留するためにこれを使用します。

役割: 情報蒸留器。
タスク: 以下の50の検索スニペットを単一の「ナレッジコンテキスト」ブロックに圧縮する。

ルール:
1. 重複する情報をすべて削除する。
2. すべてのユニークなエンティティ(名前、日付、ID)を保持する。
3. 2つの文書が矛盾する場合、明示的に注記する:「矛盾: 文書AはXと言い、文書BはYと言う。」

[入力チャンク]: {chunks}

7. 「悪魔の代弁者」(リスクエージェント)

FinTech/法務RAGに有用。このエージェントは並行して実行され、主回答を批判します。

役割: リスク評価ボット。
タスク: 提案された回答をレビューし、潜在的な責任または省略されたコンテキストを特定する。

提案された回答: {answer}
ソース文書: {context}

分析:
1. 回答は特定の条項を過度に一般化したか?
2. 信頼度はソーステキストによって正当化されるか?
3. 最終出力に漏洩した可能性のあるPIIにフラグを立てる。

8. GraphRAG Cypherジェネレーター

自然言語をグラフデータベースクエリ(Neo4j用Cypher)に変換するため。

役割: グラフデータベーススペシャリスト。
タスク: 自然言語クエリをCypherクエリに翻訳する。

スキーマ:
(:Person)-[:WORKS_FOR]->(:Company)
(:Company)-[:PUBLISHED]->(:Document)

ユーザー: 「2025年にOpenAIの従業員によって公開されたすべての文書を検索せよ。」

Cypher:
MATCH (p:Person)-[:WORKS_FOR]->(c:Company {name: 'OpenAI'})
MATCH (c)-[:PUBLISHED]->(d:Document)
WHERE d.date STARTS WITH '2025'
RETURN d.title, d.url

9. セマンティックルーター(意図分類)

2026年に更新され、「エージェンシック」意図と「チャット」意図を処理します。

役割: 意図分類器。
カテゴリー:
- 「COMPLEX_REASONING」: マルチステップ思考、計画、または数学を必要とする。(o1スタイルの推論モデルにルーティング)
- 「FAST_RETRIEVAL」: 単純な事実検索。(Llama-5-8Bにルーティング)
- 「ACTION_REQUEST」: ユーザーが状態を変更したい(チケット作成、メール送信)。(アクションエージェントにルーティング)

入力: {query}
出力: [CATEGORY_NAME]

10. JSONスキーマエンフォーサー(Pydanticパーサー)

API統合のための厳格な出力フォーマット。

システム: あなたは構造的解析エンジンです。
タスク: 非構造化コンテキストを以下のPydanticスキーマにマッピングする。

スキーマ:
{
  "summary": "string",
  "citations": [{"id": "int", "text": "string"}],
  "confidence_score": "float (0.0-1.0)",
  "follow_up_suggestions": ["string"]
}

警告: 信頼度スコアが0.5未満の場合、「summary」フィールドはnullでなければならない。

2026年実装のベストプラクティス

1. 「フローエンジニアリング」を採用する

1つの巨大なプロンプトですべてを修正しようとするのはやめましょう。2026年、私たちはフローを構築します。LangGraphを使用して、明確な状態を定義します:Retrieve -> Grade -> Refine -> GenerateGradeステップが失敗した場合、フローは自動的に書き換えられたクエリでRetrieveにループバックします。

2. SLM(小型言語モデル)に移行する

単純なルーティングに700億パラメータのモデルを使用しないでください。ルーティングや採点ステップには、専門化されたSLM(Phi-5Gemma-4-2Bなど)を使用します。最終的な統合には「大型モデル」(例:Llama-5-405B)のみを呼び出します。これによりレイテンシが60%削減されます。

3. 「エピソード記憶」を実装する

ステートレスRAGは煩わしいものです。あなたのエージェントは過去の対話を記憶すべきです。LangGraphにチェックポインターを実装し(RedisやPostgresを使用)、会話グラフの状態を保存します。これにより、ユーザーは「その最後の変更を他の文書にも適用して」と、コンテキストを再説明することなく言えるようになります。


エージェンシックの時代

「ファインチューニング」と「RAG」の間の議論は終わりました。勝者はハイブリッドエージェンシックRAGです。

2027年までに、純粋にベクトルベースのRAGは「レガシーテック」と見なされ、データの類似性だけでなく構造を理解するGraphRAGシステムに完全に置き換えられると予想されます。

次のステップ:
これらのプロンプトをコピー&ペーストするだけではいけません。プロンプト#2(幻覚採点官)を取り出し、現在のパイプラインに後処理ステップとして統合してください。モデルの出力をプログラム的に採点していないなら、プロダクションの準備はできていません。