0Pricing
AI Prompt Engineering · 课时

模式与规则验证器

强制执行约束。

模式与规则验证器 是 CoddyKit 上的免费 AI Prompt Engineering 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 AI Prompt Engineering 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 AI Prompt Engineering 课程共包含 4 节课。

验证器强制执行契约

验证器是一种防护栏,用于根据明确的规范检查输出:可以是 JSON 模式、一组业务规则,或两者兼有。与审核分类器不同,验证器具有确定性且完全可审计;相同的输入始终会产生相同的判定结果。

模式验证层

第一个验证器确认输出符合结构契约。请收集所有错误,而不仅是第一个错误,以确保修复反馈完整。

import jsonschema
def schema_errors(obj, schema):
    v = jsonschema.Draft202012Validator(schema)
    return [f"{list(e.path) or 'root'}: {e.message}"
            for e in v.iter_errors(obj)]

超越模式:业务规则

模式无法表达所有内容。模式可以规定 discount 是一个数字,但无法规定它不能超过小计。规则验证器在代码中编码这些跨字段和领域不变量。

RULES = [
  ('discount_le_subtotal', lambda o: o['discount'] <= o['subtotal']),
  ('total_consistent', lambda o: o['total'] == o['subtotal'] - o['discount']),
  ('currency_supported', lambda o: o['currency'] in SUPPORTED)
]
def rule_errors(o):
    return [name for name, fn in RULES if not fn(o)]

作为验证器的类型化模型

类型化模型库(例如 Pydantic)既可生成模式,也可充当验证器,并可通过自定义验证器实现规则。解析失败就是判定结果。

from pydantic import BaseModel, field_validator

class Order(BaseModel):
    subtotal: float
    discount: float
    total: float

    @field_validator('discount')
    @classmethod
    def discount_ok(cls, v, info):
        if v < 0:
            raise ValueError('discount must be non-negative')
        return v

基础与引用验证器

对于 RAG 输出,请验证各项声明是否有提供的上下文支持。要求模型引用来源标识符,然后验证每个被引用的标识符是否 exists,并确认引用的文本片段确实出现在来源中。拒绝引用缺失或虚构来源的答案。

def citations_valid(answer, sources):
    for cite in answer['citations']:
        if cite['source_id'] not in sources:
            return False
        if cite['quote'] not in sources[cite['source_id']]:
            return False
    return True

引用与跨系统检查

有些规则需要进行外部查询:所引用的订单标识符是否存在,产品是否有库存,日期是否处于有效时间范围内?这些验证器会查询您的系统。由于它们位于响应路径上,请让它们保持快速(使用缓存和批处理)。

def order_exists(o):
    return db.exists('SELECT 1 FROM orders WHERE id = %s', o['order_id'])

按严重程度标记判定结果

并非所有违规都同样严重。请为每条规则标记严重程度,以便流程选择正确的操作:对严重违规进行硬阻断,对质量问题重新生成,对轻微问题带警告放行。

RULE_SEVERITY = {
  'discount_le_subtotal': 'critical',
  'total_consistent': 'critical',
  'tone_professional': 'warning'
}

按顺序组合验证器

请按照成本从低到高运行验证器,并在出现不可恢复的失败时提前终止:先进行模式验证,然后检查内存中的规则,接着进行外部查询,最后执行任何模型评审检查。这样可以在常见的拒绝路径上最大限度地降低成本。

def validate_all(obj):
    errs = schema_errors(obj, SCHEMA)
    if errs: return Reject(errs, 'critical')
    errs = rule_errors(obj)
    if errs: return Reject(errs, max_severity(errs))
    if not order_exists(obj): return Reject(['order_id'], 'critical')
    return Accept()

验证器驱动修复反馈

当验证器的消息为修复循环提供输入时,其价值会成倍提升。请发出可由机器处理的错误,其中包含字段路径、失败的规则以及违规值,以便模型在一次处理中精确修复。

{'errors': [
  {'path': 'discount', 'rule': 'discount_le_subtotal',
   'got': 120, 'limit': 100}
]}

测试验证器本身

有缺陷的验证器可能会悄悄放过错误的输出,或阻止正确的输出。请使用正向和负向测试样例对每条规则进行单元测试,并为数值不变量添加基于性质的测试。验证器测试套件是生产环境中的关键代码,而不是脚本。

def test_discount_rule():
    assert rule_errors({'discount':10,'subtotal':100,'total':90}) == []
    assert 'discount_le_subtotal' in rule_errors(
        {'discount':120,'subtotal':100,'total':-20})

验证器与受约束解码

受约束解码可以在生成时阻止结构错误,但无法强制执行语义(它不了解您的业务规则)。验证器会在事后捕获语义违规。请两者结合使用:解码负责形状,验证器负责含义,修复循环负责协调。

快速检查

JSON 模式将 discount 和 subtotal 标记为数字。模型返回 discount 为 120,而 subtotal 为 100。哪一层应当捕获这个问题?

回顾

模式验证器和规则验证器:

  • 模式验证覆盖结构;规则验证器覆盖语义。
  • 类型化模型可以生成模式,并在同一处完成验证。
  • 为 RAG 和数据流添加基础、引用及引用关系检查。
  • 标记严重程度,按成本从低到高进行组合,并提供精确的修复错误信息。
  • 将验证器作为生产环境中的关键代码进行测试。

下一步:自我批评验证,即由模型检查自己的输出。

常见问题解答

「模式与规则验证器」课时是免费的吗?

是的 — 「模式与规则验证器」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 AI Prompt Engineering 课程的其余内容,请升级到 CoddyKit PRO。 AI Prompt Engineering 课程共包含 4 节课。

「模式与规则验证器」这节课中我会学到什么?

强制执行约束。 你通过在浏览器中直接运行的动手代码来练习 AI Prompt Engineering,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 AI Prompt Engineering 需要有经验吗?

无需任何先前经验。CoddyKit 上的 AI Prompt Engineering 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「模式与规则验证器」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 AI Prompt Engineering 课中编写并运行代码吗?

能。每节 AI Prompt Engineering 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 什么是护栏
  2. 输入与输出筛选
  3. 模式与规则验证器
  4. 自我批评验证
← 返回 AI Prompt Engineering