Personal AI Agent、LLMが私を理解するなら?
(delosplatform.com)TL;DR
パーソナライズされたLLMチャットエージェント。動的にユーザー情報を収集し、以後パーソナライズされた回答を提供します。
Q) 私はジャガイモが好き
A) なるほど
Q) 私が好きなのは何?
A) あなたはジャガイモが好きだよ〜
デモリンク: https://delosplatform.com
GitHub: https://github.com/sungminna/mcp_poc
ps) delos-lucia は velt サービスの機能をパッケージ化して改良したバージョンです。delos-lucia は短い response time、LLM ストリーミング、改善された非同期ロジックをサポートします。
会員登録(ログイン)後、すぐに利用できます。たくさんの関心とフィードバックをお願いします...
Lucia & Velt: パーソナライズされたLLMチャットAgent
最近では、LLMを活用してユーザーとの相互作用から得た情報を構造化し、それを再びLLMの回答に活用してパーソナライズされた体験を提供しようとする試みが増えています。Lucia と Velt は、この目標を達成するためのオープンソースプロジェクトです。Lucia はパーソナライズされたLLMを実装するために中核となるAI機能をモジュール化した Python ライブラリであり、Velt は Lucia の概念を活用して構築されたパーソナライズド RAG チャットシステムです。
Lucia: パーソナライズドLLMモジュール
delos-lucia は、もともと Velt サービスのために開発されていた中核AI機能を再構成してパッケージ化した Python ライブラリです。モジュール式に構成されており、必要な機能を選択的に利用したりカスタマイズしたりしやすくなっています。
主な機能:
- 個人情報およびキーワード抽出: LLM(OpenAI モデルなど)を使って、テキストからユーザーの嗜好、状態などの個人情報と主要キーワードを識別・抽出します。
- 埋め込み生成: OpenAI の埋め込みモデルを使ってテキストのベクトル表現(埋め込み)を生成します。生成された埋め込みは Redis を通じてキャッシュし、繰り返しの API 呼び出しコストを削減できます。
- データ保存: 抽出された構造化情報(個人情報、関係など)はグラフデータベース(Neo4j or Clickhouse)に保存し、生成されたベクトル埋め込みはベクトルストア(Milvus)に保存して効率的な検索を支援します。
- パイプライン提供:
KnowledgePipeline(情報抽出、埋め込み生成、保存までのワークフロー)やSearchPipeline(キーワードベースの情報検索およびコンテキスト拡張ワークフロー)など、一般的な作業のための構築済みパイプラインを提供し、開発の利便性を高めます。 - カスタマイズ: 情報/キーワード抽出器(Extractor)、埋め込みクライアント(EmbeddingClient)、情報ストア(InfoStore)、ベクトルストア(VectorStore)などを、ユーザーが直接実装したコンポーネントに置き換えられるプラグイン型アーキテクチャを提供します。
Lucia は、パーソナライズされたAIアプリケーション構築に必要な中核バックエンドロジック(情報抽出、ベクトル化、保存、検索)を抽象化して提供することで、開発者がアプリケーションロジックにより集中できるよう支援します。(ライセンス: Apache-2.0)
GitHub Repository: https://github.com/sungminna/mcp_poc/tree/main/lucia
Velt: Lucia コンポーネント/概念を活用したパーソナライズドRAGチャットボット PoC
Velt は Lucia ライブラリが提供する概念を活用して構築された FastAPI ベースのバックエンドアプリケーションです。ReAct エージェント(LangGraph)、Neo4j ナレッジグラフ、Milvus ベクトルストア、PostgreSQL、Redis を統合し、ユーザーにパーソナライズされた RAG(Retrieval-Augmented Generation)チャットボット体験を提供することを目指しています。ユーザーとの対話を通じてパーソナライズされた情報を動的にナレッジグラフへ構築し、これを活用してより関連性の高い回答を生成します。
中核となる動作方式:
- ナレッジグラフの構築:
- ユーザーとの会話("私はハンバーガーが好き")から、LLM を用いて関係(
(ユーザー) --好き--> (ハンバーガー))を抽出します。 - 抽出された情報は Neo4j グラフDBにノードとエッジとして保存されます。このとき、
(ハンバーガー) --含む--> (食べ物)のように上位概念との関係もあわせて保存し、柔軟な推論や検索を可能にします。("私はどんな食べ物が好き?")、(lucia ではもう少し効率的な方式を使います)
- ユーザーとの会話("私はハンバーガーが好き")から、LLM を用いて関係(
- RAGベースの回答生成:
- ユーザーの質問("私は美術が好き?")から、LLM でキーワード("美術", "好き")を抽出します。
- 抽出したキーワードを使って、Milvus で関連性の高い情報をベクトル検索で見つけます。
- 同時に Neo4j で、そのユーザーとキーワードに接続されたノードおよび関係(直接関係、1〜2ホップ関係、下位概念を含む)を探索します。
- Milvus と Neo4j で検索された情報をコンテキストとして組み合わせ、LangGraph ベースの ReAct エージェントのプロンプトを拡張(Augmented)します。(+ セッション会話履歴)
- エージェントは、この拡張されたコンテキストをもとに、ユーザーの質問に対するパーソナライズされた回答を生成します。
技術スタック:
- バックエンド: FastAPI, Uvicorn, Python 3.13+
- AI/LLM: LangChain, LangGraph, langchain-openai, OpenAI Embeddings
- データベース: Neo4j (Graph), Milvus (Vector), PostgreSQL (User/Chat Data), Redis (Cache)
- その他: SQLAlchemy (Async), JWT (Auth), slowapi (Rate Limiting), Poetry, Docker
- フロントエンド: SvelteKit(別途
velt/ディレクトリ)
主な結果と考慮事項:
- 可能性の確認: LLM とグラフ/ベクトルDBを組み合わせて動的にパーソナライズドナレッジグラフを構築し、これを活用した超パーソナライズドLLMサービスを実装できる可能性を確認しました。
- 性能: 現在、DBアクセス(クエリ)部分でボトルネックが観察されており、最適化が必要です。大規模リアルタイム環境での Neo4j の性能検証も必要です。(lucia で一部解決)
- 回答品質: 検索された情報(コンテキスト)をもとに LLM が回答しますが、常に最も関連性が高く(Relevant)、自然な回答を提供できているかについて追加の検証と改善が必要です。特に RAG 適用時には、コンテキストに過度に依存して不自然な回答になりがちな傾向の解消が必要です。
- プロンプトエンジニアリング: LLM が時折 Instruction に従わないことがあり、プロンプトの改善やモデル性能の課題を検討する必要があります。
- 拡張性: 現在ハードコードされた DB クエリを Text-to-Cypher/SQL などに置き換えることで柔軟性を高められます。ユーザー間の関係分析が不要であれば、RDB ベースで構築できる可能性も検討できます。(lucia では Clickhouse を使えるよう改善)
GitHub Repository: https://github.com/sungminna/mcp_poc
Demo Service: https://delosplatform.com
Directory: https://my.surfit.io/w/528136765
要約:
Lucia は、LLMベースの個人情報/キーワード抽出、埋め込み、グラフ/ベクトルDB保存のためのモジュール式 Python ライブラリです。Velt は Lucia の概念を活用し、ユーザーとの対話によって動的ナレッジグラフ(Neo4j)を構築し、ベクトル検索(Milvus)と RAG(LangGraph ReAct エージェント)を組み合わせてパーソナライズされたチャットボット応答を提供する FastAPI ベースの PoC です。両プロジェクトはパーソナライズドAI構築の可能性を示す一方で、性能最適化や回答の自然さの改善などの課題も抱えています。
4件のコメント
LLMなので常時安定して動作しているわけではありません(泣)……。気軽にたくさん使ってみてください。
もしかすると気になる方がいるかもしれないので、、、これまで発生した性能上の問題の原因を書いてみます。
ps) PoCウェブ版よりdelos-luciaのほうが性能が良いです。delos-luciaをシェルベースで実行してみると、もう少し良い結果が見られるはずです。
ps) いざサービスを自分で作ってみると、QAも難しいし、evalを導入するのも難しいですね。LLMの性能さえ良ければどうにか解決できそうですが、モデル以外の部分にも思った以上に多くの工数が必要だと感じました。
最近、似たようなプロジェクトを見かけましたが、興味深いですね。
一度試してみます。
website : https://www.secondme.io/
Github repo : https://github.com/mindverse/Second-Me
おお、興味深いプロジェクトですね!! ありがとうございます
自分自身よりも自分をよく知るAIになるかもしれない…?