Dlaczego nie należy utrzymywać połączeń z bazą danych podczas wywołań LLM
Opóźnienia AI to nie tylko czas, który model poświęca na „myślenie”. To także sposób, w jaki zarządzasz połączeniami z bazą danych.
Utrzymywanie połączenia z bazą danych podczas oczekiwania na LLM lub API embeddingów może wyczerpać pulę połączeń. Powolne wywołania zewnętrzne sprawiają, że sesje pozostają otwarte znacznie dłużej, niż jest to konieczne.
Przejrzałem repozytorium Honcho, aby zobaczyć ich rozwiązanie. Zamienili jedną, długożyjącą sesję na krótkie sesje dedykowane konkretnym zadaniom.
Stary wzorzec
- Otwarcie sesji DB
- Odczytanie ustawień użytkownika
- Wywołanie LLM (wolne)
- Wywołanie API embeddingów (wolne)
- Zapisanie wyników
- Zamknięcie sesji DB
Nowy wzorzec
- Otwarcie sesji DB w celu wykonania wstępnych kontroli
- Odczytanie potrzebnych wartości do zmiennych
- Zamknięcie sesji DB
- Wywołanie LLM i API embeddingów (bez utrzymywania połączenia z DB)
- Otwarcie nowej, krótkiej sesji DB w celu zapisania wyników
- Zamknięcie sesji DB
Celem nie jest porzucenie bazy danych, lecz oddzielenie spójności transakcji od oczekiwania na sieć.
Pięć kroków do zarządzania połączeniami
- Zdefiniuj granice spójności.
- Pobierz wszystkie wymagane wartości do zmiennych przed jakimkolwiek wywołaniem zewnętrznego API.
- Zamknij zakres bazy danych.
- Wykonaj powolne zadania zewnętrzne.
- Otwórz nowy, krótki zakres zapisu, aby utrwalić końcowe wyniki.
Uwaga: Jeśli używasz pgvector, wyszukiwanie odbywa się wewnątrz bazy danych, więc musisz utrzymać sesję otwartą podczas tej operacji.
Skrócenie czasu życia sesji poprawia skalowalność, ale należy uważać na błędy typu detached-object w ORM i upewnić się, że dane pozostają spójne w ramach migawek transakcji (transaction snapshots).
Źródło: https://dev.to/junhyun-dev/neurin-llm-hocul-jung-db-connectioneul-jabji-anhneun-iyu-3abg
Opcjonalna społeczność edukacyjna: https://t.me/GyaanSetuAi
