文本信息提取智能体返回一个字段,不代表原文真的包含它。要求同时给出start、end和原文value,再用本地字符串切片核对,能拦住部分编造或引用错位。
开发结构化文本抽取流程的读者。本文使用 Python 3.11 或以上版本的标准库,先验证一组人工构造的小样本。AI 负责提出实现或解释差异,结果由本地检查决定;这里没有把模型回答当成真实运行结果。

核对抽取字段的原文依据前,先定规则
示例原文是虚构交付说明,抽取delivery_day=周五。位置使用Python字符索引,不是UTF8字节偏移。
证据值必须和原文切片完全相等。推断结论与明确原文字段分开;“预计周五”不能自动升级为保证周五到达。
代码先校验位置范围与整数类型,再核对切片。空片段和负索引都拒绝,不能让Python负索引规则替业务容错。
给 AI 的输入要包含什么
把下面这份输入说明和你的实际样本一起交给可用的 AI 编程助手。示例只含虚构数据;对真实材料先去除账号凭据和个人信息。
抽取字段需同时提供start/end/value;要求0<=start<end<=len(text),索引严格int非bool,text[start:end]==value。仅验证原文片段,不能把证据存在等同结论正确。
要求模型保留检查条件,并把它认为缺少的业务定义列出来。若回答改变了输入字段、忽略异常分支或直接删除原材料,先要求修正,再运行。提示词的作用是缩小任务范围,验收仍以代码和数据为准。
保存并运行最小验证程序
下方程序把关键规则和验证用例放在同一个可复跑示例中,便于先理解输入如何变成输出,再用它检查 AI 给出的实现。
新建一个空目录,把下面代码保存为 check.py,在该目录打开终端,运行 python -X utf8 check.py。代码自带示例输入,不需要安装第三方库。
text='预计周五交付,具体时间待确认。'
def evidence(text,record):
start,end=record['start'],record['end']
if type(start) is not int or type(end) is not int or not 0<=start<end<=len(text): raise ValueError('位置无效')
if text[start:end]!=record['value']: raise ValueError('原文不一致')
return record['value']
good={'start':2,'end':4,'value':'周五'}
assert evidence(text,good)=='周五'
print('verified',evidence(text,good))
try: evidence(text,dict(good,value='周六'))
except ValueError as e: print('blocked',e)
else: raise AssertionError('编造值应被拒绝')
怎样判断结果符合要求
周五通过,周六被拦截。验证的是原文片段,不是确认交付事实已发生或一定发生。
下方是这份最小示例在本地执行得到的输出。它验证示例程序与断言的关系,不代表任何 AI 模型一次就能生成同样代码,也不构成性能或生产可靠性结论。
verified 周五
blocked 原文不一致
位置正确但字段标签错误仍可能通过,例如把周五标成付款日期。因此语义判断需要人工样本和任务规则。
正文重复出现相同值时,位置比单纯value in text更能说明引用哪处。
哪些失败必须停下来处理
清洗或规范化后偏移会改变,保存源文本哈希并在相同版本上验位置。
跨段证据可能无法用一个连续切片表示,需明确多片段格式,不自动拼造引文。
接入自己的任务前再核对一次
把无证据、错位与语义误分类分别计数,让AI修正具体错误。
读者界面展示原文片段和上下文,允许人工回查,不只展示漂亮字段表。
资料与适用范围
Python字符串切片按字符索引截取范围,end不包含在结果内。以下链接核对于 2026-10-03;运行环境及额外依赖按本文前述说明。
相关基础可阅读 Ollama 本地模型怎么输出 JSON?用 JSON Schema 提取字段并验证结果。本文的重点是核对抽取字段的原文依据,可以把两项检查作为不同步骤保留。
Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/33409.html