2026-09-05 · 原文发布日
用OpenAI和表格搭建欧盟AI法案风险台账
面向需要梳理内部AI系统合规状况的团队:员工通过n8n表单提交系统用途、数据类型和决策影响等信息,流程先做关键词预检标记附件III高风险领域,再交给gpt-4.1-mini给出风险分级、相关条款和义务说明,写入Google Sheets台账并标注待人工复核。被禁、高风险或不明确的条目会通过SMTP邮件通知管理层和数据保护官。需要OpenAI密钥、Google表格和邮箱三项配置。
原文要点
原模板用n8n表单收集内部AI系统申报(用途、数据类型、决策影响、是否对外可见等),先做关键词预检标记附件III高风险领域并判断是否可能适用第50条透明度义务;再把规范化申报交给OpenAI gpt-4.1-mini,要求以严格JSON给出风险分级、相关条款、理由、义务与待澄清问题。随后代码校验:拒绝未知分级、预检命中附件III时上调为高风险、输出对外时追加第50条义务。记录追加到Google Sheets的「AI inventory」页并标注「待人工复核」;被禁、高风险或不明确的条目经SMTP邮件通知管理层并抄送数据保护官,其余条目标记下次复核日期。模板免费,需OpenAI密钥、Google表格与SMTP邮箱。
这次做成什么
在n8n中按原模板思路独立搭一条「表单申报→关键词预检→gpt-4.1-mini分级→校验修正→台账→按需告警」流程,并用三条虚构申报(含一条高风险、一条普通、一条不清晰)验证分支与邮件行为。
准备什么
- n8n实例并能发布n8n Form表单
- OpenAI API密钥且账号可用gpt-4.1-mini(原模板指定型号,需在节点确认)
- Google账号与一个含「AI inventory」工作表的Sheet
- 一个可发信的SMTP邮箱(可用测试邮箱服务),及管理层与DPO收件地址
具体怎么做
发布n8n申报表单
新建工作流,用n8n Form Trigger建表单,字段:system_name(系统名称)、purpose(用途,多行文本)、data_types(处理的数据类型)、decision_impact(对个人/业务决策的影响)、external_visibility(输出是否对公司外部可见,是/否)、submitter(提交人邮箱)。发布表单拿到内部URL,表单说明里注明勿在自由文本填个人敏感信息。
规范化与关键词预检
表单后接Code节点:生成report_id(如AI-2026-0001)、把文本统一小写,用下方附件III关键词表匹配purpose与data_types,命中即annex3_flag=true;external_visibility=是则art50_flag=true。关键词表按所在行业术语自行扩充(原模板也建议扩展)。
调用gpt-4.1-mini分级
加OpenAI节点,模型选gpt-4.1-mini,使用下方分级提示词,把规范化后的申报JSON作为用户消息传入,要求模型只输出含risk_class、provision、reasoning、obligations、open_questions的严格JSON,响应格式设为JSON模式。
校验与修正
再接Code节点执行规则:risk_class不在[prohibited,high,limited,minimal,unclear]内则改为unclear;annex3_flag=true且模型未判high时上调为high并注明原因;art50_flag=true时在obligations追加「第50条:对外输出需做AI透明度披露」。任何修正都写入validation_notes留痕。
写入Sheets台账
Google Sheets节点以Append模式写入「AI inventory」页,列:report_id,system_name,purpose,risk_class,provision,obligations,status,next_review,submitted_at。status固定写「Proposal - human review pending」,next_review对非告警条目写90天后日期。
按需邮件告警
IF节点判断risk_class属于prohibited/high/unclear时走SMTP Send Email节点:收件人为管理层、抄送DPO,正文含report_id、系统名、分级、理由与open_questions;其余条目不发信,仅留在台账等待周期复核。用下方三条测试数据分别验证各分支。
可直接复制的材料
附件III关键词预检表(Code节点用)
本站编写示例,对应原模板「关键词匹配标记附件III领域」的预检思路;请按行业术语增删词条,关键词命中只是预检信号,最终分级由校验规则与人工复核决定。
const ANNEX3_KEYWORDS = ['招聘','简历筛选','信贷','信用评分','福利资格审核','执法','边境','生物识别','人脸识别','关键基础设施','教育录取','考试成绩','医疗分诊','保险定价'];
const text = (($json.purpose||'') + ' ' + ($json.data_types||'')).toLowerCase();
const hits = ANNEX3_KEYWORDS.filter(k => text.includes(k.toLowerCase()));
return [{ json: { ...$json, report_id: 'AI-2026-' + String(Date.now()).slice(-6), annex3_flag: hits.length > 0, annex3_hits: hits, art50_flag: ($json.external_visibility === '是') } }];EU AI Act分级提示词(gpt-4.1-mini)
本站独立编写,对应原模板让模型产出分级、条款、理由、义务与待澄清问题的设计;最终结论须人工复核,模型输出只是提案。
你是欧盟AI法案(EU AI Act)合规分析助手。根据用户消息中的AI系统申报JSON,提出风险分级建议。只允许从以下五类中选一个:prohibited(第5条被禁实践)、high(附件III高风险)、limited(有限风险/透明度义务)、minimal(最低风险)、unclear(信息不足无法判断)。只输出JSON:{"risk_class":"五类之一","provision":"最相关条款编号","reasoning":"100字内理由","obligations":["义务1","义务2"],"open_questions":["待澄清问题"]}。规则:1) 不确定时选unclear而不是猜测;2) 不要输出JSON以外的任何文字;3) obligations最多四条,引用条款编号。校验修正代码(OpenAI之后的Code节点)
本站编写示例,落实原模板「拒绝未知分级、预检命中上调高风险、对外输出追加第50条」三条校验规则;$('Normalize')请换成你预检节点的实际名称。
const VALID = ['prohibited','high','limited','minimal','unclear'];
const pre = $('Normalize').first().json;
const notes = [];
let p;
try {
p = typeof $json.output === 'string' ? JSON.parse($json.output) : $json;
} catch (e) {
p = { risk_class: 'unclear', provision: '', reasoning: '模型输出无法解析为JSON', obligations: [], open_questions: ['原始输出需人工查看'] };
notes.push('JSON解析失败,已按unclear处理');
}
if (!VALID.includes(p.risk_class)) { notes.push('未知分级已改为unclear'); p.risk_class = 'unclear'; }
if (pre.annex3_flag && p.risk_class !== 'high' && p.risk_class !== 'prohibited') { notes.push('附件III关键词命中(' + pre.annex3_hits.join('/') + '),上调为high'); p.risk_class = 'high'; }
if (pre.art50_flag) { p.obligations = p.obligations || []; if (!p.obligations.some(o => o.includes('50'))) { p.obligations.push('第50条:对外输出需进行AI透明度披露'); notes.push('已追加第50条义务'); } }
p.validation_notes = notes;
p.report_id = pre.report_id;
return [{ json: p }];AI inventory页表头与测试数据
本站合成的三条练习数据,分别触发高风险告警、静默入库、不清晰告警三分支;C还因对外可见触发第50条义务追加。
表头:report_id,system_name,purpose,risk_class,provision,obligations,status,next_review,submitted_at\n\n测试申报A(应判high):purpose=对求职者做简历筛选与面试排序,data_types=简历文本与学历信息,decision_impact=决定是否进入面试,external_visibility=否\n测试申报B(应判minimal/limited):purpose=内部会议纪要自动摘要,data_types=会议录音转写文本,decision_impact=无对外决策,external_visibility=否\n测试申报C(应判unclear):purpose=客户情绪分析,data_types=未说明,decision_impact=未填写,external_visibility=是输入与输出示例
本站虚构演示,未实际调用OpenAI;模型输出为示意写法,真实措辞以运行结果为准。
输入
提交测试申报A:系统名「招聘初筛助手」,purpose=对求职者做简历筛选与面试排序,data_types=简历文本与学历信息,decision_impact=决定是否进入面试,external_visibility=否。对应输出
预检节点命中关键词「招聘」「简历筛选」,annex3_flag=true;gpt-4.1-mini返回{"risk_class":"high","provision":"Annex III 4(b)","reasoning":"用于就业招聘筛选,属附件III高风险领域","obligations":["建立风险管理体系","数据治理与记录留存","人工监督机制"],"open_questions":["是否涉及欧盟境内求职者"]};校验节点无需上调,台账追加一行status=Proposal - human review pending,SMTP向管理层发信并抄送DPO,正文含report_id与待澄清问题。做完检查这些
- 附件III关键词命中的申报,即使模型判低分级,最终落表也是high并在validation_notes中留痕
- risk_class为prohibited、high或unclear时管理层收到邮件且DPO在抄送列,其他分级不触发任何邮件
- 对外可见的条目obligations中含第50条透明度义务,且台账status统一为Proposal - human review pending
- 模型返回非五类分级或非法JSON时流程不崩溃,条目以unclear入库并提请人工澄清
容易卡住的地方
- gpt-4.1-mini需账号实际可用该型号,订阅与API计费以OpenAI页面为准,原模板未标注费用
- 关键词表过于宽泛会大量误上调high,先小范围试运行再扩充词条
- 自由文本可能混入个人敏感信息;原模板建议涉及个人数据时换本地托管模型,并提醒提交人勿填敏感内容
- 原页面未给出Sheets列名清单与完整校验代码,落表前需在下载模板内核对字段映射;本指南代码为本站重写示例
- AI分级仅是提案,不能当作合规结论;被禁实践的最终判定必须人工完成
本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。
- 原文标题
- Build an EU AI Act risk inventory with OpenAI and Google Sheets
- 原作者
- diekiagentur
- 原始发布日期
- 2026-09-04T19:06:57.830Z
- 来源
- https://n8n.io/workflows/19221