我们自己的访问统计默认开启。Google Analytics 只在你同意后启用,用来了解公开页面是否有用,不统计登录后的工作台。详见 隐私政策。

Gemini Deep Research API 接远程 MCP:社媒数据让引用可核对

Gemini Deep Research API 能接远程 MCP,不能接自定义函数。7 次社媒真调花 $0.0046,附接法、计费和引用核对。

示意插图:一张浅灰色的长桌。左边堆着一叠杂乱的纸、剪报、对话气泡卡片和视频画面卡片;中间是一个透明的分拣架,把它们整理成一排排带青绿色小标签的索引卡,每张卡上夹着一根细线;右边是一本摊开的成品报告,书页上的脚注记号沿着细线连回对应的索引卡,表示报告里的每条引用都能回到一条原始记录。

先说结论:Gemini Deep Research API 现在能直接接远程 MCP 服务器,但不能接自定义函数,也不支持结构化输出,这三点都写在 Google 官方文档的「Limitations」一节里(Deep Research 文档,2026-10-13 更新)。所以把 EveryInfra 的远程 MCP(https://api.everyinfra.com/mcp)交给它是可行的,选题设想的「接不了就换路」只需要作为第二条路。我们在 2026 年 11 月 2 日 00:16–00:20(新加坡时间)真调了 7 次社媒和新闻接口,共 131 行、花费 $0.0046,发现真正影响「引用能不能核对」的不是模型,而是数据本身:英文和中文新闻的发布时间比网址里的日期晚 0–4 天,西语新闻 10 条发布时间全部为空,YouTube 评论 50 条里 0 条带链接、0 条有精确时间,而 Reddit 评论 35 条全部带永久链接和精确到毫秒的时间。

这篇文章回答一个具体的问题:想用 Gemini Deep Research 写一份关于某个话题的研究报告,又希望报告里关于「社交平台上大家在说什么」的部分有据可查,该怎样把结构化的社媒数据交给它。我们选的话题是电动自行车锂电池起火,因为 10 月下旬纽约和广州都发生了多起相关火灾,英文、中文、西语媒体和 Reddit、YouTube 上都有大量讨论,正好可以检验三种语言、四类来源的数据质量。Google 一侧的每条事实都来自 ai.google.dev 和 Google 博客的原文,我们没有 Gemini API Key,没有真跑 Deep Research,所以 Gemini 一侧的代码都是「配置示例」;EveryInfra 一侧的每个数字都来自真调的原始返回。

示意插图,上下两条路线。上面一条:一个小机器人沿着一根青绿色的线伸向一个带抽屉的数据柜,拉开其中一个抽屉,表示 Deep Research 在研究中自己调用远程 MCP。下面一条:一双手把一盘整理好的索引卡放到同一个机器人面前的桌上,表示先把数据拉好再交给它。两条路线的终点都是一本摊开的笔记本,本子上的脚注记号用细线连回卡片。
两条接法:让 Deep Research 自己调 MCP,或者先拉好数据再交给它。

先回答选题:Gemini Deep Research API 能不能接远程 MCP

能接。Google 的 Deep Research 文档列出了五种工具类型:google_search、url_context、code_execution 三种默认开启,另有 mcp_server 和 file_search 两种需要显式加上(Deep Research 文档「Supported tools」)。mcp_server 这一项有五个字段:type 必填且固定为 "mcp_server",name 是显示名,url 是 MCP 端点的完整网址,headers 是每次请求都会带上的 HTTP 头(文档举的例子就是放鉴权令牌),allowed_tools 用来限制 agent 能调用这个服务器上的哪些工具。这个功能是 2026 年 4 月 21 日随新版 Deep Research 一起上线的,Google 的发布说明写的是「带协作规划、可视化、MCP 服务器集成和 File Search」(Gemini API 更新日志 2026-04-21)。

不能接的是自定义函数。同一页的「Limitations」第一条原文的意思是:目前不能给 Deep Research 提供自定义的 Function Calling 工具,但可以用远程 MCP 服务器。第二条是不支持结构化输出,第三条是单次研究最长 60 分钟、大多数任务应在 20 分钟内完成。这里有一个容易读错的地方:Google 博客在发布 Deep Research Max 时写过「Deep Research 支持任意工具定义」(Google 博客,2026-04-21),对照文档,这句话指的是通过 MCP 暴露的工具,不是在请求里直接写函数声明。还有一处要分清:Interactions API 的总览页写着「Gemini 3 不支持远程 MCP,即将支持」(Interactions API 总览,2026-10-15 更新),这一条说的是用 model 参数调用普通模型的情况,Deep Research 是用 agent 参数调用的 agent,两者不是一回事。

问题官方原文给的答案出处与更新日期
能不能接远程 MCP能,工具类型 mcp_server,可带 headers 和 allowed_toolsDeep Research 文档,2026-10-13
能不能传自定义函数不能,「目前」不支持 Function Calling 工具同上,Limitations
能不能要求 JSON 结构化输出不能同上,Limitations
单次最长多久60 分钟,多数 20 分钟内同上,Limitations
必须后台运行吗必须 background=true,且要 store=true同上;后台执行文档
输入上下文和输出上限1,048,576 / 65,536 token模型页,2026-10-29
有几个版本deep-research-preview-04-2026、deep-research-max-preview-04-2026模型页、更新日志 2026-04-21
Google Deep Research 官方文档英文版两段原文的截图,上下拼接。上半部分是「MCP servers」一节的字段表,青绿框框住整张表:type 为 string 且必填,值必须是 mcp_server;name、url、headers、allowed_tools 都是选填,headers 的说明是每次请求都会带上的 HTTP 头,例如鉴权令牌,allowed_tools 的说明是限制 agent 能调用服务器上的哪些工具。下半部分是「Limitations」一节,青绿框框住前三条:不能提供自定义 Function Calling 工具但可以用远程 MCP;不支持结构化输出;最长研究时间 60 分钟,多数任务 20 分钟内完成。
官方文档原文:MCP 字段表和限制的前三条(同一页的两段,上下拼接,青绿框为本文引用处)。截于 2026 年 11 月 2 日 00:38 新加坡时间。 Google Deep Research 文档截图

所以选题里的两条路都成立,只是主次要换一下。第一条路是把我们的 MCP 地址直接写进 tools,让 agent 在研究过程中自己决定什么时候查 Reddit、什么时候查新闻;第二条路是你的程序先调 POST /api/v1/social 拉好数据,整理成表,再作为输入或 File Search 文档交给 agent。后文会说明,第二条路虽然不是「必须」,但在引用核对这件事上反而更稳,原因在数据本身,而不在 Gemini。

Deep Research 在 Interactions API 里怎么调:后台、轮询和流式

Deep Research 只能通过 Interactions API 调用,不能走旧的 generateContent。Interactions API 在 2025 年 12 月 11 日上线,2026 年 6 月转为正式版,官方现在把它当作所有新项目的默认接口(Interactions API 总览)。一次 Deep Research 调用和普通模型调用的区别有三处:用 agent 参数而不是 model 参数;必须设 background=true,接口会立刻返回一个只有 id 的部分对象;之后用这个 id 轮询,或者开流式接收进度。下面是按官方 REST 示例改写的配置示例,我们没有真跑。

bash
# 配置示例:启动一次 Deep Research,并接上 EveryInfra 远程 MCP(未实测)
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
  -H "Content-Type: application/json" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -d '{
    "agent": "deep-research-preview-04-2026",
    "input": "Research how e-bike battery fires were discussed in news, Reddit and YouTube in October 2026. For every claim about social media, quote the row id and url from the EveryInfra tool result. If a date is approximate, say so.",
    "tools": [
      {"type": "google_search"},
      {"type": "url_context"},
      {"type": "mcp_server",
       "name": "EveryInfra",
       "url": "https://api.everyinfra.com/mcp",
       "headers": {"Authorization": "Bearer '"$EVERYINFRA_API_KEY"'"},
       "allowed_tools": ["everyinfra_list_capabilities", "everyinfra_call_api", "everyinfra_get_job"]}
    ],
    "agent_config": {"type": "deep-research", "thinking_summaries": "auto"},
    "background": true
  }'

