LLM呼び出し中にDB接続を保持すべきでない理由
AIのレイテンシは、モデルが「考えている」時間だけではありません。データベース接続の管理方法も含まれます。
LLMや埋め込みAPIのレスポンスを待っている間にDB接続を保持し続けると、コネクションプールを使い果たしてしまう可能性があります。外部呼び出しが遅いと、セッションが必要以上に長く開いたままになってしまいます。
Honchoのリポジトリを調べて彼らの修正方法を確認したところ、単一の長時間生存するセッションを、タスクごとに短時間で完結するセッションに切り替えていました。
旧パターン
- DBセッションを開く
- ユーザー設定を読み込む
- LLMを呼び出す(低速)
- 埋め込みAPIを呼び出す(低速)
- 結果を保存する
- DBセッションを閉じる
新パターン
- 事前チェックのためにDBセッションを開く
- 必要な値を変数に読み込む
- DBセッションを閉じる
- LLMおよび埋め込みAPIを呼び出す(DB接続は保持しない)
- 結果を保存するために、新しい短時間のDBセッションを開く
- DBセッションを閉じる
目的はデータベースを放棄することではなく、トランザクションの一貫性とネットワークの待機時間を切り離すことにあります。
コネクションを管理するための5つのステップ
- 一貫性の境界を定義する。
- 外部APIを呼び出す前に、必要なすべての値を変数に取得する。
- データベースのスコープを閉じる。
- 低速な外部タスクを実行する。
- 最終的な結果を永続化するために、新しい短時間の書き込みスコープを開く。
注: 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
