Deep Deep Deep Research

Deep Deep Deep Research

暨 MolaGPT 开发日记 - 其(三)

在今年 2 月,OpenAI 在 ChatGPT 中引入了 Deep Research 功能,随后各家大模型厂商纷纷在其官方 Chat 页面中引入了该功能。这一系列“风潮”说明 Deep Research 在提升工作效率封面确实产生了很大的作用。

在 MolaGPT,Deep Research 被定义为一种由互联网数据 + 专家迭代分析所驱动的智能代理,其专为完成多步骤、跨领域的知识密集型深入研究任务而设计。它的核心能力在于:从互联网上海量、分散的信息中提取关键信息,并通过专家模型的具有迭代特征的批判性思考和内容整合,从而逐步构建出结构清晰、可靠性高且富有洞察力的输出。

用户在使用 MolaGPT 时,只需发出诸如“深度研究”或“深入分析”等请求,系统就会自动触发 Deep Research 功能。模型会根据问题内容,智能构建一套完整的研究计划,并在启动前向用户进行确认。一旦用户确认启动,MolaGPT 将进入多轮次、全自动的深入研究流程。整个过程可能持续十分钟甚至更久,期间模型会持续搜索资料、分析内容、调整研究方向,并最终生成一份结构严谨、内容翔实的研究报告。

目前,Deep Research 功能仅在默认对话模式下开启支持,其他模式暂不具备该能力。

Deep Research 的实现

由于目前网络上对于 PHP 暂无 Deep Research 相关开源项目,我基于目前现有的基于其他语言构建的开源 Deep Research 项目,结合我自己对 Deep Research 的一些思考,并在我有限的技术能力基础上开发了一个较为简单但是有效的 Deep Research 实现方法。

请注意本文所述 Deep Research 逻辑均为 MolaGPT 实际上线版本,与我在 GitHub 开源框架可能有所区别。

以用户提供的初始查询为起点(例如:“量子计算的最新进展”),系统将此作为第一轮搜索的关键字。每一轮研究包括两个阶段:

  • 搜索阶段:调用搜索 API 获取相关搜索结果。
  • 分析阶段:通过专家模型对搜索结果进行深度分析,对搜索到的信息进行批判性思考,提取关键信息并形成洞察。分析结果会成为下一轮的上下文,同时生成进一步的搜索关键词。

所有迭代轮次的分析结果最终整合成一份结构清晰、洞察丰富的研究报告,包括关键信息的汇总、多来源的对比分析,以及对研究主题的整体见解。

基于 PHP 的实现

遵循 Tool Calling 标准的函数

通过定义一个核心的函数 deep_search_and_analyze,模型通过 Tool Calling 的方式调用,指定研究方向和深度,其作为执行多轮搜索与分析迭代。

$available_functions = [
    [
        "type" => "function",
        "function" => [
            "name" => "deep_search_and_analyze",
            "description" => "对复杂问题或用户的深入解答请求进行多轮迭代式深入搜索和专家级分析。",
            "parameters" => [
                "type" => "object",
                "properties" => [
                    "query" => ["type" => "string", "description" => "初始搜索查询内容,几个关键词或小句。"],
                    "search_depth" => ["type" => "integer", "description" => "研究深度,范围 2-10。", "default" => 2]
                ],
                "required" => ["query"]
            ]
        ]
    ]
];

搜索结果分析

核心函数 analyze_search_results 接收搜索结果,结合历史分析和当前上下文,交由专家模型进行深度分析。分析结果将明确提出当前信息的整合情况,还会自动生成下一轮搜索的关键词,以确保研究的逐步深入。

// 代码经过删减
function analyze_search_results($search_results, $question, $current_round, $total_rounds) {
    // 构建分析上下文,包括原始问题、轮次、搜索历史、以及当前搜索结果内容
    $context = build_context($question, $current_round, $total_rounds, $search_results);

    // 调用分析模型,发送 context 内容(流式输出)
    stream_to_model([
        role: 'system',
        content: '你是一个经验丰富的专家分析师,...(角色设定)',
        ...
        role: 'user',
        content: $context
    ]);

    // 解析模型输出,将分析结果逐段推送到前端
    foreach (streamed_chunks as $chunk) {
        emit_to_frontend($chunk);
    }

    // 返回完整的分析内容 + 时间戳
    return [
        'analysis' => $full_analysis,
        'timestamp' => now()
    ];
}