# 轮询(把 INTERACTION_ID 换成上一步返回的 id)
curl "https://generativelanguage.googleapis.com/v1beta/interactions/INTERACTION_ID" \
  -H "x-goog-api-key: $GEMINI_API_KEY"

后台运行的状态有五种:in_progress、requires_action、completed、failed、cancelled(后台执行文档)。background=true 必须和 store=true 一起用,如果你传了 store=false,接口直接回 400。存下来的交互在付费层保留 55 天、免费层保留 1 天,付费层可以在 AI Studio 里改成 7、14、28 天。这一点和数据有关:你在 headers 里放的 EveryInfra Key 不会出现在交互内容里,但 agent 调 MCP 拿回来的每一行社媒数据都会作为步骤存进这次交互,保留期按上面算。

流式接收要同时设 stream=true 和 background=true,想看到中间的思考摘要还要把 agent_config.thinking_summaries 设成 "auto"。官方文档的示例专门处理了断线:记下 interaction_id 和最后一个 event_id,连接断开后用 GET /interactions/{id}?stream=true&last_event_id=… 接着收,文档提到的一个断线原因是 600 秒超时。对于一件可能跑十几分钟的研究,这个重连逻辑不是可选项。

`agent_config` 字段默认值作用对社媒数据研究的意义
type必填 "deep-research"标明是 Deep Research—
thinking_summaries"none"设为 "auto" 才能在流式里看到中间步骤能看到 agent 什么时候调了 MCP
visualization"auto"允许生成图表,但只有提示里明确要图时才画要图就在提示里写明
collaborative_planningfalse先出计划,用 previous_interaction_id 改计划,最后一轮设回 false 才执行;只回「看起来不错」不改开关不会出报告(Philipp Schmid,2026-04-29)可以在计划阶段规定「只用哪几项能力」

Gemini Deep Research API pricing:一次 $1–3,Max $3–7,账怎么拆

Google 没有给 Deep Research 单独定价,而是按它背后的模型推理和工具使用分别计费(价格页「Pricing for agents」,2026-10-30 更新)。原文说,所有模型推理按 Gemini 标准价计,包括 agent 循环里产生的中间输入和推理 token;工具费按各自的现行价格,其中 Google 搜索的检索内容不算 token,而 URL Context 和 File Search 取回的内容算进 token。Deep Research 文档给了一个估算:普通版一次「中等分析」的任务大约用 80 次搜索、25 万输入 token(50%–70% 命中缓存)、6 万输出 token,合计约 $1–3;Max 版做深度竞品分析时最多约 160 次搜索、90 万输入 token、8 万输出 token,合计约 $3–7(Deep Research 文档「Estimated costs」)。

价格页另写了 Google 搜索的价格:Gemini 3 及以后的模型每月共享 5,000 次免费搜索,之后每 1,000 次 $14,每个项目默认每天最多 1,500 次。官方没有写明 Deep Research 内部的搜索是否按这个价格单独计费、是否计入每日上限;如果计入,按每份 80 次算一天约 18 份。我们没有真跑,这一点以你自己账单里的 usage 为准。

另一个容易忽略的限制是按花费限速。限速文档写明,除了每分钟请求数和 token 数,Gemini API 还按滚动 10 分钟窗口限制花费:第 1 层 $10、第 2 层 $50、第 3 层 $200,超了回 429 RESOURCE_EXHAUSTED(限速文档,2026-10-28 更新)。如果一次任务花 $3,第 1 层项目在 10 分钟里结算三四次任务就会碰线。开通付费层本身也有门槛:账单文档写明,从免费层升到付费层要绑定结算账户,新账户默认是预付模式,最少先充 $5,预付余额用完以后请求会失败,所以给定时任务用的项目最好开自动充值或者留足余额(账单文档)。批量做报告的团队,可以考虑 Google Cloud 那一侧的「延后」档位:Vertex 版 Deep Research 文档说,stream=false 时可以选 service_tier="deferred",后台任务排到非高峰时段,价格打五折(Google Cloud Deep Research 文档)。

费用项价格(读取日期 2026-11-02)一次 Deep Research 大约用多少
模型推理按 Gemini 标准价,含中间推理 token输入约 25 万、输出约 6 万 token(Max 90 万 / 8 万)
Google 搜索每月 5,000 次免费,之后 $14 / 1,000 次,每天 1,500 次上限约 80 次(Max 约 160 次)
URL Context取回内容按输入 token 计随读的网页数而变
File Search建索引时按嵌入价 $0.15 / 百万 token,存储和查询嵌入免费,取回内容按 token 计只在你上传文档时发生
代码执行生成的代码和结果按 token 计做计算、画图时发生
EveryInfra 社媒数据按目录 price_usd,失败和空结果不扣费一份报告 23 次约 $0.0135(见下表)
横向条形图,对数刻度,每格 10 倍,单位美元。四根柱:本文 7 次真调 $0.0046(青绿);一份报告的数据包 23 次 $0.0135(青绿);Deep Research 一次任务 $1–$3(灰);Deep Research Max 一次任务 $3–$7(灰)。标题:一份报告的数据接口费约是一次 Deep Research 的 0.45%–1.35%。

社媒数据这部分的账很小。按 2026 年 11 月 2 日目录价,google_news/search 每次 $0.000792,reddit/search、reddit/comments、youtube/search、youtube/comments 每次 $0.000556,都是一次调用按一次计,不按返回行数计。一份报告如果用 3 次新闻搜索、3 次 Reddit 搜索、10 个帖子的评论、2 次 YouTube 搜索、5 个视频的评论,共 23 次,合计 $0.0135,约是一次 Deep Research 的 0.45%–1.35%。换句话说,决定这份报告贵不贵的是 Deep Research 本身,社媒数据的费用可以忽略;值得花心思的是这些数据能不能被核对。

能力目录价(每次)一份报告调几次小计
google_news/search$0.0007923(英文、中文、西语各 1)$0.002376
reddit/search$0.0005563$0.001668
reddit/comments$0.00055610$0.005560
youtube/search$0.0005562$0.001112
youtube/comments$0.0005565$0.002780
合计—23$0.013496

耗时:Deep Research 按分钟算,我们这边 7 次调用合计约 77 秒

Deep Research 的耗时是分钟级的。文档的对比表把普通模型的延迟写作「秒」,把 Deep Research 写作「分钟(异步、后台)」,上限 60 分钟,多数 20 分钟内完成。论坛上一位做合规研究的用户在 2026 年 3 月 5 日描述,旧版 agent 一次完成用了约 7 分钟,后来同类提示连续卡在 in_progress,流式里能看到 4–5 个思考步骤之后连接悄悄断掉(Google 开发者论坛帖)。这说明轮询程序除了处理 completed 和 failed,还要给 in_progress 设一个自己的超时,比如 60 分钟后取消并记录。

横向条形图,单位秒,7 次 EveryInfra 调用各自的耗时:google_news/search 英文 4.3;reddit/search(MCP)6.0;reddit/comments 19.3(青绿);youtube/search 8.6;youtube/comments 30.1(青绿);google_news/search 西语 4.7;google_news/search 中文 3.7。标题:7 次调用单次 3.7–30.1 秒,串行合计约 77 秒。

