35B 也能逼近万亿模型:小红书 Iris Search Agent 的训练与评测启示

2026-09-14 36 预计阅读时间: 1 分钟
来源: oschina.net AI 摘要 Original link

Disclaimer: This article is an AI-assisted summary. Read it together with the original source when precision matters. The summary may omit context, version differences, or edge cases and is not official documentation.

预计阅读时间:13 分钟

搜索型 Agent 的难点,从来不只是“会不会调用搜索接口”。它需要在真实网络中拆解问题、寻找线索、阅读页面、交叉验证,再判断证据是否已经足够,最后还要在有限的时间和调用次数内给出答案。小红书 AllSpark 团队开源的 Search Agent「Iris」给出了一个值得关注的结果:35B 规模的模型在 BrowseComp 上取得 82.2 分,搜索能力逼近 Kimi-K2.6 这类万亿参数模型。

这个结果的价值不只在于参数更小,而在于它说明:Search Agent 的上限,可能越来越取决于搜索轨迹、证据反馈和停止决策,而不只是基础模型的参数量。

Search Agent 为什么比普通问答更难

普通问答通常可以把任务抽象成“一次生成”:模型接收问题,调用已有知识或上下文,然后输出答案。Search Agent 则要处理一个动态过程:

  1. 判断问题是否需要外部搜索;
  2. 把复杂问题拆成多个可检索的子问题;
  3. 选择搜索词、页面和下一步动作;
  4. 从网页中提取与问题相关的事实;
  5. 识别冲突信息,并继续寻找更可靠的来源;
  6. 判断证据是否已经足够,避免无限搜索;
  7. 组织带有依据的最终答案。

其中任何一步出错,都会放大到最终结果。例如,搜索词过于宽泛会带来大量噪声;只读取一个页面可能导致结论偏差;没有停止机制则会让延迟和成本持续增长。

因此,训练 Search Agent 不能只看最终答案对不对,还要观察它走过的路径:搜索了什么、读了什么、为什么继续搜索,以及什么时候决定停止。

Iris 带来的三个工程观察

来源摘要将 Search Agent 的训练和评测概括为“三道坎”,但没有展开全部技术细节。结合搜索 Agent 的工作流,可以把这三道坎理解为三个需要同时解决的工程问题。

1. 让模型学会有效探索,而不是机械搜索

真实网络不是结构化数据库。一个问题可能需要先找到人物、再确认时间,再通过另一条线索定位事件。高质量轨迹往往不是一次搜索命中,而是多轮“提出假设—查证—修正”。

训练数据因此不应只有问题和最终答案,还应包含:

  • 每一步的搜索查询;
  • 页面或文档选择结果;
  • 从页面中提取的关键证据;
  • 当前阶段的中间判断;
  • 继续搜索或停止的理由。

对工程团队来说,这意味着日志格式要从普通的 request/response,升级为可回放的 trajectory。没有完整轨迹,就很难定位 Agent 到底是不会搜、不会读,还是不会停。

2. 让奖励信号覆盖“过程质量”

只用最终答案做奖励,会产生一个常见问题:模型可能偶然答对,却采用了不可复现、不可验证甚至不安全的路径。反过来,一个搜索路径合理但最终表达有小瑕疵的样本,也可能被简单地判为失败。

更稳妥的做法,是将结果和过程拆开评估。例如:

  • 答案正确性:最终结论是否匹配标准答案;
  • 证据支持度:引用的页面是否真的支持结论;
  • 来源质量:是否优先使用原始资料、权威文档或一手报道;
  • 覆盖率:多条件问题是否逐项完成验证;
  • 搜索效率:完成任务用了多少轮搜索和页面阅读;
  • 停止质量:证据不足时是否继续,证据充分时是否及时停止。

这类奖励设计的核心,是让模型不只追求“说出一个看起来像答案的句子”,而是学习一条成本可控、证据可追溯的求解路径。

3. 评测必须接近真实检索环境

如果评测集只把网页内容直接塞进上下文,测到的更像是阅读理解,而不是搜索能力。BrowseComp 这类基准的意义,在于要求模型主动浏览和组合信息,因此更接近真实 Search Agent 的工作模式。

评测时至少要记录以下指标:

指标 关注的问题
最终得分 答案整体是否正确
证据命中率 关键结论有没有对应证据
平均搜索轮数 Agent 是否过度搜索
平均页面数 阅读和筛选效率如何
无效动作比例 是否反复搜索相同内容
停止准确率 什么时候该停,什么时候不该停

Iris 的 35B 规模和 BrowseComp 82.2 分,至少说明一个方向:经过针对性的训练和工具使用优化,中等规模模型也可能在特定搜索任务上获得很强的有效能力,而不必简单依赖更大的参数规模。

一个可改造的最小 Search Agent 工作流

下面的示例不是 Iris 的官方接口,而是一个可改造的实验骨架。它假设你有一个兼容 OpenAI 风格的模型服务,以及一个返回 JSON 的搜索服务。运行前需要把环境变量和接口字段替换成自己的实现。

模型需要明确知道三件事:可以调用什么工具、什么样的证据算有效、在什么条件下必须停止。代码将搜索、证据收集和最终回答拆成三个阶段,便于记录轨迹和增加评测器。

