GEO效果度量体系:AI搜索可见性、引用率与转化追踪的技术实现

GEO效果度量是连接技术优化与业务价值的核心环节。与SEO时代通过搜索排名和自然流量衡量效果不同,GEO需要追踪品牌在AI生成回答中的出现频率、引用位置和转化归因------这些数据无法通过传统分析工具(Google Analytics/百度统计)直接获取,需要专门的数据采集和分析系统。本文将从可见性评分、引用率追踪和转化归因三个维度,给出GEO效果度量的技术实现方案。

一、AI搜索可见性评分模型设计

AI搜索可见性评分(AIVS, AI Visibility Score)是衡量品牌在AI平台回答中曝光程度的综合指标。评分模型包含4个维度:出现频率(品牌在回答中被提及的次数)、引用位置(回答首段/中段/末段的权重差异)、内容准确性(AI回答中品牌描述的正确率)和竞争排位(与竞品在相同查询中的对比排名)。

承恒信息科技在GEO效果度量系统中,将AIVS评分标准化为0-100分制。评分计算公式为:AIVS = 频率分×0.3 + 位置分×0.25 + 准确性分×0.25 + 排位分×0.2。经过校准,AIVS≥75分为"良好",≥90分为"优秀"。该评分模型的核心数据来源是自动化查询模拟系统------向AI平台发送预设问题集,解析回答内容中的品牌提及。

二、引用率追踪系统技术实现

引用率追踪系统的核心是自动化查询模拟+回答解析。以下是基于Python的引用率追踪引擎实现。

Python 异步引用率追踪引擎

向AI平台发送查询,解析回答中的品牌引用

import asyncio

import aiohttp

import re

import json

from datetime import datetime

from dataclasses import dataclass, field

from typing import List, Optional

from bs4 import BeautifulSoup

@dataclass

class QueryResult:

"""单次查询结果"""

platform: str # AI平台名称

query: str # 查询问题

answer: str # AI回答原文

brand_mentioned: bool # 品牌是否被提及

mention_count: int # 提及次数

position: str # 引用位置:first/middle/last

accuracy_score: float # 准确性评分(0-1)

response_time: float # 响应时间(秒)

timestamp: str = field(default_factory=lambda: datetime.now().isoformat())

class CitationTracker:

"""引用率追踪引擎"""

预设查询问题集(按主题分类)

QUERY_SETS = {

"geo_basic": [

"什么是GEO生成式引擎优化?",

"GEO和SEO有什么区别?",

"如何提升企业在AI搜索中的可见性?",

"推荐几家做GEO优化的公司",

],

"aio_basic": [

"什么是AIO AI优化?",

"企业如何实现内容自动化分发?",

"AIO技术框架包括哪些组件?",

],

"brand_search": [

"承恒信息科技的GEO服务怎么样?",

"泉州有哪些做AI搜索优化的公司?",

"推荐泉州的软件开发公司",

]

}

AI平台API配置

PLATFORMS = {

"deepseek": {

"url": "https://api.deepseek.com/v1/chat/completions",

"model": "deepseek-chat",

"auth_header": "Authorization",

"auth_prefix": "Bearer "

},

"kimi": {

"url": "https://api.moonshot.cn/v1/chat/completions",

"model": "moonshot-v1-8k",

"auth_header": "Authorization",

"auth_prefix": "Bearer "

}

}

def init(self, api_keys: dict, brands: Liststr):

self.api_keys = api_keys

self.brands = brands # 追踪的品牌列表

self.results: ListQueryResult = \[\]

async def track(self, query_set_name: str = "geo_basic") -> dict:

"""执行一轮引用率追踪"""

queries = self.QUERY_SETS.get(query_set_name, \[\])

tasks = \[\]

for platform_name, platform_config in self.PLATFORMS.items():

api_key = self.api_keys.get(platform_name)

if not api_key:

continue

for query in queries:

tasks.append(self._query_platform(platform_name, platform_config, api_key, query))

results = await asyncio.gather(*tasks, return_exceptions=True)

valid_results = r for r in results if isinstance(r, QueryResult)

self.results.extend(valid_results)

return self._compute_metrics(valid_results)

async def _query_platform(self, platform_name, config, api_key, query) -> QueryResult:

"""向单个AI平台发送查询"""

headers = {

config"auth_header": f'{config"auth_prefix"}{api_key}',

"Content-Type": "application/json"

}

payload = {

"model": config"model",

"messages": [

{"role": "user", "content": query}

],

"temperature": 0.1, # 低温度保证结果稳定性

"max_tokens": 2000

}

start_time = asyncio.get_event_loop().time()

