はじめに

「AIとのチャット履歴を別のAIでも参照できたら...」

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

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

目次

1. Apache Unomiとは

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

これらの機能は、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の主な機能

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: 複数の情報源からユーザーデータを統合したい

セグメント管理編

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に対応したデータ管理をしたい

応用例: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: リアルタイムでユーザー行動に反応したい

エラー対処編

Q15: よくあるエラーと対処法

おわりに

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

文脈の永続化

マルチAI連携

プライバシー管理

これらの機能により、より自然で継続的なAIとの対話が実現できます。 ぜひ、あなたのプロジェクトでもApache UnomiとMCPを活用し、次世代のAIチャット体験を創造してみてください。

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2025-01-20 (月) 12:06:16 (57d)