迭代式研究执行

perform_deep_research 函数执行整个多轮搜索 - 分析流程,每一轮的搜索与分析环环相扣。每轮分析都被记录,并在最后阶段交由底模整合为一份完整的深度研究报告。

// 代码经过删减
function perform_deep_research($query, $depth, $question) {
    $last_analysis = null;
    $current_query = $query;
    $search_history = [ ['round' => 1, 'query' => $query] ];
    $analyses = [];

    for ($i = 1; $i <= $depth; $i++) {
        // 基于当前关键词执行搜索
        $results = search_web($current_query);
        if (!$results) return ['error' => "搜索失败"];

        // 调用分析模型进行专家分析
        $analysis = analyze_search_results($results, $question, $last_analysis, round: $i, total: $depth, history: $search_history);
        if (!$analysis) return ['error' => "分析失败"];

        $analyses[] = "第 {$i} 轮分析:\n" . $analysis;
        $last_analysis = $analysis;

        // 如果不是最后一轮,尝试从分析中提取下一轮搜索关键词
        if ($i < $depth) {
            $next_query = extract_next_query_from($analysis) ?? $query;
            $current_query = $next_query;
            $search_history[] = ['round' => $i + 1, 'query' => $next_query];
        }
    }

    // 整合所有轮次分析
    return ['analysis' => implode("\n\n", $analyses)];
}

具体处理流程

用户提问

-> 前端模型理解意图,调用对应 Deep Research 工具

-> (轮次 1) 初始关键词生成 -> Search API 调用 -> 获取结果

-> 专家模型反思

-> 生成洞察 & 提炼下一轮关键词

-> (轮次 2) 新关键词 -> Search API 调用 -> 获取结果

-> 专家模型反思 (结合上一轮分析)

-> 生成洞察 & 提炼下一轮关键词

-> ... (重复 N 轮)

-> 最终整合所有轮次分析

-> 生成综合报告

通过这种机制,较为合理地调用搜索引擎和专家模型,与对应的迭代流程,能够有效完成跨领域、多步骤的深入研究任务,MolaGPT Deep Research 能够模拟一个高强度研究者的思维过程,在面对复杂、跨领域、信息零散的问题时,进行系统性的信息整合与深度洞察。

MolaGPT 上 Deep Research 的局限性

Deep Research 的能力虽令人兴奋,但它目前仍处于发展早期阶段,存在一些值得注意的局限性。

  • 它偶尔仍会产生幻觉或推断错误,尤其在面对模棱两可或信息来源不一致的问题时。
  • 辨别权威信息与谣言之间的边界方面尚不够敏锐,对置信度的表达也缺乏足够的校准,有时会过于自信地陈述并不确定的内容。
  • 当某些问题缺乏下一步研究方向时,虽然专家模型会尝试探究新的方向,但有时依然会出现方向尚不明确,反复搜索相似内容来粗暴达到深度设定值。
  • 当前所使用 Search API 在自然语言处理上尚存在欠缺,有时存在语义理解错误导致搜索结果可信度下降。

开放源代码

从 MolaGPT 中解耦的对应 Deep Research 框架已开源至 GitHub,项目主页:https://github.com/MOLAaaaaaaa/MolaGPT-DeepResearch/

也可以使用 composer require molagpt/deep-research-core 直接引入 MolaGPT Deep Research Core!

附 MolaGPT (Deep Research) 与 ChatGPT (由于模型代际差距,故仅使用搜索模式) 效果对比图:

问题:“深入研究深圳市各区 GDP 的近年数据,增速变化,排位变化,并分析造成这些变化的原因。并尝试为我绘制分析图。”

MolaGPT Deep Research
ChatGPT + Search

发表回复

必填项已用 * 标注。