☰
【元宝搜索开发者征文大赛】搜索结果可信度核验引擎
2026/10/28 19:01:02 网站建设 项目流程

作品阶段:已用于日常工作(自建核验引擎,已对 8 轮检索、78 条结果跑出完整证据链)

服务对象:自己 + 团队(做竞品调研、写汇报材料时,先过一遍可信度再引用)


一、需求从哪来:一张"厂商榜单"把我坑了

我最近在给团队做一件事——国内中小工厂 MES(制造执行系统)的竞品调研。任务本身不复杂:搞清楚有哪些主要厂商、各家定位和定价、谁在什么价位有优势。

我原以为这是个"搜一搜、归归类"的活。第一次用元宝搜索拉回来 30 条结果,我直接把前几个厂商名抄进表格,开始写报告。表格大致是这么个结构,最后补到了 20 家:

写到"市场格局"那一段时,我停住了。因为同一份表格里,出现了几个对不上的数字:

  • 国内 MES 市场规模,一篇写98.6 亿,另一篇写159.1 亿,还有220 亿、328.7 亿、408 亿——五种说法,最大差 4 倍多。
  • "2026 年 MES 厂商盘点"这类文章,我翻到五篇,五篇的"第一名"是五个不同的公司:有的推宝信,有的推摩尔元数,有的推中之杰,有的推黑湖。

问题来了:如果我把这些数字直接写进给老板的汇报,等于把一堆互相打架的软文当成了事实。搜索给了我结果,但没告诉我哪些能信。

这就是这个工具的起点——我需要一个能回答"这条结果到底可不可信"的东西,而元宝搜索的原始数据,正好是喂给它的输入。


二、为什么需要搜索:它是我拿到的"原始语料",不是"答案"

这里得先讲清楚元宝搜索在我的工具里扮演什么角色,免得有误解。

它不是被当成"一个能直接给我结论的问答机器人"。我用的是它的SearchPro 接口,拿回来的是原始检索结果列表——每条带标题、域名、日期、正文摘要。这一步的价值在于:

  1. 结果多、够快:一次 query 能拿回 10~30 条结构化的返回,正文是完整段落,不是只有标题摘要,这让我能对"内容本身"做分析,而不是对着标题猜。
  2. 能拿到足够"脏"的真实样本:我要验证的是甄别能力。如果返回的全是干净权威稿,这个工具根本没有用武之地,是这批原始数据让规则有了被检验的机会。

换句话说,搜索负责"召回",我的引擎负责"甄别"。如果搜出来就信,那和直接抄第一篇软文没区别。这个接口的分工本来也是如此:它给数据,结论得自己出。

顺带说一句接入:我用的是服务 API KEY 方式(Bearer Token,域名api.wsa.cloud.tencent.com),也可以走腾讯云标准的 SecretId/SecretKey + TC3 签名。两种都行,我这条 KEY 走的是前者。调用时注意一个坑——Cnt(返回条数)在 REST 里是整型,但走 MCP 工具时是字符串"10",别混着传。


三、我怎样实现:把"判断软文"变成一串可复核的规则

光靠感觉判断"这篇像软文"没用,评给别人看也说不清。我的做法是:把每一条判断都落成一条可复核的规则,命中就加分,最后按总分分级。

3.1 先解决"域名"这个最容易踩的坑

一开始我直接拿接口返回的site字段当域名用,结果发现它是乱的——同一批结果里,site一会儿是www.hyzdzn.cn(真域名),一会儿是中国经济新闻网(中文站名),一会儿是今日头条。这会让"同一站点占了多少个席位"这种判断完全失效。

所以第一步是优先从 URL 里取 host,而不是信site字段。顺带把 F9(利益相关方识别)也一起处理了:

3.2 12 条特征,每条都带证据

我设计了 12 条可独立命中的特征,每条命中都带一条"证据片段",读者能拿着回到原文核对。F9(域名归属利益相关方)的判定上面那张图里已经有了,这里说 F12 和另外几条短规则:

# F12:同源改写 / 重复投放 —— 同一份稿换域名再发一遍# 用 5-gram 字符 shingle + Jaccard,中文不用分词,对"改标题、换主角"最敏感defshingles(text:str,n:int=5)->set[str]:clean=re.sub(r"[\s\W_]+","",textor"")return{clean[i:i+n]foriinrange(len(clean)-n+1)}defjaccard(a:set[str],b:set[str])->float:inter=len(a&b)returninter/(len(a)+len(b)-inter)ifaandbelse0.0

