这一步把图变成文字。难点不在「看得懂」,在让它按固定三段说。 三段:画面里有什么、图上写了什么、文字怎么排。三段的顺序和分隔符都要定死。 提示词里那句「原样抄、不要翻译」是全节最关键的一句——漏了它,下游再也抽不到英文。
这是整条链唯一的「看图」环节。它错了,后面全错;它含糊,后面全含糊。 书里这一步挂的是视觉理解模型。 本沙箱没有视觉模型,下面用图片元数据拼出同样形状的三段文字——结构一致,结论一致。 换个说法:这一节讲的是怎么让模型按格式说话,不是怎么让它看懂图。
一、先看不管格式会怎样
直接问「这是什么」,回来的是一段散文:「这张图是一张单词卡,画着红苹果,上面有英文和一句例句。」 人读着没问题。可下游要的是「音标字段」,这段散文里只有「上面有英文」这五个字。 问题不在信息量,在位置。 散文把五样东西揉成一句,谁在哪一段都看不出来。
所以这一步的目标不是「描述得准确」,是「描述得整齐」。准确是模型的本事,整齐是你提示词的本事。
二、三段式:画面、文字、版式
三段各回答一个问题,用竖线隔开:
| 段 | 回答什么 | 为什么要这一段 |
|---|---|---|
| 画面 | 图里有哪些东西 | 判断这张图是不是单词卡 |
| 文字 | 图上的字,原样抄 | 下游抽字段的唯一来源 |
| 版式 | 文字怎么排 | 决定画板怎么还原 |
演示里三张图各生成一段。第一张七十字,第二张六十九字,第三张只有二十五字——因为它没有文字。 第三张那段描述里写的是「文字:无」。 这两个字很重要,它让下游知道「这里本来就没有」,而不是「抽取失败了」。 下面会看到,下游照样把「无」当成了一个词。格式对了,语义还得有人管。
三、为什么必须写「原样抄」
这是最容易漏的一句。提示词里不写,模型会很贴心地帮你把英文翻译成中文——它觉得这样对用户更好。
一旦翻了,第二步就再也抽不到 apple 这个词,整条链从中间断掉。
而且它不报错:卡片上会印着中文,看着还挺顺。
所以要写死三条:原样抄、不翻译、不补全。
补全也要禁——图上只写了半个例句,模型可能自己续完,续出来的东西下游当真了。
这一类要求在第 6.3 节叫「负向约束」。写提示词时,禁止做什么比要求做什么更容易漏。
四、空图怎么表达
第三张图是一面白墙。模型可能什么都不说,也可能说「一张白纸」。
两种都行,前提是约定好一个固定的说法。演示里约定的是「无」。
有了固定说法,下游就能写 if txt == '无': 走兜底。没有固定说法,下游只能靠猜长度。
这条约定要写进提示词,也要写进下游的判断里。两边对不上,兜底就永远不触发。
五、真机上这一步长什么样
节点类型选「大模型」,模型选能读图的那个。输入绑 {{开始.url}},输出一个字符串变量 desc。
提示词三段:角色(你是单词卡识别器)、任务(按三段回答)、约束(原样抄、不翻译、不补全)。
温度调低。这一步要的是稳定复现,不是创意——同一张图跑两次给出两种格式,下游就没法写了。
六、动手 Demo:图片理解:把图变成一行能用的字
三张图:一张标准单词卡、一张词性是中文的、一张白墙。 每张都按「画面、文字、版式」三段生成,再看下游能抽出几个字段。
def describe(pic):
name, objs, texts, layout = pic
return u'画面:%s|文字:%s|版式:%s' % (
u'、'.join(objs),
u';'.join(texts) if texts else u'无', # 空图给固定说法
layout)
实跑输出:
--------------------------------------------------------------------
图片理解:把图变成一行能用的字
--------------------------------------------------------------------
① 直接问「这是什么」,回来的还是散文
--------------------------------------------------------------------
这种描述能给人看,不能给程序用:哪截是词、哪截是例句,没分。
下游要的是「音标字段」,不是「上面有英文」这句话。
② 三问三答:画面、文字、版式
--------------------------------------------------------------------
画面:红苹果、白底|文字:apple;/ˈæpl/;n.;a round fruit;
I ate an apple.|版式:词在上、例句在下
画面:公交车、站牌|文字:bus;/ bʌs /;名词;a large vehicle;
I go by bus.|版式:左图右字,文字三行
画面:空白墙面、一角阴影|文字:无|版式:整幅空白
| 图 | 画面里有几样 | 文字几行 | 描述多长 |
|---|---:|---:|---:|
| card_01.jpg | 2 样 | 5 行 | 70 字 |
| card_02.jpg | 2 样 | 5 行 | 69 字 |
| card_03.jpg | 2 样 | 0 行 | 25 字 |
第三张图没有文字,描述里明写「无」。
这一条比看起来重要——下面就会看到,「无」这个字真被下游当成了一个词。
③ 真机上这步是视觉模型,这里换成元数据
--------------------------------------------------------------------
[平台原样 · 本沙箱不执行]
| 节点类型:大模型
| 模型:选能读图的
| 输入:{{开始.url}}
| 输出:desc(字符串,一段话)
| 提示词要点:按「画面 / 文字 / 版式」三段回答,
| 图中文字原样抄,不要翻译、不要补全
本沙箱没有视觉模型,上面三段描述由图片元数据拼出,结构一致
! 提示词里那句「原样抄、不要翻译」是关键:让模型顺手把英文译成中文,
信息提取就再也抽不到英文单词了。
①第一段先放一段散文,说明它能读但下游用不上。 ②第二段三张图各一行描述:七十字、六十九字、二十五字。 ③表格里第三张的文字行数是 0,描述里写的是「无」——这是约定,不是巧合。 ④第三段贴平台上的配置:节点类型、模型、输入、输出的四个字段。 ⑤最后那句提醒最重要:不写「不要翻译」,信息提取那一步就抽不到英文。
30 秒实验
- 拿一张你自己的图跑一次,看它有没有按三段回答。没按就是提示词里的格式没写死。
- 把「原样抄、不翻译」那句删掉再跑一次,对比两次输出里还有没有英文。
- 找一张没有文字的图,看它怎么表达「没有」。这个说法要固定下来,写进下游的判断里。
常见误区
- 「让它描述得详细点。」详细不等于整齐。要的是三段固定格式,不是字数多。
- 「模型会自己翻译,省一步。」翻了就抽不到英文,整条链从中间断,而且不报错。
- 「空图不用管,反正没内容。」空图会抽出假字段。约定一个固定说法,下游才好兜底。
自测三问(点开对答案)
1. 为什么不能直接问「这是什么」? —— 回来的散文把五样东西揉成一句,下游按字段取,取不到。问题在位置不在信息量。 2. 三段分别是什么? —— 画面(有什么东西)、文字(原样抄)、版式(怎么排)。竖线隔开,顺序固定。 3. 为什么必须写「不要翻译」? —— 不写模型会贴心地把英文译成中文,第二步就抽不到英文单词。而且它不报错,只是静默出错。图变成文字了,下一步把文字拆成字段。这一节会看到「抽全了」和「抽对了」是两回事。
- ☐ (本篇完,下一篇 9.4 配置【信息提取】节点)
相关笔记
- 编写有效提示词的技巧:负向约束怎么写
- 扣子工作流的常见节点:视觉模型能干什么
- 配置文案获取模块:上一章同样的位置
- 🐦 扣子开发 AI Agent · 索引