個人的チャットアプリで大変な部分ランキング!!!
- スレッド管理
- LLMコンテキスト管理
- 長期記憶の実装
スレッドを作るのは割と大変
チャットアプリで当たり前のように使われる単位、スレッド。
正直大変じゃないですか?
- DBからどれだけ読み出すのか
- LLMにどの様に渡すか
- 忘れられると困る情報は何か
この非機能要件ともいえる会話の継続性について、最適なバランスを見つけることは大変です。
それをマネージしてくれるサービスとして、OpenAIのAssistant APIが有力でしたが、Googleが開発したAgent Development Kitではセルフマネージも可能だったので調べてみました。
ADK(Agent Development Kit)のスレッド管理
呼称はセッションですが、実質的にコンテキストを包括的に管理し終了すると破棄されるスレッドのようなものです。
セッションはInMemorySessionService
、DatabaseSessionService
、VertexAiSessionService
から選ぶことができ、GCPでデプロイするならVertexAiSessionService
を使うことで費用を抑えることができそうです。
Google Agent Engineにデプロイされ、計算時間に応じた従量課金となります。
しかし、DatabaseSessionService
でセルフマネージすることも可能です。
DB接続情報を与えるだけでスレッド管理ができるようになってしまうのですね。素晴らしいです。
postgreSQLでやってみた
pgadminでER図を出してみました。
Runner(
app_name="test",
agent=agent,
artifact_service=InMemoryArtifactService(),
session_service=DatabaseSessionService(
db_url="postgresql://postgres:postgres@db:5432/postgres",
),
memory_service=VertexAiRagMemoryService(),
)
良い感じですね。ブラックボックス感がないことはいいことです。