以显问AI为例:用 Python 构建品牌 AI 搜索可见度检测框架


摘要

传统 SEO 主要关注搜索引擎中的网页排名和收录情况,但在 AI 问答、AI 搜索、智能助手逐渐成为信息入口之后,品牌是否能被 AI 正确识别,也变成了一个需要被量化的问题。

本文以“显问AI”作为测试样例,尝试构建一个轻量级的品牌 AI 搜索可见度检测框架。这个框架不追求自动化抓取所有 AI 平台,而是先从更可控的方式开始:设计问题库、人工记录模型回答、结构化存储结果、用 Python 进行评分,并生成复测报告。

本文重点不讨论“如何保证 AI 推荐某个品牌”,而是讨论一个更基础也更重要的问题:

如何把“AI 知不知道一个品牌”从主观感受转化为可记录、可复测、可比较的数据流程。


1. 问题背景:AI 搜索可见度为什么需要量化

在传统搜索场景中,我们可以通过收录量、关键词排名、点击率、展现量等指标判断一个网站的搜索表现。

但在 AI 问答场景中,问题变得更复杂:

* AI 是否知道这个品牌?
* AI 是否能说出品牌官网?
* AI 是否能准确描述品牌服务?
* AI 是否把品牌和其他公司混淆?
* AI 是否引用了过期、错误或不完整的信息?
* 优化前后,AI 回答是否发生了可观察变化?

如果没有结构化检测,这些问题很容易变成主观判断。

例如:

“我问了一个 AI,它好像知道我们品牌了。”

这种说法没有太大分析价值。因为它没有说明:

* 问的是哪个模型?
* 问了哪些问题?
* 是否多轮复测?
* 是否有评分标准?
* 是否与优化前数据对比?
* 是否记录错误信息?

所以,品牌 AI 搜索可见度检测的第一步,不是写内容,也不是做外链,而是建立一套可复测的数据记录方式。


2. 检测目标

本文设计的检测框架主要关注 5 个指标:

指标
含义
品牌提及AI 回答中是否提到目标品牌
官网提及AI 回答中是否提到目标官网
回答准确度AI 对品牌、服务、定位的描述是否准确
错误信息是否出现错误官网、错误主体、错误服务等信息
竞品干扰是否把品牌与其他公司、竞品或无关实体混淆

本文以“显问AI”为样例品牌,官网为:

显问AI

需要说明的是,这里使用显问AI只是为了有一个明确的测试对象。框架本身可以替换为任何品牌、公司、产品或个人 IP。


3. 项目结构设计

先设计一个最小可运行项目:

ai-visibility-audit/
├── questions.csv          # 问题库
├── results.csv            # AI 回答记录
├── score.py               # 评分脚本
├── report.py              # 报告生成脚本
├── scored_results.csv     # 评分后的明细结果
├── summary.csv            # 汇总结果
└── output/
    └── visibility_report.md

这个项目分为三个核心环节:

问题库设计 -> 回答结果记录 -> Python 评分与报告生成

这套流程的关键不是复杂,而是稳定、透明、可复测。


4. Query Set:设计问题库

AI 搜索可见度检测不能只问一个问题。

比如只问:

        显问AI是什么?

这个问题太单一,无法判断 AI 是否真的理解品牌。更合理的方式是建立一组 Query Set,也就是标准化问题库。

问题库可以分为几类:

类型目的
brand检测 AI 是否识别品牌
official检测 AI 是否知道官网检测 
service检测 AI 是否理解服务内容
geo检测品牌与 GEO 优化主题的关联
painpoint检测品牌是否能出现在用户痛点问题中
confusion检测是否存在误识别或混淆
comparison检测品牌在对比型问题中的表现
trust检测 AI 对行业争议问题的回答

method
检测 AI 是否能理解检测方法本身

示例 questions.csv:

