6 ポイント 投稿者 sungmin330 2025-05-08 | 4件のコメント | WhatsAppで共有

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)チャットボット体験を提供することを目指しています。ユーザーとの対話を通じてパーソナライズされた情報を動的にナレッジグラフへ構築し、これを活用してより関連性の高い回答を生成します。

中核となる動作方式:

  1. ナレッジグラフの構築:
    • ユーザーとの会話("私はハンバーガーが好き")から、LLM を用いて関係((ユーザー) --好き--> (ハンバーガー))を抽出します。
    • 抽出された情報は Neo4j グラフDBにノードとエッジとして保存されます。このとき、(ハンバーガー) --含む--> (食べ物) のように上位概念との関係もあわせて保存し、柔軟な推論や検索を可能にします。("私はどんな食べ物が好き?")、(lucia ではもう少し効率的な方式を使います)
  2. 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件のコメント

 
sungmin330 2025-05-11

LLMなので常時安定して動作しているわけではありません(泣)……。気軽にたくさん使ってみてください。
もしかすると気になる方がいるかもしれないので、、、これまで発生した性能上の問題の原因を書いてみます。

  • 英語でkwを抽出するようにプロンプトを書いていましたが、たまに日本語で抽出してしまい、検索に制限が発生
  • 適切なキーワードを抽出できない場合がある
  • kwを埋め込みした後に類似度を測定して意味論的検索を行っていますが、性能がはっきりしない

ps) PoCウェブ版よりdelos-luciaのほうが性能が良いです。delos-luciaをシェルベースで実行してみると、もう少し良い結果が見られるはずです。

ps) いざサービスを自分で作ってみると、QAも難しいし、evalを導入するのも難しいですね。LLMの性能さえ良ければどうにか解決できそうですが、モデル以外の部分にも思った以上に多くの工数が必要だと感じました。

 
1206good 2025-05-08

最近、似たようなプロジェクトを見かけましたが、興味深いですね。
一度試してみます。

website : https://www.secondme.io/
Github repo : https://github.com/mindverse/Second-Me

 
sungmin330 2025-05-11

おお、興味深いプロジェクトですね!! ありがとうございます

 
rlaehdus2003 2025-05-08

自分自身よりも自分をよく知るAIになるかもしれない…?