前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
返回 AI 情报前线
All News · 全部资讯9686
  • Odyssey-3开放实时世界生成预览
  • 提示注入清洗中间件的设计与部署失败复盘
  • Helicon 为 Muse 编程代理提供桌面界面
  • Kotlin 健身教练用端侧视觉保护视频隐私
  • 用 AWS CLI 核算 Bedrock 单次调用费用
  • 视频生成先验输入,减少无效调用
  • OpenAmer探索不抢鼠标的桌面自动化
  • AI 开发提效要靠交付流程与质量检查
  • 如何测量语言选择对AI编码成本的影响
  • AI重命名漏掉字符串引用的隐蔽故障
  • 两万余市场实测:Jev 不敌市场价格
  • 让自主 Agent 可追踪、可恢复、可计费
  • TwinBench 用成对题检验 Agent 规则执行
  • 原子写入为何守不住模型重试次数
  • 三智能体论文审查检出七成核心论断错误
  • 给多Agent加上预算限制与人工审批
  • AgentSec 用对抗测试排查智能体安全漏洞
  • 美团如何用统一模型承接外卖多业务精排
  • Safari 空白页如何卡住 MCP 权限校验
  • 会议录音应用的说话人识别与检索踩坑
  • 给 AI 产品文档加一道事实校验关
  • 防止 Agent 靠修改测试制造假通过
  • 故意破坏代码,揭穿回归检查的假绿灯
  • 模型版本变了,评测分差就不能直接比较
  • JetBrains 版 Copilot 增强模型与 MCP 管理
  • 点选界面元素,把修改需求送到对应 Agent
  • 跨公司 Agent 协商,用代码落实数据契约
  • 代码送入远程模型前先做数据分级
  • 把 Agent 权限约束落实到执行层
  • 用生产轨迹与精选数据改进智能体
  • 模型评测暴露环境破坏与联网绕限制行为
  • 微软Decision-1主攻低延迟分类与路由
  • 腾讯元器停服,智能体业务需限期迁移
  • Anthropic暂停全部内部评测联网
  • 工业机器人如何从示范与现场纠错中学习
  • 模型单价相同,任务成本仍可差近一倍
  • 测 LLM 接口延迟,别只报平均数
  • 用 TypeScript 拦住格式正确的错误数据
  • 微软在 Foundry 推出 Qwen 决策模型
  • DigUp 在 Mac 本地检索文件与代码
  • 大模型故障切换也要守住能力边界
  • 弱网下如何保住大模型流式响应
  • Claude测试越权后,联网权限被撤回
  • 用 CI 硬约束控制 AI 代码膨胀
  • Agent 上线前,先验证工具权限边界
  • steadysdk 降低接口客户端再生成风险
  • 生产 Agent 的权限不能照搬人类账号
  • 递归生成可验证的终端 Agent 难题
  • 用缺陷风险排序分配代码审查预算
  • 用真实几何验证模型修复代码的能力
  • 用 Hooks 强制执行 AI 编码质量检查
  • 已加载 51 / 9686
8.0
热点
AI SCORE
编程提效2026-10-11 03:23

给 AI 产品文档加一道事实校验关

dev.to · AI#AI 文档#事实校验#自动化检查
Editor brief · 编辑速览

文章要求产品可用性描述依据人工维护的事实来源,防止模型擅自补出额度、时长、地区或硬件规格。通过文件结构和 Python 检查示例,将无来源的承诺拦截在文档发布前。

文章思维导图
Knowledge map
拖拽缩放
Full translation

完整中文译文

由模型起草的产品页面,只有在每一句涉及可用性的表述都复制自人工负责维护的 pin(事实锁定文件)时,才能发布。只要草稿擅自添加配额、时长、区域或硬件规格,一个真实存在的选项就会变成一条虚假的支持信息。下面的工作流将可以交给模型起草的操作流程与必须由人工负责的可用性事实分开,并在违反这条边界时让文档检查失败。读者可以使用下文给出的文件布局和 Python 示例复现这项检查。

