導入
LangGraphの機能が種々アップデートされており、少し時間が経ってましたがグラフのビジュアライゼーション機能を試してみます。
せっかくなので、以前以下の記事で作成したRAG処理のグラフを可視化します。
試用は上記記事同様、Databricksで実施しました。
上の処理の続きとしての処理記述になります。
Step10. パッケージ・モジュールの追加インストール
LangGraphのビジュアライゼーション機能はGraphvizを使うようなので、apt-get
でLinux(Ubuntu)上でgraphiz関連のパッケージをインストールします。
%sh sudo apt-get install graphviz libgraphviz-dev pkg-config --yes
その上でpython用のパッケージをインストール。
%pip install grandalf pygraphviz
準備はこれで終了です。
Step11. ASCIIでグラフを表示
こちらの記事内で作成したLangGraphのグラフインスタンス(app
変数に格納済み)を利用し、まずはグラフを文字で表示してみます。
app.get_graph().print_ascii()
出力
+-----------+
| __start__ |
+-----------+
*
*
*
+-------+
| agent |**
*+-------+ ******
** ******
** *****
** ******
+-----------------------+ ***
| agent_should_retrieve | *
+-----------------------+ *
** *** *
** *** *
** **** *
+----------+ ** *
| retrieve | * *
+----------+ * *
* * *
* * *
* * *
+--------------------------+ * *****
| retrieve_grade_documents | * *********
+--------------------------+ * ********
** ** *********
** ** ********* *
* * ***** *
+----------+ +---------+ **
| generate |* | rewrite | ****
+----------+ **** +---------+ ***
**** ***
**** ****
*** **
+---------+
| __end__ |
+---------+
見やすいかどうかはいろんな意見があると思いますが、ノード間の繋がりが可視化されました。
Step12. 画像でグラフを表示
実際には画像でビジュアライゼーションすることが多いと思います。やってみましょう。
from IPython.display import Image
Image(app.get_graph().draw_png())
エッジの分岐など、よりわかりやすく可視化されました。
条件分岐用のエッジ部分など、もう少しわかりやすく改善されるとなお良さそうですね。
まとめ
LangGraphについては、サンプルの拡充なども含めて拡張が進んできていますね。
LLMを使ったアプリ構築においては、シンプルながら重要なパッケージになってきているように思います。