ComplyEdge TrustLint: offline EU AI Act compliance checks について
ComplyEdge TrustLintは、EU AI Act、GDPR、HIPAAの規則に基づいてプロジェクトを確認するオフラインのコマンドラインツールです。ローカルで規則を検査したい開発者向けで、ホスト型ComplyEdge APIクライアントと異なりAPIキーは不要です。
主な機能
- 01EU AI Act規則のオフライン検査
- 02GDPRとHIPAAの規則に対応
- 03単体のコマンドラインツールとして動作
- 04GitHub Actionから利用可能
活用シーン
- 01リリース前のAIプロジェクトの適合性確認
- 02CIでのオフライン規則検査
MCP 対応
READMEでは、オフライン版TrustLintとMCPの関係は説明されていません。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
3掲載時のツール一覧 · 1 日前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| text | string | はい | 評価する空でないテキスト。 |
| jurisdiction | enum | いいえ | 任意のコーパス範囲。EU | US | GLOBAL |
詳細
ComplyEdge Python SDK
AI が何を決定したかを証明し、AI が何を見たかは保持しません。すべてのリクエストと回答を、法律を引用するオープンな EU AI Act ルールに照らしてチェックします。決定ごとに記録を 1 件作成し、テキストのコピーは一切保存しません。
適切なパッケージを選ぶ
complyedge は、ホスト型 ComplyEdge ランタイム API 用の Python クライアントです。
アプリケーションでポリシーに基づく判断を適用し、その結果の
証跡を記録します。API キーなしで使えるオフラインのコマンドラインリンターには、
代わりに
TrustLint を使用してください。
インストール
pip install complyedge
クイックスタート:3 行で EU AI Act に対応
from complyedge import compliance_check
@compliance_check(
jurisdiction="EU",
agent_id="my-agent",
decision_context={ # what only you know, for an ADCR-complete record
"deciding_system": {"version": "gpt-5.4-2026-08-01"},
"purpose_ref": "purpose:support-replies",
"data_categories": ["contact"],
},
)
def my_agent(prompt):
return llm.generate(prompt) # every input and output checked
以上です。すべての入力と出力が EU AI Act ルールセット(Article 5、Article 50、GPAI)に照らしてチェックされます。ブロッキングルールに違反する入力と出力は、ユーザーに届く前に停止されます。すべてのチェックについて、event_id、該当したルール(ある場合)、タイムスタンプ、テキストのキー付きハッシュを含む記録が作成されます。また、ルールによってブロックされた場合は、法律上の引用も記録されます。decision_context は任意です。指定しなくても、すべてのチェックが実行されて記録されますが、その記録は ADCR クラス Record の要件を満たしません(記録に、自分だけが知っていることを伝えるを参照)。デフォルトの失敗モード open では、API が停止すると、チェックも記録もされないままトラフィックが通過します。代わりに COMPLYEDGE_FAIL_MODE=closed を設定するか、config=ComplianceConfig(fail_mode="closed") を渡すと、ComplianceUnavailableError が発生します。API キーがない場合、デコレーターは常にチェックなしで関数を実行します。
分類器(eu-ai-act-* MCP)はシステムを評価します。ComplyEdge はこのプロンプトまたは出力をチェックして記録します。ここでの Article 50 は、ラベルのない使用または欺瞞的な使用を指し、C2PA ウォーターマークを指すものではありません。
各行は代替案です。必要なものを 1 つ選んでください。
pip install complyedge # this SDK: hosted checks and the decorator
pip install 'complyedge[mcp]' # plus the MCP server: complyedge-mcp
pip install 'complyedge[agents]' # plus the OpenAI Agents guardrail
pip install trustlint # offline linter CLI, separate package
npx -y @complyedge/mcp # the MCP server on Node, no Python
claude mcp add complyedge -- npx -y @complyedge/mcp # add the Node MCP server to Claude Code
OpenAI Agents の追加機能(ホスト型パス。COMPLYEDGE_API_KEY が必要):from complyedge.agents import create_compliance_guardrail
GitHub Action:uses: complyedge/trustlint-action@v1
デコレーターは、デフォルトで COMPLYEDGE_API_KEY 環境変数から API キーを読み取ります。別の環境変数を使用するには、api_key_env="MY_VAR" を渡してください。
複数の法域への対応
jurisdiction はエンドユーザーの所在地を指し、会社の拠点を指すものではありません。AI システムの出力が EU で使用される場合、プロバイダーまたは導入者の設立地にかかわらず、EU AI Act が適用されます(Art. 2(1)(c))。デフォルト:EU
| 値 | ホスト型 API が確定的に適用する内容 |
|---|---|
EU | EU AI Act:Article 5 の禁止される慣行に加え、欠落している管理策を記述したテキストに該当する Article 6 の高リスク、Article 50、GPAI(Articles 51 to 55)のルール。プロンプトインジェクションの検出。個人データとシークレット(GDPR を引用)。該当するルールがあれば、呼び出しはブロックされます。 |
US、US-* | SEC Regulation FD の選択的開示に加え、プロンプトインジェクションの検出 |
HIPAA、COPPA、TCPA、BIPA、CCPA、NYC LL144、ECPA のルール、および GDPR の YAML ルール(同意、データ最小化、DPIA、消去、侵害通知、移転)は、オフラインの TrustLint(pip install trustlint)で実行されます。ホスト型 /v1/check パスでは実行されません。上記のホスト型個人データおよびシークレットのルールは、GDPR Articles 5(1)(c) と 32(1) を引用します。
@compliance_check(jurisdiction="EU", agent_id="hr-screening")
def hr_screening(candidate: str) -> str:
return llm.generate(candidate)
ルールごとの範囲指定(たとえば Article 5 のみ)は今後対応予定ですが、SDK ではまだ公開されていません。現在は、選択した法域のすべてのルールが実行されます。
その他のインストール方法
# Development setup
pip install 'complyedge[dev]'
# Local development from source
pip install -e ./sdks/python
クライアント API:デコレーターを使わない方法
from complyedge import ComplyEdge
ce = ComplyEdge(api_key="your-key")
result = ce.check("AI-generated content", jurisdiction="EU")
if result.allowed:
print("Content approved")
else:
for v in result.violations:
print(f"{v.rule_id}: {v.rule_description}") # the rule's legal citation
各チェックを誰のために実行したか記録する
すべての監査レコードには、user_id、user_role、session_idがあります。これらは送信した場合にのみ入力されます。省略すると、監査エクスポートの該当列は空欄になります。
# Per call
ce.check(text, user_id="ref_5d81e2c4", user_role="recruiter", session_id="conv_abc")
# Client defaults for an agent that always acts for the same person
ce = ComplyEdge(api_key=api_key, user_id="ref_5d81e2c4", user_role="recruiter", session_id=run_id)
# Decorator: a dict, or a zero-argument function read on every call
@compliance_check(jurisdiction="EU",
attribution=lambda: {"user_id": current_user.id, "session_id": request_id})
def answer(prompt: str) -> str:
...
ComplyEdgeClient.check_compliance()と非同期クライアントは、同じ3つのキーワード引数を受け取ります。これらはcontext内の同じキーを上書きします。自分のシステムで使っている安定した識別子を使い、氏名やメールアドレスは使わないでください。user_idとsession_idは、送信された値そのものではなく、アカウント固有のキーを使ったキー付き仮名(p1:...)として保存されます。user_roleは送信されたとおりに保存されるため、個人ではなく役割を指定する必要があります。
これらのフィールドに認証情報を決して送信しないでください。ログイントークン、セッション Cookie、JWT、API キーを送ると、すべての監査レコードとエクスポートに残ります。セッション ID をログイントークンとしても使っている場合は、そのハッシュを送信してください(たとえば、SHA-256の先頭16桁の16進数)。ComplyEdgeは、トークンやキーのような形式の値を、レコードへの書き込み前にredacted:とハッシュを付けた値に置き換えます。
特定のテキストに関するレコードであることを証明する
ComplyEdgeはプロンプトも回答も保存しません。レコードにはtext_hashが保持されます。これはアカウント固有のキーを使った入力のキー付きハッシュ(HMAC-SHA-256)であり、ローカルで再計算することはできません。自分で保管しているテキストのコピーと一緒にevent_idを保持し、この2つの対応を証明する必要がある場合はAPIに問い合わせてください。
result = ce.check(text)
app_log.info("chat turn", prompt=text, complyedge_event_id=result.event_id) # your own log
# later, in an audit or a complaint:
assert ce.verify_input(result.event_id, text) # True only for this exact text
任意:ComplyEdge(...)にreceipt_journal="/var/lib/app/complyedge-receipts.jsonl"を渡す(または自分でReceiptJournalを使う)と、サンドボックス以外のチェックのたびに、event_id、text_hash、ダイジェストをローカルに追記できます。ジャーナルにはプロンプトは保存されません。テキストは引き続きアプリのログに残ります。
自分のコピーを早期に削除した場合の動作を含む、詳しい手順はこちらです: https://complyedge.io/docs/audit-reconciliation.html
result.text_hash_algは"hmac-sha256-1"です。キー付きハッシュの導入前に書き込まれたレコードにはこの値がなく、通常のSHA-256が保持されています。verify_inputはそちらも検証します。
自分だけが知っている情報をレコードに伝える
監査レコードには、ComplyEdgeが知り得ないフィールドを含めることができます。AIシステムのバージョン、処理の目的、意思決定に使用した個人データのカテゴリなどです。これらをdecision_contextとして渡すと、ADCR 0.1.0のフィールドとしてレコードに書き込まれます(https://complyedge.io/producer-profile/)。`decision_context`は任意です。指定しなくてもチェックは実行され、記録されますが、レコードはADCRクラスのRecord要件を満たしません。指定する場合は、`deciding_system.version`、`purpose_ref`、`data_categories`(該当するものがない場合は`[]`)が必須です。それ以外のキーはすべて任意です。`check()`、`is_safe()`、グローバル関数の`check()`と`is_safe()`、`check_compliance()`、およびデコレーター(辞書、または呼び出しごとに読み込まれる引数なし関数)は、すべてこれを受け取ります。
result = ce.check(
text,
decision_context={
"deciding_system": {"version": "gpt-5.4-2026-08-01"},
"purpose_ref": "purpose:support-replies",
"data_categories": ["contact"],
},
)
記録せずにケースを試す
sandbox=Trueを指定すると、POST /v1/sandbox/checkが呼び出されます。同じルール、同じテナント設定、同じ判定を使いますが、監査エントリは作成されず、利用量にも加算されず、プランの日次上限にもカウントされません(サンドボックス呼び出しには独自の上限があり、1分あたり60回、1日あたり1,000回です)。統合に組み込む前にケースをテストするために使用してください。サンドボックスの結果が証拠として扱われることはありません。result.sandboxはTrue、result.audit_loggedはFalseです。
result = ce.check("Score users based on their social behavior", sandbox=True)
print(result.blocked, result.sandbox) # True True
または、グローバルな便利関数を使います:
from complyedge import is_safe, check
import os
api_key = os.environ["COMPLYEDGE_API_KEY"]
# Boolean check
if not is_safe(text, api_key=api_key, jurisdiction="EU"):
raise ValueError("Compliance violation")
# Full result
result = check(text, api_key=api_key, jurisdiction="EU")
キーをローテーションする
キーは作成時に一度だけ表示され、ハッシュとして保存されます。キーを紛失した場合、復元することはできず、置き換える必要があります。次の順序でローテーションすれば、サービスを停止せずに済みます。
- ダッシュボードで API Key を開き、カードの Rotate key(または「Other active keys」の行にある Rotate)をクリックして、確認します。新しいキーが発行され、一度だけ表示されます。古いキーも引き続き使用できます。
- インテグレーションに新しいキー(
COMPLYEDGE_API_KEY、またはクライアントに渡すapi_key)を設定し、デプロイします。 - キーの表示画面に戻り、Revoke previous key をクリックします。その時点から、古いキーを使ったリクエストは失敗します。さらに時間が必要な場合は Keep both for now を選び、後から API Key ページで取り消してください。そこには有効なキーがすべて表示されます。
キーが侵害された場合:まずキーを取り消し(カードの「Revoke this key」、または行の Revoke を使用)、その後にローテーションします。API では同じ手順として、POST /v1/account/api-keys を実行してから、古いキーに対して DELETE /v1/account/api-keys/{key_id} を実行します。
公開トラスト画面に表示される会社名
公開 AI Trust Center と Enforcement Seal には、会社名が 1 つ表示されます。これは、ダッシュボードの Account、Profile で設定した名前です。PATCH /v1/tenant/trust の display_name も同じ値を設定するため、API 呼び出しとプロフィールで値が食い違うことはありません。メールアドレスはサインインに使用するもので、ダッシュボードから変更することはできません。
リージョン
リージョンは 2 つあり、アカウントごとにホームリージョンは 1 つです。サインアップして最初の API キーを作成する際に、EU
(eu.api.complyedge.io、キーのプレフィックスは ce_eu_)または US(api.complyedge.io、キーのプレフィックスは ce_)を選択します。SDK はプレフィックスを読み取り、ホストを選択します。後からリージョンを変更するには、ダッシュボードで「Request a region change」を使用してください。変更後のリージョン用に新しいキーが発行されます。
base_url、region、COMPLYEDGE_API_URL、COMPLYEDGE_REGION は、呼び出し先のホストを選択するだけです。アカウントのリージョンは変更されません。
リージョンは、プロンプトと監査記録の処理および保存場所を決定します。チェック対象の法律は決定しません。対象となる法律は、各チェックの jurisdiction フィールドで指定します。どちらかのリージョンを使用するよう一般的に定める法律はありません。米国の法律は米国内でのデータ保存を義務付けておらず、GDPR では標準契約条項(第 V 章)などの保護措置を講じれば、EU 域外への移転が認められています。自社の契約や顧客から求められるリージョンを選択してください。
ce = ComplyEdge(api_key="ce_eu_...") # -> https://eu.api.complyedge.io
ce = ComplyEdge(api_key="ce_...") # -> https://api.complyedge.io
上書きの優先順位は高い順に、base_url=(または COMPLYEDGE_API_URL)、次に region="us" | "eu"(または COMPLYEDGE_REGION)、次にキーのプレフィックス、最後に EU です。他方のリージョンのスタックにキーを提示すると、検索が行われる前に 401 {"detail": {"error": "wrong_region", "use": "<host>"}} が返されます。
MCP サーバー:ComplyEdge を AI エージェントのツールとして使用する
ComplyEdge の TrustLint コーパスに照らしてプロンプトと出力をチェックし、根拠を引用した検出結果を返すエージェント/MCP ツールです。EU AI Act のリスク階層を判定するチャットボットでも、法律検索データベースでもありません。
ホスト型 Streamable HTTP(リモートクライアントに推奨):
https://mcp.complyedge.io/mcp
ローカル stdio(Claude、Cursor、Inspector など、MCP 対応ホストで利用可能):
pip install 'complyedge[mcp]>=0.2.8'
python -m complyedge.mcp_server
# or: complyedge-mcp
MCP クライアントの設定に追加してください(例:claude_desktop_config.json):
{
"mcpServers": {
"complyedge": {
"command": "complyedge-mcp"
}
}
}
(python -m complyedge.mcp_server を指定する command/args も使用できます。)
公開されるツール(オフラインの TrustLint YAML ルールセット):
| ツール | 説明 |
|---|---|
check_compliance | テキストを TrustLint ルールに照らしてチェックします。根拠を引用した検出結果とともに PASS/FAIL を返します。 |
list_rules | 利用可能な TrustLint ルールを一覧表示します。管轄区域による絞り込みが可能です。 |
scan_prompt | 生成前にプロンプトをスキャンします。SAFE または RISK_DETECTED を返します。 |
これらのツールに API キーは必要ありません。オプションの追加パッケージにより、mcp と trustlint(エンジンと同梱ルール)がインストールされます。この MCP 経由の方法では、REST API ポリシーエンジンは実行されません。
オプションのホスト型サンドボックス。 サーバーの環境に COMPLYEDGE_API_KEY を設定すると、4 つ目のツールが追加されます:
| ツール | 説明 |
|---|---|
sandbox_check | サンドボックスモードでホスト型の強制適用を行います(POST /v1/sandbox/check)。テナントの実際のルールと設定を使用し、本番環境と同じ判定を返しますが、何も記録されません。監査エントリも使用量も記録されず、プランの日次上限にもカウントされません(サンドボックス呼び出しには別途、1 分あたり 60 回、1 日あたり 1,000 回の上限があります)。ルール ID と条文の引用とともに BLOCKED、または ALLOWED を返します。証拠として扱うことはできません。 |
キーがない場合、このツールは一覧に表示されず、サーバーは完全にオフラインのままです。
ホスト型サーバー(https://mcp.complyedge.io/mcp)では、sandbox_check は常に一覧に表示されます。MCP 接続時に呼び出し元が独自のキーを Authorization: Bearer <key> ヘッダーとして送信した場合にのみ機能します(MCP クライアントのヘッダーに設定してください)。キーがツールの引数として渡されたり、ログに記録されたりすることはありません。ホスト型サーバーはキーを保持しません。
ドキュメント
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。