问题在于凭空编造精确信息

常规文档审查能发现一条有问题的命令,却仍可能漏掉一条语气笃定、但从未由任何运营负责人提供来源的额外信息。页面可以准确地说,存在免费模型访问选项,也存在免费服务器选项,同时并不知道任何具体的额度。当生成器把这种信息缺失当成需要填补的空白时,就可能输出 token 数量、保留期限、实例类型或模型标识符。这些补充不是文风问题,因为后来的读者可能把其中每一项都当成实际运营承诺。

每周的新闻标题无法弥补这个缺口,即使团队希望页面显得紧跟最新动态。社区信息流中出现的标题,只是一个不可信的话题信号,并不是访问限制或服务器条款的一手来源。因此,本教程忽略没有来源的新闻说法,只使用为起草步骤提供的两个可用性选项。如果供应商文档中出现了更新的限制,必须先由人工将它加入 pin,模型才能复述。

在第一版草稿之前划清责任

模型可以起草步骤顺序、衔接文字和注意事项,前提是这些句子都不宣称任何产品限制。人工必须负责 pin、来源说明、审查日期,以及每一句提及访问或计算资源可用性的表述。模型不得添加 pin 的键、改写允许使用的短语,也不得从相邻句子中推断出限制。正是这种分工,让生成的文字不会触碰维护者尚未明确认可的事实。

这张表就是审查约定。如果草稿添加了一列估算限制,就已经越过了边界。只有检查器通过后,才能讨论操作流程的质量;责任归属问题尚未解决时,不能先讨论文案。措辞谨慎的形容词,并不能把一条没有来源的限制变成审查者可以信任、有人负责的声明。有人负责,意味着这条声明存在于 pin 中,而不是草稿中的句子听起来有多可信。

pin 是可用性信息的唯一来源

将 pin 存放在固定的责任归属路径下,并将缺少审查日期视为文档构建失败。每条声明都包含一个标识符、一种类型、一条陈述、一个来源标签,以及草稿可以原样复述的确切短语。示例中的两条声明,是运营负责人提供的可用性选项,既不是经过测量的配额,也不是永久有效的承诺。如果一条陈述无法提供来源,就不能进入 pin,草稿也不得提及。

{
  "schema_version": 1,
  "owner": "docs-platform",
  "reviewed_on": "2026-10-10",
  "claims": [
    {
      "id": "AVAIL-001",
      "kind": "access_option",
      "statement": "A free model access option is available for the drafting step.",
      "source": "operator-supplied",
      "allowed_phrases": ["free model access"]
    },
    {
      "id": "AVAIL-002",
      "kind": "compute_option",
      "statement": "A free server option is available for the drafting step.",
      "source": "operator-supplied",
      "allowed_phrases": ["free server option"]
    }
  ]
}

文件中的日期,是为本次讲解冻结教程内容的日期,并不是对某个未指明产品条款的认证。采用这一 schema 的维护者,需要将两条陈述都替换为运营负责人仍能提供依据的表述。修改陈述却不更新审查日期,应该无法通过审查,即使检查器尚未将这条规则编码进去。只有在陈述含义完全不变的情况下,声明标识符才能保持不变。

分四步执行工作流

1. 在审查日期冻结 pin

维护者只复制为本次发布提供的陈述,并在开启起草会话之前设置审查日期。任何模型调用都不得创建这个文件、追加声明,或补全空白的数字字段。引入 pin 的 commit 不应包含任何生成的页面,这样就能单独看清责任归属的 diff。之后修改陈述,需要人工提交 commit、设置新的审查日期,并附上一条明确指出一手来源的说明。

2. 标记可起草区域,并约束 prompt

页面模板应将可用性陈述放在起草区域之外,或者只以允许使用的确切短语复述。模型可以在操作流程区域填写运行检查器、阅读失败输出和发起审查的步骤。它不得编辑 pin、披露段落、责任归属表,也不得编辑任何用于定义失败情况的 fixture。标记让这条边界清晰可见,因此 diff 审查可以拒绝越界的修改。

