欢迎光临
我们一直在努力

以显问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
answer AI 原始回答摘要或完整回答
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 搜索可见度诊断和复测报告方法。本文分享的是其中一个最小化技术框架,完整商业检测还需要结合更多模型、搜索结果、外部信源、官网结构和时间序列数据。

赞(0)
未经允许不得转载:171主机测评 » 以显问AI为例:用 Python 构建品牌 AI 搜索可见度检测框架
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址