我们这边的 7 次调用串行合计约 77 秒,最慢的是评论:50 条 YouTube 评论 30.1 秒,35 条 Reddit 评论 19.3 秒,新闻搜索 3.7–4.7 秒。这对两条接法有不同的意义。走 MCP 时,agent 每调一次就等一次,十几次评论调用加起来几分钟,占 Deep Research 总时长的一小部分,问题不大;但评论这类慢请求最好不要让 agent 干等:everyinfra_call_api 的工具描述原文写着「慢任务或大 limit 请传 mode=async,立刻拿到 job_id,再用 everyinfra_get_job 免费取结果」,我们这 7 次同步返回里也都带一条 async_hint 提示可以改用异步,agent 能读到。走第二条路时,你的程序可以并发拉数据,几十次调用一两分钟就够,然后一次性交给 Deep Research。

引用格式:url_citation、file_citation 和按字节算的下标

Deep Research 的报告引用不在正文里写成脚注,而是挂在输出步骤的 annotations 数组上。Interactions API 参考(2026-10-28 更新)列了几种注释类型,和本文有关的是两种。url_citation 有四个字段:url、title、start_index、end_index;file_citation 有 document_uri、file_name、source、custom_metadata、page_number、media_id,以及同样的 start_index、end_index。参考文档特别写明,下标「按字节计」,end_index 不含在内。

按字节计这一点对中文报告很重要。UTF-8 里一个汉字占 3 个字节,如果你用 Python 的字符串下标去切 text[start:end],一份中文报告的引用会整体错位,越往后错得越多。正确的做法是先把文本编码成字节再切。下面这段代码按官方字段名写,是配置示例;我们用一段中文测试文本验证过按字节切和按字符切的结果不同。

python
# 配置示例:把 Deep Research 输出里的引用还原到原文片段(字段名按 Interactions API 参考)
def cited_spans(interaction):
    out = []
    for step in interaction["steps"]:
        if step.get("type") != "model_output":
            continue
        for block in step.get("content", []):
            if block.get("type") != "text":
                continue
            raw = block["text"].encode("utf-8")          # 下标按字节计
            for a in block.get("annotations", []):
                span = raw[a["start_index"]:a["end_index"]].decode("utf-8", "replace")
                meta = {m["key"]: m.get("string_value", m.get("numeric_value"))
                        for m in a.get("custom_metadata", [])}
                out.append({"type": a["type"], "text": span,
                            "url": a.get("url") or meta.get("source_url"),
                            "row_id": meta.get("row_id")})
    return out

MCP 的调用和结果另有两种步骤:mcp_server_tool_call 带 name、server_name、arguments 和 id,mcp_server_tool_result 带 call_id 和 result,用 call_id 对回调用。参考文档没有说明 MCP 返回的内容会不会生成 url_citation。这意味着走第一条路时,你不能假设报告里关于 Reddit 帖子的句子一定挂着那条帖子的网址;比较稳的做法是在提示里要求 agent 在句子里写出行的 id 和 url,事后再用交互里存下的 mcp_server_tool_result 逐条核对。走第二条路用 File Search 时,你给每份文档加的 custom_metadata 会原样出现在 file_citation 里(File Search 文档「Citations」,2026-10-13 更新),这是目前官方文档里唯一写明的、能把你自己的行号带回引用的办法。

引用来源注释类型能带回什么核对方法
Google 搜索、URL Context 读到的网页url_citation网址、标题、字节区间打开网址,对照被引的句子
File Search 里你上传的文档file_citation文件名、custom_metadata、字节区间用 metadata 里的行号回查原始行
远程 MCP 返回的行文档未写明交互步骤里有完整的 mcp_server_tool_result要求正文写出 id 和 url,事后对照步骤

接法一:把 https://api.everyinfra.com/mcp 直接交给 Deep Research

第一条路的配置就是上面 curl 示例里的那段 mcp_server。三个字段需要解释。url 写 https://api.everyinfra.com/mcp,这是一个公开的 HTTPS 端点,按 MCP 2026-07-28 版规范实现:规范去掉了 initialize 握手,每个请求自己带协议版本,Streamable HTTP 的每条消息就是一次 POST(MCP 规范更新说明、传输层)。headers 里放 Authorization: Bearer <你的 EveryInfra Key>,我们的 MCP 端点接受这种写法,Google 文档的示例也正是这个形状;MCP 规范本身把鉴权定为可选,用 OAuth 2.1 时也是把令牌放在同一个头里(MCP 鉴权规范)。

allowed_tools 是最值得认真填的字段。我们在 2026 年 11 月 2 日 00:15(新加坡时间)不带 Key 调了一次 tools/list,返回 12 个工具、16,247 字节。其中和研究有关的只有 3 个:everyinfra_list_capabilities 列出平台和能力,everyinfra_call_api 调用任意数据能力,everyinfra_get_job 取异步任务结果。其余 9 个是一个网页搜索工具和账户管理一类的工具,研究任务用不到,让一个自主研究的 agent 看到它们也没有好处:一是工具说明本身会占上下文,12 个工具的定义约 16,610 字节,只留 3 个是 3,309 字节,少了约 80%;二是 everyinfra_call_api 的注解里 destructiveHint 是 true,因为它会产生费用,而账户类动作不应该由一个无人看管的后台任务发起。MCP 规范在工具一节还专门提醒,客户端必须把工具注解当作不可信信息,除非它来自可信的服务器(MCP 工具规范),所以不要指望 Deep Research 会因为看到 destructiveHint 就自动谨慎,靠得住的是你自己在 allowed_tools 里写死的白名单。规范的总入口在 MCP 2026-07-28 规范,其中服务器、客户端和传输层各有一节。

工具定义大小(字节)研究用不用理由
everyinfra_list_capabilities816用免费,先查能力名和参数
everyinfra_call_api1,695用拉数据,按次计费,失败不扣
everyinfra_get_job798用免费,取异步结果
everyinfra_search2,632不放研究里用 Google 搜索即可,避免两套搜索混用
流程动画,8 秒一圈。左边是「你的程序」,经 Interactions API 连到中间的「Deep Research,background=true」。A 路(青绿色):Deep Research 沿实线把一个青绿圆点送到右上方的「EveryInfra /mcp,allowed_tools 只放 3 个」,再沿虚线把一个青绿方块(数据行)送回 Deep Research。B 路(灰色):「你的程序」先把一个灰点送到右下方的「POST /api/v1/social,你的程序先调」,再经「整理成表:url、id、时间精度」送进 Deep Research。两条路的结果都流向右边的「带引用的报告:url_citation 或你的行号」。

提示词要配合工具一起写。Deep Research 的最佳实践一节建议告诉 agent 缺数据时怎么办,例如「某年数字查不到就明说,不要估」;放到社媒数据上,至少要写三件事:每条关于社交平台的论断后面写出行的 id 和 url;时间不精确的(下文会看到新闻和 YouTube 都有这种情况)要写「约」;每次调用前先用 everyinfra_list_capabilities 查参数,不要猜。最后一条不是多余的:EveryInfra 对未知参数和非法枚举返回 422 并附上允许值和建议值,而且不扣费,agent 读到错误文案能自己改(下一节有真实返回)。更多错误处理的写法见 API 错误与自愈,远程 MCP 在其他客户端里的配置见 远程 MCP 接入 和 MCP 服务器页。

一次真实往返:模型会发出什么,接口回了什么

我们没有真跑 Deep Research,但 MCP 客户端发给服务器的请求格式是规范定死的:一个 JSON-RPC tools/call,name 是工具名,arguments 是参数。我们用同样的 JSON-RPC 格式、用测试 Key 直接调了 MCP 端点。这只能说明服务器一侧收到什么、回了什么;Deep Research 一侧会选哪个工具、怎样填参数、怎样读这些行、会不会把它们挂成引用,本文没有验证,要等你自己跑一次看 mcp_server_tool_call 和 mcp_server_tool_result。2026 年 11 月 2 日 00:16:51(新加坡时间),请求是 everyinfra_call_api,参数 platform=reddit、action=search、关键词 e-bike battery fire、sort=relevance、limit=10,6.0 秒后返回 200,count 为 6。

