反思必须产生可验证修正
让模型再次说“我检查过了”不是反思。有效反思要指出失败证据、可执行修正、预期变化和验证方式。修正后必须重新运行外部检查;如果没有新证据,重复反思只是增加 token 和延迟。事实、计划假设和不确定性应分开记录。
第一个可运行实验:没有新证据就停止反思
保存为 reflect.py,用 Python 3.12 运行。
python
def reflect(result, evidence):
if result['status'] == 'passed':
return {'action': 'stop', 'reason': 'verified'}
if not evidence:
return {'action': 'stop', 'reason': 'no_new_evidence'}
if evidence.get('kind') == 'schema_error':
return {'action': 'repair', 'change': 'fix_schema', 'verify': 'rerun_schema'}
return {'action': 'escalate', 'reason': 'unknown_failure'}
assert reflect({'status': 'passed'}, {})['action'] == 'stop'
assert reflect({'status': 'failed'}, {})['reason'] == 'no_new_evidence'
assert reflect({'status': 'failed'}, {'kind': 'schema_error'})['action'] == 'repair'
print('reflection evidence passed')反思输出应绑定原始运行 ID 和失败观察。安全、权限和预算失败不能通过提示词重写成“继续尝试”;它们需要停止或人工处理。模型可以提出候选解释,但业务验收、测试和权限服务才是证据来源。
变体实验
把同一条 schema 错误重复输入两次,要求第二次不新增修正。再输入权限拒绝,确认结果是停止或升级,而不是 repair。
练习
- 设计反思记录字段:失败证据、修正、预期、验证结果和版本。
- 区分事实错误、计划错误、工具错误和权限错误的处理路径。
- 说明为什么“换一个措辞再问一次”不能算新证据。