上面只是两个函数,完整的聚类还得把相似的两两并成一簇,这部分是并查集:

还有几条短规则也很关键:

  • F1 同源重复(15 分):同一域名在一次检索里占了 2 个以上席位——正常内容站不该这么做,厂商自建矩阵才会。
  • F3 正文自认数据未经核实(22 分):有些软文会在角落里写一句"以上数据来自公开网络,仅供参考",等于自己承认了。
  • F5 有具体数字但无具名出处(12 分):正文有"市场规模 328.7 亿",全文却没出现 IDC/赛迪/年报这类具名来源。
  • F10 商业导流痕迹(24 分):正文出现"扫码 / 免费试用 / 电话"两处以上,这已经等同广告物料。

分数累加后分四级:A(0–21,可采信)、B(22–39,需交叉验证)、C(40–59,存疑)、D(60–100,疑似利益相关方自述)。

3.3 从正文里抽"事实主张",再找互相打架的

光分级还不够。我写了一个extract_claims,从正文里把"谁在什么年份声称了什么数字"抽出来,然后按"同一指标、同一主体、同一年份"分组比对。

这里有两个很容易写错的地方,我踩过坑,记下来:

坑一:美元口径不能和人民币混在一个桶里。一开始我把20.7 亿美元当成20.7 亿元抽进去了,结果把市场规模的极差虚假放大到了19 倍。所以抽的时候要跳过"美元/美金"。

坑二:份额要用绝对百分点,不能用相对比例。42.7%和52.7%相对只差 23%,如果用"相对极差 > 30%"当阈值,这条最关键的分歧会被直接吞掉。但 10 个百分点的差距,在市场份额语境下已经很大了。

核心判定逻辑是这样的:

for(metric,subject,year),itemsinbuckets.items():values=sorted({i["value"]foriinitems})clusters={i["cluster"]foriinitems}# 独立性按"内容簇"计,不是按域名计iflen(values)<2orlen(clusters)<2:# 三站同稿只算一个信源continuelo,hi=values[0],values[-1]ifmetric=="市占率":spread=hi-lo# 百分点用绝对差ifspread<5:continueelse:ratio=(hi-lo)/loifratio<0.3:continue

四、最后得到什么:一次真实运行的完整结果

检索拆成 8 轮,每轮只问一件事。一次 query 里混太多意图,结果会被某一个方向带偏,所以厂商名单、产品定位、定价、份额数据、失败原因分开问。实际记录:

轮次检索词条数涉及域名
1国内中小工厂MES厂商105
2湘众德 MES 公司 官网 湖南 是哪家公司102
3轻量化云MES厂商有哪些 中小制造企业 名单107
4云MES产品定位 核心卖点 黑湖 摩尔元数 对比109
5IDC 中国MES市场份额 2025 报告 云化MES 厂商排名105
6新核云 MES 收费 价格 订阅 简道云 生产管理 报价108
7MES系统多少钱一年 订阅制 买断 报价 中小企业109
8中小工厂MES实施失败 踩坑 缺点 不适合 真实评价106

第 2 轮那个"2"值得看一眼:10 条结果只来自 2 个域名。我本来只想确认这家公司到底存不存在,拿回来的却是同一批内容在反复复述。这也是后来把"同源重复"设成第一条特征的原因。

这 80 条原始结果按 URL 去重后得到78 条唯一页面,跑完整条链路。终端里的真实输出是这样:

68% 的结果不该被单独引用——这就是我要的数字。它不是我拍脑袋说的,是引擎一条条打分打出来的。

落到表格里,每一条都长这样:等级、分数、簇号、标题、域名、来源轮次、证据片段,一列不少。按分数降序排,谁在自卖自夸一眼就能看出来:

看几组被引擎揪出来的"打架数据":

指标与口径数值来源判定
2025 市场规模(软件许可+订阅)69.3 亿元同花顺转述 IDC可用
2025 市场规模(含实施服务)328.7 亿元赛迪口径不同,标注后可用
2025 市场规模(厂商官网引用)132.6 亿元鼎捷 digiwin.com孤证,弃用
黑湖云化份额(2024 年)42.7%IDC 2024 转述跨年,属正常增长
黑湖云化份额(2025 年)50.3%IDC 2025 转述可用
黑湖云化份额(2025 年,厂商自述)52.7%黑湖官方博客自述,不可引用