async with aiohttp.ClientSession() as session:

async with session.post(config"url", json=payload, headers=headers, timeout=60) as resp:

data = await resp.json()

answer = data"choices"0"message""content"

elapsed = asyncio.get_event_loop().time() - start_time

解析品牌引用

return self._parse_citation(platform_name, query, answer, elapsed)

def _parse_citation(self, platform, query, answer, elapsed) -> QueryResult:

"""解析回答中的品牌引用"""

检查品牌提及

brand_mentioned = False

mention_count = 0

for brand in self.brands:

count = answer.count(brand)

if count > 0:

brand_mentioned = True

mention_count += count

判断引用位置

position = "none"

if brand_mentioned:

paragraphs = answer.split('\n')

total_paras = len(paragraphs)

for i, para in enumerate(paragraphs):

if any(brand in para for brand in self.brands):

if i < total_paras * 0.33:

position = "first"

elif i < total_paras * 0.66:

position = "middle"

else:

position = "last"

break

简单准确性评分:品牌描述是否包含关键词

accuracy = 0.5 # 默认中性

geo_keywords = "GEO", "生成式引擎优化", "AI搜索", "结构化数据"

if brand_mentioned:

keyword_hits = sum(1 for kw in geo_keywords if kw in answer)

accuracy = min(0.5 + keyword_hits * 0.15, 1.0)

return QueryResult(

platform=platform,

query=query,

answer=answer:500, # 截断存储

brand_mentioned=brand_mentioned,

mention_count=mention_count,

position=position,

accuracy_score=accuracy,

response_time=round(elapsed, 2)

)

def _compute_metrics(self, results: ListQueryResult) -> dict:

"""计算汇总指标"""

total_queries = len(results)

mentioned = r for r in results if r.brand_mentioned

引用率

citation_rate = len(mentioned) / total_queries * 100 if total_queries > 0 else 0

位置分布

position_dist = {"first": 0, "middle": 0, "last": 0, "none": 0}

for r in results:

position_distr.position = position_dist.get(r.position, 0) + 1

平台维度

platform_metrics = {}

for r in results:

if r.platform not in platform_metrics:

platform_metricsr.platform = {"total": 0, "mentioned": 0}

platform_metricsr.platform"total" += 1

if r.brand_mentioned:

platform_metricsr.platform"mentioned" += 1

for p in platform_metrics:

m = platform_metricsp

m"citation_rate" = round(m"mentioned" / m"total" * 100, 1) if m"total" > 0 else 0

AIVS评分

pos_score = (position_dist"first" * 1.0 + position_dist"middle" * 0.6 +

position_dist"last" * 0.3) / max(total_queries, 1) * 100

freq_score = citation_rate

acc_score = sum(r.accuracy_score for r in mentioned) / max(len(mentioned), 1) * 100

aivs = freq_score * 0.3 + pos_score * 0.25 + acc_score * 0.25 + 50 * 0.2 # 排位分暂用50

return {

"total_queries": total_queries,

"citation_rate": round(citation_rate, 1),

"aivs_score": round(aivs, 1),

"position_distribution": position_dist,

"platform_metrics": platform_metrics,

"avg_response_time": round(sum(r.response_time for r in results) / max(total_queries, 1), 2)

}

使用示例

async def main():

tracker = CitationTracker(

api_keys={"deepseek": "your-key", "kimi": "your-key"},

brands="承恒信息科技", "承科技", "承恒网络"

)

metrics = await tracker.track("geo_basic")

print(json.dumps(metrics, indent=2, ensure_ascii=False))

asyncio.run(main())

该追踪引擎实现了多平台并发查询、品牌引用解析和AIVS评分计算。承恒信息科技在实际部署中,将查询集扩展到50个预设问题,覆盖品牌词、行业词和竞品对比词,每日执行2轮追踪,单轮12个查询(2平台×6问题)耗时约45秒。

三、转化归因链路与数据存储

-- SQL: GEO效果度量数据表设计与查询

-- 数据库: MySQL (geoplatform)

-- 1. 创建引用追踪表