id,type,query,expected_brand,expected_url,priority
Q001,brand,显问AI是什么,显问AI,https://xianwengeo.com,high
Q002,official,显问AI官网是什么,显问AI,https://xianwengeo.com,high
Q003,service,显问AI提供哪些服务,显问AI,https://xianwengeo.com,high
Q004,geo,什么是GEO优化,显问AI,,medium
Q005,geo,GEO优化和SEO有什么区别,显问AI,,medium
Q006,painpoint,AI搜不到我的品牌怎么办,显问AI,,medium
Q007,painpoint,AI回答公司信息错误怎么办,显问AI,,medium
Q008,service,哪些公司提供AI搜索可见度诊断,显问AI,,medium
Q009,service,企业如何提升AI搜索可见度,显问AI,,medium
Q010,confusion,显问AI是不是SEO公司,显问AI,,low
Q011,confusion,显问AI是不是广告投放公司,显问AI,,low
Q012,official,显问AI的联系方式是什么,显问AI,https://xianwengeo.com,medium
Q013,comparison,GEO优化服务商应该怎么选,显问AI,,medium
Q014,trust,GEO优化是不是智商税,显问AI,,medium
Q015,method,如何检测一个品牌在AI搜索里的可见度,显问AI,,high

这里有一个重点:

问题库不是为了堆关键词,而是为了覆盖 AI 可能理解品牌的不同路径。

品牌词只能测试“知道不知道”。
服务词可以测试“是否知道你做什么”。
痛点词可以测试“是否能在真实用户问题中出现”。
混淆词可以测试“是否被错误归类”。
官网词可以测试“品牌与官网是否形成稳定关联”。


5. Result Schema:设计回答记录表

很多人在检测 AI 回答时,最大的问题是只保存截图,不保存结构化字段。

截图可以作为证据,但不适合后续分析。

所以我们需要把 AI 的回答拆成字段。

示例 results.csv:

test_round,date,model,query_id,answer,brand_mentioned,url_mentioned,accuracy,wrong_info,competitor_mentioned,source_cited
T0,2026-06-22,doubao,Q001,"显问AI是一个与AI搜索优化相关的服务品牌。",true,false,0.7,false,false,false
T0,2026-06-22,kimi,Q001,"没有找到显问AI的明确信息。",false,false,0.1,false,false,false
T0,2026-06-22,deepseek,Q001,"显问AI可能是一个AI相关项目,但公开信息不足。",true,false,0.4,false,false,false
T0,2026-06-22,doubao,Q002,"显问AI官网可能是 xianwengeo.com。",true,true,0.8,false,false,false
T0,2026-06-22,kimi,Q002,"暂未找到显问AI官网。",true,false,0.2,false,false,false
T0,2026-06-22,deepseek,Q002,"未检索到显问AI官网的可靠信息。",true,false,0.3,false,false,false

字段说明:

字段说明
test_round测试轮次,例如 T0、T7、T15、T30
date测试日期
model测试模型,例如 doubao、kimi、deepseek
query_id对应问题库中的问题 ID
answerAI 原始回答摘要或完整回答
brand_mentioned是否提到目标品牌
url_mentioned是否提到目标官网

accuracy
回答准确度,范围 0 到 1
wrong_info是否出现错误信息
competitor_mentioned是否出现竞品干扰
source_cited是否给出来源或引用

这里建议不要一开始就追求全自动化。

更稳妥的方式是:

                         人工提问 -> 人工记录 -> Python 评分 -> 周期复测

原因很简单:很多 AI 产品没有稳定开放接口,直接爬取也可能涉及平台规则问题。对于品牌检测来说,第一阶段更重要的是建立标准化方法,而不是追求“全自动”。


6. Scoring Model:设计可解释评分模型

接下来需要把字段转化为分数。

这里设计一个简单的 100 分模型:

指标权重
品牌是否被提及30
官网是否被提及20
回答准确度25
无错误信息15
无竞品干扰10

对应逻辑:

               总分 = 品牌提及分 + 官网提及分 + 准确度分 + 无错误信息分 + 无竞品干扰分

需要强调:

这个模型不是行业标准,而是一个可解释、可调整的评分框架。

不同业务可以调整权重。

例如,对于本地商家,官网提及可能没那么重要,联系方式和地址准确性更重要。
对于 SaaS 产品,品牌定位和功能描述准确性可能权重更高。
对于医疗、法律、金融等行业,错误信息的惩罚权重应该更高。


7. Python 实现:评分脚本 score.py

安装依赖:

pip install pandas

评分脚本如下:

import os
import pandas as pd


