当搜索从人转向机器:AnySearch 如何为 AI Agent 重造信息获取层

2026-05-13 25 预计阅读时间:1 分钟
来源:oschina.net AI 摘要 原文链接

免责声明:本文为 AI 摘要整理,建议结合原文阅读。摘要可能省略上下文、版本差异或边界条件,不作为官方说明。

预计阅读时间:14 分钟

AI Agent 正在从 demo 走向生产系统——写邮件、做调研、跑工作流,每一步都离不开"查资料"。但一个尴尬的现实是:Agent 调用的搜索接口,本质上还是给人类浏览器设计的。返回的是 HTML 碎片、广告混排、十条蓝链接,Agent 得自己从噪声里扒有用信息,效率低、可靠性差。AnySearch 的发布,直接瞄准了这个基础设施缺口:把搜索的"消费者"从人换成机器,从底层重构返回结构、调用方式和质量标准。

现有搜索接口为什么不适合 Agent

给人类用的搜索和给机器用的搜索,差异不只是"加个 JSON 输出"那么简单,而是整个交互契约不同:

维度 人类搜索 Agent 搜索
输入 自然语言,容忍模糊 结构化 query + 参数,要求确定性
输出 排序列表 + 碎片摘要,需要人眼筛选 结构化实体/事实,可直接进入推理链
调用频率 几次/分钟 可能几十次/分钟,并发高
稳定性预期 大致够用即可 同 query 同结果,可复现、可缓存
噪声容忍 广告、SEO 内容人能跳过 Agent 无法区分,直接污染上下文

主流搜索 API(Google Custom Search、Bing Search API 等)本质上还是把网页搜索结果打包成 JSON 返回,结构化程度低,Agent 拿到后要做大量后处理——提取正文、去广告、判断可信度。这不是"最后一公里"的问题,而是整条路的方向就不对。

AnySearch 的核心设计:机器优先的搜索契约

根据发布信息,AnySearch 围绕三个关键词重新定义搜索层:

统一(Unified)——Agent 不需要分别调网页搜索、新闻搜索、学术搜索、知识图谱等多个接口。AnySearch 提供单一入口,内部路由到不同信息源,返回统一 schema 的结果。对 Agent 来说,一次调用就够了。

高质量(High Quality)——不是"返回尽可能多的结果让 Agent 自己挑",而是做前置过滤:去噪声、去 SEO 农场内容、优先返回权威源。质量门槛从"排名算法"变成"信息可信度评估"。

结构化(Structured)——返回的不是 URL + snippet,而是可以直接进入 Agent 推理链的结构化数据:实体属性、事实陈述、来源标注。Agent 拿到后不需要再做 HTML 解析或文本清洗。

这三点组合起来,本质上是把搜索从"信息检索"变成"信息供给"——检索需要人判断,供给可以直接喂给下游逻辑。

实践:在 Agent 工作流中接入搜索层

下面用一个完整的 Python 示例展示如何在 Agent 工作流中集成这类 AI-first 搜索接口。代码基于 AnySearch 发布信息描述的设计理念编写,API 细节为合理推演,实际使用时需替换为官方文档中的真实 endpoint 和参数。

import os
import json
from openai import OpenAI

# --- 假设 AnySearch 提供 REST API,以下为推演的调用方式 ---
# 实际 endpoint、参数名和返回结构请以官方文档为准

ANYSEARCH_API_URL = "https://api.anysearch.ai/v1/search"
ANYSEARCH_API_KEY = os.environ.get("ANYSEARCH_API_KEY", "your-key-here")

def call_anysearch(query: str, mode: str = "fact", depth: str = "standard") -> dict:
    """
    调用 AnySearch 搜索接口。

    参数说明(基于发布信息推演):
    - query: 搜索意图,支持自然语言但建议结构化
    - mode: 返回模式 — "fact" 返回事实/实体, "overview" 返回综合摘要
    - depth: 搜索深度 — "standard" 平衡速度与覆盖, "deep" 更全面但更慢
    """
    import requests

    headers = {
        "Authorization": f"Bearer {ANYSEARCH_API_KEY}",
        "Content-Type": "application/json",
    }
    payload = {
        "query": query,
        "mode": mode,
        "depth": depth,
        # 结构化输出:要求返回可直接用于推理的 JSON
        "output_format": "structured",
    }

    resp = requests.post(ANYSEARCH_API_URL, headers=headers, json=payload, timeout=30)
    resp.raise_for_status()
    return resp.json()


