LangGraphのグラフビジュアライゼーションを試す

# 導入

[LangGraph](https://python.langchain.com/docs/langgraph)の機能が種々アップデートされており、少し時間が経ってましたがグラフのビジュアライゼーション機能を試してみます。


せっかくなので、以前以下の記事で作成したRAG処理のグラフを可視化します。

https://qiita.com/isanakamishiro2/items/33c1a54a62ff9d6edcde

試用は上記記事同様、Databricksで実施しました。
上の処理の続きとしての処理記述になります。

# Step10. パッケージ・モジュールの追加インストール

LangGraphのビジュアライゼーション機能は[Graphviz](https://graphviz.org/)を使うようなので、```apt-get```でLinux(Ubuntu)上でgraphiz関連のパッケージをインストールします。

```sh
%sh sudo apt-get install graphviz libgraphviz-dev pkg-config --yes
```

その上でpython用のパッケージをインストール。

```python
%pip install grandalf pygraphviz
```

準備はこれで終了です。

# Step11. ASCIIでグラフを表示

[こちらの記事内](https://qiita.com/isanakamishiro2/items/33c1a54a62ff9d6edcde)で作成したLangGraphのグラフインスタンス(```app```変数に格納済み)を利用し、まずはグラフを文字で表示してみます。

```python
app.get_graph().print_ascii()
```

```:出力
                                      +-----------+                          
                                      | __start__ |                          
                                      +-----------+                          
                                            *                                
                                            *                                
                                            *                                
                                        +-------+                            
                                        | agent |**                          
                                       *+-------+  ******                    
                                     **                  ******              
                                   **                          *****         
                                 **                                 ******   
                  +-----------------------+                               ***
                  | agent_should_retrieve |                                 *
                  +-----------------------+                                 *
                       **               ***                                 *
                     **                    ***                              *
                   **                         ****                          *
          +----------+                            **                        *
          | retrieve |                             *                        *
          +----------+                             *                        *
                *                                  *                        *
                *                                  *                        *
                *                                  *                        *
  +--------------------------+                     *                    *****
  | retrieve_grade_documents |                     *           *********     
  +--------------------------+                     *   ********              
           **        **                       *********                      
         **            **            *********     *                         
        *                *      *****              *                         
+----------+         +---------+                  **                         
| generate |*        | rewrite |              ****                           
+----------+ ****    +---------+           ***                               
                 ****                   ***                                  
                     ****           ****                                     
                         ***      **                                         
                         +---------+                                         
                         | __end__ |                                         
                         +---------+                                         
```

 見やすいかどうかはいろんな意見があると思いますが、ノード間の繋がりが可視化されました。

 # Step12. 画像でグラフを表示

実際には画像でビジュアライゼーションすることが多いと思います。やってみましょう。

```python
from IPython.display import Image

Image(app.get_graph().draw_png())
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/168727/b0a8be59-41df-d368-01b2-0db5165c7f05.png)

エッジの分岐など、よりわかりやすく可視化されました。
条件分岐用のエッジ部分など、もう少しわかりやすく改善されるとなお良さそうですね。

# まとめ

LangGraphについては、サンプルの拡充なども含めて拡張が進んできていますね。
LLMを使ったアプリ構築においては、シンプルながら重要なパッケージになってきているように思います。