EveryInfra MCP 真实返回的截图,深色代码卡片,分三段。第一段是 MCP tools/call 请求:调用 everyinfra_call_api,platform 为 reddit,action 为 search,关键词 e-bike battery fire,sort relevance,limit 10,时间 2026-11-02 00:16:51 新加坡时间。第二段是返回,200、6.0 秒、count 6,展示前 2 行:第一行 id 为 t3_1xjb3ss,url 是 r/nyc 的帖子永久链接(青绿框),社区 r/nyc,38 条评论,115 赞,posted_at 2026-10-30T09:52:16+00:00(青绿框),用户名已打码;第二行是 r/BronxNY 的帖子,40 条评论;最后是 billing 里 charged true、charged_usd 0.000556(青绿框)。第三段是 00:20:07 把 sort 写成 latest 的返回:invalid_value,列出允许值,did_you_mean 为 newest,以及 Nothing was charged(青绿框)。
一次 MCP 往返和一次参数写错的真实返回;用户名已打码,余额等内部字段已删。截于 2026 年 11 月 2 日新加坡时间。 EveryInfra 接口真实返回,2026-11-02 00:16–00:20 新加坡时间

这 6 行有几个特点值得记下。第一,reddit/search 的 limit 是 10,只回了 6 条,因为这个能力只返回关键词对得上的帖子(目录里写明:标题或社区名里有关键词、全帖凑齐这些词、或这些词在正文里挨着出现),时间范围固定为最近一个月。第二,6 条来自 5 个社区(r/nyc、r/BronxNY、r/ebikes、r/interesting、r/MTB),评论数合计 1,293,其中 r/interesting 一条讲锂电池火很难扑灭的帖子就有 1,137 条评论,一个只看帖子标题的 agent 很容易被这种高热度帖子带偏话题。第三,每行都带 url 和精确到秒的 posted_at,这是后文所有核对的基础。字段说明见 Reddit 搜索能力页。

同一分钟里我们还试了两次免费调用。00:20:00 调 everyinfra_list_capabilities 查 Reddit 的能力,0.28 秒返回;00:20:07 故意把 sort 写成 latest,0.19 秒返回 isError: true,文案是「sort must be one of: controversial, newest, popular, relevance, rising, top (got 'latest')」,did_you_mean 给出 newest,并写明「Nothing was charged」。对 Deep Research 这样没人看着的 agent,这种错误文案的意义在于它能自己改正后重试,而不是把一次失败的调用当成「Reddit 上没有讨论」写进报告。

接法二:先拉结构化社媒数据,再交给 Deep Research

第二条路把数据获取从 agent 手里拿出来,由你的程序完成。我们在 00:16–00:19(新加坡时间)按一份报告的需要做了 7 次付费调用,覆盖三种语言的新闻、Reddit 帖子和评论、YouTube 视频和评论。下表是逐次记录,charged_usd 是响应里 billing 字段的原值。

新加坡时间能力主要参数返回行数扣费耗时
00:16:32google_news/searche-bike battery fire,us / en,最近一个月10$0.0007924.3 秒
00:16:51reddit/search(经 MCP)e-bike battery fire,relevance6$0.0005566.0 秒
00:17:23reddit/commentsr/nyc 一条帖子,limit 5035$0.00055619.3 秒
00:18:02youtube/searche-bike battery fire,relevance10$0.0005568.6 秒
00:18:29youtube/commentsFDNY 一条视频,popular,limit 5050$0.00055630.1 秒
00:19:16google_news/searchincendio batería bicicleta eléctrica,mx / es10$0.0007924.7 秒
00:19:36google_news/search电动自行车 电池 起火,hk / zh10$0.0007923.7 秒
合计5 项能力—131$0.00460076.9 秒

这 5 项能力的参数、允许值和返回字段,都可以不带 Key 在目录里按平台查:Reddit 目录、YouTube 目录、Google 新闻目录。我们文中引用的价格、limit 上限、字段说明都来自 2026 年 11 月 2 日读取的这几份目录,价格以你调用时目录里的 price_usd 为准。

拉回来以后要做的事是把各家字段不同的行,整理成一张「每行都能被核对」的表。我们建议每行至少保留六列:row_id(平台加原始 id,例如 reddit:t3_1xjb3ss)、source_url(能直接打开到这一条的链接)、platform、published_at、date_precision(精确到秒、到天、到周、未知)、fetched_at(你调接口的时刻)。为什么要单独记时间精度,下面三组实测会给出理由。

整理好的表有两种交法。一种是直接放进 input:Deep Research 支持多模态输入,Google 博客写明可以给 PDF、CSV、图片、音频和视频,文档的示例用 {"type": "document", "uri": …, "mime_type": "application/pdf"} 传文件。131 行的表约 2 万 token,放进 100 万 token 的输入窗口没有压力。另一种是建一个 File Search 存储,把每行或每个来源作为一份文档上传,并把 row_id、source_url、date_precision 写进 custom_metadata,这样引用会以 file_citation 的形式带着这些字段回来。

python
# 配置示例:把 EveryInfra 返回整理成可核对的行,再交给 Deep Research(未实测 Gemini 一侧)
import csv, json

def rows_from(resp, platform, fetched_at):
    for r in resp["results"]:
        url = r.get("url")
        if platform == "youtube_comments":            # 评论行没有链接,用视频地址加评论 id 拼一个
            url = f'{resp["_video_url"]}&lc={r["id"]}'
        exact = isinstance(r.get("posted_at"), str) and r["posted_at"][:4].isdigit()
        yield {"row_id": f'{platform}:{r.get("id") or r.get("rank")}',
               "source_url": url, "platform": platform,
               "published_at": r.get("posted_at") or r.get("published_at") or "",
               "date_precision": "second" if exact and platform != "news" else ("day" if exact else "unknown"),
               "fetched_at": fetched_at,
               "text": (r.get("title") or r.get("text") or "")[:500]}

with open("evidence.csv", "w", newline="") as f:
    w = csv.DictWriter(f, fieldnames=["row_id", "source_url", "platform", "published_at",
                                      "date_precision", "fetched_at", "text"])
    w.writeheader()
    # for each saved response: w.writerows(rows_from(resp, "...", "2026-11-02T00:16:51+08:00"))

有一处官方文档自己不一致,要先试再用。File Search 文档的限制一节写着,内置的检索类工具不能同时使用,比如 File Search 不能和 Google 搜索或 URL Context 放在同一个请求里;而 Google 博客介绍 Deep Research 时说可以把 Google 搜索、远程 MCP、URL Context、代码执行和 File Search「同时」使用,Deep Research 文档的 File Search 示例题目也是「把我们的财报和最新网上新闻对比」,但示例代码只开了 File Search 一个工具。在没看到官方说清楚之前,稳妥的做法是先用一个小任务试一下同时开 file_search 和 google_search 会不会报错;如果报错,就把整理好的表放进 input,而不是放进 File Search。

实测一:新闻的发布时间是按「几天前」倒推的

google_news/search 的英文和中文结果都带 published_at,格式是标准的 ISO 时间,看上去很精确。但把 20 条结果放在一起看就不对了:英文 10 条的时分秒全部是 16:16:35(UTC),中文 10 条全部是 16:19:38,而我们发出请求的时刻分别是 16:16:32 和 16:19:36(UTC,即新加坡时间 00:16 和 00:19)。也就是说,这个字段是用请求时刻减去「几天前」算出来的,只有日期部分有意义,时分秒没有。

横向条形图,11 条网址里带日期的新闻,published_at 比网址日期晚几天。昆明信息港(中文)4 天;一家海外中文网站(中文)3 天;杭州网(中文)3 天;腾讯新闻(中文)2 天;泉州网(中文)2 天,以上 5 条为青绿色;Billy Penn at WHYY(英文)1 天;Spectrum News NY1(英文)1 天;纽约时报(英文)1 天;中华网(中文)0;南方财经(中文)0;The City Reporter(英文)0。副标题:20 条的时分秒都等于请求时刻,西语 10 条全为空。

