* はじめに [#k9b9111e]
「AIとのチャット履歴を別のAIでも参照できたら...」

「過去の会話の文脈を踏まえた応答がほしい...」

このような課題を解決する可能性を秘めているのが、Apache UnomiとModel Context Protocol(MCP)の組み合わせです。この記事では、Apache UnomiをAIチャット履歴の管理に活用する方法について、実践的に解説していきます。

* 目次 [#v8c6a689]
#contents

* 1. Apache Unomiとは [#heb2ba5e]
Apache Unomiは、顧客データプラットフォーム(CDP)として知られていますが、その特徴は:

- プロファイル管理:ユーザー情報の統合管理
- セッション管理:時系列でのユーザー行動追跡
- プライバシー管理:GDPRなどの規制に準拠
- APIベース:RESTful APIによる柔軟な連携

これらの機能は、AIチャットの履歴管理にも非常に適しています。

* 2. AIチャット履歴管理のユースケース [#d45eed04]
** 2.1 基本的な使い方 [#a3c5b333]
 // チャット履歴の保存
 profile.setProperty("lastChat", {
     timestamp: "2024-01-19T10:00:00",
     content: "こんにちは、気温が低いですね",
     context: ["天候", "挨拶"]
 });
 
 // 文脈を考慮した応答の取得
 const context = profile.getProperty("lastChat").context;
 if (context.includes("天候")) {
     // 天候に関する文脈を考慮した応答
 }

** 2.2 高度な活用例 [#ga3397a5]

複数AIでの履歴共有

長期的な文脈理解

ユーザー嗜好の学習


* 3. Model Context Protocol (MCP)との連携 [#p2e817c3]
ClaudeのMCPを使用することで、より高度な文脈管理が可能になります。
** 3.1 MCPサーバーの設定 [#od45053b]
 {
   "mcpServers": {
     "unomi-server": {
       "command": "npx",
       "args": ["@inoyu/mcp-unomi-server"],
       "env": {
         "UNOMI_BASE_URL": "http://your-unomi-server:8181",
         "UNOMI_USERNAME": "karaf",
         "UNOMI_PASSWORD": "karaf",
         "UNOMI_PROFILE_ID": "your-profile-id",
         "UNOMI_KEY": "your-key",
         "UNOMI_EMAIL": "your@email.com"
       }
     }
   }
 }
** 3.2 主要な機能 [#qe141366]

プロファイルの自動作成と管理

セッション単位での文脈保持

スコープによる文脈の分離

* 4. 実装例と応用パターン [#p8e8ae93]
** 4.1 マルチAI連携パターン [#i101e71e]
 // AI-A との会話をUnomiに保存
 await unomiClient.saveChat({
     aiType: "claude",
     content: message,
     context: currentContext
 });
 
 // AI-B で過去の文脈を参照
 const history = await unomiClient.getChatHistory({
     timeRange: "24h",
     aiTypes: ["claude", "gpt"]
 });
** 4.2 文脈強化パターン [#p0c00930]

キーワード抽出による文脈理解

センチメント分析との連携

トピックモデリングの適用

** 4.3 プライバシー考慮パターン [#m86a7357]

センシティブ情報の自動検出

データ保持期間の管理

アクセス制御の実装

** 5. 参考リンク集 [#u1a9bcd6]
公式ドキュメント

*** Apache Unomi Documentation [#q64376af]
https://unomi.apache.org/manual/latest/

*** dockerイメージ [#gbe2e6c1]
Apache UnomiのDockerイメージが公式に提供されています!これを使うと、セットアップがより簡単になります。

https://hub.docker.com/r/apache/unomi

*** Docker docker-compose.yml [#z44807ca]
Quick start with に記載がある

 version: '3.8'
 services:
     elasticsearch:
     image: docker.elastic.co/elasticsearch/elasticsearch:7.17.5
     environment:
         - discovery.type=single-node
     ports:
         - 9200:9200
     unomi:
     # Unomi version can be updated based on your needs
     image: apache/unomi:2.0.0
     environment:
         - UNOMI_ELASTICSEARCH_ADDRESSES=elasticsearch:9200
         - UNOMI_THIRDPARTY_PROVIDER1_IPADDRESSES=0.0.0.0/0,::1,127.0.0.1
     ports:
         - 8181:8181
         - 9443:9443
         - 8102:8102
     links:
         - elasticsearch
     depends_on:
         - elasticsearch



**** 最新バージョンの取得 [#k345fda2]
 docker pull apache/unomi

**** または特定のバージョンを指定 [#p253a640]
 docker pull apache/unomi:2.4.0

*** Model Context Protocol Specification [#sf784555]
https://github.com/modelcontextprotocol

https://github.com/modelcontextprotocol/specification

*** 実装例 [#y3f295c4]

 inoyu-mcp-unomi-server
 Claude Desktop Configuration Guide

* チュートリアルと解説 [#vc4152b7]

** Getting Started with Apache Unomi [#b319c36c]

https://mcp.so/server/inoyu-mcp-unomi-server

*** inoyu-mcp-unomi-serverの主な機能 [#o678c102]

- メールアドレスベースのプロファイル管理
- セッションの自動管理
- スコープ(文脈の範囲)の管理
- JSONフォーマットでのデータ交換

** Understanding MCP for Claude [#q1cff5b5]

* 逆引き Apache Unomi 逆引きクックブック [#e7dcb6c8]

** ユーザー管理編 [#z1f30cd2]

*** Q1: 新しいユーザープロファイルを作成したい [#ac1b550f]
 # POSTリクエストでプロファイルを作成
 curl -X POST http://localhost:8181/cxs/profiles/ \
   -H "Content-Type: application/json" \
   -d '{
     "itemType": "profile",
     "properties": {
       "firstName": "John",
       "lastName": "Doe",
       "email": "john@doe.com"
     }
   }'

*** Q2: ユーザーのプロファイル情報を更新したい [#c1cd75fd]
 # PATCHリクエストでプロファイルを更新
 curl -X PATCH http://localhost:8181/cxs/profiles/profile-id \
   -H "Content-Type: application/json" \
   -d '{
     "properties": {
       "age": 25,
       "interests": ["sports", "music"]
     }
   }'

*** Q3: 複数の情報源からユーザーデータを統合したい [#jfcf4f2c]
- 1. セッション情報の紐付け:
 {
   "itemType": "session",
   "profileId": "profile-id",
   "properties": {
     "deviceId": "mobile-123",
     "browser": "Chrome"
   }
 }

- 2. イベントの記録:
 {
   "eventType": "view",
   "sessionId": "session-id",
   "profileId": "profile-id",
   "source": {
     "itemType": "site",
     "scope": "acme",
     "itemId": "page-123"
   }
 }

** セグメント管理編 [#pd35c4f7]

*** Q4: ユーザーをグループ分けしたい [#u758f5bf]
 {
   "itemType": "segment",
   "metadata": {
     "id": "premium-users",
     "name": "Premium Users",
     "scope": "acme"
   },
   "condition": {
     "type": "profilePropertyCondition",
     "parameterValues": {
       "propertyName": "accountType",
       "comparisonOperator": "equals",
       "propertyValue": "premium"
     }
   }
 }

*** Q5: 特定の条件に合うユーザーを抽出したい [#n26464c8]
 # セグメントに基づくユーザー検索
 curl -X POST http://localhost:8181/cxs/profiles/search \
   -H "Content-Type: application/json" \
   -d '{
     "segment": "premium-users",
     "offset": 0,
     "limit": 10
   }'

** イベント管理編 [#a3ebb298]

*** Q6: ユーザーの行動を記録したい [#h486f06d]
 {
   "eventType": "purchase",
   "scope": "ecommerce",
   "profileId": "profile-id",
   "properties": {
     "productId": "123",
     "amount": 99.99
   },
   "source": {
     "itemType": "site",
     "itemId": "online-store"
   }
 }

*** Q7: 特定期間のユーザー行動を分析したい [#iaf7c470]
 curl -X POST http://localhost:8181/cxs/events/search \
   -H "Content-Type: application/json" \
   -d '{
     "timeRange": {
       "from": "2024-01-01T00:00:00Z",
       "to": "2024-01-31T23:59:59Z"
     },
     "condition": {
       "type": "eventTypeCondition",
       "parameterValues": {
         "eventTypeId": "purchase"
       }
     }
   }'

** パーソナライゼーション編 [#s7ff3c90]

*** Q8: ユーザーごとにコンテンツを変更したい [#u19e6ba7]
 {
   "itemType": "personalization",
   "scope": "acme",
   "strategy": "matching-first",
   "strategyOptions": {
     "segments": ["premium-users", "new-visitors"],
     "fallback": "default-content"
   }
 }

*** Q9: A/Bテストを実施したい [#u959a8cf]
 {
   "itemType": "rule",
   "metadata": {
     "id": "ab-test-homepage",
     "name": "Homepage A/B Test"
   },
   "condition": {
     "type": "randomCondition",
     "parameterValues": {
       "percentage": 50
     }
   },
   "actions": [
     {
       "type": "setPropertyAction",
       "parameterValues": {
         "propertyName": "selectedVersion",
         "propertyValue": "A"
       }
     }
   ]
 }

** プライバシー管理編 [#q676228a]

*** Q10: GDPRに対応したデータ管理をしたい [#s76b42ea]
- 1. 同意管理:
{
  "itemType": "consent",
  "scope": "acme",
  "status": "granted",
  "properties": {
    "purpose": "marketing",
    "expiration": "2025-01-01T00:00:00Z"
  }
 }

- 2. データ削除:
 curl -X DELETE http://localhost:8181/cxs/profiles/profile-id
 
** 応用例:AIチャット履歴管理 [#d400b508]

*** Q11: AIチャットの履歴を保存したい [#ad99e53b]
 {
   "eventType": "ai_chat",
   "scope": "chatbot",
   "profileId": "user-123",
   "properties": {
     "message": "こんにちは",
     "context": ["greeting"],
     "timestamp": "2024-01-20T10:00:00Z"
   }
 }

*** Q12: 過去のチャット文脈を取得したい [#kecb93f1]
 curl -X POST http://localhost:8181/cxs/events/search \
   -H "Content-Type: application/json" \
   -d '{
     "condition": {
       "type": "eventTypeCondition",
       "parameterValues": {
         "eventTypeId": "ai_chat"
       }
     },
     "sortby": "timestamp",
     "limit": 10
   }'

** 高度な使用例 [#dca775ba]

*** Q13: 複数のイベントを組み合わせて分析したい [#n981ab80]
 {
   "itemType": "rule",
   "condition": {
     "type": "booleanCondition",
     "parameterValues": {
       "operator": "and",
       "subConditions": [
         {
           "type": "pastEventCondition",
           "parameterValues": {
             "eventType": "view",
             "minimumCount": 5
           }
         },
         {
           "type": "pastEventCondition",
           "parameterValues": {
             "eventType": "purchase",
             "minimumCount": 1
           }
         }
       ]
     }
   }
 }

*** Q14: リアルタイムでユーザー行動に反応したい [#f58e2009]
- 1. イベントリスナーの設定:
 {
   "itemType": "rule",
   "metadata": {
     "id": "realtime-reaction",
     "name": "Realtime User Action"
   },
   "condition": {
     "type": "eventTypeCondition",
     "parameterValues": {
       "eventTypeId": "cart_abandon"
     }
   },
   "actions": [
     {
       "type": "sendEventAction",
       "parameterValues": {
         "eventType": "notification"
       }
     }
   ]
 }

** エラー対処編 [#f9033ac1]

*** Q15: よくあるエラーと対処法 [#a298f322]
- 1. 認証エラー:
 # Basic認証の確認
 curl -u karaf:karaf http://localhost:8181/cxs/cluster

- 2. CORS エラー:
etc/org.apache.unomi.cors.cfg の設定:
 org.apache.unomi.cors.allowed.origins=http://localhost:*

- 3. セッションエラー:
セッションの有効性確認:
 curl http://localhost:8181/cxs/sessions/current


* おわりに [#e04583ab]
Apache UnomiとMCPの組み合わせは、AIチャットの新しい可能性を開きます。特に:

文脈の永続化

マルチAI連携

プライバシー管理

これらの機能により、より自然で継続的なAIとの対話が実現できます。
ぜひ、あなたのプロジェクトでもApache UnomiとMCPを活用し、次世代のAIチャット体験を創造してみてください。
トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS