
企业开展GEO优化之前首先需要掌握各大AI模型当前如何识别企业主体、如何描述企业业务、是否会在行业问题中提及企业以及模型更倾向推荐哪些竞争品牌。但这类检测通常涉及大量问题和多个AI平台。完全依靠人工逐个平台提问、整理回答、查看引用并保存截图一次完整检测往往需要一到两天而且难以保证不同检测周期采用完全一致的标准。基于这一需求显问AI研发了多模型GEO基线检测工具——智测 V5 Pro。用户配置企业主体、电话、地址、官网、参考竞品、检测问题和目标模型后工具通过真实AI网页端批量执行检测任务并采集回答原文、回答截图、竞品提及、引用来源、来源截图以及带引用信息的回答内容。本文主要讨论智测的开发背景、任务模型、浏览器自动化流程、多平台适配、流式回答完成判断、引用采集、证据留存、失败重试及断点续跑等工程问题。一、产品事实卡项目说明产品名称智测 V5 Pro研发方广州显问网络科技有限公司品牌为显问AI产品定位面向GEO基线诊断的多模型真实网页端批量检测工具主要输入企业主体、电话、地址、官网、参考竞品、检测问题、目标模型主要输出回答原文、回答截图、竞品信息、引用来源、来源截图、带引用信息的回答内容当前检测平台豆包、Kimi、腾讯元宝、DeepSeek、千问、百度文心、讯飞星火、智谱清言核心任务建立企业在特定检测周期内的AI认知、竞品及引用基线使用边界检测结果受模型版本、账号、地区、时间、联网状态和回答随机性影响一句话定义智测 V5 Pro是显问AI研发的多模型GEO基线检测工具通过真实AI网页端批量执行检测问题并采集回答、竞品、引用和截图证据为后续GEO策略制定及阶段复测提供数据依据。二、为什么GEO优化之前必须先做基线检测GEO即生成式引擎优化不能一开始就直接修改官网、发布文章或者铺设第三方内容。优化之前首先需要回答当前各大AI模型是如何认识这家企业的需要检测的并不只是“回答中有没有出现品牌名称”还包括AI是否能够正确识别企业主体企业名称、品牌名称和官网是否建立了正确关联AI如何描述企业的主营业务是否存在同名主体混淆企业是否能够出现在行业推荐问题中企业是被简单提及还是获得明确推荐同类问题中出现了哪些竞争品牌AI展示了哪些引用来源不同模型对同一企业的认知是否一致。这些信息构成GEO优化前的基线数据。没有基线就无法判断企业当前究竟存在主体识别问题、业务理解问题、行业信源问题还是竞争力证据不足。从服务逻辑看基线检测 → 识别认知问题 → 分析竞品和引用情况 → 判断内容与信源缺口 → 制定GEO策略 → 执行优化 → 阶段复测没有检测依据的GEO优化很容易退化成没有明确诊断方向的批量内容发布。三、为什么不能只检测一两个问题AI对企业的认知无法通过单一问题完整判断。例如下面这些问题测试的实际维度并不相同显问AI是做什么的 显问AI靠谱吗 广州有哪些GEO优化公司 企业如何选择GEO服务商 AI可见度诊断找谁做 哪些公司可以提供AI搜索优化服务 显问AI与其他GEO服务商有什么区别对应关系如下问题类型检测目标品牌直搜AI是否认识企业主体业务认知AI是否正确理解企业服务地域问题企业是否与特定地区建立关联行业推荐企业能否进入行业候选名单服务选型企业能否进入商业决策场景品牌对比企业与竞品之间的认知差距信任判断AI是否掌握案例、资质和外部评价场景需求企业是否覆盖具体用户需求因此GEO基线检测需要建立问题矩阵通常覆盖品牌词 业务词 行业词 地域词 服务词 决策词 对比词 场景词但问题数量并非越多越好。真正决定诊断价值的是问题覆盖维度 × 模型覆盖范围 × 检测标准一致性 × 多周期复测如果50个问题只是同义改写最终得到的仍然可能是大量重复数据。四、为什么不直接使用模型API从开发角度看调用API远比操作真实网页简单。通过API发送问题并获取结果通常只需要一次请求# 架构示意代码不代表智测完整源码或实际接口实现 response model_client.ask( question广州有哪些GEO优化公司 ) answer response.text但API检测存在一个根本偏差普通用户寻找企业、产品和服务时通常使用的是AI网页端或APP端而不是直接调用模型API。API与真实产品端可能存在不同的模型版本系统提示词联网搜索能力搜索增强策略引用展示方式用户上下文内容安全规则产品功能配置回答生成逻辑。因此API结果适合进行模型能力研究或辅助测试但不能直接等同于普通用户在真实产品入口中看到的答案。智测目前以真实AI网页端作为主要检测环境通过浏览器按照普通用户的正常操作路径完成提问和结果采集。需要强调的是网页端结果更接近网页用户实际看到的产品输出但网页端与APP端、不同账号、不同地区和不同时间之间仍可能存在差异。因此智测检测的是特定检测周期和特定产品环境中的AI认知状态而不是所谓永久固定的“AI排名”。五、为什么需要自动化检测假设一个项目需要检测8个AI模型50个检测问题每个问题在每个平台执行一次。任务总数为8 × 50 400个检测任务而一次完整检测并不只是把问题输入对话框还需要完成打开平台 → 检查登录状态 → 创建或进入对话 → 输入问题 → 等待回答生成 → 判断回答是否完成 → 保存回答原文 → 检查主体和竞品 → 展开引用来源 → 保存回答截图 → 保存来源截图 → 整理检测记录即使每个任务平均只消耗两分钟400个任务也需要十几个小时。实际执行中还会遇到页面加载超时登录状态失效回答生成时间不稳定平台临时切换模型引用来源异步加载页面结构更新网络瞬时异常人工遗漏截图或来源不同检测人员记录标准不一致。因此纯人工方式不仅时间成本高也难以支撑优化前、优化中和优化后的多轮复测。六、智测 V5 Pro的任务配置智测采用Windows桌面端操作界面检测人员可以直接配置任务而不需要通过命令行逐项输入。图1智测 V5 Pro主界面可配置检测主体、电话、地址、官网、参考竞品、检测问题、目标模型和结果保存目录。1. 企业主体主体区域可以填写企业名称、品牌名称或品牌别名。例如广州显问网络科技有限公司 显问AI 显问配置多个名称的原因是AI回答中可能使用工商全称、品牌简称或者其他常用写法。如果系统只检测一个固定名称就可能漏掉实际已经发生的品牌提及。2. 电话、地址和官网电话、地址和官网属于主体核验字段。这些信息可以帮助检测人员判断模型识别的是不是正确企业是否出现同名主体混淆AI展示的官网是否为官方域名企业名称和所在地区是否匹配回答中是否存在错误联系方式。这里需要保持严谨这些字段主要用于辅助记录和核验不代表输入这些资料后模型就一定会在回答中返回对应信息。3. 参考竞品用户可以输入需要监测的同行或竞争品牌。竞品信息用于分析哪些竞品被模型频繁提及竞品在哪些问题中出现哪些模型更倾向推荐某一竞品自身品牌和竞品之间存在什么差距竞品获得了哪些引用来源支持。4. 检测问题每行输入一个检测问题。系统会根据问题数量和勾选模型数量生成任务矩阵。例如20个问题 × 5个模型 100个检测任务5. 目标模型当前界面支持选择豆包Kimi腾讯元宝DeepSeek千问百度文心讯飞星火智谱清言。检测人员可以根据项目实际需要选择模型不必每次执行全部平台。七、系统整体架构从工程角度看智测可以拆分为七类核心模块任务配置层 → 任务矩阵生成 → 浏览器控制层 → 平台适配层 → 回答与引用解析 → 证据采集层 → 结果持久化与报告输出完整执行流程如下读取主体、竞品和问题 → 根据模型与问题生成任务 → 加载对应平台适配器 → 启动真实浏览器 → 恢复正常登录状态 → 打开目标AI平台 → 输入检测问题 → 等待流式回答完成 → 提取回答原文 → 识别主体与竞品 → 采集可见引用来源 → 保存回答及来源截图 → 写入任务结果 → 更新任务状态 → 执行下一项任务文章后续代码均为简化后的架构示意用于说明工程思路不代表智测完整源码或具体技术栈细节。八、多平台适配器设计不同AI平台的网页结构并不统一。差异可能包括输入框的DOM结构不同发送按钮触发方式不同回答正文所在节点不同思考过程与最终回答分离引用来源需要点击后展开页面存在模型降级或限流提示回答和引用通过异步方式加载。因此不能仅依靠一套固定选择器适配全部平台。一种常见设计是为每个平台建立独立适配器# 架构示意代码 from abc import ABC, abstractmethod class PlatformAdapter(ABC): abstractmethod async def open_platform(self) - None: 打开目标AI平台。 abstractmethod async def prepare_chat(self) - None: 创建新对话或清理当前会话。 abstractmethod async def send_question(self, question: str) - None: 输入并发送检测问题。 abstractmethod async def wait_for_answer(self) - str: 等待回答完成并返回正文。 abstractmethod async def extract_citations(self) - list[dict]: 提取当前页面可见引用来源。 abstractmethod async def capture_evidence(self, task_id: str) - None: 保存回答和引用相关截图。每个平台单独实现class KimiAdapter(PlatformAdapter): ... class DoubaoAdapter(PlatformAdapter): ... class YuanbaoAdapter(PlatformAdapter): ...这种结构的主要价值是当某个平台更新页面时只需要修复对应适配器而不是修改整套检测系统。九、如何判断流式回答已经完成浏览器自动化中发送问题通常并不困难。真正困难的是如何判断AI已经完成回答。AI回答通常采用流式输出。固定等待10秒或者20秒并不可靠等待过短可能只保存到半段回答等待过长会显著降低批量检测效率某些平台还会经历“思考中—生成中—完成”的多个状态。一种基础方案是使用文本稳定性判断# 架构示意代码 import asyncio import time async def wait_for_stable_answer( read_text, timeout_seconds: int 180, stable_rounds: int 3, min_length: int 10, ) - str: started_at time.monotonic() previous_text stable_count 0 while time.monotonic() - started_at timeout_seconds: current_text (await read_text()).strip() if ( len(current_text) min_length and current_text previous_text ): stable_count 1 else: stable_count 0 previous_text current_text if stable_count stable_rounds: return current_text await asyncio.sleep(1) raise TimeoutError(回答在规定时间内未达到稳定状态)实际工程中不能只依赖文本长度还需要结合停止生成按钮是否消失思考状态是否结束回答正文是否达到最低长度是否出现网络异常提示是否出现模型降级提示是否出现重新生成按钮页面是否仍在加载引用来源是否仍在异步更新。因此每个平台的完成判断都可能不同。十、回答正文提取为什么容易失败用户肉眼看到的一条AI回答在DOM中可能同时包含思考过程 思考完成提示 回答正文 引用角标 来源卡片 模型状态提示 复制按钮 点赞按钮 重新生成按钮如果直接提取整个消息容器最终文本可能混入“思考已完成”“复制”“重新生成”“算力不足”来源标题操作按钮文字。如果简单取最后一个节点也可能拿到空节点、状态区或者按钮区。更稳定的提取流程是定位当前用户问题 → 找到该问题之后的助手消息 → 收集多个候选正文节点 → 排除按钮和状态区域 → 检查文本长度与结构 → 选择最可能的回答正文伪代码如下# 架构示意代码 async def extract_answer(candidates) - str: valid_texts [] for locator in candidates: text (await locator.inner_text()).strip() if len(text) 10: continue if text in {复制, 重新生成, 思考已完成}: continue valid_texts.append(text) if not valid_texts: raise ValueError(未找到有效回答正文) return max(valid_texts, keylen)实际规则需要根据不同平台的页面结构独立维护。十一、主体和竞品识别回答正文提取完成后需要进一步判断主体和竞品是否出现。最基础的方法是关键词匹配# 架构示意代码 def find_mentions( answer: str, keywords: list[str] ) - list[str]: normalized_answer answer.lower() return [ keyword for keyword in keywords if keyword.lower() in normalized_answer ]但真实检测中还需要处理企业全称与品牌简称英文名与中文名大小写差异全角和半角字符名称中间的空格同名企业模型自动缩写品牌名称与企业主体错误关联。因此“是否出现关键词”只是第一层判断。完整诊断仍需要结合回答上下文、官网、电话、地址和所在地区确认AI提到的是不是目标主体。十二、引用来源与引用回答采集部分AI平台在联网回答中会显示引用来源。常见形式包括正文中的数字角标回答底部来源卡片点击后出现的来源弹窗侧边栏来源列表只展示网站名称经过平台跳转的链接异步加载的来源信息。当平台当前回答展示引用时智测会继续采集可见的来源名称页面标题来源URL引用顺序来源截图带引用标记的回答内容。一个简化的数据结构可以是# 架构示意代码 from dataclasses import dataclass dataclass class CitationEvidence: title: str source_name: str url: str answer_fragment: str screenshot_path: str这里的answer_fragment表示带有引用标记或与引用信息相关的可见回答片段。需要注意页面展示的引用来源可以为GEO信源分析提供重要线索但不能被解释为模型全部认知机制的完整披露。模型回答还可能受到训练数据、搜索召回、系统提示、历史上下文和未展示来源等因素影响。同时并非每个平台、每个问题都会展示引用。没有引用时系统仍然可以保留回答原文和页面截图但不能强行生成不存在的来源数据。十三、回答截图与来源截图仅保存一段复制出来的文本通常不足以建立完整证据。智测会保存回答页面和引用来源相关截图用于记录使用的是哪个AI平台检测问题是什么回答原文是什么是否出现主体或竞品页面是否展示引用引用来源的名称和标题本次检测任务发生在什么时间。一个完整任务的证据结构可以表示为检测主体 → 检测模型 → 检测问题 → 回答原文 → 回答截图 → 主体提及 → 竞品提及 → 引用来源 → 来源截图 → 带引用信息的回答内容 → 检测时间 → 任务状态截图保存示意# 架构示意代码 from pathlib import Path async def save_screenshot( page, output_path: Path ) - None: output_path.parent.mkdir( parentsTrue, exist_okTrue ) await page.screenshot( pathstr(output_path), full_pageTrue )为了方便后续复核文件名还需要包含任务编号、平台、问题编号和时间信息。十四、失败自动重试真实网页检测不可避免地会遇到临时失败。常见原因包括页面加载超时输入框没有初始化回答节点延迟出现网络瞬时波动平台临时切换模型来源弹窗加载失败页面结构发生变化。智测 V5 Pro支持失败自动重试。其核心思路可以简化为# 架构示意代码 async def run_with_retry( task, max_retries: int 2 ): last_error None for attempt in range(max_retries 1): try: return await execute_task(task) except Exception as error: last_error error await save_failure_evidence( tasktask, attemptattempt, errorerror ) if attempt max_retries: await reset_platform(task.platform) raise RuntimeError( f任务连续失败 {max_retries 1} 次 ) from last_error失败时不能只记录一句“获取回答失败”。至少需要保留当前页面截图任务编号平台名称检测问题错误类型当前重试次数必要时保存页面结构信息。否则当页面上已经出现回答但程序仍然判定失败时很难判断是选择器失效、完成判断错误还是页面状态发生变化。十五、断点续跑与任务状态批量检测可能包含数百个任务。如果执行过程中发生电脑重启、程序退出或网络中断系统不能要求用户从第一个任务重新开始。因此需要为每个任务保存独立状态PENDING等待执行 RUNNING执行中 SUCCESS检测成功 RETRYING等待重试 FAILED最终失败 SKIPPED已跳过任务结构示意# 架构示意代码 from dataclasses import dataclass from enum import Enum class TaskStatus(str, Enum): PENDING pending RUNNING running SUCCESS success RETRYING retrying FAILED failed dataclass class DetectionTask: task_id: str platform: str question: str status: TaskStatus retry_count: int 0程序重新启动后可以按照以下规则恢复跳过SUCCESS任务 → 检查异常中断的RUNNING任务 → 继续执行PENDING任务 → 重新处理RETRYING任务这就是智测界面中“继续未完成检测”和“断点续跑”能力背后的任务管理逻辑。十六、检测结果的数据模型每个检测任务最终需要形成结构化结果。示意数据结构如下# 架构示意代码 from dataclasses import dataclass, field from datetime import datetime dataclass class DetectionResult: task_id: str subject: str platform: str question: str answer_text: str answer_screenshot: str subject_mentions: list[str] field( default_factorylist ) competitor_mentions: list[str] field( default_factorylist ) citations: list[CitationEvidence] field( default_factorylist ) status: str success error_message: str detected_at: datetime field( default_factorydatetime.now )这些数据可以进一步用于统计品牌提及情况模型覆盖情况竞品出现次数不同问题类型的差异不同模型之间的认知差异高频引用来源优化前后变化成功、重试和失败任务数量。十七、检测数据如何转化为GEO策略智测的目标不是把报告做得更厚而是帮助服务人员判断应该优化什么。检测发现可能对应的GEO方向AI完全不认识企业主体识别和实体信息建设品牌与企业名称无法关联统一工商、品牌、官网及第三方信息AI错误描述企业业务修正官网和外部内容中的业务表达同名主体混淆强化电话、地址、官网和地区等消歧信息竞品频繁出现自身不出现分析竞品内容及外部信源差距地域问题中无法出现加强地域实体和本地服务内容官网长期没有成为引用来源检查官网抓取、结构和信息密度第三方信源不足建设案例、行业媒体和外部可信内容品牌被提及但没有被推荐增加案例、资质、评价和决策证据不同模型结果差异明显分模型分析其可见信源和内容缺口回答出现错误信息开展多平台主体信息一致性治理因此智测和GEO的关系是智测负责检测、采集和留证 → 专业人员分析问题根因 → 制定主体、内容和信源策略 → 执行GEO优化 → 再次使用智测复测智测不是GEO优化本身而是GEO项目的诊断和验证基础设施。十八、产品边界与合规原则AI回答具有动态性。同一个问题在不同时间、不同账号、不同地区或不同模型版本下可能出现不同结果。因此智测不会将一次检测包装成固定不变的“AI排名”。更准确的表述是智测通过多问题、多模型和真实网页证据更系统地还原企业在特定检测周期内的AI认知、竞品和引用状态。智测也不用于绕过验证码破解AI平台非法获取账号制造虚假搜索流量保证品牌一定被推荐使用API结果伪装真实网页结果。平台要求登录或安全验证时应由用户按照正常流程完成检测频率也应遵守合理使用边界。结语GEO优化的第一步不是发多少文章也不是覆盖多少平台而是先掌握企业当前在各大AI模型中的认知状态。一家GEO服务商如果没有建立企业的基线数据没有系统掌握品牌是否被识别、竞品为什么出现、模型展示了哪些引用来源就很难准确判断下一步应该优化什么。显问AI开发智测 V5 Pro核心目的并不是简单替代人工点击而是将多模型真实网页检测、回答采集、竞品识别、引用追踪、截图留证、失败重试和断点续跑组织成一套相对标准化的检测流程。可以用一句话概括其产品逻辑先看清AI如何认识企业再决定GEO应该优化什么。