Draft only inside the PROCEDURE markers.
Do not add numbers, durations, hardware nouns, model names, or availability claims.
Repeat an availability phrase only if it appears in allowed_phrases.
If a fact is missing, write OWNER_MUST_SUPPLY rather than guessing.

这个 prompt 只是一项约束,不能证明某个具体模型一定会遵守。检查器仍然是必需的,因为指令文本无法约束后续修改、从聊天中粘贴的内容,或从其他分支合并的内容。跳过检查器、只相信 prompt 的团队,并没有真正将责任归属与起草工作分开。遵守 prompt 只是让输入环节更方便,而 pin 检查才是真正的发布门槛。

3. 在审查文案之前运行检查器

下面的示例是一份方案,本文并未在生产环境的文档目录树中实际执行它。它只使用 Python 标准库,读取 pin,并在移除允许使用的确切短语后扫描 Markdown。剩余的数字、时长词、硬件名词或符合模型标识符模式的内容,都会连同行号一起报告,并返回非零退出状态。扫描前会移除对 pin 中短语的原样复述,因此允许使用的可用性措辞可以出现在页面上,而不会导致检查失败。

#!/usr/bin/env python3
"""Proposal checker: reject availability prose that extends the human pin.

Unexecuted example. Run it locally before adopting it in a docs build.
"""

import json
import re
import sys
from pathlib import Path

DURATION = re.compile(
    r"\b(day|days|month|months|year|years|forever|permanent|hourly)\b",
    re.IGNORECASE,
)
HARDWARE = re.compile(
    r"\b(gpu|cpu|core|cores|region|regions|ram|ssd)\b",
    re.IGNORECASE,
)
NUMBER = re.compile(r"\b\d[\d,._]*\b")
MODEL_ID = re.compile(
    r"\b(?:gpt|claude|gemini|llama|qwen|deepseek)[\w.-]*\b",
    re.IGNORECASE,
)

def load_pin(path: Path) -> tuple[list[str], str]:
    data = json.loads(path.read_text(encoding="utf-8"))
    reviewed = str(data.get("reviewed_on") or "")
    if not reviewed:
        raise SystemExit("pin missing reviewed_on")
    phrases = []
    for claim in data.get("claims", []):
        phrases.append(claim.get("statement", ""))
        phrases.extend(claim.get("allowed_phrases", []))
    return [phrase for phrase in phrases if phrase], reviewed

def scan(markdown: str, phrases: list[str], reviewed: str) -> list[str]:
    redacted = markdown.replace(reviewed, " ")
    for phrase in phrases:
        redacted = redacted.replace(phrase, " ")
    errors = []
    rules = (
        ("number", NUMBER),
        ("duration", DURATION),
        ("hardware", HARDWARE),
        ("model_id", MODEL_ID),
    )
    for index, line in enumerate(redacted.splitlines(), start=1):
        for label, pattern in rules:
            for match in pattern.finditer(line):
                errors.append(
                    f"{label} not in pin at line {index}: {match.group(0)}"
                )
    return errors

def main() -> int:
    if len(sys.argv) != 3:
        raise SystemExit(
            "usage: check_availability_pin.py PIN.json PAGE.md"
        )
    phrases, reviewed = load_pin(Path(sys.argv[1]))
    text = Path(sys.argv[2]).read_text(encoding="utf-8")
    errors = scan(text, phrases, reviewed)
    if errors:
        print("\n".join(errors))
        return 1
    print("availability pin check passed")
    return 0

if __name__ == "__main__":
    raise SystemExit(main())

用于验证通过情况的 fixture,只在审查者可以批准发布的普通操作流程句子中,复述 pin 中已有的短语。数字 fixture 添加了一个没有来源的整数,时长 fixture 则在没有来源支持的有效期限时,将某个选项称为永久有效。只有这两个反例 fixture 都以状态码 1 退出,才能认为这道发布门槛已经定义完整。这些文件属于有人负责维护的交付物,不是后续草稿可以随意删除的可选示例。

