模型给出引用后,Instructor 可以先查原文里有没有这句话

为什么值得关注
在结构化抽取时加入可执行的来源规则,让错误引用进入明确的修正或失败路径。
适合谁:制作带引文的摘要、资料抽取和证据辅助功能的Python开发者
这次有哪些亮点
- context传原始材料,field_validator检查引用是否存在
- 校验失败反馈给模型,耗尽后保留失败尝试信息
使用前需要知道
字面存在不等于支持论点或准确理解上下文;重试有额外请求且会耗尽,缺失材料不能靠重试补真,Instructor MIT许可。
模型写了一个结论,还给出一段看似原文的引用。对摘要工具而言,先要核实的一件事很简单:这句话真的出现在提供的材料里吗?Instructor 的重试文档,给了一种把这项检查放进抽取流程的做法。
它以 Pydantic 定义输出结构,再运行开发者写的校验规则。返回格式、业务约束与失败重试可以接在一起,适合把模型输出交给后续程序的 Python 应用。
原文不只用于提示,也交给校验器
官方 Citation 示例定义 claim 和 quote 两个字段。quote 上的 field_validator 从运行时 context 取出 source_text,再检查返回引用是否是这份原文的子串。
若不存在,就抛出 ValueError,说明引用未在材料中找到。模型不能只靠给出一个 JSON 字符串就过关,还要通过这个具体判断。
开发时应同时把真实原文放进模型消息,并通过 context 交给校验器。后者是校验规则使用的运行数据,不等于模型自动读到了材料。文档里的短段落和字符串占位写法,需要按应用的消息模板实际填入,不能保留占位符就期待抽取成功。
失败后,带着错误再问一次
Instructor 能把解析和校验失败送入 reask,让后续请求得到错误反馈。引用不在原文中,便有了一条可指向具体字段的修正理由,而不只是应用返回“结果不合格”。
文档还提供有限重试策略。当前整数 max_retries 表示首次抽取之后允许的校验重试次数;底层模型 SDK 的网络重试是另一个设置。一次抽取尝试可能涉及多个 HTTP 请求,因此不能直接把抽取次数写成真实请求数。
重试耗尽后会出现 InstructorRetryException,可以查看 n_attempts 与 failed_attempts。应用应把失败作为可处理结果,例如请用户补充来源或保留待确认记录,而不是假定库一定能修好每次错误。
找得到这句话,仍不代表论点正确
子串校验能抓住一类具体问题:模型拼出了一句原文没有的引文。它不能证明引文支持 claim,也不能判断是否断章取义。原文中确实存在一句话,前后文却可能是否定、转述或例外条件。
教学情境中,一份报告同时有原话、论点与来源位置,可以先做字面存在检查,再安排上下文核对。每一层各自回答一个问题,别让“校验通过”成为内容可靠的笼统标签。
Instructor采用 MIT 许可,模型服务与调用成本另计。它在这里提供的实际成果,是一段可维护的引用规则:原文在哪,哪个字段不符,修正几次,最后怎样报告失败,都能在程序中明确表达。
以上为编辑整理,功能、许可与使用条件以官方说明为准。