Session & User IDの設定
Session IDとUser IDを設定すると、LLM呼び出しをセッション・ユーザー単位でまとめて追跡できます。設定方法は2つあり、複数の方法が同時に適用されている場合は、優先順位に従って1つだけが反映されます。
コード(API)方式
リクエストハンドラーでset_session_id()、set_user_id()を呼び出すと、そのリクエストコンテキスト内で発生するすべてのLLM呼び出しにSession IDとUser IDが適用されます。
from whatap.llm import set_user_id, set_session_id
@app.post("/chat")
async def chat(req):
set_user_id(req.user.id) # 誰が
set_session_id(req.conversation_id) # どの会話
...
この2つの関数はアクティブなトランザクションコンテキストに値を記録します。したがって、リクエストハンドラー内または計測されたワークフロー内で呼び出す必要があり、トランザクション外(モジュールのロード時点、ワーカー起動前など)で呼び出しても何も動作しません。戻り値(bool)で適用されたかどうかを確認できます。
スコープの指定
リクエストハンドラー以外の場所(バックグラウンドジョブ、バッチ)で区間を明示するには、コンテキストマネージャーを使用します。ブロックを抜けると以前の値に復元されます。
from whatap.llm import session, user
with user(user_id):
with session(conversation_id):
client.chat.completions.create(...)
HTTPヘッダー方式
Session IDとUser IDがHTTPリクエストヘッダーで渡される場合は、whatap.confの設定だけでコードを修正せずに適用できます。
whatap.conf
llm_session_header=X-Conversation-Id
llm_user_header=X-User-Id
上記の例では、X-Conversation-Idヘッダーの値がSession IDとして、X-User-Idヘッダーの値がUser IDとして使用されます。
自動計測対応フレームワーク
次のフレームワークは、別途の設定なしでSession IDとUser IDが自動的に収集されます。
| フレームワーク | 収集方式 |
|---|---|
| hermes-agent | ゲートウェイインバウンド(GatewayRunner._handle_message)でイベント情報から自動収集します。User IDはメッセンジャープラットフォームのユーザー識別子(telegram、slack、whatsappなどのアダプターが設定する値)で、Session IDはhermesが会話履歴をまとめるセッションキーをそのまま使用します。 |