🗒️
Difyでmemobaseを使ってみた
1. はじめに
- Dify向けのmemobaseプラグインが公開されたのをXで見かけたので使ってみた
- 要件としては以下の通り
- 日々のチャットログを記録できること
- チャットログを要約できること
- 要約した内容はプロンプトに差し込める形でアウトプットできること
- 使ってみた所、上記のことはだいたいできた
2. memobaseとは?
-
概要:
- チャットにおけるユーザ発話とLLM回答を受け取り、要約・キーワード抽出・エモーション分析などをしてくれるサービス
-
特徴:
- mem0と比較して最初から不特定多数ユーザーのチャットを想定し、大規模な会話ログの要約・管理に対応しているのかなと思う
-
用途:
- 過去履歴を認識した応対
-
Difyプラグインの特徴:
- Difyのノードとしてシンプルに呼び出せる
- 認証はDifyのシークレットストア経由で管理可能
- HTTPノードでリクエストしてJSONパースする手間が省ける
3. Difyの基本と準備
- Difyアカウント作成
-
環境構築
- APIキーの発行
- memobaseプラグインの有効化
-
memobase側準備
- 認証トークンを取得し、Difyのシークレットストアに登録
- memobaseはSaaSとローカル実行が提供されていますが、今回は動作確認目的でSaaSを採用しました
4. memobase連携ワークフローを作る
4-1. memobaseノードで連携を設定する
基本はdify-plugin-memobaseのREADME.mdに記載されている通り作ればよい。
4-2. UUID生成ノードを作成
Get or Create a Userノード
はプラグイン内部でclient.get_or_create_user(user_id)
を呼び出している。
このclient.get_or_create_user(user_id)
はユーザーIDとしてUUID形式が必要。
-
参考リンク:
client.get_or_create_user(user_id)
の実装はGitHubで確認できます:
get_or_create_user.py#L23
sys.conversation_id を使う
Difyのsys.conversation_id変数はUUIDになっているので、これをUserIDに割り当てても良いと思う。
sys.queryに含まれるユーザ名を使う
sys.queryに含まれるユーザ名を使う場合は、以下のコードでユーザー名からUUIDを生成するとよい。
def main(user_id: str) -> dict:
import uuid
# Example namespace generation using a fixed name
namespace = uuid.uuid5(uuid.NAMESPACE_DNS, "example")
# Generate a UUID for the user based on the namespace
user_uuid = uuid.uuid5(namespace, user_id)
return {
'user_uuid': str(user_uuid)
}
-
Insert Dataノード
の設定で「UserID」欄に上記で生成したuser_id
を指定
4-3. コンテキスト生成(flush)
上記Difyワークフローで行うのはチャットログの追加のみ。
蓄積したチャットログからコンテキスト(プロンプト本文)を生成するには、以下のエンドポイントを使用してflush処理を行います。
POST https://api.memobase.io/api/v1/profiles/flush
- 詳細は公式ドキュメントを参照してください:
https://docs.memobase.io/api-reference/profiles/flush
4-5. プロンプト用コンテキスト取得(prompt/get_context)
プロンプトに組み込むコンテキスト(プロンプト本文)を取得するには、以下のエンドポイントを使用します
GET https://api.memobase.io/api/v1/prompt/get_context?user_id=<USER_UUID>&limit=<NUM>
-
user_id
にはUUID形式のIDを指定、limit
で取得件数を制御可能 - 詳細は公式ドキュメントを参照してください:
https://docs.memobase.io/api-reference/prompt/get_context
まとめと今後の展開
-
なぜか登録したユーザ一覧を取得するAPIが無い。
-
今後はSaaS環境でトークン消費状況をモニタリングし、費用を想定した上でローカル実行を検討
-
SaaS環境の無料トークンを一瞬で使い切ったので、翌日にはローカル環境を構築した
8. 参考リンク
- APIリファレンス:https://docs.memobase.io/api-reference/overview
- Dify公式ドキュメント:https://docs.dify.ai/
- memobaseプラグイン情報:https://docs.dify.ai/plugins/memobase
Discussion