交付工程:把一次 AI 测量,做成每月都能准时交出来的服务
做出一个能跑的 AI 演示不难,难的是让它每个月在同一个口径下跑完、出错时不把错当成结果、然后自己把报告交出去。这页讲观澜 GEO 平台在这件事上的做法。这个网址原先是一张订阅价目表;观澜是开发公司,不卖订阅,所以换成我们实际交付的工程。
更新于 2026-10-11
先给结论
- 档位是数据,不是代码:扫描深度(轻量/完整)与节奏(每周/每月)是品牌记录上的字段,换档不需要改代码。
- 一次完整的月度扫描是 676 次提问。它不会在一次函数调用里问完,所以每一格先建成空位,问不完就留着,下一次接着问。
- 供应商额度用完、密钥被拒、被限流时,那一格保持「待问」,不记为失败,更不记为「品牌没有出现」。
- 残缺的不交付:失败超过一成的扫描整轮作废;谓词核验不足两轮不出任何数字;读库失败时报错,而不是渲染一张空表。
- 报告在扫描完结后自动寄出,而且只寄一次。
档位是数据,不是代码
同一套测量要服务不同深度的需求:有的品牌每月做一次完整扫描,有的每周做一次轻量扫描。我们没有为每一档写一条分支,而是把扫描深度与节奏做成品牌记录上的两个字段,调度器读到什么就跑什么。
不同档位的结果要能放在同一条趋势线上比较,所以完整扫描的历史会按轻量档的子集重算一遍。换档不应该让客户的曲线断掉。
问不完就留着:断点续跑
云端函数有时间上限,到点就被终止,连写日志的机会都没有。676 次提问不可能在一次调用里完成。
所以扫描开始时,先为每一个(问题 × 问法 × 引擎)建好一个空格。每次调用在 240 秒的预算内能问多少问多少,时间一到就停止发起新的提问,把手上的写完;剩下的空格留给下一次调用。调度器在扫描窗口内每十分钟推进一次,窗口外每两小时补一次。
这样一次调用中途失败,损失的只是那一小批,而不是整轮。扫描也不会停在「进行中」没人知道。
额度用完,不等于「品牌没有出现」
AI 测量最危险的一种错误,是把「没问到」记成「问了、没有」。模型接口的额度用完时,回来的是一个错误码;如果把它当成一次失败的回答,再往下一步就会被算成品牌缺席,而且看上去和真实读数一模一样。
我们把账号级的失败单独处理:额度用完、密钥被拒、被限流,这几种情况下那一格保持待问,该引擎本轮暂停,其他引擎照常继续。额度恢复后原地接着问。
残缺的不交付
- 失败超过一成的扫描整轮作废,不进入趋势,也不出报告。少于一成的标记为「部分完成」,照实显示。
- 成对谓词核验不足两轮时不出任何数字,页面只说明原因。单轮的数字看起来像读数,其实分不清引擎的立场与抖动。
- 读数据库失败时报错,而不是渲染空表。 一张空表和「没有问题」长得一样,是最坏的一种失败,因为它看起来像好消息。
- 太短的回答不算回答。 一道列举题只回了一句开场白,是被截断了,不是「没有提到这个品牌」。
报告自己寄出去,而且只寄一次
扫描完结后,报告邮件自动寄给品牌登记的收件人。寄出的时间写回扫描记录,所以调度器之后再来多少次,同一份报告都不会寄第二遍。
报告里的每一个比率都带分子和分母;样本不足三个回答的问题不会被列为「缺口」。
我们修过的三个错
下面三个都是实测时查出来的。写在这里,是因为同类系统多半都有这几个洞。
- 计数读不到,被当成 0。 数据库的计数查询出错时返回空值,程序把它当作 0,于是一个读取失败的回合被标成「已完成」。现在计数读不到就报错。
- 搜索日志被当成回答。 一个会联网搜索的引擎,把它搜了什么列在回答前面,其中逐字重复了问题本身——而问题里常常就有品牌名。于是没提到品牌的回答被判成提到了。现在入库前先剥掉日志。
- 单轮对照高估了差异。 比较繁体与简体提问的结果时,起初只给简体问一轮,得到 18.2%;补问后发现其中混着简体自己的抖动,改为两边各两轮,数字是 12.2%。详见方法说明。
常见问题
- 观澜有订阅价目表吗?
- 没有。观澜智库是开发公司,按项目交付并授权方法与工程,不出售自助订阅。
- 一次完整的 AI 可见度扫描要问多少次?
- 以示范品牌为例是 676 次:52 道买家问题 × 3 种问法 × 4 个引擎,另加 52 次 Google AI Overview 查询。
- 模型接口的额度用完时,测量结果会受影响吗?
- 不会被记成结果。额度用完、密钥被拒或被限流时,相应的提问保持「待问」,不记为失败,也不记为品牌缺席;额度恢复后从原处继续。
- 什么情况下一次扫描不会出报告?
- 失败的提问超过一成时,整轮扫描作废,不进入趋势,也不出报告。