一步步设计
先定字段角色,别先抓第一个数字
虚构邮件:“10月3日开票,10月8日报名截止。原价 USD 120,优惠价 USD 90。”若要截止日与应付价,字段应命名 registration_deadline、payable_amount。日期出现的位置与金额大小不是角色判断;代码不能默认取第一个或最大值。
规则抽取候选并保留跨度
先用解析器或规则找到候选值,保存 span_id、起止位置、原字符串和邻近句。Choice 从有限候选中选目标,始终提供 none。重复出现同一个“90”时,保留位置身份;仅按字符串去重可能丢掉税费与应付额的角色。
让判断只回答语义角色
官方预解析配方让模型从已有候选选择,再由代码复制和规范化。本例问题是哪个金额明确作为最终支付价、哪个日期明确是报名截止;候选没有目标时选 none。不要让模型生成原文不存在的数值,也不允许拿高 confidence 填补缺年份。
把地区与相对时间显式输入
“03/04”在不同地区可能不同;“明天”必须有原消息时间、时区与参考日。本例固定参考日 2026-10-02;“明天”在该参考日按本地日历解析为10月3日。缺时区或年份时保留歧义;金额保存 Decimal 与 ISO 币种,勿把 USD 与 CNY 默认视为相同。
用代码验证真实值并记录不确定
日历库检查2月30日等非法日期;原始 span 与规范化值同时保存。语义角色确定但日期格式歧义仍应复核。准备信用额与费用并存、多币种、跨时区及不写年份等样本;字段匹配正确不代表整个表单可直接执行支付。
完整走查 · 本站虚构样本
| 观察到什么 | 如何判断 | 代码怎么处理 |
|---|---|---|
| USD 120 原价 / USD 90 优惠价 | 请求应付价,应选优惠候选 | 复制90并保存USD,不执行支付 |
| 03/04;无地区说明 | 日期顺序有歧义 | 保留原串并复核 |
| 明天;参考日2026-10-02 | 需参考日与本地时区 | 代码解析10月3日 |
可复制的设计草案
以下为本站原创示例。JSON 展示请求或输入形状;Python 仅计算虚构分数,不调用 API。真实接入仍需核对官方接口及任务策略。
# Offline date arithmetic with an explicit reference date.
from datetime import date, timedelta
reference = date(2026, 10, 2)
print(reference + timedelta(days=1)) # 2026-10-03
# Candidate selection is a separate judgment, not performed here.
# Preserve timezone and source text when handling real messages.设计我的任务容易踩的坑
- 默认取首个数字或最大的金额。
- 让模型修造缺失年份与币种。
- 丢掉原字符串与候选跨度。
TRY / THINK / COMPARE
先想一想,再看解析
选中“03/04”且 confidence 很高,能直接存成4月3日吗?
展开解析
不能。confidence 针对角色选择不自动解除日期格式歧义。需要地区格式证据,否则保留原文并复核。
交付前检查
- 字段角色和 none 选项已定义。
- 候选跨度与原文可追溯。
- 年份、时区、币种和地区显式处理。
- 非法值与歧义进入复核。
常见问题
日期数学应由谁完成?
日历库与代码;模型帮助读出角色或组成信息。
候选漏掉目标怎么办?
返回 none 并改进召回或解析,不能从错误候选强选一个。
资料与延伸阅读
参考官方架构模式与 Datawhale 实战主题,本站独立编写讲解、案例与练习。示例为教学设计,未调用 API,不代表性能测试。