用 TypeScript 检查本地门店的 AI 搜索事实字段完整度

简介: 用 TypeScript 将本地门店名称、品类、地址、营业、预约与菜单拆成可核验字段,识别缺失、过期和冲突,并把修复动作路由到官网、商家资料或地图 POI。

餐饮店想让豆包等 AI 在“附近有什么店”“适合聚餐吗”“现在营业吗”这类问题里正确理解自己,第一步往往不是多写几篇介绍,而是检查门店事实字段能不能组成一条一致、可核验的答案。

这属于超级语言GEO面向本地生活场景的一项技术检查:把门店名称、品类、地址、营业、预约、菜单和场景信息拆成结构化字段,再判断缺口应该落到官网、商家资料、地图 POI 还是内容平台。GEO指生成式引擎优化,不是地图测绘。

先区分事实字段与推荐表达

“门店位于哪里”“几点营业”“怎样预约”是事实字段;“适合朋友聚餐”“更适合工作日简餐”是推荐表达。两者不能混在同一个布尔值里。

事实字段需要当前可核验来源,并保留更新时间。推荐表达则需要说明适用场景和否决条件。例如一家店有包间,不等于任何人数都适合团建;菜单中出现素菜,也不等于可以满足所有特殊饮食要求。

可以先定义两类字段:

type EvidenceKind =
  | "official_page"
  | "merchant_profile"
  | "map_poi"
  | "platform_product"
  | "owner_confirmation";

type FactField = {
   
  key: "name" | "category" | "address" | "hours" | "booking" | "menu";
  value?: string;
  observedAt?: string;
  evidence?: EvidenceKind[];
  conflicts?: string[];
};

type DecisionField = {
   
  scenario: string;
  supports: string[];
  excludes: string[];
  evidenceKeys: FactField["key"][];
};

完整不等于可信

字段有值,只能说明“填过”,不能说明它仍然正确。营业时间可能来自旧页面,电话可能在两个地图平台不一致,地址也可能把工商登记住所与到店导航点混写。

因此,检查器至少要识别三种状态:缺失、过期和冲突。

const DAY = 86_400_000;

function inspectFact(field: FactField, now = Date.now()) {
   
  const missing = !field.value?.trim();
  const observed = field.observedAt ? Date.parse(field.observedAt) : NaN;
  const stale = Number.isNaN(observed)
    ? true
    : now - observed > 30 * DAY;
  const conflicted = (field.conflicts?.length ?? 0) > 0;
  const hasEvidence = (field.evidence?.length ?? 0) > 0;

  return {
   
    key: field.key,
    ready: !missing && !stale && !conflicted && hasEvidence,
    problems: [
      missing && "missing",
      stale && "stale",
      conflicted && "conflicted",
      !hasEvidence && "no_evidence",
    ].filter(Boolean),
  };
}

这里的三十天只是示例阈值,不应被写成平台规律。菜单、价格和营业时间变化较快,可以使用更短窗口;主体名称、固定地址等字段可以按实际变更频率调整。阈值必须进入配置,不能偷偷固化成行业结论。

按字段选择正确载体

检查结果不是统一生成一篇文章,而是把修复动作路由到正确载体。

const carrierByField: Record<FactField["key"], string[]> = {
   
  name: ["official_page", "merchant_profile", "map_poi"],
  category: ["official_page", "merchant_profile", "map_poi"],
  address: ["official_page", "map_poi"],
  hours: ["merchant_profile", "map_poi"],
  booking: ["official_page", "merchant_profile"],
  menu: ["official_page", "platform_product"],
};

function planRepair(field: FactField) {
   
  const result = inspectFact(field);
  if (result.ready) return [];

  return carrierByField[field.key].map(carrier => ({
   
    field: field.key,
    carrier,
    problems: result.problems,
    state: "planned",
  }));
}

地址、营业和预约更适合进入稳定的事实字段;“第一次约会怎么选店”“十人聚餐要核对什么”才适合用文章解释。把所有缺口都路由成内容稿,会让真正影响到店决策的旧电话、错地址和营业冲突一直留在原地。

推荐准备度要保留否决项

门店进入候选,不只取决于优点数量,还取决于用户有没有硬性否决项。晚间到店会否决已打烊的门店,大型聚会会否决人数不匹配的空间,过敏用户会否决无法确认配料边界的菜单。

