Tailwind CSSTailwind CSS
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • 搜索未来:SEO与GEO双引擎实战手册
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • Rust 开发入门
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • 搜索未来:SEO与GEO双引擎实战手册
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • Rust 开发入门
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
  • 20.5.8 监控与效果评估(API调用、本地LLM测试)

20.5.8 监控与效果评估(API调用、本地LLM测试)

对于DeepSeek的GEO优化,监控与效果评估是闭环中的关键环节。由于DeepSeek的引用逻辑和生成机制与传统搜索引擎存在显著差异,我们需要一套专门的监控体系。本节将介绍如何通过API调用和本地LLM测试,来量化评估你的内容在DeepSeek中的可见性和引用效果。

一、监控体系总览

DeepSeek的监控评估体系可分为三个层次:

层次方法目标频率
基础层DeepSeek API调用追踪关键词下的引用出现率每日
进阶层本地LLM测试(Ollama + DeepSeek模型)模拟生成逻辑,验证内容优化效果每周
战略层综合数据分析评估流量、品牌曝光、转化等商业指标每月

二、DeepSeek API调用监控

2.1 API基础配置

DeepSeek提供开放的API接口,我们可以通过编程方式批量查询内容在生成答案中的表现。

Python示例:基础API调用脚本

import requests
import json
import time
from datetime import datetime

class DeepSeekMonitor:
    def __init__(self, api_key):
        self.api_key = api_key
        self.base_url = "https://api.deepseek.com/v1/chat/completions"
        self.headers = {
            "Authorization": f"Bearer {self.api_key}",
            "Content-Type": "application/json"
        }
    
    def query_deepseek(self, prompt, model="deepseek-chat"):
        """向DeepSeek发送查询并获取回答"""
        payload = {
            "model": model,
            "messages": [
                {"role": "system", "content": "你是一个专业的搜索助手,请基于你的知识库回答用户问题。"},
                {"role": "user", "content": prompt}
            ],
            "temperature": 0.3,  # 低温度确保结果稳定性
            "max_tokens": 1000
        }
        
        try:
            response = requests.post(
                self.base_url, 
                headers=self.headers, 
                json=payload,
                timeout=30
            )
            response.raise_for_status()
            return response.json()
        except Exception as e:
            print(f"API请求失败: {e}")
            return None
    
    def check_reference(self, query, target_url, target_brand):
        """检查特定URL或品牌是否在回答中被引用"""
        result = self.query_deepseek(query)
        if not result:
            return {"referenced": False, "confidence": 0}
        
        answer = result["choices"][0]["message"]["content"]
        
        # 检查URL引用
        url_referenced = target_url in answer
        
        # 检查品牌提及
        brand_referenced = target_brand.lower() in answer.lower()
        
        # 计算引用置信度(基于关键词匹配和位置)
        confidence = 0
        if url_referenced:
            confidence += 0.6
        if brand_referenced:
            confidence += 0.4
        
        return {
            "referenced": url_referenced or brand_referenced,
            "confidence": min(confidence, 1.0),
            "url_referenced": url_referenced,
            "brand_referenced": brand_referenced,
            "answer_preview": answer[:200] + "..."
        }

2.2 批量监控脚本

为了系统化地追踪多个关键词和内容,我们需要构建一个批量监控系统。

示例:每日关键词监控脚本

import csv
import json
from datetime import datetime

class DailyMonitor:
    def __init__(self, api_key, keywords_file, output_file):
        self.monitor = DeepSeekMonitor(api_key)
        self.keywords_file = keywords_file
        self.output_file = output_file
        self.results = []
    
    def load_keywords(self):
        """从CSV加载关键词和目标"""
        keywords = []
        with open(self.keywords_file, 'r', encoding='utf-8') as f:
            reader = csv.DictReader(f)
            for row in reader:
                keywords.append(row)
        return keywords
    
    def run_daily_check(self):
        """执行每日监控检查"""
        keywords = self.load_keywords()
        today = datetime.now().strftime("%Y-%m-%d")
        
        for kw in keywords:
            print(f"检查关键词: {kw['query']}")
            result = self.monitor.check_reference(
                kw['query'],
                kw['target_url'],
                kw['target_brand']
            )
            
            result['keyword'] = kw['query']
            result['date'] = today
            result['category'] = kw.get('category', 'general')
            
            self.results.append(result)
            
            # 避免API限流
            time.sleep(1)
        
        self.save_results()
    
    def save_results(self):
        """保存结果到JSON文件"""
        with open(self.output_file, 'a', encoding='utf-8') as f:
            for result in self.results:
                f.write(json.dumps(result, ensure_ascii=False) + '\n')
        
        print(f"结果已保存到 {self.output_file}")

