NocoBase 新增结构化 AI 使用记录:从调用留痕到可审计运营

2026-07-13 42 预计阅读时间: 1 分钟
来源: oschina.net AI 摘要 Original link

Disclaimer: This article is an AI-assisted summary. Read it together with the original source when precision matters. The summary may omit context, version differences, or edge cases and is not official documentation.

预计阅读时间:9 分钟

NocoBase 的近期更新加入了结构化 AI 使用记录。对正在把大模型能力接入业务流程的团队来说,这类记录不只是“多了一张日志表”:它让一次 AI 调用可以被查询、统计和审计,也为成本核算、故障排查与提示词迭代提供数据基础。

本轮更新仍沿用 mainnextdevelop 三个分支。团队在尝试 AI 相关新功能时,需要先选对分支,再决定记录哪些字段、如何控制敏感数据,以及怎样把日志转化为可操作的指标。

为什么 AI 调用需要结构化记录

普通文本日志适合临时排错,却很难回答运营问题。例如,团队可能需要知道:

  • 哪个工作流调用 AI 最频繁;
  • 某个模型的失败率是否突然升高;
  • 输入、输出分别消耗了多少 token;
  • 用户最终是否采纳了生成结果;
  • 哪个提示词版本带来了更稳定的结果。

结构化记录的关键,是把一次调用拆成稳定字段,而不是把所有信息塞进一段文本。一个可用于实践的最小模型通常包括:

字段 用途
request_id 串联业务请求、AI 调用与错误日志
workflow 标识调用来自哪个业务流程
model 记录实际使用的模型
prompt_version 比较不同提示词版本
input_tokens / output_tokens 分析用量与成本
latency_ms 定位响应变慢的问题
status 区分成功、失败和超时
created_at 支持时间范围统计

来源摘要没有给出 NocoBase 该功能的具体字段和接口,因此上表应视为建模建议,而不是产品内置字段清单。落地时应以当前版本中的实际数据表和插件配置为准。

三个分支该怎么选

NocoBase 当前维护三个更新分支,它们对应不同的稳定性预期:

  • main:目前最稳定,推荐用于正式安装和生产环境。
  • next:包含即将发布并经过初步测试的功能,仍可能存在已知或未知问题,适合测试用户提前体验并反馈。
  • develop:面向持续开发。摘要没有提供其稳定性承诺,不应默认适合承载生产数据。

如果目标是验证结构化 AI 使用记录,可以在隔离环境尝试 next;如果生产系统更看重稳定性,则应继续使用 main,等待目标能力进入稳定版本。无论选择哪个分支,都不要直接拿生产数据库做首次升级测试。

可以用下面的检查清单约束升级流程:

# 进入现有部署目录后,先确认当前分支和工作区状态
git branch --show-current
git status --short

# 获取远端更新,但暂不修改当前工作区
git fetch --all --prune

# 查看三个远端分支最近一次提交
git log -1 --oneline origin/main
git log -1 --oneline origin/next
git log -1 --oneline origin/develop

执行前需要把仓库远端名称确认成实际使用的 origin。升级之前还应备份数据库、附件和环境配置,并在测试实例中执行同样的迁移流程。

可以这样实践:先定义一条可查询的 AI 记录

在尚未确认 NocoBase 当前版本具体 API 的情况下,可以先用一个本地脚本验证数据模型。下面的 Python 示例不依赖第三方包,会创建 SQLite 数据库、写入一条模拟 AI 调用记录,并按工作流汇总调用次数、token 数和平均延迟。

将代码保存为 ai_usage_demo.py,然后运行 python ai_usage_demo.py

import sqlite3
import uuid
from datetime import datetime, timezone

DB_PATH = "ai_usage.db"

with sqlite3.connect(DB_PATH) as conn:
    conn.execute("""
        CREATE TABLE IF NOT EXISTS ai_usage (
            request_id TEXT PRIMARY KEY,
            workflow TEXT NOT NULL,
            model TEXT NOT NULL,
            prompt_version TEXT NOT NULL,
            input_tokens INTEGER NOT NULL,
            output_tokens INTEGER NOT NULL,
            latency_ms INTEGER NOT NULL,
            status TEXT NOT NULL,
            created_at TEXT NOT NULL
        )
    """)

    conn.execute(
        """
        INSERT INTO ai_usage VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
        """,
        (
            str(uuid.uuid4()),
            "customer-summary",
            "example-model",
            "v3",
            820,
            214,
            1460,
            "success",
            datetime.now(timezone.utc).isoformat(),
        ),
    )

    rows = conn.execute("""
        SELECT
            workflow,
            COUNT(*) AS calls,
            SUM(input_tokens + output_tokens) AS total_tokens,
            ROUND(AVG(latency_ms), 1) AS avg_latency_ms
        FROM ai_usage
        GROUP BY workflow
        ORDER BY calls DESC
    """).fetchall()

for workflow, calls, total_tokens, avg_latency_ms in rows:
    print({
        "workflow": workflow,
        "calls": calls,
        "total_tokens": total_tokens,
        "avg_latency_ms": avg_latency_ms,
    })

预期输出类似:

{'workflow': 'customer-summary', 'calls': 1, 'total_tokens': 1034, 'avg_latency_ms': 1460.0}

验证字段能够回答实际问题后,可以在 NocoBase 中建立对应的数据表和视图,再通过当前版本支持的工作流节点、插件或 API 写入记录。接口路径、鉴权方式和字段映射必须根据实际安装版本调整,不应直接假设存在某个固定端点。

记录越完整,数据治理压力越大

AI 使用记录可能包含客户资料、内部文档片段、提示词和模型输出。为了排查问题而保存完整输入输出,很容易扩大敏感数据的暴露范围。

建议至少设置以下边界:

  • 默认记录模型、token、耗时、状态和业务标识,不默认保存完整提示词与输出;
  • 对邮箱、手机号、证件号和访问令牌进行脱敏;
  • 为日志表配置独立权限,限制批量导出;
  • 明确保留周期,到期删除或聚合原始记录;
  • 记录 prompt_version,但不要把密钥写入提示词或日志;
  • 对失败率、超时率和用量突增建立告警。

上线前的取舍

结构化 AI 使用记录最适合从“小而稳定”的字段集合开始。先确保每条记录都能关联到业务流程和请求 ID,再补充成本、质量反馈等字段。过早保存全部上下文,会增加存储、权限和合规负担;字段过少,又无法解释模型为何变慢或成本为何上涨。

生产环境优先采用 main。需要验证新能力时,在独立数据库和隔离实例中评估 next,确认迁移、权限、脱敏和回滚流程后再扩大范围。真正有价值的 AI 日志,不是记录得最多,而是能够持续回答成本、稳定性和业务效果三个问题。


相关推荐