ScavioScavio
产品定价文档
登录开始使用
  1. 首页
  2. 教程
  3. 如何以编程方式验证 AI 搜索结果
教程

如何以编程方式验证 AI 搜索结果

构建一个自动化管道,根据多个来源交叉检查人工智能搜索答案。在幻觉到达用户之前检测到它们。

获取免费API密钥API文档

像 Perplexity 和 ChatGPT Search 这样的人工智能搜索引擎有时会将伪造或过时的信息作为事实呈现。本教程构建了一个验证管道,该管道采用人工智能生成的答案,提取其事实声明,并根据新的 SERP 结果交叉检查每个声明。该管道会标记未经验证的声明并分配信任分数。成本:每次验证 1-3 次搜索,费用为 0.005-0.015 美元。

前置条件

  • 已安装 Python 3.9+
  • 请求已安装库
  • 来自 scavio.dev 的 Scavio API 密钥

操作指南

步骤 1: 从人工智能生成的文本中提取事实主张

解析人工智能答案以识别可验证的具体事实主张。重点关注数字、日期、名称和具体断言。

Python
import re

def extract_claims(text: str) -> list:
    """Extract verifiable claims from AI-generated text."""
    claims = []
    sentences = re.split(r'[.!?]\s+', text)
    for sentence in sentences:
        sentence = sentence.strip()
        if not sentence or len(sentence) < 20:
            continue
        # Claims with numbers/dates are verifiable
        has_number = bool(re.search(r'\d+', sentence))
        # Claims with proper nouns
        has_proper = bool(re.search(r'[A-Z][a-z]+(?:\s[A-Z][a-z]+)*', sentence))
        # Claims with comparison words
        has_comparison = any(w in sentence.lower() for w in
            ['fastest', 'largest', 'best', 'most', 'first', 'only', 'latest'])
        if has_number or has_comparison:
            claims.append({'text': sentence, 'type': 'numeric' if has_number else 'comparative'})
        elif has_proper:
            claims.append({'text': sentence, 'type': 'factual'})
    return claims

# Example AI answer to verify
ai_answer = """Python 3.14 was released in October 2025 with a new JIT compiler.
It is 2x faster than Python 3.12 for numeric workloads.
Guido van Rossum announced the change at PyCon 2025."""

claims = extract_claims(ai_answer)
for c in claims:
    print(f'  [{c["type"]}] {c["text"]}')

步骤 2: 根据实时搜索结果交叉检查声明

对于每项主张,请在网络上搜索并检查 SERP 结果是否支持或矛盾。

Python
import requests, os

SCAVIO_KEY = os.environ['SCAVIO_API_KEY']

def verify_claim(claim: str) -> dict:
    # Build a verification query from the claim
    query = claim[:100]  # truncate long claims
    resp = requests.post('https://api.scavio.dev/api/v1/search',
        headers={'x-api-key': SCAVIO_KEY, 'Content-Type': 'application/json'},
        json={'query': query, 'country_code': 'us', 'num_results': 5})
    results = resp.json().get('organic_results', [])
    if not results:
        return {'claim': claim, 'status': 'unverified', 'confidence': 0, 'sources': []}
    # Check if results support the claim
    claim_lower = claim.lower()
    claim_keywords = set(re.findall(r'\b\w{4,}\b', claim_lower))
    support_count = 0
    sources = []
    for r in results:
        text = (r.get('title', '') + ' ' + r.get('snippet', '')).lower()
        result_words = set(re.findall(r'\b\w{4,}\b', text))
        overlap = len(claim_keywords & result_words) / max(len(claim_keywords), 1)
        if overlap > 0.3:
            support_count += 1
            sources.append({'title': r['title'][:50], 'url': r['link']})
    confidence = min(support_count / 3 * 100, 100)
    status = 'verified' if confidence >= 50 else 'disputed' if confidence >= 20 else 'unverified'
    return {'claim': claim[:60], 'status': status,
            'confidence': round(confidence), 'sources': sources[:2]}

步骤 3: 运行完整的验证管道并计算信任分数

验证 AI 答案中的所有声明并计算该响应的总体信任评分。

Python
import time

def verify_answer(ai_text: str) -> dict:
    claims = extract_claims(ai_text)
    if not claims:
        return {'trust_score': 0, 'claims': [], 'note': 'No verifiable claims found'}
    verified_claims = []
    for claim in claims:
        result = verify_claim(claim['text'])
        result['type'] = claim['type']
        verified_claims.append(result)
        time.sleep(0.3)
    # Compute trust score
    verified = len([c for c in verified_claims if c['status'] == 'verified'])
    disputed = len([c for c in verified_claims if c['status'] == 'disputed'])
    total = len(verified_claims)
    trust_score = round(verified / total * 100) if total > 0 else 0
    cost = total * 0.005
    print(f'Trust Score: {trust_score}/100')
    print(f'Claims: {total} total, {verified} verified, {disputed} disputed')
    print(f'Verification cost: ${cost:.3f}\n')
    for c in verified_claims:
        icon = 'PASS' if c['status'] == 'verified' else 'WARN' if c['status'] == 'disputed' else 'FAIL'
        print(f'  [{icon}] {c["claim"]}')
        if c['sources']:
            print(f'         Source: {c["sources"][0]["title"]}')
    return {'trust_score': trust_score, 'claims': verified_claims, 'cost': cost}