2.3 引用率统计与分析

收集数据后,我们需要进行统计分析,以评估优化效果。

示例:引用率统计脚本

import json
from collections import defaultdict
from datetime import datetime, timedelta

class ReferenceAnalyzer:
    def __init__(self, data_file):
        self.data_file = data_file
        self.data = self.load_data()
    
    def load_data(self):
        """加载监控数据"""
        data = []
        with open(self.data_file, 'r', encoding='utf-8') as f:
            for line in f:
                if line.strip():
                    data.append(json.loads(line))
        return data
    
    def calculate_reference_rate(self, days=7):
        """计算指定天数的引用率"""
        cutoff = datetime.now() - timedelta(days=days)
        
        # 按关键词分组
        keyword_stats = defaultdict(lambda: {"total": 0, "referenced": 0})
        
        for record in self.data:
            record_date = datetime.strptime(record['date'], "%Y-%m-%d")
            if record_date >= cutoff:
                kw = record['keyword']
                keyword_stats[kw]["total"] += 1
                if record['referenced']:
                    keyword_stats[kw]["referenced"] += 1
        
        # 计算引用率
        results = {}
        for kw, stats in keyword_stats.items():
            rate = stats["referenced"] / stats["total"] * 100 if stats["total"] > 0 else 0
            results[kw] = {
                "total_checks": stats["total"],
                "referenced_count": stats["referenced"],
                "reference_rate": round(rate, 2)
            }
        
        return results
    
    def trend_analysis(self, keyword):
        """分析特定关键词的引用趋势"""
        trend_data = []
        for record in self.data:
            if record['keyword'] == keyword:
                trend_data.append({
                    "date": record['date'],
                    "referenced": record['referenced'],
                    "confidence": record['confidence']
                })
        
        # 按日期排序
        trend_data.sort(key=lambda x: x['date'])
        return trend_data

三、本地LLM测试

使用本地部署的DeepSeek模型进行测试,可以更灵活地模拟生成逻辑,同时避免API调用成本和限流问题。

3.1 环境搭建

使用Ollama部署DeepSeek模型:

# 安装Ollama(如果尚未安装)
curl -fsSL https://ollama.com/install.sh | sh

# 拉取DeepSeek模型
ollama pull deepseek-coder:6.7b  # 或 deepseek-r1:7b

# 启动Ollama服务
ollama serve

3.2 本地测试脚本

Python示例:本地LLM测试脚本

import requests
import json

class LocalDeepSeekTester:
    def __init__(self, base_url="http://localhost:11434"):
        self.base_url = base_url
        self.model = "deepseek-coder:6.7b"
    
    def generate_answer(self, prompt, system_prompt=None):
        """使用本地DeepSeek模型生成回答"""
        payload = {
            "model": self.model,
            "prompt": prompt,
            "system": system_prompt or "你是一个专业的搜索助手。",
            "stream": False,
            "options": {
                "temperature": 0.3,
                "num_predict": 1000
            }
        }
        
        try:
            response = requests.post(
                f"{self.base_url}/api/generate",
                json=payload,
                timeout=60
            )
            response.raise_for_status()
            return response.json()
        except Exception as e:
            print(f"本地模型请求失败: {e}")
            return None
    
    def test_content_visibility(self, query, content_samples):
        """测试内容样本在生成答案中的可见性"""
        results = []
        
        for sample in content_samples:
            # 构建包含内容的提示
            prompt = f"""
            用户问题: {query}
            
            请基于以下参考资料回答问题:
            
            参考资料:
            {sample['content']}
            
            请提供详细的回答,并在适当位置引用信息来源。
            """
            
            answer = self.generate_answer(prompt)
            
            if answer:
                full_response = answer.get('response', '')
                
                # 检查品牌/URL是否被引用
                brand_mentioned = sample.get('brand', '') in full_response
                url_mentioned = sample.get('url', '') in full_response
                
                results.append({
                    "sample_id": sample.get('id'),
                    "query": query,
                    "brand_mentioned": brand_mentioned,
                    "url_mentioned": url_mentioned,
                    "response_preview": full_response[:300]
                })
        
        return results

