メインコンテンツへスキップ
これはインタラクティブなノートブックです。ローカルで実行することも、以下のリンクを使用することもできます。
このガイドでは、個人を特定できる情報 (PII) データのプライバシーを保ちながら、W&B Weave を使用する方法を学びます。PII を保護することで、LLM のトレースと評価のメリットを活かしながら、プライバシー要件とコンプライアンス要件を満たすことができます。このガイドは、機密性の高いユーザーデータを処理する LLM アプリケーションに Weave を統合する開発者を対象としています。 このガイドでは、PII データを特定し、マスクし、匿名化するための以下の方法を紹介します。
  1. PII データを特定してマスクするための正規表現
  2. Python ベースのデータ保護 SDK である Microsoft の Presidio。このツールでは、マスキングと置換の機能を利用できます。
  3. 偽データを生成する Python ライブラリ Faker。Presidio と組み合わせることで、PII データを匿名化できます。
さらに、PII のマスキングと匿名化をワークフローに統合するために、weave.op input/output logging customizationautopatch_settings の使い方も学びます。詳細は、Customize logged inputs and outputsを参照してください。 開始するには、以下の手順に従ってください。
  1. 概要 セクションを確認します。
  2. prerequisites を完了します。
  3. PII データの特定、マスキング、匿名化に使用できる available methods を確認します。
  4. Apply the methods to Weave calls を確認します。

概要

以下のセクションでは、weave.op を使用した入出力のロギングの概要と、Weave で PII データを扱う際のベストプラクティスを紹介します。

weave.op を使用して入出力のロギングをカスタマイズする

Weave Ops では、入力と出力の後処理関数を定義できます。これらの関数を使うと、LLM Call に渡すデータや Weave にログするデータを変更できます。 次の例では、2 つの後処理関数を定義し、それらを weave.op() の引数として渡します。

PII データで Weave を使用する際のベストプラクティス

PII データで Weave を使用する前に、以下のベストプラクティスを確認してください。これらは開発ライフサイクルの各段階ごとに整理されており、暗号化に関する追加のガイダンスも含まれています。

テスト時

  • PII の検出を確認するため、匿名化したデータをログする。
  • Weave トレースで PII の処理プロセスをトラッキングする。
  • 実際の PII を露出させずに、匿名化のパフォーマンスを測定する。

本番環境では

  • 未加工のPIIは絶対にログしない。
  • ログする前に機微なフィールドを暗号化する。

暗号化のポイント

  • 後で復号する必要があるデータには、可逆暗号化を使用します。
  • 元に戻す必要のない一意の ID には、一方向ハッシュを使用します。
  • 暗号化したまま分析する必要があるデータには、専用の暗号化方式の利用を検討します。

事前準備

いずれかのマスキング方法を適用する前に、依存関係のインストール、APIキーの設定、Weave プロジェクトの初期化、サンプルデータの読み込みを行うために、以下のセットアップ手順を完了してください。
  1. まず、必要なパッケージをインストールします。
  1. 次の場所でAPIキーを作成します。
  1. Weave プロジェクトを初期化します。
  1. 10 個のテキストブロックを含むデモ用の PII データセットを読み込みます。

マスキング方法の概要

前提条件 を完了したら、PII データを検出して保護するために、次のいずれかの方法を選択できます。各方法では PII データを特定してマスクし、必要に応じて匿名化します。
  1. 正規表現を使用して PII データを特定し、マスクします。
  2. Microsoft Presidio。マスキングと置換の機能を備えた、Python ベースのデータ保護 SDK です。
  3. Faker。偽データを生成するための Python ライブラリです。

方法 1: 正規表現を使用してフィルタリングする

正規表現 (regex) は、PII データを特定してマスクするためのシンプルな方法です。regex を使うと、電話番号、メールアドレス、社会保障番号などの機密情報のさまざまな形式に一致するパターンを定義できます。regex を使えば、より複雑な NLP 手法を使わなくても、大量のテキストをスキャンして情報を置換またはマスクできます。
関数をテストするには、サンプルテキストを使って次を実行します。

方法 2: Microsoft Presidio を使用してマスクする

