一句话结论
把搜索结果接成结构化数据只需要两次 API 调用:一次联网检索拿原始材料,一次按 JSON Schema 抽取字段。
这篇解决什么问题
场景通常是这样:手头一批关键词,去网上搜一圈,再把每条结果里关心的字段抠出来填表。几十条手工还能扛,上百条就是体力活,下周还得重来。适用的是字段固定、来源公开的场景;字段还在反复改、需要登录才能看的页面,别走这条路线。
开始前要准备什么
- 一个支持联网搜索的接口,多数平台会给新账号一笔试用额度,之后按调用量计费
- 一个支持 JSON Schema 约束输出的模型接口,可以和上面是同一家
- 一份关键词或对象清单,10~20 条就够起步,CSV 或纯文本都行
- 能发 HTTP 请求的环境:Python 脚本、Postman,或者 n8n 这类低代码工具
- 时间预算上,跑通第一版通常在 30~60 分钟,大半花在调 Schema
具体怎么做
第 1 步 · 先把输出字段定死
别一上来就写调用代码。字段没定清楚,后面两次调用的上下文都在飘,跑完还得推翻重来。
我在整理一份产品资料表,每条记录代表一个工具。请帮我设计抽取字段,要求:字段名用英文小写下划线;每个字段给出中文含义、数据类型(string / number / boolean / array)以及是否必填;必须包含 source_url 和 fetched_at 两个字段;字段总数不超过 12 个。示例对象:一款面向小团队的在线表单工具。只输出表格,不要解释。
预期产出:一张字段定义表,能直接翻译成 JSON Schema,第 4 步的提示词里会原样贴进去。
第 2 步 · 第一次调用只负责搜
这一步的关键是让模型别总结。总结一次,后面能核对的原句就没了,字段填错也无从追溯。我一般要求它按固定字段返回片段和出处。
请联网搜索以下关键词,返回 5 条相关结果。每条输出四个字段:title(页面标题)、url、published_at(拿不到就写 unknown)、snippet(原文中与关键词最相关的 200 字以内片段)。不要总结,不要发表观点,不要合并不同来源。关键词:{keyword}
预期产出:一段 JSON 数组,5 条记录,带标题、网址、时间和原文片段,可以直接交给下一步。
第 3 步 · 中间层做清洗和去重
原始片段里混着导航文字和重复段落,直接喂给第二次调用既费 token 又污染字段。有人用几行代码去重截断,也有人先跑一次轻量调用做归并,两种都行。
下面是搜索返回的原始条目。请做三件事:删掉明显的导航、推广、版权声明段落;把同一 url 下的多个片段合并成一段,保留信息量最大的部分;每条记录压缩到 600 字符以内。输出 JSON 数组,字段保持 title、url、published_at、snippet 不变。不要新增条目,也不要删减条目。
预期产出:一份干净的 JSON 数组,条数不变,冗余内容基本清掉,体积明显变小。
第 4 步 · 第二次调用做结构化抽取
这次调用不给它搜索工具,只给 Schema 和材料。搜归搜、抽归抽,出问题的时候你能立刻判断是哪一环的锅。
你是数据抽取器。根据下面的搜索结果填充 JSON Schema,规则:找不到对应信息的字段填 null,不要推测;数字字段只写数字,不带单位;每个取值必须能在 snippet 中找到对应原句,找不到就填 null;只输出 JSON,不要代码块标记,不要任何解释说明。Schema:{schema}。搜索结果:{search_results}
预期产出:一条关键词对应一条 JSON 记录,字段稳定、类型固定,能直接写进表格或数据库。
第 5 步 · 回查一轮再落表
批量跑的时候总有几条产物很勉强。抽完让模型自检一遍,比人工逐条翻网页快得多,也不容易漏。
检查下面这条记录:列出所有取值为 null 的字段;对每个非 null 字段,引用 snippet 中对应的原句;如果某个取值是从标题推断而不是正文得出,标记为 inferred。输出格式为「字段名 | 取值 | 原句或 inferred」。不要修改记录本身。
预期产出:一份自检清单。人工只需要看被标成 inferred 的字段,其余可以放心入库。
实测记录
| 环节 | 实测情况 |
|---|---|
| 第一次调用(搜索) | 单个关键词通常 10~20 秒返回 |
| 第二次调用(抽取) | 单批 20 条以内通常 5~15 秒 |
| 端到端跑 30 个关键词 | 开 5 路并发,大约 3~8 分钟 |
| 与手工对比 | 同样字段人工整理大概要 2~3 小时 |
| 返工 | 字段口径含糊时,通常返工一到两轮 |
成本主要看搜索调用次数和输出 token,各家计费方式不一样,以官方文档为准。跑通流程这一轮的支出通常很低,真正花时间的是改 Schema。
最容易错的 3 个地方
- 两次调用合成一次。让模型边搜边吐 JSON,字段经常缺,来源也对不上。拆开跑。
- Schema 写得太松。类型没锁、枚举没列,下游解析反复报错。补上 required 和 enum。
- 漏了来源字段。抽完发现有问题,回不到原网页。source_url 设成必填。
可复用的东西
这五段提示词可以存成一个模板文件,把 {keyword}、{schema}、{search_results} 三个位置留成变量,换个清单就能跑另一批数据。字段表单独存一份,别写死在提示词里,改口径的时候你只动一个地方。
省时间的从来不是模型多聪明,是字段定得够死,错的时候一眼能看出来。这套流程真正难的部分不在调用,在于你愿不愿意先花二十分钟把字段想清楚。
你现在手头那批数据,字段能一次性定死吗?
常见问题解答
两次调用必须用同一个平台的模型吗?
不必。只要第一次能返回带网址的原文片段,第二次能接受 JSON Schema 约束,就可以混着用。跨平台时中间层多一步字段对齐,不然转换代码会越写越长。
跑 50 个关键词大概要多久?
串行跑一般在 10 分钟上下,开 5 路并发通常 2~4 分钟能收完。真正的大头往往不在调用,而在你反复改 Schema 的那一两轮。
JSON Schema 要写得多严格?
能把必填、类型、枚举锁死就锁死,模型自由度越小,下游解析越省心。字段暂时拿不准就先允许 null,但别用自由文本兜底,那等于没约束。
这套流程不适合什么情况?
需要登录才能看的页面、信息藏在图片里的页面,以及要求逐字精确引用的合规材料,都不太合适。字段口径本身还在讨论阶段时,也先别急着写代码。
本网站的部分内容可能来源于网络或用户投稿,仅供大家学习与参考,如有侵权,请联系客服: hhxmw778 进行删除处理。
本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
教程如引导您添加微信或有另外收费服务,请自行甄别!
如遇充值环节或绑定支付账户或输入支付密码之类的异常步骤,建议停止操作!本站不对操作项目的损失负责!
本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现任何资源有问题请向站长举报下架
(手机微信用户建议用默认浏览器打开,可体验完整功能)