AIチャットの文脈を記憶する!Apache UnomiとModel Context Protocolで実現する次世代のAIチャット管理
の編集
http://java.boy.jp/pukiwiki/index.php?p=13f92d5d
[
トップ
] [
編集
|
差分
|
履歴
|
添付
|
リロード
] [
新規
|
一覧
|
検索
|
最終更新
|
Markdown
]
-- 雛形とするページ --
StringTemplate
<!-- markdown --> # はじめに 「AIとのチャット履歴を別のAIでも参照できたら...」 「過去の会話の文脈を踏まえた応答がほしい...」 このような課題を解決する可能性を秘めているのが、Apache UnomiとModel Context Protocol(MCP)の組み合わせです。この記事では、Apache UnomiをAIチャット履歴の管理に活用する方法について、実践的に解説していきます。 # 目次 [TOC] # 1. Apache Unomiとは Apache Unomiは、顧客データプラットフォーム(CDP)として知られていますが、その特徴は: - プロファイル管理:ユーザー情報の統合管理 - セッション管理:時系列でのユーザー行動追跡 - プライバシー管理:GDPRなどの規制に準拠 - APIベース:RESTful APIによる柔軟な連携 これらの機能は、AIチャットの履歴管理にも非常に適しています。 # 2. AIチャット履歴管理のユースケース ## 2.1 基本的な使い方 // チャット履歴の保存 profile.setProperty("lastChat", { timestamp: "2024-01-19T10:00:00", content: "こんにちは、気温が低いですね", context: ["天候", "挨拶"] }); // 文脈を考慮した応答の取得 const context = profile.getProperty("lastChat").context; if (context.includes("天候")) { // 天候に関する文脈を考慮した応答 } ## 2.2 高度な活用例 複数AIでの履歴共有 長期的な文脈理解 ユーザー嗜好の学習 # 3. Model Context Protocol (MCP)との連携 ClaudeのMCPを使用することで、より高度な文脈管理が可能になります。 ## 3.1 MCPサーバーの設定 { "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 主要な機能 プロファイルの自動作成と管理 セッション単位での文脈保持 スコープによる文脈の分離 # 4. 実装例と応用パターン ## 4.1 マルチAI連携パターン // 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 文脈強化パターン キーワード抽出による文脈理解 センチメント分析との連携 トピックモデリングの適用 ## 4.3 プライバシー考慮パターン センシティブ情報の自動検出 データ保持期間の管理 アクセス制御の実装 ## 5. 参考リンク集 公式ドキュメント ### Apache Unomi Documentation https://unomi.apache.org/manual/latest/ ### dockerイメージ Apache UnomiのDockerイメージが公式に提供されています!これを使うと、セットアップがより簡単になります。 https://hub.docker.com/r/apache/unomi ### Docker docker-compose.yml 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 ### * 最新バージョンの取得 docker pull apache/unomi ### * または特定のバージョンを指定 docker pull apache/unomi:2.4.0 ### Model Context Protocol Specification https://github.com/modelcontextprotocol https://github.com/modelcontextprotocol/specification ### 実装例 inoyu-mcp-unomi-server Claude Desktop Configuration Guide # チュートリアルと解説 ## Getting Started with Apache Unomi https://mcp.so/server/inoyu-mcp-unomi-server ### inoyu-mcp-unomi-serverの主な機能 - メールアドレスベースのプロファイル管理 - セッションの自動管理 - スコープ(文脈の範囲)の管理 - JSONフォーマットでのデータ交換 ## Understanding MCP for Claude # 逆引き Apache Unomi 逆引きクックブック ## ユーザー管理編 ### Q1: 新しいユーザープロファイルを作成したい # 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: ユーザーのプロファイル情報を更新したい # PATCHリクエストでプロファイルを更新 curl -X PATCH http://localhost:8181/cxs/profiles/profile-id \ -H "Content-Type: application/json" \ -d '{ "properties": { "age": 25, "interests": ["sports", "music"] } }' ### Q3: 複数の情報源からユーザーデータを統合したい - 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" } } ## セグメント管理編 ### Q4: ユーザーをグループ分けしたい { "itemType": "segment", "metadata": { "id": "premium-users", "name": "Premium Users", "scope": "acme" }, "condition": { "type": "profilePropertyCondition", "parameterValues": { "propertyName": "accountType", "comparisonOperator": "equals", "propertyValue": "premium" } } } ### Q5: 特定の条件に合うユーザーを抽出したい # セグメントに基づくユーザー検索 curl -X POST http://localhost:8181/cxs/profiles/search \ -H "Content-Type: application/json" \ -d '{ "segment": "premium-users", "offset": 0, "limit": 10 }' ## イベント管理編 ### Q6: ユーザーの行動を記録したい { "eventType": "purchase", "scope": "ecommerce", "profileId": "profile-id", "properties": { "productId": "123", "amount": 99.99 }, "source": { "itemType": "site", "itemId": "online-store" } } ### Q7: 特定期間のユーザー行動を分析したい 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" } } }' ## パーソナライゼーション編 ### Q8: ユーザーごとにコンテンツを変更したい { "itemType": "personalization", "scope": "acme", "strategy": "matching-first", "strategyOptions": { "segments": ["premium-users", "new-visitors"], "fallback": "default-content" } } ### Q9: A/Bテストを実施したい { "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" } } ] } ## プライバシー管理編 ### Q10: GDPRに対応したデータ管理をしたい - 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チャット履歴管理 ### Q11: AIチャットの履歴を保存したい { "eventType": "ai_chat", "scope": "chatbot", "profileId": "user-123", "properties": { "message": "こんにちは", "context": ["greeting"], "timestamp": "2024-01-20T10:00:00Z" } } ### Q12: 過去のチャット文脈を取得したい 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 }' ## 高度な使用例 ### Q13: 複数のイベントを組み合わせて分析したい { "itemType": "rule", "condition": { "type": "booleanCondition", "parameterValues": { "operator": "and", "subConditions": [ { "type": "pastEventCondition", "parameterValues": { "eventType": "view", "minimumCount": 5 } }, { "type": "pastEventCondition", "parameterValues": { "eventType": "purchase", "minimumCount": 1 } } ] } } } ### Q14: リアルタイムでユーザー行動に反応したい - 1. イベントリスナーの設定: { "itemType": "rule", "metadata": { "id": "realtime-reaction", "name": "Realtime User Action" }, "condition": { "type": "eventTypeCondition", "parameterValues": { "eventTypeId": "cart_abandon" } }, "actions": [ { "type": "sendEventAction", "parameterValues": { "eventType": "notification" } } ] } ## エラー対処編 ### Q15: よくあるエラーと対処法 - 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 # おわりに Apache UnomiとMCPの組み合わせは、AIチャットの新しい可能性を開きます。特に: 文脈の永続化 マルチAI連携 プライバシー管理 これらの機能により、より自然で継続的なAIとの対話が実現できます。 ぜひ、あなたのプロジェクトでもApache UnomiとMCPを活用し、次世代のAIチャット体験を創造してみてください。
SPAMではありません
タイムスタンプを変更しない
<!-- markdown --> # はじめに 「AIとのチャット履歴を別のAIでも参照できたら...」 「過去の会話の文脈を踏まえた応答がほしい...」 このような課題を解決する可能性を秘めているのが、Apache UnomiとModel Context Protocol(MCP)の組み合わせです。この記事では、Apache UnomiをAIチャット履歴の管理に活用する方法について、実践的に解説していきます。 # 目次 [TOC] # 1. Apache Unomiとは Apache Unomiは、顧客データプラットフォーム(CDP)として知られていますが、その特徴は: - プロファイル管理:ユーザー情報の統合管理 - セッション管理:時系列でのユーザー行動追跡 - プライバシー管理:GDPRなどの規制に準拠 - APIベース:RESTful APIによる柔軟な連携 これらの機能は、AIチャットの履歴管理にも非常に適しています。 # 2. AIチャット履歴管理のユースケース ## 2.1 基本的な使い方 // チャット履歴の保存 profile.setProperty("lastChat", { timestamp: "2024-01-19T10:00:00", content: "こんにちは、気温が低いですね", context: ["天候", "挨拶"] }); // 文脈を考慮した応答の取得 const context = profile.getProperty("lastChat").context; if (context.includes("天候")) { // 天候に関する文脈を考慮した応答 } ## 2.2 高度な活用例 複数AIでの履歴共有 長期的な文脈理解 ユーザー嗜好の学習 # 3. Model Context Protocol (MCP)との連携 ClaudeのMCPを使用することで、より高度な文脈管理が可能になります。 ## 3.1 MCPサーバーの設定 { "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 主要な機能 プロファイルの自動作成と管理 セッション単位での文脈保持 スコープによる文脈の分離 # 4. 実装例と応用パターン ## 4.1 マルチAI連携パターン // 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 文脈強化パターン キーワード抽出による文脈理解 センチメント分析との連携 トピックモデリングの適用 ## 4.3 プライバシー考慮パターン センシティブ情報の自動検出 データ保持期間の管理 アクセス制御の実装 ## 5. 参考リンク集 公式ドキュメント ### Apache Unomi Documentation https://unomi.apache.org/manual/latest/ ### dockerイメージ Apache UnomiのDockerイメージが公式に提供されています!これを使うと、セットアップがより簡単になります。 https://hub.docker.com/r/apache/unomi ### Docker docker-compose.yml 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 ### * 最新バージョンの取得 docker pull apache/unomi ### * または特定のバージョンを指定 docker pull apache/unomi:2.4.0 ### Model Context Protocol Specification https://github.com/modelcontextprotocol https://github.com/modelcontextprotocol/specification ### 実装例 inoyu-mcp-unomi-server Claude Desktop Configuration Guide # チュートリアルと解説 ## Getting Started with Apache Unomi https://mcp.so/server/inoyu-mcp-unomi-server ### inoyu-mcp-unomi-serverの主な機能 - メールアドレスベースのプロファイル管理 - セッションの自動管理 - スコープ(文脈の範囲)の管理 - JSONフォーマットでのデータ交換 ## Understanding MCP for Claude # 逆引き Apache Unomi 逆引きクックブック ## ユーザー管理編 ### Q1: 新しいユーザープロファイルを作成したい # 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: ユーザーのプロファイル情報を更新したい # PATCHリクエストでプロファイルを更新 curl -X PATCH http://localhost:8181/cxs/profiles/profile-id \ -H "Content-Type: application/json" \ -d '{ "properties": { "age": 25, "interests": ["sports", "music"] } }' ### Q3: 複数の情報源からユーザーデータを統合したい - 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" } } ## セグメント管理編 ### Q4: ユーザーをグループ分けしたい { "itemType": "segment", "metadata": { "id": "premium-users", "name": "Premium Users", "scope": "acme" }, "condition": { "type": "profilePropertyCondition", "parameterValues": { "propertyName": "accountType", "comparisonOperator": "equals", "propertyValue": "premium" } } } ### Q5: 特定の条件に合うユーザーを抽出したい # セグメントに基づくユーザー検索 curl -X POST http://localhost:8181/cxs/profiles/search \ -H "Content-Type: application/json" \ -d '{ "segment": "premium-users", "offset": 0, "limit": 10 }' ## イベント管理編 ### Q6: ユーザーの行動を記録したい { "eventType": "purchase", "scope": "ecommerce", "profileId": "profile-id", "properties": { "productId": "123", "amount": 99.99 }, "source": { "itemType": "site", "itemId": "online-store" } } ### Q7: 特定期間のユーザー行動を分析したい 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" } } }' ## パーソナライゼーション編 ### Q8: ユーザーごとにコンテンツを変更したい { "itemType": "personalization", "scope": "acme", "strategy": "matching-first", "strategyOptions": { "segments": ["premium-users", "new-visitors"], "fallback": "default-content" } } ### Q9: A/Bテストを実施したい { "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" } } ] } ## プライバシー管理編 ### Q10: GDPRに対応したデータ管理をしたい - 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チャット履歴管理 ### Q11: AIチャットの履歴を保存したい { "eventType": "ai_chat", "scope": "chatbot", "profileId": "user-123", "properties": { "message": "こんにちは", "context": ["greeting"], "timestamp": "2024-01-20T10:00:00Z" } } ### Q12: 過去のチャット文脈を取得したい 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 }' ## 高度な使用例 ### Q13: 複数のイベントを組み合わせて分析したい { "itemType": "rule", "condition": { "type": "booleanCondition", "parameterValues": { "operator": "and", "subConditions": [ { "type": "pastEventCondition", "parameterValues": { "eventType": "view", "minimumCount": 5 } }, { "type": "pastEventCondition", "parameterValues": { "eventType": "purchase", "minimumCount": 1 } } ] } } } ### Q14: リアルタイムでユーザー行動に反応したい - 1. イベントリスナーの設定: { "itemType": "rule", "metadata": { "id": "realtime-reaction", "name": "Realtime User Action" }, "condition": { "type": "eventTypeCondition", "parameterValues": { "eventTypeId": "cart_abandon" } }, "actions": [ { "type": "sendEventAction", "parameterValues": { "eventType": "notification" } } ] } ## エラー対処編 ### Q15: よくあるエラーと対処法 - 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 # おわりに Apache UnomiとMCPの組み合わせは、AIチャットの新しい可能性を開きます。特に: 文脈の永続化 マルチAI連携 プライバシー管理 これらの機能により、より自然で継続的なAIとの対話が実現できます。 ぜひ、あなたのプロジェクトでもApache UnomiとMCPを活用し、次世代のAIチャット体験を創造してみてください。
テキスト整形のルールを表示する