AIチャットの文脈を記憶する!Apache UnomiとModel Context Protocolで実現する次世代のAIチャット管理
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
* はじめに [#k9b9111e]
「AIとのチャット履歴を別のAIでも参照できたら...」
「過去の会話の文脈を踏まえた応答がほしい...」
このような課題を解決する可能性を秘めているのが、Apache Un...
* 目次 [#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...
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...
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...
-H "Content-Type: application/json" \
-d '{
"properties": {
"age": 25,
"interests": ["sports", "music"]
}
}'
*** Q3: 複数の情報源からユーザーデータを統合したい [#jfcf...
- 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/profil...
** 応用例: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を活用し、...
終了行:
* はじめに [#k9b9111e]
「AIとのチャット履歴を別のAIでも参照できたら...」
「過去の会話の文脈を踏まえた応答がほしい...」
このような課題を解決する可能性を秘めているのが、Apache Un...
* 目次 [#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...
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...
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...
-H "Content-Type: application/json" \
-d '{
"properties": {
"age": 25,
"interests": ["sports", "music"]
}
}'
*** Q3: 複数の情報源からユーザーデータを統合したい [#jfcf...
- 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/profil...
** 応用例: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を活用し、...
ページ名: