用 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 推荐”。

相关文章
|
2月前
|
人工智能 算法 数据可视化
告别单轮静态测评!WorldForge 多动态环境基准,量化 Agent 组件协同能力
WorldForge是开源动态Agent评测框架,首创情绪耗竭、意义危机、快速衰减三类可控压力环境,支持多轮交互鲁棒性量化评估。适配ModelScope大模型,提供标准化动作空间、WS综合评分及四大基线Agent,助力算法研究与工业落地。
|
机器学习/深度学习 人工智能 算法
【机器学习基础】K-Means聚类算法
【机器学习基础】K-Means聚类算法
1041 0
|
6月前
|
数据采集 人工智能 搜索推荐
GEO与SEO的核心差异:AI搜索时代企业应提前布局的下一代优化体系
GEO不是“AI版SEO”,而是AI搜索时代的新增长逻辑:SEO抢流量位置,GEO夺AI信任票。二者在优化对象、目标、竞争维度、技术逻辑和效果上根本不同——GEO聚焦被AI理解、采纳与引用,实现心智占领与权威确立。企业需SEO稳基础,GEO建未来。(239字)
1418 3
|
3月前
|
弹性计算 应用服务中间件 Linux
阿里云服务器部署WordPress完全指南:从选型到上线全流程
本文提供了一份完整的阿里云服务器部署WordPress的技术指南。文章从服务器选型入手,详细对比了轻量应用服务器与ECS云服务器的适用场景与配置选择策略。然后系统介绍了三种主流的WordPress部署方式:应用镜像一键部署、手动LNMP环境搭建、以及宝塔Linux面板可视化部署,每种方式均配有完整的命令行操作步骤与代码示例。接着讲解了域名解析、SSL证书配置等上线必备环节,并深入探讨了安全组规则设置、WordPress安全加固、缓存与CDN性能优化等进阶话题。全文超过6000字,包含大量可直接复用的代码片段,旨在帮助不同技术背景的用户在阿里云上顺利搭建并运营WordPress网站。
|
JSON 中间件 数据格式
VOS,呼叫系统,呼叫中心中间件-线路配置
线路和线路组 每个线路可设置最大并发数 每个线路可设置休息时间,比如FXO网关一个电话线呼叫一次后,都需要等待一会儿,才可以继续拨打第二通电话,有了休息时间这个参数,就可以解决这个问题了。 重拨,可以根据SIP从错误代码,挂断原因,通话时间和呼叫时间设置是否需要重拨。 并发数,可以设置一个线路并发数,并发数超过了,就可以自动跳过这个线路。 优先级,可以给线路设置优先级,这样就可以实现主用线路和后背线路了。 线路配置 cti_line@domain [哈希表] key 线路名字 value 线路配置JSON格式 | ``` { "params": { "count": 1,
1260 103
|
8月前
|
人工智能 运维 供应链
智能体来了:生产企业如何用AI赚钱
在“智造”转型浪潮下,AI已成为制造企业发展的必选项。本文系统解析AI在研发、生产、供应链、管理等场景的应用路径,提出从数据筑基到智能体落地的四阶段实施框架,揭示避免技术陷阱、组织阻力的关键策略,助力企业以价值驱动、稳步推进智能化升级。
智能体来了:生产企业如何用AI赚钱
|
Kubernetes Ubuntu Docker
Kubernetes安装详细教程 RHEL系列版
本教程基于Rocky Linux 9.5配置Kubernetes环境,涵盖系统准备、containerd安装、K8S组件部署及CNI网络插件配置,其中包含国内镜像加速与集群初始化。
|
XML API Android开发
码农之重学安卓:利用androidx.preference 快速创建一、二级设置菜单(demo)
本文介绍了如何使用androidx.preference库快速创建具有一级和二级菜单的Android设置界面的步骤和示例代码。
801 1
码农之重学安卓:利用androidx.preference 快速创建一、二级设置菜单(demo)
|
算法 数据挖掘 定位技术
基于密度的聚类算法能够在含有噪声的数据集中识别出任意形状和大小的簇(Matlab代码实现)
基于密度的聚类算法能够在含有噪声的数据集中识别出任意形状和大小的簇(Matlab代码实现)
286 1

热门文章

最新文章