1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

業務でAIエージェントのアーキテクチャ設計に携わる中で、GraphRAGエージェントを実際に構築してみました。本記事ではその実装と、背景にある概念を整理して紹介します。

対象読者

  • AIエージェントの業務設計・アーキテクチャ設計・構築に取り組んでいる方
  • エージェント設計においてPalantirモデルやオントロジー的な概念の必要性を感じているが、まだ十分に理解できていない方
  • 実際に手を動かして理解を深めたい方

従来のRAGとGraphRAGの違い

従来のRAG(ベクトル検索)

テキストを細かく分割し、意味の近さをベクトル化して検索します。
「単一文書の要約」や「キーワード検索」には強い一方で、「親会社と子会社の関係」や「人脈の繋がり」といった構造的な推論は苦手です。

GraphRAG(グラフ検索)

データ同士の関係性をノードとエッジによるグラフ構造でモデル化します。
文脈や関係性を深く辿れるため、「Aさんと関連が深いプロジェクトは?」「関連部署のルールは?」といった複雑なクエリに対応できます。


前提知識:用語の整理

GraphRAGを理解する上で必要な概念を整理します。

グラフ

ノード(点)とエッジ(線・繋がり)で構成されるデータ構造です。

  • 「顧客」と「商品」
  • 「社員」と「パソコン」

graph_01_graph.png

オントロジー

ノード間の繋がりに意味とルールを付与する概念です。

  • 「顧客」は「商品」を 「契約している」
  • 「社員」は「パソコン」を 「利用している」

graph_02_ontology.png

ナレッジグラフ

グラフ構造にオントロジーで意味づけしたものです。
LLMを用いたナレッジグラフでは、自然言語情報から関係性を自動抽出し、ノードやエッジを動的に追加・更新できます。

graph_02_ontology.png

個人的には「動的に更新されるクラス図」に近いイメージを持ちました。

(以下参考)

必須ではありませんが、データ基盤との接続を考える際に役立ちます。

セマンティックレイヤー

物理データ名とビジネス用語を紐づけるレイヤーです。

  • T_CUSTOMER → 「顧客」
  • STS = ACTIVE → 「有効顧客」

データカタログ

データの所在・意味・属性を一元管理し、検索・活用できるようにした仕組みです。


超ざっくりとした説明になりましたが、もう少し深めに理解したい場合は
こちらの記事をおすすめします。


ナレッジグラフ設計

次に実際にナレッジグラフを設計してみました。今回はOAヘルプ業務を想定し
ユーザーの発話テキストを解釈し、適切なオペレーションにルーティングするための
グラフ構造を定義しています。

想定オペレーション

オペレーション 概要
パスワードリセット 本人確認後にPWをリセットする
問い合わせ回答 ナレッジに基づいてFAQ・手順を回答する
人間引継 いずれにも該当しない場合に人間オペレーターに引き継ぐ

オペレーションは拡張可能であることを想定しています。

処理フロー概要

発話テキスト
  → Entity照合(グラフ・ルールベース)
  → 意図解釈LLM(Intent確定)
  → Operation起動
  → Condition評価(ルールベース)
  → Procedure実行 or EscalationReason記録

ノード種別

ノード 役割
Entity 発話概念の正規化レイヤー
Intent ユーザーの意図カテゴリ
Operation 実行単位(拡張ポイント)
Condition 分岐条件の評価器
Procedure 実際の処理ステップ
EscalationReason 人間引継理由の記録

6種のノードは「発話の受け取り → 意図の確定 → 処理の実行 → 結果の記録」という一本の変換パイプラインになっています。

生の発話に含まれる概念をEntityで正規化し、IntentでAIが「何をしたいのか」を抽象化、Operationで「何をするか」を決定、Conditionで「実行できるか」を判定、できればProcedureで処理、できなければEscalationReasonに理由を記録して人間に引き継ぐ。

各ノードが「変換の責務」を一つだけ持つ設計です。

エッジ種別

今回作成したエッジはノードパイプラインの「継ぎ目」を述語で定義し、ほぼ1対1で対応させた単純なものになっています。

エッジ 主語 → 目的語 意味
triggers Entity → Intent 発話概念がIntentを候補として活性化する
routes_to Intent → Operation 確定したIntentがOperationを起動する
requires Operation → Condition OperationがConditionの評価を要求する
proceeds_when Condition → Procedure Condition成立時にProcedureに進む
escalates_when Condition → EscalationReason Condition不成立時に引継理由を記録する
follows Procedure → Procedure 手順の実行順序を示す
answered_by Intent → Procedure 問い合わせIntentの回答入口を示す

ノード・エッジの定義やプロパティの詳細、オントロジー制約については別途GitHubリポジトリにまとめています。実際に構築してみたい方はあわせて参照してください。

構成したナレッジグラフ

実際に構築したナレッジグラフを可視化したものです。HTMLファイルとして公開しているので、詳しく確認したい方はこちらからローカルでダウンロードしてみてください。

image.png

アーキテクチャ図

本構成はモック用途を想定し、AWSの標準サービスで完結するようシンプルにまとめています。Claudeに指示して作成していますが、AWSアカウントとFAQデータさえあれば、再現できるはずです。
(構成図を貼り付けてこのとおりに実装して、でもよいかもですw)

image.png

結果

チャットの簡易インターフェースを用意して実際に動かしてみました。グラフ構造で関係性を持たせた効果が出ているのか、単純なQ&Aにとどまらない、わりと人間らしいやりとりができています。

https___qiita-image-store.s3.ap-northeast-1.amazonaws.com_0_3566513_94cbb20f-310a-43d7-9c6d-811455ce479a.avif
image.png
image.png

まとめ

今回のグラフ構成はシンプルなものにとどめています。従来のRAGでもそれなりの精度が出るようになった今、GraphRAGの真価はグラフ設計の深さと評価の体系化にあると感じています。ノードとエッジの設計を磨き、回答品質を測る仕組みを整えることで、はじめて他のエージェントとの差が出てきます。

この記事をきっかけに、グラフエージェントの構築に興味を持つ人が増えたらうれしいです。業務課題でも社会課題でも、問題の構造をグラフで捉えて解くエージェントを一緒に作っていく、そんな輪が広がることを期待しています。

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?