关于 ComplyEdge TrustLint: offline EU AI Act compliance checks
ComplyEdge TrustLint 是用于离线合规检查的命令行工具,可按 EU AI Act、GDPR 和 HIPAA 规则检查项目。它适合需要在本地进行规则审查的开发者;与托管 ComplyEdge API 客户端不同,TrustLint 无需 API 密钥。
主要功能
- 01离线检查 EU AI Act 规则
- 02覆盖 GDPR 与 HIPAA 规则
- 03作为独立命令行工具运行
- 04可通过 GitHub Action 使用
适用场景
- 01在发布前检查 AI 项目合规项
- 02在 CI 流程中运行离线规则检查
MCP 相关
README 未说明 TrustLint 离线命令行工具与 MCP 的关系。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
3收录的工具列表 · 更新于 1 天前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| text | string | 是 | 要评估的非空文本。 |
| jurisdiction | enum | 否 | 可选的语料范围。EU | US | GLOBAL |
详细介绍
ComplyEdge Python SDK
证明 AI 做出了什么决定,而不保留它看到的内容。每个请求和回答都会根据引用法律条文的欧盟 AI 法案公开规则进行检查:每项决定一条记录,绝不复制文本。
选择合适的包
complyedge 是用于托管 ComplyEdge 运行时 API 的 Python 客户端。它
会在你的应用中强制执行策略决定,并记录由此产生的
证据链。如需无需 API 密钥的离线命令行检查工具,请改用
TrustLint。
安装
pip install complyedge
快速入门:三行实现欧盟 AI 法案合规
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
就是这样。每个输入和输出都会根据欧盟 AI 法案规则集(第 5 条、第 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 检查并记录的是这条提示词或输出。此处的第 50 条针对未标注或欺骗性使用,而非 C2PA 水印。
每行都是一种替代方案;选择你需要的即可。
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 系统的输出在欧盟使用,欧盟 AI 法案就适用,无论提供者或部署者在哪里设立(第 2 条第 1 款 (c) 项)。默认值:EU。
| 值 | 托管 API 确定性强制执行的内容 |
|---|---|
EU | 欧盟 AI 法案:第 5 条禁止的实践,以及第 6 条高风险、第 50 条和 GPAI(第 51 至 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 第 5 条第 1 款 (c) 项和第 32 条第 1 款。
@compliance_check(jurisdiction="EU", agent_id="hr-screening")
def hr_screening(candidate: str) -> str:
return llm.generate(candidate)
按规则限定范围(例如仅检查第 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() 和异步客户端接受相同的三个关键字参数;这些参数会覆盖 context 中相同的键。请使用你自己的系统中的稳定标识符,绝不要使用姓名或电子邮件地址。user_id 和 session_id 会使用你账户自己的密钥存储为带密钥的假名(p1:...),而不是以发送时的形式存储;user_role 则按发送内容存储,因此必须填写角色,而不是个人。
切勿在这些字段中发送凭据:登录令牌、会话 Cookie、JWT 或 API 密钥会出现在每条审计记录和导出中。如果你的会话 ID 同时也是登录令牌,请发送其哈希值(例如 SHA-256 的前 16 个十六进制字符)。ComplyEdge 会在写入记录前,将任何看起来像令牌或密钥的值替换为 redacted: 加上其哈希值。
证明某条记录对应给定文本
ComplyEdge 绝不会存储提示词或答案。记录会保留 text_hash,即使用你账户自己的密钥对输入计算的带密钥哈希值(HMAC-SHA-256),因此无法在本地重新计算。请将 event_id 与你自己的文本副本保存在一起,需要证明两者对应关系时向 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 class 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:使用相同的规则、相同的租户设置并给出相同的判定,但不会创建审计记录、产生用量,也不会计入套餐的每日限额(沙盒调用有自己的限额:每分钟 60 次、每天 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(或在「其他活动密钥」下的某一行点击 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 会显示同一个公司名称:即控制面板「Account」下「Profile」中设置的名称。PATCH /v1/tenant/trust 中的 display_name 会设置相同的值,因此 API 调用和个人资料中的名称始终一致。电子邮件地址用于登录,无法在控制面板中更改。
区域
有两个区域,每个账户只能选择一个所属区域。注册并创建第一个 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 允许在采取保障措施(例如标准合同条款(第五章))的情况下向 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 Agent 工具
用于根据 ComplyEdge 的 TrustLint 规则库检查提示词和输出,并提供带引用的检查结果的 Agent/MCP 工具:它不是又一个欧盟《人工智能法案》风险等级聊天机器人,也不是法律搜索数据库。
托管的 Streamable HTTP(推荐用于远程客户端):
https://mcp.complyedge.io/mcp
本地 stdio,适用于任何兼容 MCP 的宿主(Claude、Cursor、Inspector):
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"
}
}
}
(command/args 中使用 python -m complyedge.mcp_server 也有效。)
提供的工具(TrustLint 离线 YAML 规则集):
| 工具 | 描述 |
|---|---|
check_compliance | 根据 TrustLint 规则检查文本。返回 PASS/FAIL,并提供带引用的检查结果。 |
list_rules | 列出可用的 TrustLint 规则,可按司法管辖区筛选。 |
scan_prompt | 生成前提示词扫描。返回 SAFE 或 RISK_DETECTED。 |
这些工具无需 API 密钥。可选附加组件会安装 mcp 和 trustlint(引擎及捆绑规则)。此 MCP 路径不会运行 REST API 策略引擎。
可选的托管沙盒。 在服务的环境中设置 COMPLYEDGE_API_KEY,即可启用第四个工具:
| 工具 | 描述 |
|---|---|
sandbox_check | 沙盒模式下的托管强制执行(POST /v1/sandbox/check):使用你所在租户的真实规则和设置,判定结果与生产环境相同,且不会记录任何内容:没有审计条目、不会产生用量,也不会计入套餐的每日限额(沙盒调用有单独的上限:每分钟 60 次、每天 1,000 次)。返回带规则 ID 和条文引用的 BLOCKED,或 ALLOWED。绝不可作为证据。 |
没有密钥时,该工具不会列出,服务也会保持完全离线。
在托管服务(https://mcp.complyedge.io/mcp)上,sandbox_check 始终会列出,且仅当调用方在 MCP 连接上通过 Authorization: Bearer <key> 标头发送自己的密钥时才可使用(在 MCP 客户端的标头中设置)。密钥绝不会作为工具参数,也绝不会被记录;托管服务不会保存密钥。
文档
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。