日期部分准不准,可以用网址里自带的日期来验。20 条里有 11 条的网址路径带日期。英文 4 条:纽约时报那篇网址是 2026/10/28,published_at 是 10 月 29 日;NY1 网址 10/30,字段 10 月 31 日;The City Reporter 两者一致;Billy Penn 网址 10/17,字段 10 月 18 日,3 条晚 1 天、1 条一致。中文 7 条偏差更大:杭州网那篇实验报道网址是 10 月 22 日,字段是 10 月 25 日,晚 3 天;昆明信息港网址 10 月 21 日,字段 10 月 25 日,晚 4 天;只有 2 条一致。中文结果的偏差像是按「一周前」「两周前」这种更粗的粒度倒推的。西语 10 条的 published_at 全部是空值,只有 Spectrum Noticias 一条的网址里带日期(2026/10/31)。

这对研究报告的影响很具体。假设报告要写「事故发生后两天内,西语媒体开始报道」,用英文结果最多差 1 天,用中文结果可能差 4 天,用西语结果根本没法写。所以整理表时要给新闻行标上 date_precision:英文按「天,可能晚 1 天」,中文按「约一周」,西语为「未知」;网址里有日期的,优先用网址日期。中文结果还有一个小问题:排第一的那条,标题字段是媒体名「南方财经全媒体集团」,不是文章标题;打开原文才知道讲的是广州天河警方 10 月 30 日公布的三起电动自行车电池入户充电起火、当事人被行政拘留的案例(南方财经,2026-10-30)。只看标题的 agent 会把这一行当成一条无内容的结果丢掉。新闻能力的字段说明见 Google 新闻搜索能力页。

实测二:同一场火灾,三家媒体三个死亡人数

新闻行能被核对,不等于新闻内容彼此一致。纽约这场火灾是一个好例子。10 月 28 日,纽约时报报道,布朗克斯 Patterson Houses 一套公寓的电动自行车电池起火,一名 11 岁男孩死亡,消防局长 Lillian Bonsignore 说这是今年第 401 起电动自行车电池火灾(纽约时报,2026-10-28)。西语媒体 Univision 和 Spectrum Noticias 引用同一位局长的说法:今年 401 起、74 人受伤、6 人死亡,去年 292 起、51 人受伤、1 人死亡(Univision、Spectrum Noticias,2026-10-31)。10 月 31 日纽约每日新闻的报道则说,同一场火灾又有 3 人不治,今年锂电池火灾死亡人数到了 9 人(纽约每日新闻,2026-10-31)。再往前,10 月 14 日 Streetsblog 的报道写的是「今年至今 5 人死亡」,火灾数同比上升 41%(Streetsblog NYC,2026-10-14)。

来源发布日期今年火灾数今年死亡人数说法出自
Streetsblog NYC2026-10-14同比 +41%5FDNY 数据
纽约时报2026-10-28第 401 起未给全年数消防局长
Spectrum Noticias2026-10-314016消防局长(10 月 28 日发布会)
纽约每日新闻2026-10-31401(截至上周)9FDNY 官员

这四个数并不矛盾,它们是一个随时间变化的数在不同时刻的快照:5 是 10 月中旬的数,6 是 10 月 28 日火灾当天的数,9 是又有 3 人不治之后的数。但如果一份报告只写「据西语媒体报道,今年已有 6 人死亡」,并挂上 10 月 31 日那篇的链接,读者打开网址会发现引用对得上,事实却已经过时。上一节说的 date_precision 在这里要再加一列:这个数字是「什么时候说的」,而不仅是「文章什么时候发的」。研究方法上的依据也有:2026 年 5 月一篇评估 14 个模型的论文发现,深度研究报告的引用链接有效率在 94% 以上、内容相关率在 80% 以上,但事实准确率只有 39%–77%,而且随着工具调用从 2 次增加到 150 次,事实核对的准确率平均下降约 42%(arXiv 2605.06635)。链接对得上,不等于句子对得上。上表的数字是转述各家报道,用来说明引用的时效问题;火灾和伤亡的准确数字以纽约市消防局 FDNY 的官方发布为准。

实测三:评论能不能回到原文,Reddit 35/35,YouTube 0/50

新闻之外,社媒研究的主体是评论。我们取了两组:Reddit r/nyc 那条帖子下的评论,和纽约市消防局 FDNY 在 YouTube 上一条电动自行车店起火视频下的热门评论。两组数据在「能不能回到原文」上差别极大。

分组横向条形图,7 组数据,每组两根柱:灰色是带直接链接的比例,青绿是带精确时间的比例。google_news 英文、中文、西语:链接各 10/10,精确时间各 0/10;reddit/search 6/6 和 6/6;reddit/comments 35/35 和 35/35;youtube/search 10/10 和 10/10;youtube/comments 0/50 和 0/50。标题:YouTube 评论 50 条,0 条带链接,0 条有精确时间。

Reddit 的 35 条评论,每条都有 url,形如 reddit.com/r/nyc/comments/1xjb3ss/comment/19rvuy7xzfh7n/,打开就是那一条评论;每条的 posted_at 精确到毫秒(例如 2026-10-30T14:43:08.086000+00:00)。报告里写「r/nyc 有评论认为……」时,可以直接挂这条链接,读者一点就能核对。帖子本身有 38 条评论,接口返回 35 条,差的几条可能是被删除或折叠的,关于 Reddit 评论为什么不齐,我们在 Reddit 评论完整性 一文里专门测过。

YouTube 的 50 条评论,url 字段不存在,posted_at 是「1 year ago」「7 months ago」这样的相对时间。50 条里写着「年」的 15 条,带「(edited)」的 4 条,回复 14 条。这有两个后果。第一,没法直接链接到评论:我们在整理表时用视频地址加 &lc=<评论 id> 拼一个链接,这是 YouTube 网页定位评论的常见写法,但它不是接口返回的字段,我们也没在官方文档里查到对这个参数的说明,所以只能标成「拼接」。第二,「1 year ago」这种时间只能精确到年或月,而且是相对于请求时刻的;报告里如果写「近一个月 YouTube 上的讨论」,这 50 条里能确认落在近一个月的只有「1 hour ago」「2 weeks ago」「3 weeks ago」那 4 条。目录对 youtube/comments 的说明里也写了 since 参数筛的是评论日期,可以在拉数据时就限定范围。YouTube 评论回复的分页问题见 YouTube 评论回复分页,能力字段见 YouTube 评论能力页。

实测四:YouTube 按相关性搜出的多是旧视频

时间问题在 YouTube 搜索结果里更明显。同一个关键词 e-bike battery fire,同一分钟里,新闻搜索 10 条全在最近 30 天,而 youtube/search 按相关性排序的前 10 条视频,按发布年份是 2022 年 2 条、2023 年 4 条、2024 年 2 条、2025 年 1 条、2026 年 1 条,中位数是 2023 年;那 1 条 2026 年的视频发布于 9 月 9 日,也不在最近 30 天内。

柱状图,YouTube 按相关性搜索 e-bike battery fire 的前 10 条视频按发布年份计数:2022 年 2 条,2023 年 4 条,2024 年 2 条,2025 年 1 条,2026 年 1 条(青绿)。标题:YouTube 按相关性搜出的前 10 条,只有 1 条是 2026 年的。