次の方法では、Microsoft Presidio を使用して PII データを完全に除去します。Presidio は PII をマスクし、PII のタイプを表すプレースホルダーに置き換えます。たとえば、Presidio は "My name is Alex" 内の Alex<PERSON> に置き換えます。 Presidio では、一般的なエンティティ が標準でサポートされています。以下の例では、PHONE_NUMBERPERSONLOCATIONEMAIL_ADDRESSUS_SSN のいずれかに該当するすべてのエンティティをマスクします。Presidio による処理は関数にまとめられています。
この関数をテストするには、サンプルテキストを使って以下を実行します:

方法 3: Faker と Presidio を使用して置換で匿名化する

テキストをマスクする代わりに、MS Presidio を使用して、名前や電話番号などの PII を Faker Python ライブラリで生成したダミーデータに置き換えることで匿名化できます。たとえば、次のようなデータがあるとします。 "My name is Raphael and I like to fish. My phone number is 212-555-5555" Presidio と Faker でデータを処理すると、次のようになる場合があります。 "My name is Katherine Dixon and I like to fish. My phone number is 667.431.7379" Presidio と Faker を一緒に使用するには、custom operator への参照を指定する必要があります。これらの operator は、PII をダミーデータに置き換える Faker の function を Presidio が使用するように指定するものです。
コードを 1 つのクラスに統合し、Entities のリストに先ほど特定した追加項目を含めるには、次を実行します。
関数をテストするには、サンプルテキストを使って以下を実行します。

Method 4: autopatch_settings を使用する

autopatch_settings を使用すると、サポートされる1つ以上のLLMインテグレーションについて、初期化時にPII処理を直接設定できます。W&Bでは、特定のインテグレーションのすべてのCallにわたってPII処理を一元化したい場合、この方法を推奨しています。この方法の利点は次のとおりです。
  1. PII処理ロジックを初期化時に一元化して適用できるため、各所に分散したカスタムロジックの必要性を減らせます。
  2. PII処理のワークフローは、特定のインテグレーションごとにカスタマイズしたり、完全に無効化したりできます。
autopatch_settings を使用してPII処理を設定するには、サポートされるLLMインテグレーションのいずれかについて、op_settingspostprocess_inputs または postprocess_output を定義します。

Weave Call にメソッドを適用する

各マスキング方法を個別に確認したので、次の例では、それらを Weave Models に統合し、結果を Weave トレース で確認する方法を示します。 まず、Weave Model を作成します。Weave Model は、設定、モデルの重み、モデルの動作を定義するコードなどの情報を組み合わせたものです。 このモデルには、Anthropic API を呼び出す predict 関数が含まれています。Anthropic の Claude Sonnet は、Traces を使用して LLM Call をトレースしながら、感情分析を実行します。Claude Sonnet はテキストブロックを受け取り、positivenegativeneutral のいずれかの感情分類を出力します。また、このモデルには、PII データが LLM に送信される前にマスクまたは匿名化されるようにするための後処理関数も含まれています。 このコードを実行すると、Weave プロジェクトページへのリンクと、実行した特定のトレース (LLM Call) へのリンクが表示されます。これらのリンクを使用して、入力が LLM に到達する前に、後処理関数によって想定どおりにマスクまたは匿名化されていることを確認してください。

Regex による方法

まずは、Regex を使用して元のテキスト内の PII データを特定し、マスクできます。

Presidio を使用したマスキング方法

次に、Presidio を使用して元のテキスト内の PII データを特定し、マスクします。
特定された PII Entities と、マスクされたテキスト output を示す Presidio の PII マスキング プロセス

Faker と Presidio の置換方法

この例では、Faker を使用して匿名化した置換用の PII データを生成し、Presidio を使用して元のテキスト内の PII データを検出して置換します。
元のテキスト、検出された PII、匿名化された置換値を含む Faker と Presidio の PII 置換プロセス

autopatch_settings メソッド

次の例では、初期化時に anthropicpostprocess_inputspostprocess_inputs_regex() 関数に設定しています。postprocess_inputs_regex 関数は、方法 1: 正規表現を使用したフィルター で定義した redact_with_regex メソッドを適用します。その結果、すべての anthropic モデルへの入力に redact_with_regex が適用されます。

オプション: データを暗号化する

暗号化されたテキストの出力と暗号化キー管理を含む PII データ暗号化プロセス
PII の匿名化に加えて、cryptography ライブラリの Fernet 対称暗号化を使ってデータを暗号化すると、セキュリティをさらに強化できます。この方法では、匿名化したデータが傍受された場合でも、暗号化キーがなければ内容を読み取れません。次の例では、入力テキストをログする前に暗号化し、モデルの predict メソッド内で復号する方法を示します。