Run the checker against the frozen pin, then read the exit status before editing prose.
The drafting step may use free model access.
The drafting step may use the free server option.
The drafting step includes 123456 units at no cost.
The free server option is permanent.
python3 scripts/check_availability_pin.py \
  docs/ownership/availability-pin.json \
  docs/fixtures/availability_pass.md

python3 scripts/check_availability_pin.py \
  docs/ownership/availability-pin.json \
  docs/fixtures/availability_number.md

第一条命令用于验证通过路径,在没有违规内容的 fixture 上,应以状态码 0 退出。第二条命令的 fixture 包含 123456 这样的无来源整数时,应以状态码 1 退出。将选项称为 permanent 的时长 fixture 也必须失败,即使该句没有任何数字。将这些 fixture 与 pin 一起存放,防止后续修改悄悄从测试计划中移除反例。

4. 审查失败原因,而不是模型有多自信

检查失败的行应作为责任归属缺陷退回给负责人,而不是要求把句子改得更谨慎。将没有来源的整数替换为模糊的数量描述,仍然违反规则,即使第一版检查器只能捕获列出的模式。能长期解决问题的做法,是删除这条内容,或者由人工更新 pin,并附上一手来源。只有待审页面的检查器以状态码 0 退出后,才应开始文案审查。

起草步骤可以在哪里运行

起草可以使用 MonkeyCode 的免费模型访问选项;如果希望起草过程不在笔记本电脑上运行,也可以使用免费服务器选项。披露:本文是 MonkeyCode 产品推广活动的一部分。这两个选项的作用,仅限于在人工已经冻结 pin 之后,提供生成操作流程文字的场所。它们不能作为配额、模型名称、硬件规格的来源,也不能支持任何关于这两个选项永久有效的声明。

检查器仍然在仓库中运行,因为在托管环境中生成的草稿,不会因此变成有人负责的事实。推广关系不会扩大 pin 的范围,也不意味着页面可以添加额外的能力声明。这里没有列出模型清单、token 额度、服务器规格或保留期限,因为没有任何一项被作为有来源的 pin 条目提供。需要这些细节的团队应该暂停起草,取得一手来源,并先添加一条范围明确的声明,再继续起草。

局限,以及哪些团队应该跳过这套流程

这道门槛不理解同义表达,因此草稿仍可能通过不常见的措辞夹带没有来源的限制。它也不会验证运营负责人提供的陈述日后是否仍然成立,所以必须由人工更新审查日期。如果版本号、benchmark 表格,以及 core 这样的普通词没有放进单独的 allowlist,它们也会被误判为失败。需要大量数字信息的团队,应该拆分这些页面,而不是不断放宽检查器,直到它接受所有数字。

如果没有明确指定 pin 的负责人,团队就不应该使用这套工作流,因为无人负责的文件只是另一份草稿。对于法律条款、安全公告或定价页面,也不应将它作为唯一控制措施,这些页面的全文必须由法律顾问或财务负责人负责。团队不应拿供应商博客或社区综述作为检查对象,因为这些页面不是可用性信息的来源。一个从不发布产品声明的私人笔记本,也很难从维护这个额外文件中获得多少收益。

发布前完成闭环

发布规则很简单:冻结 pin,只起草操作流程,并将每一个没有来源的数字视为构建失败。复制这份 schema,将示例声明替换为运营负责人能够提供来源的陈述,并在下一次发布前运行 fixture。如果免费模型访问和免费服务器选项已经是起草步骤的一部分,就将它们以确切短语保留在 pin 中。排除所有没有来源的限制,包括那些会让页面显得比 pin 更新、更及时的限制。

如需采取进一步行动,可以考虑屏蔽此人和/或举报滥用行为。

Original source

本文由 AI 翻译整理自 dev.to · AI,原文版权归原作者所有。

阅读英文原文
上一篇
会议录音应用的说话人识别与检索踩坑
下一篇
防止 Agent 靠修改测试制造假通过