Closed4

langfuse 調査...

Naoki KOBAYASHINaoki KOBAYASHI

https://langfuse.com/

https://github.com/langfuse/langfuse

langfuse を LLM ローカルアプリケーションのログ蓄積、分析環境として利用したい。
docker compose でさくっと立ち上げられるが、ECS, k8s 上に構築して大規模運用を念頭において...

https://zenn.dev/kun432/scraps/e91c0d22ae1d99

手元で試す環境は kun432 さんの上記記事見てやるとよい。いろんな視点で試されていてとても参考になる。。

Naoki KOBAYASHINaoki KOBAYASHI

client から大量に API が叩かれたとき、web タスク(ECSでいうタスク) がスケールすれば良い構造なのか?

https://github.com/langfuse/langfuse/blob/main/CONTRIBUTING.md#architecture-overview

アーキテクチャ図があるね。

ん? client から API 叩いたら Prisma 経由で PostgreSQL に格納するケースと、 woker に渡すケースがあるの? 書き込み系は Worker 経由か?おぉぉぉぉ

API 使用には Trace の POST は無いんだけど
https://api.reference.langfuse.com/#get-/api/public/traces/-traceId-

ソース上は POST がある
https://github.com/langfuse/langfuse/blob/43d8c4ec99cb62d2f3df7c28b3878ea95ca087e0/web/src/pages/api/public/traces.ts#L57

ingestion.ts: handleBatch
  ingestion.ts: handleSingleEvent
    event-service.ts: persistEventMiddleware

INSERT INTO events (id, project_id, url, method, data, headers) として PostgreSQL に INSERT してる。このあと
EventProcessor.ts: TraceProcessor が実行されて DB を upsert で更新してる。
https://github.com/langfuse/langfuse/blob/43d8c4ec99cb62d2f3df7c28b3878ea95ca087e0/web/src/server/api/services/EventProcessor.ts#L407

ここまで同期実行に見えるな。INSERT + UPSERT 実行してて API 実行時の負荷ありそうね。
API 同時実行数を上げると、PostgreSQL がネックになりそう。

ちゃうちゃう、worker への動線はどの処理だ? POST Trace じゃない API なのか。もう少し見てみるか。

https://github.com/langfuse/langfuse/blob/main/CONTRIBUTING.md#architecture-overview

langfuse/langfuse/worker is under active development and not recommended for production use in Langfuse 2.x

あーなるほど。

Naoki KOBAYASHINaoki KOBAYASHI

AWS 構成...作るならこんな感じ?

Redis はコンテナ実行でいいんじゃないかなー、いや、ダメか。Redis 冗長化されると困るのかクラスタ組むのめんどいな。Elasticcache 使うか。ちゃうな https://github.com/langfuse/langfuse-k8s 見てると web/worker/redis が1タスクに収まっていれば良いので問題無さそう。

Naoki KOBAYASHINaoki KOBAYASHI

Redis

https://github.com/langfuse/langfuse/blob/43d8c4ec99cb62d2f3df7c28b3878ea95ca087e0/web/src/pages/api/public/ingestion.ts#L462
ここから Redis にデータを放り込んで、

https://github.com/langfuse/langfuse/blob/43d8c4ec99cb62d2f3df7c28b3878ea95ca087e0/worker/src/redis/consumer.ts
Redis consumer がデータ処理してる

https://github.com/langfuse/langfuse/blob/43d8c4ec99cb62d2f3df7c28b3878ea95ca087e0/worker/src/eval-service.ts#L36
うーん、何してる?わからん、詳細は気が向いたら見よう

WEBAPI の Post 書き込みには Redis は使ってなさそう。まぁ、 Post に対して 202 を返してキューをあとで処理する...みたいな実装にするってのは API 実装としてはダメなのかな。

このスクラップは2024/06/03にクローズされました