合规风险 Agent
本页说明合规风险 Agent 如何在受控权限下巡检自有站点与营销物料中的表述是否触碰禁用 claims 或监管红线,并结合公开监管公告输出带证据的风险清单。读完本页,你能理解这个场景需要哪些模块、什么时候才需要交互式确认,以及禁用清单和法规版本为什么必须来自受控规则库而不是 Memory。
适用场景
合规团队需要关注监管公告、政策变化、行业风险和内部业务影响,同时确保自有官网、落地页和营销物料中的表述不触碰禁用 claims 或监管红线。物料量大、更新频繁,人工逐页核对跟不上发布节奏;等监管函件到了再回查,往往连"当时页面写了什么"都难以还原。
典型触发时机:
- 监管机构发布新的表述限制或行业指引,需要排查现有物料是否受影响。
- 大型 campaign 上线前,需要巡检全部落地页和物料表述。
- 定期合规巡检周期到期,需要输出本期风险清单和证据存档。
工程挑战
- 判定依据必须受控:禁用 claims 清单和法规条目是有版本、有生效时间的合规资产,任何"从记忆里召回"的规则都可能是过期口径——依据错误的清单产出结论,比漏检更危险。
- 取证要求高于一般巡检:监管回查时需要还原"当时页面写了什么、依据哪一版清单判定";没有截图、原文摘录和时间戳的疑似项没有证据价值。
- 输出定位边界敏感:巡检工具的输出一旦被当成合规结论,就会替代本应由合规团队作出的专业判断——输出必须严格限定为审计数据基础,不作合规符合性断言。
模块组合
| 模块 | 角色 | 说明 |
|---|---|---|
| GenAuth | 核心 | 运行时以静默委托签发短时效凭证(所有产品调用必需);本场景默认无需交互式确认,接入登录态或写动作时才升级 interactive。凭证每期新签、可撤销。 |
| Web Agent | 核心 | 用 Track 巡检自有站点和物料页面,按确定性规则比对禁用 claims 清单;通过 WebSearch 搜索监管网站和公开法规资料,保留全部来源。 |
| GUMem | 不使用 | 禁用 claims 清单和法规版本是受控合规资产,必须来自你的受控规则库(policy store)并按版本引用;风险清单、证据和合规团队的最终判断归档到你的审计存储。都不属于 Memory。 |
何时需要交互式确认
所有产品调用都需要 GenAuth 委托令牌;公开只读场景用静默委托即可。这个场景的主要对象是自有站点公开页和公开监管资料,静默委托(delegateToken 不带 mode: 'interactive')即可覆盖:凭证短时效、可随时撤销,周期巡检每期新签发。只有以下情况需要升级为交互式确认,由合规负责人在 Qoni Console 确认:
- 巡检需要登录的物料后台或 CMS 预览。
- 委托范围要扩大到新的业务线或地区。
注意:SDK 示例申请的是产品级 scope(如 webagent.do_anything:read)。业务线、地区和页面范围这类细粒度边界由 GenAuth 的 Agent Profile 或策略层配置强制执行,不由任务 prompt 承担;本页示例未展示该配置。完整语义见 Delegate Token 与缩权。
工作流程
合规团队提交巡检范围:业务线、地区、物料清单。
GenAuth 下发本期巡检的只读委托凭证。
应用从受控规则库读取当前版本的禁用 claims 清单和适用法规条目,注入任务描述。
Web Agent 通过 WebSearch 查询相关监管公告和法规更新,记录来源。
Web Agent 用 Track 巡检自有站点和物料页面,按确定性规则比对表述与禁用 claims 清单。
检查点:每个疑似触碰项都必须留存页面截图、原文摘录和来源 URL;无证据的疑似项不进入风险清单。
应用侧校验输出契约:缺少证据来源或规则编号的疑似项直接丢弃;风险清单与证据指针按清单版本归档到你的审计存储。
Agent 输出风险清单、证据、待人工确认项和 audit id,移交合规团队。
检查点:交付物应明确标注"提供审计数据基础,不作合规符合性断言";最终判断由合规团队作出。
示例代码
下面的示例使用官方 Qoni SDK(@qoniai/qoni)把这个场景接到你的服务端:静默委托 → 从受控规则库读取禁用清单与法规版本 → 一次 doAnything.run() 启动本期只读巡检并用 events() 事件流消费执行过程 → 解析并校验风险清单。周期巡检由你的应用按计划调度重跑。
import { Qoni, QoniScopes } from '@qoniai/qoni'
const qoni = new Qoni({
accessKey: process.env.QONI_ACCESS_KEY!,
secretKey: process.env.QONI_SECRET_KEY!,
})
export async function runComplianceCycle(ownedPages: string[]) {
// 1. 静默委托:巡检自有站点公开页,不涉及第三方登录
// (周期巡检由你的应用调度,每期签发新凭证;
// 需要登录授权后台时改用 mode: 'interactive',由合规负责人确认)
const { data: grant } = await qoni.delegateToken({
user: { id: process.env.QONI_USER_ID! },
agent: 'compliance-risk',
scopes: [QoniScopes.DO_ANYTHING_READ, QoniScopes.DO_ANYTHING_MANAGE],
})
// 2. 巡检前:从受控规则库读取当前版本的禁用清单与法规条目(不是 Memory)
const policy = await loadCompliancePolicy() // 例如 { version: '2026-08', forbiddenClaims: [...], regulations: [...] }
// 3. 启动本期只读巡检:比对表述、留存证据、只输出风险清单
const run = await qoni.doAnything.run({
token: grant.token,
prompt: `
Patrol these owned pages: ${ownedPages.join(', ')}.
Compare wording against the compliance policy below. For every suspected
item, keep a page screenshot, a verbatim excerpt and the source URL, and
return items as a JSON array of { page, quote, ruleId, sourceUrl }
objects. Also check public regulatory announcements for updates and
record their sources. Read only: never edit materials or take pages
down. Output an audit data foundation only — make no compliance
conformity assertion; mark undecidable items as pending human judgment.
Compliance policy (version ${policy.version}):
${JSON.stringify(policy)}
`,
capture: { screenshots: true },
})
// 4. 用事件流消费执行过程:进度留痕,登录墙转交合规专员
let output = ''
for await (const event of run.events()) {
if (event.type === 'progress') appendTrace(event.data)
if (event.type === 'interaction') notifyComplianceOfficer(event.data) // 需登录的物料页交给合规专员
if (event.type === 'done') output = event.data.output
}
// 5. 应用侧校验输出契约:缺证据来源或规则编号的疑似项直接丢弃
const riskItems = parseRiskItems(output).filter((i) => i.sourceUrl && i.ruleId)
// 风险清单与证据指针按清单版本归档到你的审计存储(不是 Memory)
await archiveRiskList(riskItems, policy.version)
return {
riskItems, // 审计数据基础,不作合规符合性断言
policyVersion: policy.version,
audit: { auditId: grant.auditId, permissionBoundary: grant.grantedScopes },
}
}输出结构由任务描述约定:这里约定返回 { page, quote, ruleId, sourceUrl } 数组,应用侧 parseRiskItems 负责解析与校验,任何缺少 sourceUrl 或 ruleId 的条目被直接丢弃。SDK 顶层只返回通用的 RunResult(runId、status、output、artifacts 等);events() 的事件类型常量见 QoniEventTypes。
数据与记忆边界
这个场景涉及四类数据,都不需要进入 GUMem:
- 版本化规则:禁用 claims 清单、法规条目及其生效时间——放在受控规则库(policy store)里按版本管理,每条风险项引用清单版本号。
- 业务状态:风险清单、证据(截图、原文摘录、来源 URL)、合规团队的最终判断——按清单版本归档到你的审计存储,供监管回查。
- 审计记录:
grantId与auditId构成的委托与行为链——由 GenAuth 维护。 - 用户 Memory(可选):这个场景默认不召回也不写回;合规判定依据必须全部来自受控规则库,不接受来自 Memory 的规则。
失败处理
| 情况 | 推荐处理 |
|---|---|
| 物料页面需要登录且登录态失效 | 任务挂起,通知合规专员重新登录,从断点继续巡检。 |
| 监管来源页面无法访问 | 保留失效记录,相关风险项标注为依据不完整,不引用缓存内容替代。 |
| 规则库读取失败或清单版本缺失 | 中止本期巡检并告警,不使用缓存或上一期清单继续。 |
| 表述疑似触碰但规则无法确定性判定 | 保留证据并标注为待人工判断,不由 Agent 直接定性为违规或合规。 |
生产注意点
合规结论应标注来源和不确定性,不能替代专业法律意见。Agent 输出的是审计数据基础——风险清单、证据和来源——而不是合规符合性断言;是否违规、如何整改的最终判断归合规团队。巡检只读,不修改或下线任何物料;每期风险清单都应绑定禁用清单版本号,清单更新后旧结论不追溯改判。
下一步
- 阅读 授权与浏览器沙盒 了解受控会话的安全边界。
- 阅读 快速开始 跑通 Agent 身份与委托的最短路径。
- 继续查看 竞争情报 Agent 了解相邻的公开信息收集场景。