这不是数据错了,而是 YouTube 的相关性排序本来就偏向播放量高、存在时间长的视频,前 10 条里播放最多的一条有 51 万次播放,发布于 2022 年。但对研究报告来说,如果 agent 把这 10 条视频的评论当成「当下公众的看法」,结论就会混进三四年前的讨论。解决办法很简单:要近期讨论就用 sort=newest,或者在整理表时按 posted_at 过滤;要长期讨论就在报告里明确写出时间范围。社媒样本的这类偏差,我们在 社媒研究的样本完整性 一文里有更系统的讨论。

上下文占用:131 行约 2 万 token,是一次典型任务输入的 8%

第二条路要把数据放进输入,所以要算它占多少上下文。7 次返回的原始 JSON 合计 79,787 字节,按 4 字节约 1 个 token 估算是 19,947 token。Deep Research 的模型页写的输入窗口是 1,048,576 token、输出上限 65,536 token;文档估算普通版一次任务输入约 25 万 token、Max 版约 90 万 token。我们这份数据是一次典型任务输入的 8%,放进去不会挤占 agent 自己搜索和阅读的空间。

横向条形图,单位 token:本文 7 次返回约 19,947(青绿);Deep Research 典型输入 250,000;Deep Research Max 输入上限估算 900,000;输入上下文窗口 1,048,576。标题:131 行社媒数据约 19,947 token,是一次典型任务输入的 8%。

整理成表以后会更小,因为原始返回里有大量研究用不到的字段,比如缩略图链接、作者的频道统计、计费明细。按我们建议的六列加 500 字以内的正文,131 行大约能压到原始体积的一半以下。但要注意一个方向相反的建议:官方最佳实践提醒,多模态输入会增加费用、也有上下文溢出的风险。真正要防的不是 131 行,而是把几十个帖子的上千条评论全塞进去;评论多的时候,应该先按话题和时间筛一遍,或者交给 File Search 做检索,而不是全部放进 input。

结构化社媒数据怎样让报告的引用可核对

把上面四组实测合起来,可以归纳出一套做法。它的目标很朴素:报告里每一句关于社交平台的话,读者都能找到它来自哪一行、那一行在原平台的哪个位置、那个时间点有多准。

第一,每行必须有一个能直接打开的链接。Reddit 帖子和评论、YouTube 视频、新闻都满足;YouTube 评论不满足,只能用视频地址加评论 id 拼接,并在表里标明「拼接」。第二,每行都要有时间精度。我们这次看到的四种情况是:精确到毫秒(Reddit 评论)、精确到秒(Reddit 帖子、YouTube 视频)、只有日期且可能晚 1–4 天(英文和中文新闻)、只有相对时间或完全没有(YouTube 评论、西语新闻)。第三,记下取数时刻 fetched_at,因为相对时间和「今年第 N 起」这类数字都要配合取数时刻才能解读。第四,数字类论断要写「谁在什么时候说的」,死亡人数那个例子说明,链接对得上不代表数字没过时。第五,把行号带进引用:走 File Search 时写进 custom_metadata,走 MCP 或 input 时在提示里要求 agent 在句子后写出 row_id。

实测发现对报告的风险整理表时怎么做
新闻 published_at 时分秒等于请求时刻,日期晚 0–4 天时间线错位date_precision=day,有网址日期优先用网址日期
西语新闻 10 条发布时间为空无法写时间线date_precision=unknown,打开原文补日期
中文第 1 条标题是媒体名agent 当成空结果丢弃标题为空或等于来源名时,用正文前 200 字代替
YouTube 评论 0/50 带链接、时间是相对值引用无法回到原文拼接链接并标注;按 since 或 sort 限定时间
YouTube 相关性搜索 10 条里 9 条早于 2026 年把旧讨论当成当下按 posted_at 过滤,或改用 sort=newest
死亡人数 5、6、9 分别出自不同日期引用有效但事实过时数字类论断加「说出时间」一列

这些做法里没有一条需要 Gemini 支持什么新功能。Deep Research 现在的引用机制(网页给 url_citation、File Search 给带 metadata 的 file_citation)足够用,缺的是输入数据本身的可核对性。这也是我们建议在有条件时优先走第二条路的理由:第一条路里,agent 拿到的是原始返回,它会不会注意到 YouTube 评论的时间是相对值,取决于它当时的判断;第二条路里,这些判断在你的程序里一次性做完,写成每行都一样的列,agent 只需要照着引用。

查目录:38 项评论能力里只有 10 项返回链接

实测三只测了 Reddit 和 YouTube 两个平台。要知道其他平台的评论能不能回到原文,不用每个都真调一次,免费目录里每项能力都列了 response_fields。我们在 2026 年 11 月 2 日 00:28(新加坡时间)读了一次 GET /api/v1/social/catalog,共 573 项能力,其中 569 项可用;可用能力里,名字带 comment 或 replies 的评论类能力有 38 项。这 38 项都列了时间字段(posted_at 或 created_at),但只有 10 项返回每条评论的 url;其余 28 项不带链接,其中 27 项至少带评论 id,可以像 YouTube 那样用帖子地址加 id 拼接,只有 1 项连评论 id 都没有。

评论能力每条带 `url`能力(目录名)
带链接10 项reddit/comments、reddit/user_comments、twitter/comments、threads/comments、instagram/comments、linkedin/comments、github/issue_comments、netease_music/comments、gab/replies、truth_social/replies
不带链接,有评论 id27 项包括 youtube/comments、tiktok/comments、facebook/comments,以及国内平台的 weibo/comments、douyin/comments、xiaohongshu/comments、bilibili/comments、zhihu/content_comments、kuaishou/comments、toutiao/comments、douban/comments、wechat_channels/comments 等
链接和评论 id 都没有1 项naver/comments

对中文读者,这张表比任何一条新闻都重要:国内平台的 18 项评论能力里,只有网易云音乐的评论带链接,微博、抖音、小红书、B 站、知乎、快手、今日头条、豆瓣、视频号、公众号的评论都要靠拼接或者只引用到帖子一级。所以做中文话题的研究报告时,整理表的「链接」一列要分两种值:「原文链接」和「帖子链接 + 评论 id」,提示里要求 agent 在后一种情况下写「见某帖下的评论」,不要写成好像读者点开就能看到那一条。

还有一点要注意:目录里列了 posted_at,不等于时间是精确的。YouTube 评论的目录同样列着 posted_at,实测返回的却是「1 year ago」这样的相对时间。字段名能告诉你有没有,精度还要真调一次看值。目录本身不收费,在 MCP 里就是 everyinfra_list_capabilities,所以这一步可以写进提示,让 agent 在拉评论前先查。拿刚生效的中文话题举例:国家认监委 2026 年第 8 号公告规定 11 月 1 日起电动自行车强制性产品认证按新版规则执行(湖南省人民政府转载的公告原文),想做「新规前后公众怎么说」,可以用小红书、抖音、微博的评论能力取数,但要按上表把链接列标成「帖子链接 + 评论 id」。这次我们没有调国内社交平台,这部分只是做法示例;国内平台的字段和计费可以从 小红书数据接口 这类平台页查。

做不了或要注意的地方

第一,不能要求结构化输出。官方限制写得很清楚,Deep Research 不支持结构化输出,所以「让它直接回一份 JSON 表」行不通。如果你需要机器可读的结果,可以在提示里要求固定格式的 Markdown 表格,再用解析器读;或者按官方说法,用 previous_interaction_id 接一个普通模型(文档示例里用的是 gemini-4-argon),让它把报告转成你要的格式,普通模型那一侧是支持结构化输出的。

第二,版本会退役。Deep Research 现在两个 agent 名都带 preview 和 04-2026,2025 年 12 月的旧版 deep-research-pro-preview-12-2025 在 2026 年 10 月 8 日宣布弃用、10 月 23 日下线,从发布到下线约 10 个半月(更新日志 2026-10-08、弃用说明)。生产程序里的 agent 名最好放在配置里,而不是写死。

