DeepSearcher深度研究框架本地部署剖析
探索AI领域最新动向,DeepSearcher这个创新工具确实值得仔细看看。它的架构、原理和实际应用,到底能为开发者带来什么?下面一步步拆解。 核心要点: 1 DeepSearcher与同类工具的横向对比 2 架构细节与研究流程解析 3 在智能检索生成技术中的独特优势 近期OpenAI的深度研
探索AI领域最新动向,DeepSearcher这个创新工具确实值得仔细看看。它的架构、原理和实际应用,到底能为开发者带来什么?下面一步步拆解。
核心要点:
1. DeepSearcher与同类工具的横向对比
2. 架构细节与研究流程解析
3. 在智能检索生成技术中的独特优势
近期OpenAI的深度研究成果在AI圈引发了不小的震动,随之而来的是Perplexity Deep Research、Hugging Face的Open DeepResearch等一批类似工具。这些工具虽然架构和方法各有侧重,但目标一致:通过反复研究网页或内部文档,输出一份完整且条理清晰的报告。它们的底层智能体都能够自动判断中间步骤该如何执行,这已经是行业共识。
今天聚焦的是Zilliz推出的开源项目——DeepSearcher。它整合了查询路由、条件执行流等前沿理念,支持网页爬取,以Python库和命令行工具的形式呈现,功能覆盖多源文档处理,还能灵活配置嵌入模型和向量数据库。虽然从复杂程度上看它还不是顶级,但在智能体增强检索生成(RAG)技术上的表现已经相当亮眼,实实在在地推动了AI应用的边界。
推理模型依赖“推理扩展”来提升输出质量,但频繁调用大语言模型也让推理带宽成为瓶颈。以SambaNova定制硬件上的DeepSeek-R1推理模型为例,它的输出速度比对手快出一倍(见下图所示)。
SambaNova Cloud为Llama 3.x、Qwen2.5和QwQ等开源模型提供推理服务,基于专为高效推理生成式AI模型设计的RDU定制芯片运行,能显著降本增效。更多详情可以前往官网了解。
# DeepSearcher架构
DeepSearcher的架构把整个研究拆成了四个关键步骤:定义/细化问题、研究、分析、综合。这几个步骤不是孤立的,而是相互重叠、协同增效。下面逐一展开,重点说明DeepSearcher在这几个环节中的改进之处。
## 定义和细化问题:深度挖掘查询核心
以“《辛普森一家》随时间发生了哪些变化?”为例,DeepSearcher会将其拆解为多个子查询:
* 从首播到现在,其文化影响和社会意义是如何演变的?
* 不同季之间,角色发展、幽默风格和叙事方式发生了哪些变化?
* 动画风格和制作技术是如何随时间变化的?
* 播出期间,受众群体、观众反响和收视率发生了哪些变化?
关键在于,DeepSearcher对于问题和细化策略的边界是动态的。初始分解之后,研究过程会按需对问题进行再细化,灵活调整方向,精准挖掘信息。这为后续工作打下了扎实的基础。
## 研究和分析
将查询分解为子查询后,智能体的研究部分才算真正开始。大致包含四个环节:路由、搜索、反思和条件重复。
### 路由
数据库通常包含来自不同来源的多个表或集合。如果能把语义搜索限制在与当前查询相关的来源上,效率会高很多。查询路由器的作用就是促使大语言模型决定从哪些集合中检索信息。
构建查询路由的提示代码如下:
```python
def get_vector_db_search_prompt(
question: str,
collection_names: List[str],
collection_descriptions: List[str],
context: List[str] = None,
):
sections = []
# 通用提示
common_prompt = f"""你是一位高级人工智能问题分析师。运用你的推理能力和历史对话信息,基于所有现有数据集,准确回答以下问题,并根据可能与该问题相关的数据集描述,为每个数据集生成一个合适的问题。
问题:{question}
"""
sections.append(common_prompt)
# 数据集提示
data_set = []
for i, collection_name in enumerate(collection_names):
data_set.append(f"{collection_name}: {collection_descriptions[i]}")
data_set_prompt = f"""以下是所有数据集信息。数据集信息的格式为数据集名称:数据集描述。
数据集及描述:
"""
sections.append(data_set_prompt + "n".join(data_set))
# 上下文提示
if context:
context_prompt = f"""以下是历史对话的精简版本。在本次分析中,需要结合这些信息生成更接近答案的问题。你不能为同一个数据集生成相同或相似的问题,也不能为已确定无关的数据集重新生成问题。
历史对话:
"""
sections.append(context_prompt + "n".join(context))
# 响应提示
response_prompt = f"""基于以上内容,你只能从以下数据集列表中选择几个数据集,并为所选数据集生成合适的相关问题,以解决上述问题。输出格式为JSON,其中键是数据集名称,值是相应生成的问题。
数据集:
"""
sections.append(response_prompt + "n".join(collection_names))
footer = """仅以符合精确JSON模式的有效JSON格式进行响应。
关键要求:
- 仅包含一种操作类型
- 切勿添加不支持的键
- 排除所有非JSON文本、Markdown格式内容或解释说明
- 严格遵守JSON语法"""
sections.append(footer)
return "nn".join(sections)
```
让大语言模型以JSON格式返回结构化输出,可以轻松将其输出转化为下一步行动的决策依据。
### 搜索
通过上一步选择了各种数据库集合后,搜索步骤会使用Milvus进行相似性搜索。源数据已预先指定、分块、嵌入并存储在向量数据库中。对于DeepSearcher,本地和在线的数据源都必须手动指定。在线搜索则留作未来的工作。
### 反思
DeepSearcher展示了一种真正的智能体反思形式——它将之前的输出作为上下文输入到一个提示中,这个提示会“反思”到目前为止提出的问题以及检索到的相关文本块是否存在信息缺口。这可以看作是一个分析步骤。
创建该提示的代码如下:
```python
def get_reflect_prompt(
question: str,
mini_questions: List[str],
mini_chuncks: List[str],
):
mini_chunk_str = ""
for i, chunk in enumerate(mini_chuncks):
mini_chunk_str += f"""n{chunk}n n"""
reflect_prompt = f"""根据原始查询、之前的子查询以及所有检索到的文档块,判断是否需要额外的搜索查询。如果需要进一步研究,请提供一个最多包含3个搜索查询的Python列表。如果不需要进一步研究,则返回一个空列表。
如果原始查询是要撰写一份报告,那么你最好生成一些进一步的查询,而不是返回空列表。
原始查询:{question}
之前的子查询:{mini_questions}
相关文本块:
{mini_chunk_str}
"""
footer = """仅以有效的字符串列表格式进行响应,不要包含任何其他文本。"""
return reflect_prompt + footer
```
再次让大语言模型返回结构化输出,这次是可由Python解释的数据。
以下是通过反思“发现”的新子查询示例:
* 不同季中,《辛普森一家》配音演员和制作团队的变动对该剧的发展产生了怎样的影响?
* 在过去几十年里,《辛普森一家》的讽刺和社会评论在适应当代问题的过程中发挥了什么作用?
* 《辛普森一家》是如何应对并将媒体消费的变化(如流媒体服务)融入其发行和内容策略的?
### 条件重复
DeepSearcher展示了条件执行流。在反思到目前为止的问题和答案是否完整后,如果还有其他问题需要询问,智能体会重复上述步骤。关键在于,执行流(一个while循环)取决于大语言模型的输出,而不是硬编码。在这种情况下,只有两种选择:重复研究或生成报告。在更复杂的智能体中,可能会有更多选择,比如跟随超链接、检索文本块、存储在内存中、反思等。通过这种方式,智能体会根据需要不断细化问题,直到决定退出循环并生成报告。在关于《辛普森一家》的示例中,DeepSearcher又进行了两轮通过额外子查询填补信息缺口的操作。
## 综合
最后,经过充分分解的问题和检索到的文本块会通过提示合成为一份报告。以下是创建提示的代码:
```python
def get_final_answer_prompt(
question: str,
mini_questions: List[str],
mini_chuncks: List[str],
):
mini_chunk_str = ""
for i, chunk in enumerate(mini_chuncks):
mini_chunk_str += f"""n{chunk}n n"""
summary_prompt = f"""你是一位人工智能内容分析专家,擅长总结内容。请根据之前的查询和检索到的文档块,总结出一份具体且详细的答案或报告。
原始查询:{question}
之前的子查询:{mini_questions}
相关文本块:
{mini_chunk_str}
"""
return summary_prompt
```
## 结果
以下是使用DeepSeek-R1,以《辛普森一家》的维基百科页面作为源材料,对“《辛普森一家》随时间发生了哪些变化?”这个查询生成的报告示例:
**报告:《辛普森一家》的演变(1989年至今)**
1. **文化影响和社会意义**:《辛普森一家》首播时是对美国中产阶级生活的碘伏性批判,在20世纪90年代因其大胆的讽刺而声名大噪。最初,它是一种反文化现象,通过探讨宗教、整治和消费主义等主题的剧集挑战传统规范。随着时间的推移,随着《南方公园》和《恶搞之家》等竞争对手的出现,其文化影响力逐渐减弱。到了21世纪10年代,该剧从潮流引领者转变为承载怀旧情怀的经典,在平衡传统魅力的同时,试图探讨气候变化和LGBTQ+权利等现代问题,尽管其社会反响不如从前。
2. **结论**:《辛普森一家》从一部激进的讽刺剧演变成电视界的经典之作,经历了技术、整治和观众期望的变化。虽然其黄金时代的辉煌难以超越,但它通过流媒体、更新颖的幽默和全球传播等方式展现出的适应性,确保了它作为文化标志的地位。该剧的长久不衰既体现了人们的怀旧之情,也反映了它对变化的务实接受,尽管在碎片化的媒体环境中,它仍面临着保持相关性的挑战。
来源:https://www.53ai.com/news/OpenSourceLLM/2025031145023.html
相关热点
继续查看同栏目近期热点。
延伸阅读
补充最近整理过的热点入口。