def run_research_agent(topic: str) -> str:
    """
    一个简单的调研 Agent:搜索 → 整理 → 生成报告。
    对比传统做法:Agent 拿到 HTML 碎片后要自己清洗,
    这里直接拿到结构化数据,省掉后处理步骤。
    """
    # 第一步:用 AnySearch 获取结构化信息
    search_result = call_anysearch(
        query=f"{topic} 最新进展和关键数据",
        mode="fact",
        depth="standard",
    )

    # 假设返回结构如下(实际结构以官方文档为准):
    # {
    #   "facts": [
    #     {"statement": "...", "source": "...", "confidence": 0.92},
    #     ...
    #   ],
    #   "entities": [
    #     {"name": "...", "type": "...", "attributes": {...}},
    #     ...
    #   ],
    #   "summary": "..."
    # }

    # 第二步:把结构化搜索结果直接注入 LLM prompt
    client = OpenAI(api_key=os.environ.get("OPENAI_API_KEY"))

    search_context = json.dumps(search_result, ensure_ascii=False, indent=2)

    prompt = f"""你是一位技术调研分析师。以下是关于「{topic}」的结构化搜索结果,
    数据已经过预处理,来源可信度已标注。请基于这些数据撰写一份简明调研摘要,
    包含:关键事实、数据指标、主要参与方、趋势判断。

    搜索结果:
    {search_context}

    要求:只使用搜索结果中的信息,不自行编造数据。如果某条事实 confidence < 0.7,
    在摘要中标注"待验证"。"""

    response = client.chat.completions.create(
        model="gpt-4o",
        messages=[{"role": "user", "content": prompt}],
        temperature=0.3,
    )

    return response.choices[0].message.content


# --- 运行示例 ---
if __name__ == "__main__":
    report = run_research_agent("Rust 在嵌入式系统中的应用")
    print(report)

关键设计点说明:

  1. mode="fact"——告诉搜索层"我需要可引用的事实,不是一堆链接",这比传统 API 的"给我十条结果"更精确。
  2. output_format="structured"——返回 JSON 而非 HTML 碎片,Agent 不需要再做 BeautifulSoup 解析。
  3. confidence 字段——搜索层自带可信度评估,Agent 可以在 prompt 中直接设阈值(如 < 0.7 标注"待验证"),而不是自己判断信息质量。

对比传统做法,省掉的步骤很明确:

# 传统搜索 API 的 Agent 后处理(现在不需要了)
def legacy_postprocess(raw_results: list[dict]) -> list[dict]:
    """传统搜索返回后,Agent 需要自己做的事"""
    cleaned = []
    for item in raw_results:
        # 1. 去广告和 SEO 垃圾 — 需要自建过滤规则
        if is_seo_spam(item["snippet"]):
            continue
        # 2. 提取正文 — 需要额外请求 + HTML 解析
        full_text = fetch_and_parse(item["url"])  # 慢、不稳定
        # 3. 判断可信度 — 需要自建评分逻辑
        score = heuristic_credibility(item["domain"], full_text)
        cleaned.append({"text": full_text, "credibility": score})
    return cleaned

这段代码在 AnySearch 的模式下可以整个删掉——搜索层已经做了这些事。

更进一步:多轮搜索 + Agent 循环

真正的 Agent 工作流往往不是"搜一次就完",而是搜索→推理→发现信息缺口→再搜索。AnySearch 的统一入口在这里优势更明显:Agent 不需要为不同类型的信息切换不同 API,同一个接口通过参数调整就能覆盖不同搜索需求。