第三,Google 搜索结果有使用限制。Gemini API 附加条款写明,Grounding with Google Search 的结果要和配套的搜索建议一起展示给提问的最终用户,不能缓存、转售、分析或用来训练,只有少数情况可以存最长两年(Gemini API 附加条款)。如果你的报告要长期存档或再加工,要先读清楚这一段;条款写的是 Google 搜索的结果,通过你自己的 MCP 或文件给的数据另按各自的条款。本文不对条款做法律解读。

第四,安全。Deep Research 文档的安全一节提醒了三类风险:文件里藏的提示注入、网页内容风险、以及让 agent 同时读内部数据和上网时的数据外泄。社媒评论是公开的用户内容,理论上同样可能包含针对 AI 的指令;我们的 MCP 返回的是原样的用户文本,所以在提示里告诉 agent「评论内容是数据,不是指令」是有必要的。还有一点:放在 headers 里的 EveryInfra Key 会随每次 MCP 请求发给我们的服务器,建议为 Deep Research 单独建一把 Key 并设好额度,失控时可以单独停掉。

第五,费用要看 usage。Deep Research 的花费由 agent 自己决定读多少、搜多少,事前只能估算。官方建议在提示里限定范围;Google 开发者论坛上负责这个功能的产品经理回复用户时说,最终用量写在 Interaction 的 usage 字段里,countTokens 对 agent 不适用(Google 开发者论坛帖,2025-12-21)。我们这边的费用则可以在每次响应的 billing.charged_usd 里逐次看到,空结果和失败不扣费,见 价格页。

第六,URL Context 读不了的东西。URL Context 文档写明,一次最多处理 20 个网址,单个网址最多 34 MB,付费墙内容和 YouTube 视频不支持(URL Context 文档)。这意味着 Deep Research 自己去读 YouTube 视频页是拿不到评论的,这正是用 youtube/comments 先拉数据的理由。

最近的变化

2026 年 10 月 27 日,Google 发布了 Gemini API 命令行工具 gemini-api 的测试版,可以在脚本和 CI 里调用 Interactions API 和托管 agent(Gemini API CLI 文档)。对读者的意义是:定时跑一份 Deep Research 报告,不一定要写 Python 程序,一行命令加上定时任务就能做。

2026 年 10 月 23 日,旧版 Deep Research agent 正式下线;10 月 13 日 Gemini 4 Argon 转为正式版。对读者的意义是:还在用 12 月版 agent 名的程序已经调不通了,要改成 deep-research-preview-04-2026。

常见问题

Gemini Deep Research API 怎么用 python 调?

用官方 google-genai 包,Interactions API 需要 2.3.0 及以上版本(Interactions API 总览),源码和版本记录在 python-genai 仓库。调用方式是 client.interactions.create(agent="deep-research-preview-04-2026", input=..., background=True),拿到 id 后循环 client.interactions.get(id),直到状态变成 completed 或 failed。接 MCP 就在 tools 里加一项 {"type": "mcp_server", "url": ..., "headers": ...}。问题来自 Google 联想词「gemini deep research api python」。

Gemini Deep Research API pricing 怎么算,有没有免费额度?

没有单独的价格,按背后的模型推理加工具使用计费,官方估算普通版一次 $1–3、Max 版一次 $3–7。Google 博客写明 Deep Research 通过 Gemini API 的付费层提供公开预览,所以要先开通计费;Google 搜索每月有 5,000 次免费额度,用完后每 1,000 次 $14。问题来自联想词「gemini deep research api pricing」和「deep research api free」。

Gemini Deep Research API 能在 vertex 上用吗?

能。Google Cloud 有一份单独的 Deep Research 文档,用 aiplatform.googleapis.com 的 v1beta1 全局端点,鉴权用 Google Cloud 的访问令牌,并多了一个 service_tier="deferred" 的五折档位。Google 价格页还提到,Vertex 上 Google 搜索的默认额度是每天 100 万次,比 Gemini Developer API 的 1,500 次高得多。问题来自联想词「gemini deep research api vertex」。

Deep Research 一直卡在 in_progress 怎么办?

论坛上 2026 年 3 月有用户遇到过(当时是旧版 agent),表现是交互创建成功、状态一直 in_progress、没有用量。官方文档给的办法是开流式并记下 last_event_id,断线后续接;我们建议再加一个自己的超时,超过 60 分钟(官方上限)就取消并记录。问题来自论坛原帖和联想词「gemini deep research stuck on starting research」。

Deep Research 能直接读 Reddit 或 YouTube 评论吗?

它可以用 Google 搜索和 URL Context 读公开网页,但 URL Context 文档写明不支持 YouTube 视频,网页里动态加载的评论也不一定读得到。要稳定拿到评论,就通过 MCP 或预先拉取的方式给它结构化数据,例如 reddit/comments 和 youtube/comments。问题来自 Reddit 上询问「有没有真正能做深度研究的 MCP 工具」的讨论帖(r/LocalLLM 讨论帖)。

Gemini Deep Research API key 和 EveryInfra Key 分别放在哪?

Gemini 的 Key 放在请求头 x-goog-api-key,或者让 SDK 从环境变量 GEMINI_API_KEY 读;EveryInfra 的 Key 放在 mcp_server 工具的 headers 里,格式 Authorization: Bearer <Key>。两把 Key 都不要写进提示文本。问题来自联想词「gemini deep research api key」。

上手步骤

第一步,在 EveryInfra 注册并拿到 API Key,新账户可以先在 数据市场试用台 免费看目录、试调一次;快速上手见 文档。第二步,先不接 Gemini,用 curl 调一次 reddit/search 或 google_news/search,确认返回的 url、posted_at、billing 和本文一样;平台页见 Reddit 数据接口、YouTube 数据接口、Google 新闻接口。第三步,按本文「接法一」的配置示例,把 https://api.everyinfra.com/mcp 写进 Deep Research 的 tools,allowed_tools 只放 3 个,先跑一个小题目,看交互步骤里的 mcp_server_tool_call 是否符合预期。第四步,需要可核对的报告时,改用「接法二」:先拉数据、整理六列、再交给 Deep Research。用子代理并行拉数据的做法可以参考 Claude Code 子代理并行拉 TikTok 品牌号,MCP 新规范对生产环境的影响见 MCP 2026 规范解读。