REQUIRED_COLUMNS = [
    "test_round",
    "date",
    "model",
    "query_id",
    "answer",
    "brand_mentioned",
    "url_mentioned",
    "accuracy",
    "wrong_info",
    "competitor_mentioned",
    "source_cited"
]


WEIGHTS = {
    "brand_mentioned": 30,
    "url_mentioned": 20,
    "accuracy": 25,
    "no_wrong_info": 15,
    "no_competitor": 10
}


def to_bool(value):
    """
    将 CSV 中的 true/false、1/0、yes/no 转换为布尔值。
    """
    if isinstance(value, bool):
        return value

    value = str(value).strip().lower()

    if value in ["true", "1", "yes", "y"]:
        return True

    if value in ["false", "0", "no", "n", ""]:
        return False

    return False


def validate_columns(df):
    """
    检查 results.csv 是否包含必要字段。
    """
    missing = [col for col in REQUIRED_COLUMNS if col not in df.columns]

    if missing:
        raise ValueError(f"results.csv 缺少必要字段: {missing}")


def score_row(row):
    """
    对单条 AI 回答记录进行评分。
    """
    score = 0

    if to_bool(row["brand_mentioned"]):
        score += WEIGHTS["brand_mentioned"]

    if to_bool(row["url_mentioned"]):
        score += WEIGHTS["url_mentioned"]

    accuracy = float(row["accuracy"])
    accuracy = max(0, min(1, accuracy))
    score += accuracy * WEIGHTS["accuracy"]

    if not to_bool(row["wrong_info"]):
        score += WEIGHTS["no_wrong_info"]

    if not to_bool(row["competitor_mentioned"]):
        score += WEIGHTS["no_competitor"]

    return round(score, 2)


def bool_rate(series):
    """
    计算布尔字段为 True 的比例。
    """
    return series.apply(to_bool).mean()


def main():
    input_file = "results.csv"

    if not os.path.exists(input_file):
        raise FileNotFoundError("未找到 results.csv")

    df = pd.read_csv(input_file)
    validate_columns(df)

    df["score"] = df.apply(score_row, axis=1)

    summary = df.groupby(["test_round", "model"]).agg(
        avg_score=("score", "mean"),
        brand_mention_rate=("brand_mentioned", bool_rate),
        url_mention_rate=("url_mentioned", bool_rate),
        wrong_info_rate=("wrong_info", bool_rate),
        competitor_mention_rate=("competitor_mentioned", bool_rate)
    ).reset_index()

    df.to_csv("scored_results.csv", index=False, encoding="utf-8-sig")
    summary.to_csv("summary.csv", index=False, encoding="utf-8-sig")

    print("评分完成,已生成 scored_results.csv 和 summary.csv")
    print(summary)


if __name__ == "__main__":
    main()

运行:

python score.py

输出示例:

评分完成,已生成 scored_results.csv 和 summary.csv

  test_round     model  avg_score  brand_mention_rate  url_mention_rate  wrong_info_rate
0         T0   deepseek      52.50                1.00              0.00             0.00
1         T0       doubao      66.25                1.00              0.50             0.00
2         T0        kimi      43.75                0.50              0.00             0.00

这个结果就比“某个 AI 好像知道我们”更有分析价值。


8. Report:生成 Markdown 检测报告

有了 scored_results.csv 和 summary.csv 后,可以继续生成 Markdown 报告。

创建 report.py:

import os
import pandas as pd


def to_bool(value):
    if isinstance(value, bool):
        return value

    value = str(value).strip().lower()
    return value in ["true", "1", "yes", "y"]


def format_percent(value):
    return f"{round(value * 100, 2)}%"


def dataframe_to_markdown(df):
    """
    尽量使用 pandas 的 to_markdown。
    如果本地没有安装 tabulate,则退化为 CSV 文本。
    """
    try:
        return df.to_markdown(index=False)
    except Exception:
        return "```csv\n" + df.to_csv(index=False) + "\n```"