3.3 A/B测试框架

使用本地LLM进行A/B测试,比较不同内容版本在生成答案中的表现。

示例:内容版本对比测试

class ABTestFramework:
    def __init__(self):
        self.tester = LocalDeepSeekTester()
    
    def run_ab_test(self, query, version_a, version_b, iterations=5):
        """运行A/B测试,比较两个内容版本"""
        results_a = []
        results_b = []
        
        for i in range(iterations):
            # 测试版本A
            result_a = self.tester.test_content_visibility(
                query, 
                [{"id": "A", "content": version_a, "brand": "BrandA"}]
            )
            results_a.append(result_a[0])
            
            # 测试版本B
            result_b = self.tester.test_content_visibility(
                query, 
                [{"id": "B", "content": version_b, "brand": "BrandB"}]
            )
            results_b.append(result_b[0])
        
        # 统计分析
        a_reference_rate = sum(1 for r in results_a if r['brand_mentioned']) / iterations
        b_reference_rate = sum(1 for r in results_b if r['brand_mentioned']) / iterations
        
        return {
            "version_a": {
                "reference_rate": a_reference_rate,
                "results": results_a
            },
            "version_b": {
                "reference_rate": b_reference_rate,
                "results": results_b
            },
            "winner": "A" if a_reference_rate > b_reference_rate else "B"
        }

四、监控仪表盘设计

4.1 关键指标定义

指标定义计算方式
引用率内容在DeepSeek回答中被引用的比例引用次数 / 总查询次数 × 100%
品牌提及率品牌名称在回答中出现的比例品牌提及次数 / 总查询次数 × 100%
置信度评分引用质量和相关性的综合评分基于URL引用(0.6) + 品牌引用(0.4)
趋势变化引用率随时间的变化趋势(本周引用率 - 上周引用率) / 上周引用率
竞争对比与竞品在相同查询下的引用率对比自身引用率 / 竞品平均引用率

4.2 简易仪表盘实现

使用Streamlit构建轻量级仪表盘:

import streamlit as st
import pandas as pd
import plotly.express as px
from datetime import datetime, timedelta

class DeepSeekDashboard:
    def __init__(self, data_file):
        self.data_file = data_file
        self.data = self.load_data()
    
    def load_data(self):
        """加载监控数据"""
        # 从文件加载数据
        pass
    
    def render_dashboard(self):
        st.title("DeepSeek GEO监控仪表盘")
        
        # 时间范围选择
        days = st.sidebar.selectbox("时间范围", [7, 14, 30, 90], index=0)
        
        # 总体概览
        st.header("总体概览")
        col1, col2, col3 = st.columns(3)
        
        overall_rate = self.calculate_overall_rate(days)
        col1.metric("总体引用率", f"{overall_rate:.1f}%")
        
        top_keywords = self.get_top_keywords(days)
        col2.metric("表现最佳关键词", top_keywords[0] if top_keywords else "N/A")
        
        trend = self.get_trend(days)
        col3.metric("趋势变化", f"{trend:+.1f}%")
        
        # 关键词引用率图表
        st.header("关键词引用率趋势")
        trend_data = self.get_trend_data(days)
        fig = px.line(trend_data, x='date', y='reference_rate', color='keyword')
        st.plotly_chart(fig)
        
        # 详细数据表格
        st.header("详细数据")
        detail_df = self.get_detail_table(days)
        st.dataframe(detail_df)

五、效果评估报告模板

5.1 周报模板

# DeepSeek GEO效果周报

## 报告周期:YYYY-MM-DD ~ YYYY-MM-DD

### 1. 总体表现
- 监控关键词数:XX个
- 总体引用率:XX%(环比+XX%)
- 品牌提及率:XX%

### 2. 表现最佳关键词TOP5
| 关键词 | 引用率 | 趋势 | 优化动作 |
|--------|--------|------|----------|
| KW1    | XX%    | ↑    | 新增FAQ |
| KW2    | XX%    | →    | 无变化 |
| ...    | ...    | ...  | ...     |

