LLM呼び出し中にDB接続を保持すべきでない理由

AIのレイテンシは、モデルが「考えている」時間だけではありません。データベース接続の管理方法も含まれます。

LLMや埋め込みAPIのレスポンスを待っている間にDB接続を保持し続けると、コネクションプールを使い果たしてしまう可能性があります。外部呼び出しが遅いと、セッションが必要以上に長く開いたままになってしまいます。

Honchoのリポジトリを調べて彼らの修正方法を確認したところ、単一の長時間生存するセッションを、タスクごとに短時間で完結するセッションに切り替えていました。

旧パターン

  • DBセッションを開く
  • ユーザー設定を読み込む
  • LLMを呼び出す(低速)
  • 埋め込みAPIを呼び出す(低速)
  • 結果を保存する
  • DBセッションを閉じる

新パターン

  • 事前チェックのためにDBセッションを開く
  • 必要な値を変数に読み込む
  • DBセッションを閉じる
  • LLMおよび埋め込みAPIを呼び出す(DB接続は保持しない)
  • 結果を保存するために、新しい短時間のDBセッションを開く
  • DBセッションを閉じる

目的はデータベースを放棄することではなく、トランザクションの一貫性とネットワークの待機時間を切り離すことにあります。

コネクションを管理するための5つのステップ

  1. 一貫性の境界を定義する。
  2. 外部APIを呼び出す前に、必要なすべての値を変数に取得する。
  3. データベースのスコープを閉じる。
  4. 低速な外部タスクを実行する。
  5. 最終的な結果を永続化するために、新しい短時間の書き込みスコープを開く。

注: pgvectorを使用している場合、検索はデータベース内で実行されるため、その操作中はセッションを開いたままにしておく必要があります。

セッションの寿命を短縮することでスケーラビリティは向上しますが、ORMでのdetached-objectエラーに注意し、トランザクションのスナップショット間でデータの一貫性が保たれていることを確認してください。

Source: https://dev.to/junhyun-dev/neurin-llm-hocul-jung-db-connectioneul-jabji-anhneun-iyu-3abg

Optional learning community: https://t.me/GyaanSetuAi