这里最值得说的一处:42.7% 是 2024 年的,52.7% 是 2025 年的,跨年比较不算矛盾,是正常增长。真正有问题的是同年度的 50.3% 和 52.7%。后者是黑湖在自己官方博客里写的,比第三方转述高 2.4 个百分点。引擎按年份分组,就能把"正常增长"和"自述偏高"分开,不会误报。

引擎跑出来的完整冲突表是这样。右边那列颜色代表该条信源自身评级(绿 A、红 D),能看出真正麻烦的地方在于"高等级信源之间也在打架":

还有一个特别典型的样本,我单独拎出来说:

同一份《MES 多少钱一年》的价格表,几乎逐字出现在jiagongdan.cn、ycmes.cn、blog.blacklake.cn三个站点,只把主角在"蜂鸟工单"和"黑湖小工单"之间对调了一下。按域名数,这是"三个独立信源互相印证";按内容,它只有一个信源。这正是引擎 F12(近重复聚类)要拆穿的假象,5-gram 重合度实测 65%,一眼就能看出是同一份稿。

定价是另一个重灾区。同一款产品,官网挂一个价、渠道报一个价、行业稿又写一个价,还经常不说含不含实施。所以我把每条价格连同"计费单位、是否含实施、价格口径"一起记,才敢往报告里写:

黑湖小工单 10,800 元/年是公开牌价(50 账号),相对可靠。新核云 28,350 元/年是 36 氪的挂牌价,同页还标着实施 3,000 元/人日、10 人日起——这意味着落地至少还要再加 3 万。只看一句"几万块一年",这些信息全丢了。


五、实际效果:这套方法能迁移,但也有明确的边界

它帮上忙的地方:

  • 做调研时,我不再"抄第一篇",而是先让引擎过一遍,只采信 A/B 级里能交叉验证的结论。
  • 汇报材料里每一个数字,都能回溯到"哪条结果、哪个域名、判的什么级",被追问时站得住。
  • 这套东西不绑定 MES。换一个领域,只要把owned_domains(厂商自有站点映射)和指标词表换掉,就能复用到"某类产品的竞品调研""某类服务的供应商甄别"等场景。MES 只是我的第一个验证案例。

核验完的数据最后是这么用的。先是覆盖度那一页,78 条里 68% 不该单独引用、D 级 35 条摆在那里,评审时没人再追问"这个数据哪来的":

再往下才敢下判断。比如价格,把各家报价按年费和交付方式排开,"5–15 万这一段只有项目制选手在场"这个结论自己就浮出来了,比列十个数字有用:

它也有明确的边界,我得诚实写出来:

  • 引擎只回答了"能不能直接引",不回答"是不是真的"。A 级只代表"没命中软文特征",不代表内容一定正确。
  • 有 3 篇"仿客观叙述体"的供稿漏网了:cet.com.cn 的《中国制造业核心力量》、yiwu.com.cn 上那篇黑湖招商稿、cul.sohu.com 的一篇行业观察。它们刻意不写"核心优势/短板"这类卡片标签,也没放导流联系方式,F11 抓不住。这三条是我逐条回原文翻出来的,说明机器判完之后还得人工过一遍。
  • 引擎自动抽取的只有市场规模/市占率/客户数三类指标。定价是我人工从原文摘的,虽然也做成了结构化表,但每条都要人判断口径(含不含实施、是年费还是一次性),自动化不了;功能、实施周期更没法机器比。

关于费用和耗时:一次 SearchPro 调用返回的是结构化数据,我在本地解析、聚类、打分,整个核验过程不额外调接口(原始结果归档后离线复跑,同一份语料跑出来的结果完全一致,方便复核)。单次调研 8 轮检索在额度内即可完成,没有额外成本。


六、做完之后,我对"搜索"这件事的一点想法

以前我一直默认,搜索结果里排前面的就是靠谱的。做完这个工具我才反应过来,搜索给的是一组带噪声的候选,不是标准答案。工具的价值也不在于第一次就搜得准,而在于把原始素材摊开,让我有能力去核。

我写这个核验引擎,补的是"召回之后、引用之前"的那一段,这段在大多数人的工作流里一直是空的。

如果你也在做竞品调研、供应商甄别,或者任何搜完就要写进报告的事,有两件事建议先做:第一,别信site字段,自己去 URL 里取域名;第二,看到"XX 行业第一名"这种话,先问一句这是谁在说。

下一步我想给引擎加一个能力:对"未标注年份的断言"单独告警,因为年份缺失是现在漏检的最大来源。如果你也在用元宝搜索做类似的事,欢迎交流你踩过的坑。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询