### 3. 需要优化的关键词
| 关键词 | 引用率 | 问题分析 | 建议优化 |
|--------|--------|----------|----------|
| KW3    | XX%    | 内容陈旧 | 更新数据 |
| ...    | ...    | ...      | ...     |

### 4. 竞品对比
- 竞品A引用率:XX%
- 竞品B引用率:XX%
- 我方优势/劣势分析

### 5. 下周行动计划
1. 优化XX关键词的内容结构
2. 新增XX个FAQ页面
3. 更新XX个页面的结构化数据

5.2 月报模板

# DeepSeek GEO效果月报

## 报告周期:YYYY-MM ~ YYYY-MM

### 1. 月度摘要
- 总查询次数:XX次
- 平均引用率:XX%(环比+XX%)
- 新增被引用内容:XX个
- 流失引用内容:XX个

### 2. 内容优化效果分析
- 优化前引用率:XX%
- 优化后引用率:XX%
- 提升幅度:XX%

### 3. 结构化数据影响
- 使用Schema的内容引用率:XX%
- 未使用Schema的内容引用率:XX%
- 提升效果:XX%

### 4. 成本效益分析
- API调用成本:XX元
- 内容优化投入:XX工时
- 预估品牌曝光价值:XX元

### 5. 战略建议
- 重点投入方向
- 风险预警
- 资源分配建议

六、自动化监控部署

6.1 GitHub Actions定时任务

# .github/workflows/deepseek-monitor.yml
name: DeepSeek Daily Monitor

on:
  schedule:
    - cron: '0 2 * * *'  # 每天UTC 2:00执行
  workflow_dispatch:  # 手动触发

jobs:
  monitor:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      
      - name: Setup Python
        uses: actions/setup-python@v4
        with:
          python-version: '3.10'
      
      - name: Install dependencies
        run: pip install requests pandas
      
      - name: Run monitoring script
        env:
          DEEPSEEK_API_KEY: ${{ secrets.DEEPSEEK_API_KEY }}
        run: python scripts/deepseek_monitor.py
      
      - name: Upload results
        uses: actions/upload-artifact@v3
        with:
          name: monitor-results
          path: data/monitor_results.json

6.2 告警配置

# 告警规则示例
ALERT_RULES = {
    "critical_drop": {
        "condition": lambda rate, prev_rate: rate < prev_rate * 0.5,
        "message": "引用率暴跌超过50%",
        "level": "critical"
    },
    "keyword_loss": {
        "condition": lambda rate: rate < 10,
        "message": "关键词引用率低于10%",
        "level": "warning"
    },
    "consistent_decline": {
        "condition": lambda trend: trend < -0.1,
        "message": "连续3天引用率下降",
        "level": "warning"
    }
}

def check_alerts(current_data, historical_data):
    """检查告警规则"""
    alerts = []
    
    for keyword, current_rate in current_data.items():
        prev_rate = historical_data.get(keyword, {}).get('rate', current_rate)
        trend = current_rate - prev_rate
        
        for rule_name, rule in ALERT_RULES.items():
            if rule['condition'](current_rate, prev_rate):
                alerts.append({
                    "keyword": keyword,
                    "rule": rule_name,
                    "message": f"{keyword}: {rule['message']}",
                    "level": rule['level']
                })
    
    return alerts

七、最佳实践建议

  1. 数据一致性:确保每次API调用的参数(temperature、max_tokens)保持一致,以保证结果的可比性。

  2. 样本量充足:每个关键词至少进行10次以上的查询,以获得统计显著的结果。

  3. 时间维度:建议至少监控2周以上,才能观察到优化效果的稳定趋势。

  4. 多模型对比:除了DeepSeek,建议同时监控其他主流生成引擎(如豆包、文心一言),全面评估内容可见性。

  5. 人工复核:定期抽取10%的监控结果进行人工复核,验证自动化判断的准确性。

  6. 成本控制:合理设置API调用频率和批量大小,避免不必要的成本支出。

通过系统化的监控与评估,你可以持续优化内容策略,确保在DeepSeek等生成式搜索引擎中获得稳定的可见性和引用率。

Last Updated:: 5/9/26, 5:13 PM