5
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?

個人的ベスト LLMのObservabilityツール

5
Posted at

はじめに

LLMのObservabilityツールでよく聞くものとしてLangSmith、Langfuse、MLflowなどがあります。

しかしこれらはSelf-hostが環境によっては面倒です。(私はメモリかつかつなのでDockerはできるだけ使いたくない状況です。。。)

また、業務で使用する際などは外部に保存はしたくありませんし、ほんとにちょっとだけ確認したいことがある際にいちいちDocker立てるのも面倒でした。

何かないかなぁと思い探しているとAlizeのphoenixというObservabilityツールがあり、非常に使いやすく私の状況にピッタリだったので備忘録としてまとめました。

また、本記事はご紹介としてさらっとだけ記述します。
より詳しい内容は別の方がまとめていらっしゃったのでそちらをご覧ください!(人任せ...)

試してみる

今回使用したのはphoenixのNotebook-selfHostです。

Notebook内でコードを実行すると、localhostにダッシュボードが作成されます。

Runtimeを削除すると当然記録は消えますが簡単にLLMの動きをトレースしたい際などとても便利です。
(私は試したことありませんが、記録を残しておきたい場合はDockerコンテナとして立ち上げ、別途DBなどに保存すればいいそうです。)

インストール

pip で簡単にインストールできます。

pip install -qU arize-phoenix

ダッシュボードの立ち上げ

下記コードでダッシュボードを立ち上げます。

ほんの数行で立ち上げることができるので非常に簡単です。

import phoenix as px
px.launch_app()

デフォルトではlocalhost:6006に立ち上がります。

image.png

トレースの設定をする

ダッシュボードが立ち上がったのでLLMの出力をトレースする準備をしていきます。

トレースの方法はいくつかあるのですが、まずは最も簡単なregisterを使用していきます。

registerを使用するとphoenixが対応している一部のサードパーティーライブラリ(OpenAI、langchain、llamaindexなど)を自動的にトレースしてくれます。

後ほど実際にトレースをしますが、registerを使用すると非常に簡単にトレースをしてくれます。

下記コードでregisterを登録します。

from phoenix.otel import register

tracer_provider = register(
  project_name="test", # Default is 'default'
  auto_instrument=True # Auto-instrument your app based on installed OI dependencies
)

langchainをトレースしてみる

registerを作成したので実際にトレースしてみます。

この部分も非常に簡単です。というかほぼ何もしません。
まずはopeninference-instrumentation-langchainをインストールして、先ほど作成したregisterと紐づけます。

!pip install -qU openinference-instrumentation-langchain


from openinference.instrumentation.langchain import LangChainInstrumentor

LangChainInstrumentor().instrument(tracer_provider=tracer_provider)

あとは、同じRuntime上でいつもどおりlangchainにinvokeするだけです!

試しに下記コードを実行してみます。(APIキーはご自身でご用意ください。)

!pip install -qU langchain-openai


from langchain_openai import ChatOpenAI

llm = ChatOpenAI(model="gpt-4o-mini")
llm.invoke("こんにちは")

すると先ほどのダッシュボード上にtestというプロジェクトが追加され、更にlangchainの出力がトレースされているのが確認できるはずです!

image.png

中身はこんな感じ

image.png

image.png

Latencyや使用したToken料などをトレースできます!
今回はシンプルにChatModelにinvoke()しただけなのであっさりしていますが、langgraphなどで複雑なワークフローを組んでいるときなどは各ノードで何が行われたのかなどを細かく確認することができます。

そして何より簡単です!

もし既存のアプリがlangchainなどで書かれてあり、一時的にテストとしてトレースしたいときなどはコードの上部に数行付け足すだけでトレースが出来てしまいます!

より柔軟なトレース(補足)

openinferenceTracerProviderを使用することにより、トレースをより細かく(スパン単位で)制御可能です。

例えば先ほど使用したregisterが対応していない独自の関数などを使用した際などに有効です。

こちらの手法を私はあまり使ったことが無いため触りの部分だけまとめます。

まずは下記コード例でtracerを作成します。

from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk.resources import Resource
from opentelemetry.sdk.trace.export import ConsoleSpanExporter, SimpleSpanProcessor

from openinference.instrumentation import TracerProvider
from openinference.semconv.resource import ResourceAttributes

endpoint = "http://localhost:6006/v1/traces"
resource = Resource(attributes={ResourceAttributes.PROJECT_NAME: "tracer-test"})
tracer_provider = TracerProvider(resource=resource)
tracer_provider.add_span_processor(SimpleSpanProcessor(OTLPSpanExporter(endpoint)))
tracer = tracer_provider.get_tracer(__name__)

このtracerを使用してトレースを行っていきますが、主にデコレーターwith句の2つの使い方があります。

デコレーターの場合の基本的使い方はこちら

@tracer.chain
def my_func(input: str) -> str:
    return "output"

# トレース結果見たいのでとりあえず実行
my_func("あいうえお")

with句の場合の基本的使い方はこちら

from opentelemetry.trace import Status, StatusCode

with tracer.start_as_current_span(
    "my-span-name",
    openinference_span_kind="chain",
) as span:
    span.set_input("input")
    span.set_output("output")
    span.set_status(Status(StatusCode.OK))

結果はこんな感じです。

image.png

ちなみにスパンとはこのレコード1行ずつのことを指していると私は理解しています。

またスパンの種類にもいくつかあり、今回はchainのみを使用していますがほかにもllmagenttoolなどがあります。

まとめ

Arize phoenix について簡単にまとめました!

phoenixは非常に簡単に使い始めることのできるObservabilityツールとして今後も使っていこうかと思います。

また、今回はトレースのみ行いましたが他にもRAGなどの評価を行うことができる様なので勉強したいと思います!

5
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
5
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?