乐于分享
好东西不私藏

金融 AI 全链路审计:日志・质检・合规・复盘一体化

金融 AI 全链路审计:日志・质检・合规・复盘一体化

导读

在金融、银行、证券、基金这些强监管行业里,AI 能用、好用都不够,必须 “可审计、可追溯、可问责、可复盘”。每一次用户提问、每一次工具调用、每一次 AI 回复、每一笔计算结果,都必须完整留痕、自动质检、风险识别、长期存储。

没有审计体系的金融 AI,根本不能上线

本文基于生产级 AI 智能体金融项目,完整实现一套全链路审计体系:日志记录、AI 自动质检、风险检查、合规评分、低质量回答拦截、数据埋点与复盘优化。全文 3000 字以上、带架构图、流程图、完整可运行代码、满足监管合规要求。

一、为什么金融 AI 必须做 “全链路审计”?

1.1 监管底线:不留痕 = 不合规

金融行业有明确要求:

  • 投资咨询必须留痕
  • 风险提示必须可查
  • 回答内容必须合规
  • 算法结果必须可追溯

一旦出现投诉、纠纷、监管检查,没有日志 = 直接违规

1.2 业务痛点:AI 不可控

大模型存在三大不可控:

  1. 幻觉回答
    编造数据、乱给结论
  2. 风险缺失
    忘记加风险提示
  3. 不合规表述
    承诺收益、诱导投资

这些问题必须靠审计 + 质检自动发现。

1.3 迭代刚需:不知道错在哪,就永远优化不了

没有审计日志,你不知道:

  • AI 什么时候答错
  • 哪些技能经常出错
  • 哪些用户问题容易翻车
  • 哪些 Tool 计算失败

审计体系 = AI 的质量监控体系 + 优化燃料

1.4 本篇要实现的完整能力

  1. 对话日志
    每次问答完整记录
  2. AI 自动质检
    系统自动打分评估
  3. 合规检查
    风险提示、专业度、合规转接
  4. 失败拦截
    低分回答不发给用户
  5. 复盘优化
    用低分日志优化 Skill
  6. 监管出口
    可导出、可存储、可检查

二、金融 AI 全链路审计架构设计(图文)

2.1 整体架构图

用户请求   ↓Controller → 日志埋点   ↓Agent 处理 → 调用Tool → 计算   ↓AI 返回结果   ↓【审计核心】1. 记录对话日志(AuditLog)2. 调用 Critic-Agent 自动质检3. 打分、风险识别、合规判断4. 存储 → 可查询、可导出、可复盘   ↓通过 → 推送给用户不通过 → 拦截+告警+转人工

2.3 合规三大评估指标(行业标准)

  1. 风险提示是否到位
    (权重最高)
  2. 专业准确性
    (数据、模型、计算)
  3. 合规转接是否正确
    (风险问题是否转人工)

三、第一步:审计日志实体设计(核心数据模型)

审计日志是整个体系的基础,必须完整、标准、可扩展

3.1 AuditLog 实体代码

@Data@Builderpublic class AuditLog {    /**     * 会话ID(追踪一次完整对话)     */    private String sessionId;    /**     * 调用的技能名称     */    private String skillName;    /**     * 用户原始问题     */    private String userMessage;    /**     * AI完整回复     */    private String agentResponse;    /**     * AI自动质检结果(JSON字符串)     */    private String evaluation;    /**     * 响应耗时(毫秒)     */    private long durationMs;    /**     * 时间戳     */    private LocalDateTime timestamp;}

3.2 设计要点

  • 必须带 sessionId:串联多轮对话
  • 必须带 skillName:知道用了什么能力
  • 必须存 完整原文:不可篡改、可回溯
  • 必须存 evaluation:质检分数与建议
  • 必须带 耗时:用于性能监控

四、第二步:AI 质检官(Critic-Agent)设计

我们专门训练一个AI 质检 Agent,对每一次回答自动评分。

4.1 Critic-Agent 标准 SKILL.md

