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仪表盘直接读取这两张表进行可视化展示。

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

相关推荐
朝阳资本论2 分钟前
群核科技:从空间设计龙头到物理AI“卖水人”的升维之战
人工智能
七夜zippoe10 分钟前
为什么 2026 年每个 Java 团队都该懂 AI Agent
java·开发语言·人工智能
举个栗子。11 分钟前
SwarmForge:AI 智能体协同编程框架,让多个 Agent 在隔离工作区并行协作
人工智能·开源·ai编程
AIGC小尼22 分钟前
Windows 本地 AI 漫剧全自动生产线部署完整教程(零基础、全指令、带源码、模型配置、排错方案)
人工智能·windows·ai漫剧
合米AI SOP系统27 分钟前
传统产线如何快速上马落地 AI 防错?合米科技 AI SOP 7天即可上线。
大数据·人工智能·科技
思录Echo27 分钟前
什么决定具身智能的最终走向?多技术路线与落地现实辨析
大数据·人工智能
ShallWeL1 小时前
Orin 上多模型常驻与显存预算
人工智能·嵌入式硬件·nvidia·orin
xiaohaiAIgeo1 小时前
【2026年】AI监控加行为分析守护实验室安全
大数据·人工智能·科普知识
IT_陈寒1 小时前
Python的多线程就是个假把式,我算是体验到了
前端·人工智能·后端