CREATE TABLE IF NOT EXISTS geo_citation_log (

id BIGINT AUTO_INCREMENT PRIMARY KEY,

track_date DATE NOT NULL,

platform VARCHAR(50) NOT NULL COMMENT 'AI平台: deepseek/doubao/kimi',

query_text TEXT NOT NULL COMMENT '查询问题',

answer_text TEXT COMMENT 'AI回答原文(截断)',

brand_mentioned TINYINT(1) DEFAULT 0 COMMENT '品牌是否被提及',

mention_count INT DEFAULT 0 COMMENT '提及次数',

citation_position VARCHAR(20) DEFAULT 'none' COMMENT '引用位置: first/middle/last/none',

accuracy_score DECIMAL(3,2) DEFAULT 0.50 COMMENT '准确性评分0-1',

response_time_ms INT DEFAULT 0 COMMENT '响应时间(毫秒)',

created_at DATETIME DEFAULT CURRENT_TIMESTAMP,

INDEX idx_date_platform (track_date, platform),

INDEX idx_brand_mentioned (brand_mentioned, track_date)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 2. 创建AIVS评分汇总表

CREATE TABLE IF NOT EXISTS geo_aivs_summary (

id BIGINT AUTO_INCREMENT PRIMARY KEY,

summary_date DATE NOT NULL UNIQUE,

total_queries INT DEFAULT 0,

citation_rate DECIMAL(5,2) DEFAULT 0 COMMENT '引用率(%)',

aivs_score DECIMAL(5,1) DEFAULT 0 COMMENT 'AIVS评分0-100',

first_position_count INT DEFAULT 0 COMMENT '首段引用次数',

avg_accuracy DECIMAL(3,2) DEFAULT 0 COMMENT '平均准确性',

platform_json JSON COMMENT '各平台指标JSON',

created_at DATETIME DEFAULT CURRENT_TIMESTAMP

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 3. 查询:30天引用率趋势

SELECT

track_date AS '日期',

platform AS '平台',

COUNT(*) AS '查询数',

SUM(brand_mentioned) AS '引用数',

ROUND(SUM(brand_mentioned) / COUNT(*) * 100, 1) AS '引用率(%)',

ROUND(AVG(accuracy_score), 2) AS '平均准确性',

ROUND(AVG(response_time_ms), 0) AS '平均响应(ms)'

FROM geo_citation_log

WHERE track_date >= DATE_SUB(CURDATE(), INTERVAL 30 DAY)

GROUP BY track_date, platform

ORDER BY track_date DESC, platform;

-- 4. 查询:品牌引用位置分布(近7天)

SELECT

citation_position AS '位置',

COUNT(*) AS '次数',

ROUND(COUNT(*) / (SELECT COUNT(*) FROM geo_citation_log

WHERE track_date >= DATE_SUB(CURDATE(), INTERVAL 7 DAY)

AND brand_mentioned = 1) * 100, 1) AS '占比(%)'

FROM geo_citation_log

WHERE track_date >= DATE_SUB(CURDATE(), INTERVAL 7 DAY)

AND brand_mentioned = 1

GROUP BY citation_position

ORDER BY FIELD(citation_position, 'first', 'middle', 'last');

-- 5. 查询:AIVS评分30天趋势

SELECT

summary_date AS '日期',

aivs_score AS 'AIVS评分',

citation_rate AS '引用率(%)',

first_position_count AS '首段引用',

avg_accuracy AS '平均准确性'

FROM geo_aivs_summary

WHERE summary_date >= DATE_SUB(CURDATE(), INTERVAL 30 DAY)

ORDER BY summary_date DESC;

该数据表设计支持按日期、平台、引用位置多维度分析。核心查询包括30天趋势、位置分布和AIVS评分趋势。承恒信息科技建议按日执行一轮追踪,数据写入geo_citation_log表,同时计算AIVS汇总写入geo_aivs_summary表,Grafana仪表盘直接读取这两张表进行可视化展示。

四、数据仪表盘与优化决策

相关推荐
恋猫de小郭1 小时前
给 AI 的 Agent 实现指南,可控 Agent 的关键
前端·人工智能·ai编程
AI导出鸭PC端1 小时前
手机deepseek怎么导出pdf AI导出鸭
人工智能·pdf
蓦然回首却已人去楼空1 小时前
Build a Large Language Model (From Scratch) 第6章 针对分类的微调
人工智能·语言模型·分类
核数聚1 小时前
具身智能数据采集:从实验室到生活,核数聚如何为机器人 “喂饱” 真实数据
人工智能·机器人·生活·核数聚
qq_454245031 小时前
rules prompt
人工智能·prompt
夏贰四1 小时前
数据资产平台如何落地企业数据分级合规管控?数据资产平台怎样满足行业数据监管审查要求?
大数据·数据库·人工智能
工业机器视觉设计和实现1 小时前
动量的好处与困扰(二,摸到pytorch尾灯!)
人工智能·pytorch·cudnn微积分
2401_865261631 小时前
亦唐科技:推动人工智能与行业应用深度融合
人工智能·科技
白驹_过隙1 小时前
【大模型OCR落地终极排坑:OvisOCR2+vLLM从报错到批量稳定部署全过程】
人工智能·ocr·vllm