result = verify_answer(ai_answer)

Python 示例

Python
import requests, os, re, time

SCAVIO_KEY = os.environ['SCAVIO_API_KEY']

def verify(claim):
    resp = requests.post('https://api.scavio.dev/api/v1/search',
        headers={'x-api-key': SCAVIO_KEY, 'Content-Type': 'application/json'},
        json={'query': claim[:100], 'country_code': 'us', 'num_results': 5})
    results = resp.json().get('organic_results', [])
    keywords = set(re.findall(r'\b\w{4,}\b', claim.lower()))
    support = sum(1 for r in results
        if len(keywords & set(re.findall(r'\b\w{4,}\b', (r.get('snippet','')).lower()))) > len(keywords)*0.3)
    return 'verified' if support >= 2 else 'unverified'

claims = ['Python 3.14 released October 2025', 'Guido van Rossum at PyCon 2025']
for c in claims:
    print(f'{verify(c)}: {c}')
    time.sleep(0.3)

JavaScript 示例

JavaScript
const SCAVIO_KEY = process.env.SCAVIO_API_KEY;

async function verify(claim) {
  const resp = await fetch('https://api.scavio.dev/api/v1/search', {
    method: 'POST',
    headers: { 'x-api-key': SCAVIO_KEY, 'Content-Type': 'application/json' },
    body: JSON.stringify({ query: claim.slice(0, 100), country_code: 'us', num_results: 5 })
  });
  const results = (await resp.json()).organic_results || [];
  const keywords = new Set(claim.toLowerCase().match(/\b\w{4,}/g) || []);
  const support = results.filter(r => {
    const words = new Set((r.snippet || '').toLowerCase().match(/\b\w{4,}/g) || []);
    return [...keywords].filter(k => words.has(k)).length > keywords.size * 0.3;
  }).length;
  return support >= 2 ? 'verified' : 'unverified';
}

verify('Python 3.14 released October 2025').then(r => console.log(r));

预期输出

JSON
  [numeric] Python 3.14 was released in October 2025 with a new JIT compiler
  [numeric] It is 2x faster than Python 3.12 for numeric workloads
  [factual] Guido van Rossum announced the change at PyCon 2025

Trust Score: 67/100
Claims: 3 total, 2 verified, 1 disputed
Verification cost: $0.015

  [PASS] Python 3.14 was released in October 2025 with a new JI
         Source: Python 3.14 Release Notes - docs.python.org
  [WARN] It is 2x faster than Python 3.12 for numeric workloads
  [PASS] Guido van Rossum announced the change at PyCon 2025
         Source: PyCon 2025 Keynote - Guido van Rossum

相关教程

  • 如何构建搜索信任评分管道
  • 如何通过搜索 API 打好本地 LLM 基础
  • 如何对每美元的搜索 API 质量进行基准测试

常见问题

大多数开发者在15到30分钟内完成本教程。您需要一个Scavio API密钥(免费套餐即可)和可用的Python或JavaScript环境。

已安装 Python 3.9+. 请求已安装库. 来自 scavio.dev 的 Scavio API 密钥. Scavio API密钥注册即送50个免费积分。

可以。免费套餐注册即送50个积分,完全足够完成本教程并构建一个可运行的原型解决方案。

Scavio提供原生LangChain包(langchain-scavio)、MCP服务器以及适用于任何HTTP客户端的REST API。本教程使用 the raw REST API, 但您可以根据需要适配您选择的框架。

相关资源

Best Of

2026 年最佳 AI 生产力应用程序

Read more
Best Of

2026年最佳SerpAPI替代方案

Read more
Glossary

搜索 API 供应商格局(2026)

Read more
Glossary

搜索付费墙时代(2026)

Read more
Use Case

2026 开源 AI 网络访问方案

Read more
Comparison

DataForSEO vs Serper

Read more

开始构建

构建一个自动化管道,根据多个来源交叉检查人工智能搜索答案。在幻觉到达用户之前检测到它们。

获取免费API密钥阅读文档
ScavioScavio

面向AI智能体的实时搜索API。搜索所有平台,不仅仅是Google。

产品

  • 功能
  • 定价
  • 控制台
  • 联盟计划

开发者

  • 文档
  • API参考
  • 快速开始
  • MCP集成
  • Python SDK

替代方案

  • Tavily替代方案
  • SerpAPI替代方案
  • Firecrawl替代方案
  • Exa替代方案

工具

  • JSON格式化
  • cURL转代码
  • Token计数器
  • 全部工具

© 2026 Scavio. 保留所有权利。

Featured on TAAFT
服务条款隐私政策