模式与规则验证器
强制执行约束。
模式与规则验证器 是 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 反馈 — 无需本地设置。