import json
import os
from typing import Any

import requests

LLM_URL = os.environ.get("LLM_URL", "http://localhost:8000/v1/chat/completions")
LLM_MODEL = os.environ.get("LLM_MODEL", "search-agent")
SEARCH_URL = os.environ.get("SEARCH_URL", "http://localhost:9000/search")


def search(query: str, top_k: int = 5) -> list[dict[str, Any]]:
    """假设搜索服务返回 {"results": [{"title", "url", "snippet"}, ...]}。"""
    response = requests.post(
        SEARCH_URL,
        json={"query": query, "top_k": top_k},
        timeout=20,
    )
    response.raise_for_status()
    return response.json().get("results", [])


def ask_llm(messages: list[dict[str, str]]) -> str:
    response = requests.post(
        LLM_URL,
        json={
            "model": LLM_MODEL,
            "temperature": 0.1,
            "messages": messages,
        },
        timeout=60,
    )
    response.raise_for_status()
    return response.json()["choices"][0]["message"]["content"]


def run_agent(question: str, max_rounds: int = 4) -> str:
    evidence: list[dict[str, Any]] = []
    trace: list[dict[str, Any]] = []

    plan = ask_llm([
        {
            "role": "system",
            "content": (
                "你是搜索规划器。把用户问题拆成最多3个可验证的子问题,"
                "只输出JSON数组,例如 [{\"query\": \"...\"}]。"
            ),
        },
        {"role": "user", "content": question},
    ])
    queries = json.loads(plan)

    for round_id, item in enumerate(queries[:max_rounds], start=1):
        query = item["query"]
        results = search(query)
        evidence.extend(results)
        trace.append({"round": round_id, "query": query, "result_count": len(results)})

        decision = ask_llm([
            {
                "role": "system",
                "content": (
                    "你是证据审查器。根据问题和搜索结果判断证据是否足够。"
                    "只输出JSON:{\"enough\": true或false, \"missing\": \"...\"}。"
                ),
            },
            {
                "role": "user",
                "content": json.dumps(
                    {"question": question, "evidence": evidence},
                    ensure_ascii=False,
                ),
            },
        ])
        if json.loads(decision).get("enough"):
            break

    answer = ask_llm([
        {
            "role": "system",
            "content": (
                "根据证据回答问题。不要补写证据中没有的信息;"
                "每个关键结论后标注对应URL。若证据不足,明确说明不确定性。"
            ),
        },
        {
            "role": "user",
            "content": json.dumps(
                {"question": question, "evidence": evidence},
                ensure_ascii=False,
            ),
        },
    ])

    print(json.dumps({"trace": trace, "answer": answer}, ensure_ascii=False, indent=2))
    return answer


if __name__ == "__main__":
    run_agent("比较两个产品在2023年发布的核心功能,并给出一手来源")

安装依赖并运行:

pip install requests
export LLM_URL=http://localhost:8000/v1/chat/completions
export LLM_MODEL=your-model
export SEARCH_URL=http://localhost:9000/search
python search_agent.py

这个最小实现还有明显的生产缺口:没有网页正文抽取、没有去重、没有来源可信度排序,也没有处理网页提示词注入。实际系统中,可以在 search() 后增加 URL 规范化、正文清洗、域名白名单和证据片段截断,并把 trace 持久化到数据库,用于离线评测和训练。

从“会回答”走向“会停止”

Search Agent 最容易被忽视的能力,是停止决策。继续搜索并不总会带来更好的答案,反而可能引入低质量页面、冲突信息和额外延迟。一个可操作的停止规则可以包含:

  • 问题中的每个约束都有至少一个证据支持;
  • 关键结论最好有两个相互独立的来源,或有一个明确的一手来源;
  • 新一轮搜索没有带来新的实体、日期、数字或关系;
  • 达到最大轮数、最大 token 或预算上限;
  • 新证据与已有证据冲突,需要转入“冲突处理”而不是继续盲搜。

这类规则既可以作为运行时护栏,也可以作为训练标签。让模型学习“何时停止”,往往比单纯提高搜索次数更能改善成本、延迟和稳定性。

采用建议:先把轨迹和评测补齐

如果团队准备构建自己的 Search Agent,不建议一开始就追求复杂的多 Agent 编排。更务实的落地顺序是:

  1. 先固定搜索工具协议,并保存每一步完整轨迹;
  2. 建立包含答案、证据和来源质量的离线评测集;
  3. 为重复搜索、无效页面和超预算设置硬限制;
  4. 单独评估答案正确性、证据支持度和停止质量;
  5. 再根据失败轨迹决定是优化提示词、检索器、奖励函数,还是更换模型。

Iris 的启示并不是“35B 已经全面超过更大模型”,而是搜索任务存在明显的系统工程杠杆:更好的轨迹、更细的过程反馈、更接近真实网络的评测,都可能把有限的模型规模转化为更强的实际搜索能力。对开发者而言,真正值得复用的不是某个单一数字,而是这套围绕证据、效率和停止决策建立 Search Agent 的方法论。


相关推荐