4
3

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エージェント】簡単な情報収集エージェントを構築・監視してみた

Last updated at Posted at 2025-02-15

はじめに

前回記事でOllamaを使ってローカルLLMを呼び出すことまで実施しました。

今回はローカルLLMを用いて、エージェントを構築し、構築したエージェントを監視するところまで実施したので、自身のやったことを整理するために本記事を書きました。

LangGraphとは

LangChainをベースにしたライブラリで、LLMのワークフローを構築するために使われます。
特に、グラフ構造を活用して、複雑な対話フローやデータフローを柔軟に設計できることが特徴です。

以下の画像のようなイメージです。
https://blog.langchain.dev/langgraph-multi-agent-workflows/ より引用)

langgraph_multi_agent_diagram.png

構築したエージェント

下図が今回構築したものをグラフ化したものになります。
(Langfuseにより出力・Langfuseについては後述)

rearch_agent_graph.png

簡単に流れを説明すると、以下の3ステップからなります。

  1. collect_basic:基本情報の収集・要約
  2. collect_trends:最新のトレンドの収集・分析・要約
  3. summarize:上記2つの情報の要約

長くなってしまうので、ここではエージェントの詳細な実装については省略します。

Langfuseとは

一言でいうと、LLMアプリのためのOSS監視ツールです。

公式ドキュメント(Why Langfuse?)では以下のように紹介されていました。

  • 最も利用されているオープンソースのLLMOpsプラットフォーム
  • モデルやフレームワークにとらわれない
  • 本番環境向けの構築
  • 徐々に導入可能、1つの機能から始めて、時間をかけてプラットフォーム全体に拡張
  • APIファースト、カスタム統合のためにAPI経由ですべての機能が利用可能
  • オプションで、Langfuseは簡単にセルフホスト可能

監視してみる

Langfuseの準備

いくつかの方法があるそうですが、一番簡単そうなローカルで準備したいと思います。
以下ページを参考に準備します。

リポジトリのクローンと移動
git clone https://github.com/langfuse/langfuse.git
cd langfuse
Langfuseの立ち上げ
docker compose up

これで、http://localhost:3000へアクセスすると利用することができます。
また、settings/api-keysからAPIキーを取得することができます。

コードの修正

以下ページを参考に、作成したコードを修正しました。

  • コンストラクタへの追加内容(APIキーは .env にて管理)
from langfuse.callback import CallbackHandler

self.langfuse_handler = CallbackHandler(
    secret_key=os.environ.get("LANGFUSE_SECRET_KEY"),
    public_key=os.environ.get("LANGFUSE_PUBLIC_KEY"),
    host=os.environ.get("LANGFUSE_HOST"),
)
  • ワークフロー構築の際に変更する内容
# 変更前
workflow.compile()

# 変更後
workflow.compile().with_config({"callbacks": [self.langfuse_handler]})

監視できているか確認

コードの修正後、再度エージェントを使ってみると、以下のようにtracesが生成されており、構造的にそれぞれの要素の入出力や、所要時間などを確認することができました。
(また、ベータ機能として前述のようにエージェントのグラフを表示することもできていました)

image.png

image.png

image.png

おわりに

思った以上に簡単にLangfuseを構築できたので驚きました。(実質CallbackHandlerの設定と、.with_config({"callbacks": [self.langfuse_handler]})を追加しただけ)
これでデータの流れなどが分かりやすくなったので、プロンプトの調整や受け渡すデータの形式の見直しなどの作業がはかどるように思います。
また、評価がまだあまりできていないのでそちら方面(RAGASなど)の深堀りもしていきたいと思います。
ありがとうございました。

参考サイト

4
3
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
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?