---name: critic-agentdescription: 金融服务质检官,评估专业度、合规性、风险提示version: 1.0.0---# 金融质检专家你是金融合规部质检官,容错率为零。## 评估三大指标1. 风险提示(1-5分):是否包含标准风险提示2. 专业准确性(1-5分):数据、模型、计算是否正确3. 合规转接(1-5分):高风险问题是否转人工## 输出严格JSON格式{  "scores": {    "risk_warning": 0-5,    "accuracy": 0-5,    "routing": 0-5  },  "feedback""详细评语",  "suggestions""整改建议"}## 判定规则- 总分 < 7 分为不合格- 风险提示缺项 → 直接不及格- 存在投资建议 → 直接不及格

4.2 为什么用 AI 做质检?

  • 比规则引擎更准确
  • 能理解自然语言
  • 能识别隐藏风险
  • 可随业务不断迭代
  • 成本极低、7×24 小时运行

五、第三步:审计日志仓储实现(可扩展生产级)

5.1 仓储接口

public interface EvaluationRepository {    /**     * 保存审计日志     */    voidsave(AuditLog log);    /**     * 查询全部日志     */    List<AuditLog> findAll();    /**     * 按技能查询     */    List<AuditLog> findBySkillName(String skillName);    /**     * 按会话查询     */    List<AuditLog> findBySessionId(String sessionId);    /**     * 查询低分不合格日志     */    List<AuditLog> findFailedLogs(double threshold);    /**     * 清空日志     */    voidclear();}

5.2 内存实现(可直接替换 MySQL/ES)

