LangGraph で書いたエージェントが今どのノードを処理していて、
ローカルLLMと何をやり取りしていて、どのSQLを投げたかを、動いている最中に表示します。
サーバーは1ファイル。python viewer/server.py で立ち、ブラウザで開くだけです。
エージェントを走らせても、ふつうは最後の回答しか出てきません。 途中で経路をどう選んだのか、資料が引けたのか、SQLが通ったのかは表に出ません。 このビューアは、その途中を全部出します。
logs/ にも JSON Lines で残します。
reject が受けて赤く点灯し、0.57秒で終了しています。
各ノードには割り当てたモデル名と容量も出ます。
/live?i=3 に切り替わりますhttp.server の ThreadingHTTPServer だけ。
JS のライブラリも読み込みません(グラフは CSS で描画)ビューアが映しているのは、同梱の LangGraph エージェントです。
plan が経路を決め、retrieve(資料のハイブリッド検索)と
query(読み取り専用SQL)を使い、critique が自己採点して足りなければ再検索、
report が出典つきで答えます。
.npz 1本です。出典はファイル名と節番号で返します。


読み取り専用の照会エージェントなので、データを書き換える要求と
個人情報を出せという要求は通しません。3層で止めています。
入力の遮断 → 行動の分類による許可制 → 出力の検査。
質問を count describe lookup mutate export_pii
に分類し、前の3つだけ通します。ビューアはこの分類結果と理由も画面に出します。
reject が点灯し、SQLは1文も組み立てません。SELECT * も止めます。
個人を特定しうる列がまとめて出るためで、SQLガードで弾いています。
mutate と判定されます。
必要なのは Python 3.12 以上と Ollama だけです。 サンプルデータはリポジトリの中のスクリプトが生成するので、用意するものはありません。
ollama pull qwen2.5:7b && ollama pull nomic-embed-text
git clone https://github.com/tobisako/LangChainViewer.git
cd LangChainViewer
python3 -m venv .venv-langgraph
.venv-langgraph/bin/pip install -r requirements-langgraph.txt
python3 tools/make_sample_data.py # サンプルデータを生成
.venv-langgraph/bin/python tools/build_index.py # 資料の索引を作る
.venv-langgraph/bin/python viewer/server.py # 起動
| URL | 何が見えるか |
|---|---|
| /live | 実況。シナリオ10本が自動で順に走ります |
| /live?i=3 | シナリオを1本だけ繰り返します |
| / | 質問を1つ入れて、経路・SQL・出典・回答をまとめて見ます |

/ の結果ビュー。任意の質問を1つ投げて確認できます。shared/ を共通にしてあるので、
3つの実装を同じ条件で走らせて比べられます。run_bench.py で結果がCSVに出ます。
ノードごとに割り当てるモデルも、環境変数1つで single / small /
large / uncensored に切り替わります。
3実装を同じ条件で走らせた値、モデル構成を4通りに変えた値、 採点器の誤判定を見つけて測り直した経緯をまとめています。 サンプルデータは種を固定して生成するので、同じ数値を手元で再現できます。
測定結果のページへ →