参考资料

  1. Gemini Deep Research agent,Google AI for Developers,2026-10-13 更新,https://ai.google.dev/gemini-api/docs/deep-research
  2. Deep Research preview 模型页,Google AI for Developers,2026-10-29 更新,https://ai.google.dev/gemini-api/docs/models/deep-research-preview-04-2026
  3. Interactions API 总览,Google AI for Developers,2026-10-15 更新,https://ai.google.dev/gemini-api/docs/interactions-overview
  4. Interactions API 参考,Google AI for Developers,2026-10-28 更新,https://ai.google.dev/api/interactions-api
  5. Background execution,Google AI for Developers,https://ai.google.dev/gemini-api/docs/background-execution
  6. Gemini Developer API pricing,Google AI for Developers,2026-10-30 更新,https://ai.google.dev/gemini-api/docs/pricing
  7. Rate limits,Google AI for Developers,2026-10-28 更新,https://ai.google.dev/gemini-api/docs/rate-limits
  8. File Search,Google AI for Developers,2026-10-13 更新,https://ai.google.dev/gemini-api/docs/file-search
  9. Grounding with Google Search,Google AI for Developers,2026-10-28 更新,https://ai.google.dev/gemini-api/docs/google-search
  10. URL context,Google AI for Developers,2026-10-13 更新,https://ai.google.dev/gemini-api/docs/url-context
  11. Gemini API 更新日志,Google AI for Developers,2026-10-30 条目,https://ai.google.dev/gemini-api/docs/changelog
  12. Gemini deprecations,Google AI for Developers,2026-10-22 更新,https://ai.google.dev/gemini-api/docs/deprecations
  13. Gemini API CLI,Google AI for Developers,2026-10-28 更新,https://ai.google.dev/gemini-api/docs/cli
  14. Gemini API Additional Terms of Service,Google,https://ai.google.dev/gemini-api/terms
  15. Gemini Deep Research agent(AI Studio 文档),Google,https://aistudio.google.com/docs/deep-research
  16. Use the Gemini Deep Research Agent,Google Cloud,https://docs.cloud.google.com/gemini-enterprise-agent-platform/agents/use-deep-research
  17. Grounding with Google Search(Google Cloud),https://docs.cloud.google.com/vertex-ai/generative-ai/docs/grounding/grounding-with-google-search
  18. Get started with Deep Research(Cookbook 笔记本),Google,https://github.com/google-gemini/cookbook/blob/main/quickstarts/Get_started_Deep_Research.ipynb
  19. Introducing Deep Research and Deep Research Max,Google 博客,2026-04-21,https://blog.google/innovation-and-ai/models-and-research/gemini-models/next-generation-gemini-deep-research/
  20. Build with Gemini Deep Research,Google 博客,2025-12-11,https://blog.google/innovation-and-ai/technology/developers-tools/deep-research-agent-gemini-api/
  21. How to use Deep Research with the Gemini API,Philipp Schmid,2026-04-29,https://www.philschmid.de/deep-research-update
  22. Deep Research API - Interaction stuck "in_progress",Google 开发者论坛,2026-03-05,https://discuss.ai.google.dev/t/deep-research-api-interaction-stuck-in-progress-for-some-domains/129020
  23. Google Gemini Deep Research Costs,Google 开发者论坛,2025-12-21,https://discuss.ai.google.dev/t/google-gemini-deep-research-costs/112804
  24. Deep Research Agent API Questions for Rate Limits and Costs,Google 开发者论坛,2025-12-12,https://discuss.ai.google.dev/t/deep-research-agent-api-questions-for-rate-limitsand-costs/111904
  25. MCP 规范 2026-07-28 更新说明,Model Context Protocol,https://modelcontextprotocol.io/specification/2026-07-28/changelog
  26. MCP 传输层,Model Context Protocol,https://modelcontextprotocol.io/specification/2026-07-28/basic/transports
  27. MCP 鉴权,Model Context Protocol,https://modelcontextprotocol.io/specification/2026-07-28/basic/authorization
  28. Cited but Not Verified: Parsing and Evaluating Source Attribution in LLM Deep Research Agents,arXiv,2026-05-07,https://arxiv.org/html/2605.06635v1
  29. Benchmarking and Error Analysis of Deep Search and Deep Research LLM Agents,arXiv,2026-10-21,https://arxiv.org/html/2610.29346v1
  30. DeepResearch Bench: A Comprehensive Benchmark for Deep Research Agents,arXiv,https://arxiv.org/abs/2506.11763
  31. EveryInfra 数据能力目录,EveryInfra,2026-11-02 读取,https://api.everyinfra.com/api/v1/social/catalog
  32. Boy, 11, Killed in E-Bike Battery Fire in Bronx Apartment,纽约时报,2026-10-28,https://www.nytimes.com/2026/10/28/nyregion/fire-e-bike-battery-bronx.html (付费墙,可读预览)
  33. As Bronx family reels from tragic blaze that killed 4, e-bike fires have skyrocketed across NYC,纽约每日新闻,2026-10-31,https://www.nydailynews.com/2026/10/31/as-bronx-family-reels-from-devastating-blaze-that-killed-4-e-bike-fires-have-skyrocketed-across-nyc/
  34. E-Bike Battery Fires on the Rise at NYCHA,The City Reporter,2026-10-30,https://www.thecityreporter.nyc/2026/10/30/e-bike-battery-fires-on-the-rise-at-nycha-leaving-death-in-their-wake/
  35. Lithium-Ion Battery Fires Are Up 41% As Public Fix Stalls,Streetsblog NYC,2026-10-14,https://nyc.streetsblog.org/2026/10/14/everyone-should-be-furious-lithium-ion-battery-fires-are-up-41-as-public-fix-stalls
  36. Lithium-ion battery caused Bronx fire that killed boy, FDNY says,Gothamist,2026-10-28,https://gothamist.com/news/lithium-ion-battery-caused-bronx-fire-that-killed-11-year-old-fdny-says
  37. Muere niño de 11 años en incendio provocado por batería de bicicleta eléctrica en El Bronx,Univision,2026-10-29,https://www.univision.com/local/nueva-york-wxtv/muere-nino-de-11-anos-en-incendio-provocado-por-bateria-de-bicicleta-electrica-en-el-bronx
  38. Cuatro muertos tras incendio en batería bicicleta eléctrica,Spectrum Noticias,2026-10-31,https://spectrumnoticias.com/ny/nyc/noticias/2026/10/31/cuatro-muertos-tras-un-incendio-en-la-bateria-de-una-bicicleta-electrica-en-el-bronx--nypd
  39. Mayor Adams Takes New Actions To Prevent Deadly Lithium-Ion Battery Fires,纽约市长办公室,2024-07,https://www.nyc.gov/mayors-office/news/2024/07/mayor-adams-takes-new-actions-prevent-deadly-lithium-ion-battery-fires-promote-safe-e-bike
  40. What firefighters want you to know about lithium battery fires,CBC,2026-10,https://www.cbc.ca/news/science/lithium-battery-fire-faq-9.7371004
  41. How to prevent lithium-ion battery fires in Philadelphia,Billy Penn at WHYY,2026-10-17,https://billypenn.com/2026/10/17/lithium-ion-battery-fire-safety-philadelphia/
  42. 国家认监委关于发布电动自行车、童车类产品、玩具强制性产品认证实施规则的公告(2026 年第 8 号),湖南省人民政府门户网站转载,2026-06-01,https://www.hunan.gov.cn/zqt/zcsd/202606/t20260601_33990673.html
  43. 湖南省 9 月电动自行车、电动摩托车火灾情况和涉及品牌曝光,湖南在线,2026-10-14,https://hunan.voc.com.cn/news/202610/33981218.html
  44. 广州天河三起电动自行车电池入户充电火情,南方财经,2026-10-30,https://m.sfccn.com/2026/10-30/xNMDE0NzNfMjI4ODcxNw.html
  45. 一步就呛到窒息!记者亲历电动车起火实验,杭州网,2026-10-22,https://ori.hangzhou.com.cn/ornews/content/2026-10/22/content_9349308.htm
  46. E-Bike Battery Fires On The Rise at NYCHA(r/nyc 讨论帖),Reddit,2026-10-30,https://www.reddit.com/r/nyc/comments/1xjb3ss/ebike_battery_fires_on_the_rise_at_nycha_leaving/
  47. Is there a True Deep Research / MCP,Reddit r/LocalLLM,https://www.reddit.com/r/LocalLLM/comments/1pw1ukl/is_there_a_true_deep_research_mcp_deep_research/
  48. Billing,Google AI for Developers,https://ai.google.dev/gemini-api/docs/billing
  49. MCP 工具规范(Tools),Model Context Protocol,https://modelcontextprotocol.io/specification/2026-07-28/server/tools
  50. MCP 规范 2026-07-28 总入口,Model Context Protocol,https://modelcontextprotocol.io/specification/2026-07-28
  51. python-genai,Google,https://github.com/googleapis/python-genai
  52. EveryInfra 数据能力目录(Reddit),2026-11-02 读取,https://api.everyinfra.com/api/v1/social/catalog?platform=reddit
  53. EveryInfra 数据能力目录(YouTube),2026-11-02 读取,https://api.everyinfra.com/api/v1/social/catalog?platform=youtube
  54. EveryInfra 数据能力目录(Google 新闻),2026-11-02 读取,https://api.everyinfra.com/api/v1/social/catalog?platform=google_news

引用编号 BL-66