Appearance
结构化数据抽取用哪个模型
结论先行:抽取任务的成功标准不是「文笔好」,而是字段能解析**。因此选型的核心是「JSON 稳定性 + 单价」,而不是模型排名。站内几个常见的抽取档位:GLM-5.3 Flash 输入 $0.165、GPT-5-mini 输入 $0.275、Gemini 2.5 Flash 输入 $0.33(均每百万 token)。**
抽取档位对照(采集 2026-10-08)
| 模型 | 输入价 | 输出价 | 上下文 | 输入模态 |
|---|---|---|---|---|
| GLM-5.3 Flash | $0.165 | $0.55 | 105 万 | 文本、图像、视频 |
| GPT-5-mini | $0.275 | $2.2 | 40 万 | 文本、图像、文件 |
| Gemini 2.5 Flash | $0.33 | $2.75 | 105 万 | 文件、图像、文本、音频、视频 |
| Mistral Medium | $1.65 | $8.25 | 26 万 | 文本、图像、文件 |
需要读图或读 PDF 时,选择输入模态包含图像/文件的档位(表中模态列已标明)。
让 JSON 稳定下来的四个做法
- 给字段定义与示例:字段名、类型、可空性写进提示词
- 要求只输出 JSON:明确「不要解释、不要 Markdown 代码块」
- 程序侧校验并重试:解析失败时把错误信息回传模型让它修正,最多重试 2 次
- 字段缺失用 null:不要让它编造,缺失比错误更安全
python
import json
def extract(text, fields, model="z-ai/glm-5.3-flash", tries=3):
schema = "、".join(fields)
prompt = (f"从文本中抽取字段:{schema}。只输出 JSON 对象,缺失字段用 null,不要解释。\n\n{text}")
for _ in range(tries):
r = client.chat.completions.create(
model=model, messages=[{"role": "user", "content": prompt}], max_tokens=800)
try:
return json.loads(r.choices[0].message.content.strip())
except json.JSONDecodeError as e:
prompt = f"上一次输出无法解析({e})。请只输出合法 JSON。\n\n{text}"
raise ValueError("抽取失败")成本测算
每份文档平均 3000 token 输入、200 token 输出,处理 1 万份:输入合计约 30 百万 token、输出约 2 百万 token。
- 走 GLM-5.3 Flash:输入约 $4.95
- 走 Gemini 2.5 Flash:输入约 $9.9
抽取类任务的输出极短,因此成本几乎完全由输入价决定——这也是为什么低价档 + 严格校验能同时满足成本与质量。
常见问题
抽取失败率高怎么办?
先看失败原因:多数是输出夹带解释文本。加强「只输出 JSON」约束并在程序侧重试,通常能显著改善。
复杂表单(跨页、手写)怎么处理?
用支持图像输入的档位先把页面转成结构化描述,再做字段抽取,分两步通常比一步更稳。
需要人工复核吗?
建议按 1%~3% 抽样,重点核对金额、日期、编号这三类字段。
价格采集时间?
2026-10-08;站内价 = OpenRouter 挂牌 ×1.1。
相关阅读:customer-support-bot | multimodal-vision | node-openai-sdk