⚠️ このドキュメントはAIによって自動翻訳されています。不正確な部分がある場合は、
英語版 を参照してください。
ほとんどのプラグインツールとエンドポイントは、ステートレスな単一ラウンドのインタラクションモデルで動作します:
リクエストを受信
データを処理
レスポンスを返却
インタラクションを終了
しかし、多くの実際のアプリケーションでは、複数のインタラクション間で状態を維持する必要があります。ここで永続ストレージ が不可欠になります。
永続ストレージメカニズムにより、プラグインは同じワークスペース内でデータを永続的に保存でき、ステートフルなアプリケーションやメモリ機能を実現できます。
Difyは現在、プラグイン用のキーバリュー(KV)ストレージシステムを提供しており、開発者のニーズに基づいて、将来的にはより柔軟で強力なストレージインターフェースを導入する予定です。
ストレージへのアクセス
すべてのストレージ操作は、プラグインのセッションで利用可能なstorageオブジェクトを通じて実行されます:
# Access the storage interface
storage = self .session.storage
ストレージ操作
データの保存
setメソッドでデータを保存します:
def set ( self , key : str , val : bytes ) -> None :
"""
Store data in persistent storage
Parameters:
key: Unique identifier for your data
val: Binary data to store (bytes)
"""
pass
値はbytes形式である必要があります。これにより、ファイルを含むさまざまな種類のデータを柔軟に保存できます。
例:さまざまなデータ型の保存
# String data (must convert to bytes)
storage.set( "user_name" , "John Doe" .encode( 'utf-8' ))
# JSON data
import json
user_data = { "name" : "John" , "age" : 30 , "preferences" : [ "AI" , "NLP" ]}
storage.set( "user_data" , json.dumps(user_data).encode( 'utf-8' ))
# File data
with open ( "image.jpg" , "rb" ) as f:
image_data = f.read()
storage.set( "profile_image" , image_data)
データの取得
getメソッドで保存されたデータを取得します:
def get ( self , key : str ) -> bytes :
"""
Retrieve data from persistent storage
Parameters:
key: Unique identifier for your data
Returns:
The stored data as bytes, or None if key doesn't exist
"""
pass
例:データの取得と変換
# Retrieving string data
name_bytes = storage.get( "user_name" )
if name_bytes:
name = name_bytes.decode( 'utf-8' )
print ( f "Retrieved name: { name } " )
# Retrieving JSON data
import json
user_data_bytes = storage.get( "user_data" )
if user_data_bytes:
user_data = json.loads(user_data_bytes.decode( 'utf-8' ))
print ( f "User preferences: { user_data[ 'preferences' ] } " )
データの削除
deleteメソッドで保存されたデータを削除します:
def delete ( self , key : str ) -> None :
"""
Delete data from persistent storage
Parameters:
key: Unique identifier for the data to delete
"""
pass
ベストプラクティス
説明的なキーを使用する 競合を避け、コードをより保守しやすくするために、キーに一貫した命名規則を作成してください。
欠損キーを処理する キーが見つからない可能性があるため、処理前にデータが存在するかどうかを常に確認してください。
複雑なデータをシリアライズする 保存前に複雑なオブジェクトをJSONまたは他のシリアライズ形式に変換してください。
エラーハンドリングを実装する 潜在的なエラーを適切に処理するために、ストレージ操作をtry/exceptブロックでラップしてください。
一般的なユースケース
ユーザー設定 :セッション間でユーザーの設定やプリファレンスを保存
会話履歴 :以前の会話からのコンテキストを維持
APIトークン :認証トークンを安全に保存
キャッシュデータ :API呼び出しを減らすために頻繁にアクセスされるデータを保存
ファイルストレージ :ユーザーがアップロードしたファイルや生成されたコンテンツを保存
このページを編集する | 問題を報告する