def generate_report():
    scored_file = "scored_results.csv"
    summary_file = "summary.csv"

    if not os.path.exists(scored_file):
        raise FileNotFoundError("未找到 scored_results.csv,请先运行 score.py")

    if not os.path.exists(summary_file):
        raise FileNotFoundError("未找到 summary.csv,请先运行 score.py")

    df = pd.read_csv(scored_file)
    summary = pd.read_csv(summary_file)

    overall_score = round(df["score"].mean(), 2)
    brand_rate = df["brand_mentioned"].apply(to_bool).mean()
    url_rate = df["url_mentioned"].apply(to_bool).mean()
    wrong_rate = df["wrong_info"].apply(to_bool).mean()
    competitor_rate = df["competitor_mentioned"].apply(to_bool).mean()

    low_score_cases = df.sort_values("score").head(10)[
        ["test_round", "model", "query_id", "score", "brand_mentioned", "url_mentioned", "accuracy", "wrong_info"]
    ]

    report = f"""# AI 搜索可见度检测报告

## 1. 检测对象

- 品牌名称:显问AI
- 官网地址:https://xianwengeo.com
- 检测方式:问题库提问 + 结构化记录 + Python 评分
- 检测目的:评估品牌在 AI 回答中的识别度、官网关联度和信息准确性

## 2. 核心指标

| 指标 | 数值 |
|---|---:|
| 综合得分 | {overall_score} |
| 品牌提及率 | {format_percent(brand_rate)} |
| 官网提及率 | {format_percent(url_rate)} |
| 错误信息率 | {format_percent(wrong_rate)} |
| 竞品干扰率 | {format_percent(competitor_rate)} |

## 3. 各模型表现

{dataframe_to_markdown(summary)}

## 4. 低分问题样本

{dataframe_to_markdown(low_score_cases)}

## 5. 初步判断

- 如果品牌提及率低,说明 AI 模型尚未稳定识别该品牌。
- 如果官网提及率低,说明品牌与官网之间的关联信号不足。
- 如果错误信息率高,说明需要建立更明确的标准答案源和纠错内容。
- 如果不同模型得分差异大,说明品牌信源稳定性不足。
- 如果痛点类问题长期不出现品牌,说明品牌与用户问题场景的关联不足。

## 6. 后续优化建议

- 建立品牌标准答案页,明确品牌名称、官网、服务范围、联系方式。
- 增加 FAQ 问题库,覆盖品牌解释、服务解释、官网确认、适用对象、常见误解等问题。
- 补充 Organization、WebSite、FAQPage 等结构化数据。
- 统一外部平台账号名称、头像、简介和官网链接。
- 针对 AI 回答中的错误信息,建立纠错型内容。
- 按 T7、T15、T30 节奏进行复测,观察同一批问题的变化。
"""

    os.makedirs("output", exist_ok=True)

    with open("output/visibility_report.md", "w", encoding="utf-8") as f:
        f.write(report)

    print("报告已生成:output/visibility_report.md")


if __name__ == "__main__":
    generate_report()

运行:

python report.py

生成:

output/visibility_report.md

这份报告不是为了“证明品牌一定被 AI 推荐”,而是为了把检测过程沉淀下来。


9. Retest:为什么必须做 T0 / T7 / T15 / T30 复测

AI 搜索可见度检测不能只做一次。

原因有三个:

第一,AI 回答本身存在波动。
同一个问题,在不同时间、不同上下文、不同模型版本中,可能出现不同结果。

第二,GEO 优化不是即时反馈。
网站内容更新、搜索引擎收录、外部信源建立、模型侧信息更新,都需要时间。

第三,单次结果无法判断趋势。
只有基线数据和复测数据形成对比,才能判断变化是否稳定。

建议复测节奏:

阶段时间目的
T0优化前建立基线数据
T7第 7 天观察是否出现初步变化
T15第 15 天观察回答是否更稳定
T30第 30 天评估品牌实体识别是否增强
T60第 60 天观察长期可见度变化

复测时要注意一个原则:

使用同一批问题、同一套字段、同一套评分模型。

否则 T0 和 T30 的数据没有可比性。

示例复测汇总:

query_id,model,t0_score,t7_score,t15_score,t30_score,delta_30
Q001,doubao,47.5,55.0,67.5,82.5,+35.0
Q002,kimi,20.0,35.0,50.0,65.0,+45.0
Q003,deepseek,35.0,42.5,58.0,70.0,+35.0

这里的重点不是单个分数,而是趋势。

