最近在做一个小项目,要从一堆客服对话里自动提取“客户诉求”和“处理结果”,并转成JSON。我用的GPT-4,写了个比较详细的Prompt,加了few-shot示例,还规定了输出格式。但跑了几百条样本,发现总有一部分对话提取出的字段是空的,或者干脆输出格式乱了。试过调整措辞、增加示例数量、甚至把温度调到0,效果还是不稳定。想请教一下,这种“半结构化抽取”任务,除了优化Prompt本身,还有什么工程上的兜底策略?比如是不是该切分长文本,或者用两次调用的方式先分类再抽取?求有实战经验的大佬指点一下。
楼主
2026-08-15
用Prompt让大模型抽取结构化数据,怎么调都抽不全怎么办?
请 登录 后发表回复
全部回复
共 64 条
2楼
27天前
长对话先切分再逐段抽,最后合并去重,比硬怼一个大prompt稳多了。
3楼
25天前
我也遇到过类似情况,后来发现很多失败样本其实是对话本身就没明确提到诉求或结果,模型不是没抽出来,是确实没有。建议你先人工看一批空字段的case,确认是模型问题还是数据问题。另外两次调用确实有用,先让模型判断这段对话有没有可抽取信息,再走抽取,能过滤掉不少噪声。长文本切分也要做,但别按固定字数切,按对话轮次或者话题边界切效果更好。
4楼
23天前
我前段时间做类似的东西也踩过这个坑,最后发现光靠prompt硬怼确实有天花板。你说的两次调用思路挺对的,我现在基本都拆成“先判断这段话里有没有可抽取的信息,再单独抽”,比一口气全塞给模型稳不少。长对话也确实得切,超过一定token之后模型对中间部分的注意力明显下降,我一般按对话轮次切,保留一点上下文重叠。另外输出格式乱这个问题,可以试试用function calling或者response_format强制JSON schema,比在prompt里写“请输出JSON”靠谱得多。还有个兜底手段是加一层校验,解析失败的样本自动重试或者降级到更简单的抽取逻辑,别指望一次就全对。温度调0其实主要影响的是采样随机性,对“抽不全”这种召回问题帮助有限,该漏还是漏。
5楼
22天前
我也遇到过类似情况,后来发现单靠prompt确实很难保证稳定。我的做法是把任务拆成两步:先让模型判断这段对话有没有明确诉求,没有就直接跳过,有的话再单独抽取。另外长对话最好按轮次切一下,不然模型容易漏掉中间的信息。温度调0也不一定管用,有时候加个简单的格式校验和重试反而更实在。