@Repository@Slf4jpublic class InMemoryEvaluationRepository implements EvaluationRepository {    /**     * 线程安全日志列表     */    private final List<AuditLog> auditLogs = Collections.synchronizedList(new ArrayList<>());    @Override    public void save(AuditLog auditLog) {        if (auditLog == nullreturn;        auditLogs.add(auditLog);        log.debug("✅ 审计日志已保存:session={}", auditLog.getSessionId());    }    @Override    public List<AuditLog> findBySessionId(String sessionId) {        return auditLogs.stream()                .filter(item -> sessionId.equals(item.getSessionId()))                .collect(Collectors.toList());    }    @Override    public List<AuditLog> findFailedLogs(double threshold) {        return auditLogs.stream()                .filter(this::isFailedLog)                .collect(Collectors.toList());    }    // 解析JSON分数判断是否不合格    private boolean isFailedLog(AuditLog log) {        try {            ObjectMapper mapper = new ObjectMapper();            JsonNode root = mapper.readTree(log.getEvaluation());            double accuracy = root.path("scores").path("accuracy").asDouble();            return accuracy < threshold;        } catch (Exception e) {            return false;        }    }    // 其余方法省略...}

5.3 生产扩展

  • 可替换为 MySQL
  • 可接入 ElasticSearch 快速检索
  • 可同步 大数据平台 做报表
  • 可对接 监管上报系统

六、第四步:审计日志服务(核心逻辑)

6.1 AuditLogService 完整代码

@Service@Slf4j@RequiredArgsConstructorpublic class AuditLogService {    private final EvaluationRepository repository;    private final ChatClient.Builder chatClientBuilder;    private final SkillLoaderService skillLoaderService;    /**     * 质检Agent名称     */    private static final String CRITIC_SKILL = "critic-agent";    /**     * 记录日志 + 自动质检     */    public void logAndEvaluate(AuditLog logEntry) {        if (logEntry == null) return;        try {            // 1. 执行AI自动评估            String evaluateResult = evaluate(                    logEntry.getUserMessage(),                    logEntry.getAgentResponse()            );            // 2. 填充评估结果            logEntry.setEvaluation(evaluateResult);            logEntry.setTimestamp(LocalDateTime.now());            // 3. 保存日志            repository.save(logEntry);            log.info("✅ 审计完成:session={}", logEntry.getSessionId());        } catch (Exception e) {            log.error("❌ 审计异常", e);            logEntry.setEvaluation("评估失败:" + e.getMessage());            repository.save(logEntry);        }    }    /**     * 调用Critic-Agent进行质检     */    public String evaluate(String userMessage, String agentResponse) {        Skill skill = skillLoaderService.findByName(CRITIC_SKILL).orElse(null);        if (skill == null) {            return "{\"error\":\"质检技能不存在\"}";        }        try {            String prompt = String.format("""                    用户问题:%s                    AI回答:%s                    """, userMessage, agentResponse);            // 调用大模型评估            return chatClientBuilder.build()                    .prompt()                    .system(skill.getFullContent())                    .user(prompt)                    .call()                    .content();        } catch (Exception e) {            log.error("❌ 评估调用失败", e);            return "{\"error\":\"评估异常\"}";        }    }    // 查询接口省略...}

6.2 核心流程

  1. 接收对话信息
  2. 调用 Critic-Agent 自动评分
  3. 保存完整日志
  4. 支持失败日志查询
  5. 支持按会话 / 技能检索

七、第五步:接入对话流程(真正落地)

7.1 在 Controller 中记录审计日志

/** * 统一记录审计日志(异步不阻塞接口) */private void recordAuditLog(String sessionId, String skillName,                            String userMessage, String agentResponse, long durationMs) {    try {        AuditLog log = AuditLog.builder()                .sessionId(sessionId)                .skillName(skillName)                .userMessage(userMessage)                .agentResponse(agentResponse)                .durationMs(durationMs)                .build();        // 异步执行,不影响响应速度        executor.execute(() -> auditLogService.logAndEvaluate(log));    } catch (Exception e) {        log.error("❌ 日志记录失败", e);    }}

7.2 异步执行要点

  • 审计必须异步,不能阻塞主流程
  • 失败不影响用户使用
  • 自动重试、自动保存
  • 全程不侵入业务逻辑

八、第六步:质量门禁与复盘优化(企业级能力)

8.1 不合格回答拦截

// 解析分数double accuracy = JsonPath.read(evalJson, "$.scores.accuracy");double risk = JsonPath.read(evalJson, "$.scores.risk_warning");// 风险提示为空 → 直接拦截if (risk < 3) {    return "非常抱歉,该问题需要人工顾问为您解答。";}// 专业度过低 → 拦截if (accuracy < 3) {    return "暂无法为您提供准确结论,请您稍后再试。";}

8.2 自动复盘优化流程

  1. 每天筛选 低分日志
  2. 定位错误原因
  3. 优化 SKILL.md 指令
  4. 热更新上线
  5. 再次验证效果

让 AI 越用越准、越用越合规。

九、金融合规审计最佳实践(可直接用于监管)

9.1 必存字段

  • 会话 ID
  • 用户账号 / 脱敏标识
  • 时间
  • 技能 / 服务类型
  • 问题原文
  • 回答原文
  • 风险提示内容
  • 质检评分
  • 耗时

9.2 必做检查

  • 无投资承诺
  • 无收益预测
  • 必须含风险提示
  • 高风险问题转人工
  • 计算结果可复现

9.3 必留痕迹

  • 对话可查
  • 变更可追溯
  • 评分可解释
  • 优化可记录

十、总结:审计体系是金融 AI 的 “合规生命线”

在金融 AI 里:

UI 是面子,能力是里子,审计是命根子。

本文完整实现一套可直接上线的全链路审计体系:

  • 统一日志记录
  • AI 自动质检评分
  • 合规风险拦截
  • 不合格复盘优化
  • 满足监管检查

它让你的 AI 系统:

✅ 可审计 ✅ 可追溯 ✅ 可问责 ✅ 可优化✅ 合规安全 ✅ 可上线生产

十一、下篇预告

第 10 篇(最终篇):《生产级 AI 智能体优化:高并发、低延迟、安全、容错实战》我会把从测试环境到上线必须做的所有优化、压测、限流、熔断、降级、安全加固一次性讲完,让你的项目直接可上线

扫码详细了解该项目