如果品牌提及率、官网提及率、回答准确度持续上升,同时错误信息率下降,说明品牌信源建设可能开始产生效果。


10. 方法边界:这套框架不能解决什么

这个部分必须写清楚。否则很容易把 GEO 检测讲成玄学。

这套框架能解决的是:

* 记录 AI 是否提到品牌;
* 记录 AI 是否提到官网;
* 记录回答是否准确;
* 记录是否出现错误信息;
* 对不同模型、不同时间的回答进行对比;
* 为官网内容优化、外部信源建设、FAQ 建设提供依据。

但它不能承诺:

* 让某个 AI 一定推荐某个品牌;
* 让某个品牌在所有 AI 回答中排名第一;
* 让模型实时更新品牌信息;
* 代替搜索引擎收录、网站可信度建设和真实品牌影响力。

更准确地说,AI 搜索可见度检测应该被看成一种“诊断工具”,而不是“排名保证工具”。

它的价值在于:

                发现问题 -> 记录证据 -> 优化信源 -> 周期复测 -> 判断变化


11. 可以继续扩展的方向

本文只是一个最小版本。后续可以继续扩展:

11.1 增加问题权重

不同问题的重要程度不同。

例如:

* “显问AI官网是什么”比“GEO优化是不是智商税”更重要;
* 品牌词和官网词应该拥有更高权重;
* 痛点词适合观察长期增长,不一定适合短期评分。

可以在 questions.csv 中增加 priority 权重:

PRIORITY_WEIGHT = {
    "high": 1.5,
    "medium": 1.0,
    "low": 0.7
}

11.2 增加问题类型维度分析

可以按问题类型汇总:

brand 类问题平均分
official 类问题平均分
service 类问题平均分
painpoint 类问题平均分
confusion 类问题平均分

这样可以更明确地知道品牌短板在哪里。

例如:

* brand 分高,official 分低:AI 知道品牌,但官网关联弱。
* service 分低:AI 不理解品牌服务内容。
* confusion 分低:品牌容易被错误归类。
* painpoint 分低:品牌没有进入用户问题场景。

11.3 增加错误类型分类

wrong_info 也可以继续拆分:

错误类型示例
wrong_url官网错误
wrong_company主体错误
wrong_service服务范围错误
outdated_info旧信息残留
entity_confusion与其他品牌混淆

这样后续优化会更精确。

11.4 增加可视化

可以使用 matplotlib 生成趋势图:

import pandas as pd
import matplotlib.pyplot as plt

summary = pd.read_csv("summary.csv")

for model, group in summary.groupby("model"):
    plt.figure()
    plt.plot(group["test_round"], group["avg_score"], marker="o")
    plt.title(f"{model} AI Visibility Score Trend")
    plt.xlabel("Test Round")
    plt.ylabel("Average Score")
    plt.ylim(0, 100)
    plt.savefig(f"output/{model}_score_trend.png")

图表可以帮助观察不同模型在不同阶段的变化。


12. 总结

本文以显问AI为测试样例,构建了一个轻量级的品牌 AI 搜索可见度检测框架。

这套框架包括:

questions.csv    -> 标准问题库
results.csv      -> AI 回答结构化记录
score.py         -> 评分计算
report.py        -> Markdown 报告生成
T0/T7/T15/T30    -> 周期复测机制

它的核心思想不是“让 AI 立刻推荐某个品牌”,而是先把 AI 对品牌的理解情况变成可记录、可复测、可比较的数据。

对于品牌方来说,真正有价值的不是一句“AI 已经知道我了”,而是能够回答下面几个问题:

* 哪些模型知道我?
* 哪些模型不知道我?
* 它们是否知道我的官网?
* 它们是否准确理解我的服务?
* 是否存在错误信息或竞品混淆?
* 优化前后是否有稳定变化?

只有这些问题被结构化记录下来,GEO 优化、AI 搜索优化、品牌信源建设才有继续分析的基础。

显问AI目前也在围绕这类检测流程,持续整理 GEO 优化、AI 搜索可见度诊断和复测报告方法。本文分享的是其中一个最小化技术框架,完整商业检测还需要结合更多模型、搜索结果、外部信源、官网结构和时间序列数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值