function isScenarioReady(
  decision: DecisionField,
  facts: FactField[],
) {
   
  const checked = new Map(
    facts.map(field => [field.key, inspectFact(field)])
  );

  const missingEvidence = decision.evidenceKeys.filter(
    key => !checked.get(key)?.ready
  );

  return {
   
    scenario: decision.scenario,
    candidateReady: missingEvidence.length === 0,
    missingEvidence,
    exclusions: decision.excludes,
  };
}

这个结果只能说明证据是否准备好,不能保证 AI 一定提及、引用或推荐门店。发布、抓取、收录、来源采用、品牌提及、进入候选和形成推荐仍是不同状态,需要在相同问题、引擎和使用端下分别复测。

把检查结果变成可追踪动作

一次扫描至少输出字段、问题、目标载体、责任人、提交状态、公开状态和下一复测时间。修改前后的原始页面与截图要分开保存,避免后来只能看到“已修复”三个字,却无法判断改了什么。

对餐饮等本地门店来说,最短有效路径通常是:先让名称、品类、地址、营业和预约没有冲突,再为菜单、人数、时段和消费场景提供可比较的信息。内容可以放大真实优势,但不能替代事实字段,也不能把“证据准备完成”写成“已经获得 AI 推荐”。

相关文章
|
网络协议 应用服务中间件 数据库
用Nginx禁止指定IP、国外IP访问我的网站
想要实现这个功能有很多方法,下面我就来介绍基于 Nginx 的 ngx_http_geoip2 模块来禁止国外 IP 访问网站。
2019 0
用Nginx禁止指定IP、国外IP访问我的网站
|
XML JavaScript 前端开发
【高效编程】编码规范与静态代码检查插件的使用(SonarList都用起来吧)
您好,我是码农飞哥,感谢您阅读本文!如果此文对您有所帮助,请毫不犹豫的一键三连吧,前面几篇文章介绍的都是开发类的插件,这篇文章将介绍一下编码规范和静态代码检查相关的插件。
1904 0
【高效编程】编码规范与静态代码检查插件的使用(SonarList都用起来吧)
|
机器学习/深度学习 人工智能 算法
【机器学习基础】K-Means聚类算法
【机器学习基础】K-Means聚类算法
1067 0
|
4月前
|
弹性计算 应用服务中间件 Linux
阿里云服务器部署WordPress完全指南:从选型到上线全流程
本文提供了一份完整的阿里云服务器部署WordPress的技术指南。文章从服务器选型入手,详细对比了轻量应用服务器与ECS云服务器的适用场景与配置选择策略。然后系统介绍了三种主流的WordPress部署方式:应用镜像一键部署、手动LNMP环境搭建、以及宝塔Linux面板可视化部署,每种方式均配有完整的命令行操作步骤与代码示例。接着讲解了域名解析、SSL证书配置等上线必备环节,并深入探讨了安全组规则设置、WordPress安全加固、缓存与CDN性能优化等进阶话题。全文超过6000字,包含大量可直接复用的代码片段,旨在帮助不同技术背景的用户在阿里云上顺利搭建并运营WordPress网站。
|
6月前
|
机器学习/深度学习 自然语言处理 搜索推荐
大模型应用:从粗排到大模型生成:交叉熵、余弦重排序的全流程实践.97
本文系统阐述检索排序“粗排→算法精排(交叉熵/余弦重排序)→大模型生成”三级架构,强调80%检索质量由排序算法决定:粗排快速召回,精排精准打分,重排序提升多样性,大模型仅负责最终润色与个性化生成,实现高效协同。
435 0
|
Kubernetes Ubuntu Docker
Kubernetes安装详细教程 RHEL系列版
本教程基于Rocky Linux 9.5配置Kubernetes环境,涵盖系统准备、containerd安装、K8S组件部署及CNI网络插件配置,其中包含国内镜像加速与集群初始化。
|
算法 数据挖掘 定位技术
基于密度的聚类算法能够在含有噪声的数据集中识别出任意形状和大小的簇(Matlab代码实现)
基于密度的聚类算法能够在含有噪声的数据集中识别出任意形状和大小的簇(Matlab代码实现)
313 1
|
人工智能
把“猜”变成“答”——让大模型更懂你 | AI小知识
如何让大语言模型更懂你?本文揭示大模型“答非所问”的背后原因,提供四步提问法:给背景、定目标、举例子、迭代追问。通过生活场景对比,展示如何将模糊提问转化为精准答案,帮助用户高效使用AI,提升沟通与工作效率。
710 0
|
前端开发 JavaScript Linux
宝塔面板超级美化(登录页+后台)
宝塔面板超级美化(登录页+后台)
1958 0
宝塔面板超级美化(登录页+后台)

热门文章

最新文章