DeepSearchQA#
简介#
DeepSearchQA 用于评估
Deep Research Agent 处理复杂联网问答的能力。ModelScope 数据集
google/deepsearchqa 在 eval split 中包含 900 道题。
每条样本包含问题、类别、标准答案和答案类型(Single Answer 或 Set Answer)。
EvalScope 接入 ModelScope 数据集,并对齐公开 Kaggle starter code 的判分协议。官方 starter 使用 Gemini 2.5 Flash 和 Google Search 生成答案,再用 Gemini 评分;EvalScope 不绑定模型或搜索服务,可以使用任意 OpenAI-compatible 模型, 并通过 AgentLoop MCP server 接入搜索和网页抓取工具。
安装#
如果运行时需要 MCP server,安装 MCP 依赖:
pip install 'evalscope[mcp]'
evalscope[mcp] 自带官方 mcp Python SDK 和 mcp-server-fetch。Fetch 适合读取已知 URL,但不是搜索引擎。
正式 DeepSearchQA agent 评测还应配置真实搜索 MCP server。
搜索 MCP 要求#
DeepSearchQA 通常需要发现多个网页、解析别名,并交叉验证多个来源。建议至少提供两类工具:
search或web_search:输入 query,返回带 title、snippet、URL 的排序结果。fetch或fetch_url:输入 URL,返回可读网页正文。
mcp_server_fetch 只提供第二类能力。如果只配置 fetch,模型只能打开已经知道的 URL,无法可靠发现新来源。
Native AgentLoop 示例#
下面示例同时配置 Fetch MCP 和一个远端搜索 MCP endpoint。搜索 endpoint 可替换为 ModelScope MCP、Brave/Tavily 封装 MCP,或自建 MCP server。
import os
import sys
from evalscope import TaskConfig, run_task
from evalscope.api.agent import NativeAgentConfig
from evalscope.api.agent.mcp import MCPServerConfigHTTP, MCPServerConfigStdio
task_config = TaskConfig(
model='YOUR_AGENT_MODEL',
api_url='OPENAI_COMPATIBLE_URL',
api_key=os.getenv('MODEL_API_KEY'),
eval_type='openai_api',
datasets=['deepsearchqa'],
eval_batch_size=1,
limit=10,
judge_strategy='llm',
judge_model_args={
'model_id': 'YOUR_JUDGE_MODEL',
'api_url': 'OPENAI_COMPATIBLE_JUDGE_URL',
'api_key': os.getenv('JUDGE_API_KEY'),
'generation_config': {'temperature': 0.0},
},
agent_config=NativeAgentConfig(
strategy='function_calling',
max_steps=30,
mcp_servers=[
MCPServerConfigStdio(
name='fetch',
command=sys.executable,
args=['-m', 'mcp_server_fetch', '--ignore-robots-txt'],
),
MCPServerConfigHTTP(
name='search',
url='https://mcp.api-inference.modelscope.net/<search-server-id>/mcp',
headers={'Authorization': 'Bearer <MCP_TOKEN>'},
),
],
kwargs={
'system_prompt': (
'Use the available search and fetch tools to research the question. '
'Cross-check important facts before answering. When finished, call submit(answer=...) with only the '
'final answer or complete answer set.'
),
},
),
)
run_task(task_config)
CLI 示例#
通过 CLI JSON 配置 MCP server 时,每个 server 都要写 type 字段。
evalscope eval \
--model YOUR_AGENT_MODEL \
--api-url OPENAI_COMPATIBLE_URL \
--api-key "$MODEL_API_KEY" \
--datasets deepsearchqa \
--limit 10 \
--eval-batch-size 1 \
--judge-strategy llm \
--judge-model-args '{"model_id":"YOUR_JUDGE_MODEL","api_url":"OPENAI_COMPATIBLE_JUDGE_URL","api_key":"'"$JUDGE_API_KEY"'","generation_config":{"temperature":0.0}}' \
--agent-config '{"mode":"native","strategy":"function_calling","max_steps":30,"mcp_servers":[{"type":"stdio","name":"fetch","command":"python","args":["-m","mcp_server_fetch","--ignore-robots-txt"]},{"type":"http","name":"search","url":"https://mcp.api-inference.modelscope.net/<search-server-id>/mcp","headers":{"Authorization":"Bearer <MCP_TOKEN>"}}],"kwargs":{"system_prompt":"Use search and fetch tools to research the question. Cross-check important facts before answering. When finished, call submit(answer=...) with only the final answer."}}'
评分#
主指标是 f1_score,同时报告 precision 和 recall。EvalScope 还会按照官方 starter 逻辑输出评测流程健康度指标:
empty_model_responseempty_auto_rater_responseinvalid_auto_rater_response
空模型回答、空 judge 回复和非法 judge 回复不会进入有效样本 mean precision/recall/F1 的分母,而是单独以 rate 报告。 每条样本的 review 仍会保留 judge 细节,包括哪些标准答案被命中,以及检测到了哪些额外答案。
注意事项#
function_calling模式要求模型完成后调用submit(answer=...)。DeepSearchQA 增加了 max-step finalization:如果到达
max_steps时 completion 为空,会要求模型基于已收集信息输出最终答案。为了比较不同模型,建议固定同一个 judge model,并设置 judge temperature 为
0.0。