def multi_turn_research(initial_topic: str, max_rounds: int = 3) -> str:
    """
    多轮调研 Agent:根据推理结果动态补充搜索。
    """
    client = OpenAI(api_key=os.environ.get("OPENAI_API_KEY"))
    accumulated_facts = []

    current_query = initial_topic

    for round_num in range(max_rounds):
        # 搜索:根据当前信息缺口调整 query 和 mode
        if round_num == 0:
            mode, depth = "overview", "standard"
        else:
            mode, depth = "fact", "deep"  # 后续轮次更聚焦、更深入

        result = call_anysearch(query=current_query, mode=mode, depth=depth)
        accumulated_facts.append(result)

        # 推理:判断信息是否足够,生成下一步搜索方向
        all_context = json.dumps(accumulated_facts, ensure_ascii=False, indent=2)

        reasoning_prompt = f"""基于已收集的信息,判断是否需要补充搜索。

        已收集信息(第 {round_num + 1} 轮):
        {all_context}

        原始课题:{initial_topic}

        请回答:
        1. 当前信息是否足以完成调研?如果足够,直接输出最终报告。
        2. 如果不够,指出具体信息缺口,并给出下一轮搜索的精确 query。

        输出格式:
        {"status": "sufficient" | "need_more", "next_query": "...", "report": "..."}"""

        resp = client.chat.completions.create(
            model="gpt-4o",
            messages=[{"role": "user", "content": reasoning_prompt}],
            temperature=0.2,
        )

        decision = json.loads(resp.choices[0].message.content)

        if decision["status"] == "sufficient":
            return decision["report"]

        current_query = decision["next_query"]

    # 达到最大轮次,用已有信息生成报告
    final_prompt = f"基于以下信息撰写调研报告:\n{all_context}"
    resp = client.chat.completions.create(
        model="gpt-4o",
        messages=[{"role": "user", "content": final_prompt}],
        temperature=0.3,
    )
    return resp.choices[0].message.content

这个循环里,每一轮搜索都走同一个 API,只是调整 modedepth。传统做法下,Agent 可能第一轮调通用搜索、第二轮调学术搜索、第三轮调新闻搜索——三个不同的 API、三种不同的返回格式、三套不同的后处理逻辑。统一搜索层把这些复杂性吸收了。

接入前的考量

AnySearch 代表的方向是清晰的——搜索基础设施从 human-first 转向 agent-first——但在实际接入时,有几个点需要权衡:

延迟与深度不可兼得。 depth="deep" 意味着更全面的检索和更精细的结构化,但耗时更长。Agent 如果在实时对话场景中调用,可能需要默认 standard,只在离线调研任务中用 deep。建议根据场景设置超时和降级策略。

结构化输出的 schema 稳定性。 Agent 的下游逻辑依赖返回 JSON 的字段名和嵌套结构。如果 schema 频繁变动,Agent 代码会反复出问题。接入前确认 API 版本策略和变更通知机制。

成本模型。 传统搜索 API 按请求计费,Agent 场景下调用频率可能远高于人类搜索。结构化+高质量意味着更多后端计算,成本可能不低。建议先在非核心路径试跑,观察调用量和费用后再决定是否全面替换。

信息源的覆盖范围。 高质量过滤是好事,但如果过滤太激进,某些垂直领域的信息可能被系统性排除。在专业领域(医疗、法律、金融)使用时,需要验证搜索层是否覆盖了该领域的核心信息源。

一个简单的接入检查清单:

  • [ ] 确认 API 版本和 schema 变更策略
  • [ ] 测试目标领域的覆盖度(跑 20-30 条典型 query,对比结果完整性)
  • [ ] 设定延迟上限:实时场景 < 2s,离线场景可放宽
  • [ ] 估算调用量和成本,设置用量告警
  • [ ] 准备降级方案:AnySearch 不可用时回退到传统 API + 自建后处理
  • [ ] 在 Agent prompt 中明确使用搜索结果的规则(如 confidence 阈值、来源标注要求)

搜索基础设施的换代不会一蹴而就,但方向已经明确:当 AI Agent 成为信息的主要消费者,搜索层必须为机器而设计,而不是让机器去适应给人类造的工具。AnySearch 是这个方向上的一个具体产品,值得关注其后续 API 文档和实际表现。


相关推荐