引言
在人工智能快速发展的今天,如何构建一个能够进行深度研究、自主学习和迭代优化的AI系统成为了技术前沿的重要课题。Gemini开源的DeepResearch一周收获7.9k Star,Google的开源项目Gemini DeepResearch技术通过结合LangGraph框架和Gemini大语言模型,实现了一个具备自主研究能力的智能代理系统。本文将深入分析这一技术的核心原理和具体实现方式。
开源项目Gemini Fullstack LangGraph Quickstart
https://github.com/google-gemini/gemini-fullstack-langgraph-quickstart
技术架构概览
Gemini DeepResearch采用了基于状态图(StateGraph)的多节点协作架构,通过LangGraph框架实现了一个完整的研究工作流。整个系统包含以下核心组件:
1. 状态管理系统
系统定义了多种状态类型来管理不同阶段的数据流:
class OverallState(TypedDict):
messages: Annotated[list, add_messages]
search_query: Annotated[list, operator.add]
web_research_result: Annotated[list, operator.add]
sources_gathered: Annotated[list, operator.add]
initial_search_query_count: int
max_research_loops: int
research_loop_count: int
reasoning_model: str
这种设计允许系统在不同节点间传递和累积信息,确保研究过程的连续性和完整性。
2. 核心工作流程
整个研究流程分为五个关键阶段:
阶段一:查询生成(Query Generation)
系统首先分析用户输入,使用Gemini 2.0 Flash模型生成多个优化的搜索查询:
def generate_query(state: OverallState, config: RunnableConfig) -> QueryGenerationState:
llm = ChatGoogleGenerativeAI(
model=configurable.query_generator_model,
temperature=1.0,
max_retries=2,
api_key=os.getenv("GEMINI_API_KEY"),
)
structured_llm = llm.with_structured_output(SearchQueryList)
formatted_prompt = query_writer_instructions.format(
current_date=current_date,
research_topic=get_research_topic(state["messages"]),
number_queries=state["initial_search_query_count"],
)
result = structured_llm.invoke(formatted_prompt)
return {"query_list": result.query}
关键特点:
- 多样化查询生成:系统会生成多个不同角度的搜索查询,确保信息收集的全面性
- 结构化输出:使用Pydantic模型确保输出格式的一致性
- 时效性考虑:查询中包含当前日期信息,确保获取最新数据
阶段二:并行网络研究(Parallel Web Research)
系统使用LangGraph的Send机制实现并行搜索:
def continue_to_web_research(state: QueryGenerationState):
return [
Send("web_research", {"search_query": search_query, "id": int(idx)})
for idx, search_query in enumerate(state["query_list"])
]
每个搜索查询都会启动一个独立的web_research节点,实现真正的并行处理。
阶段三:智能网络搜索(Web Research)
这是系统的核心功能之一,集成了Google Search API和Gemini模型:
def web_research(state: WebSearchState, config: RunnableConfig) -> OverallState:
response = genai_client.models.generate_content(
model=configurable.query_generator_model,
contents=formatted_prompt,
config={
"tools": [{"google_search": {}}],
"temperature": 0,
},
)
# 处理搜索结果和引用
resolved_urls = resolve_urls(
response.candidates[0].grounding_metadata.grounding_chunks, state["id"]
)
citations = get_citations(response, resolved_urls)
modified_text = insert_citation_markers(response.text, citations)
return {
"sources_gathered": sources_gathered,
"search_query": [state["search_query"]],
"web_research_result": [modified_text],
}
技术亮点:
- 原生Google Search集成:直接使用Google的搜索API获取实时信息
- 自动引用处理:系统自动提取和格式化引用信息
- URL优化:将长URL转换为短链接以节省token消耗
阶段四:反思与知识缺口分析(Reflection)
这是DeepResearch的核心创新之一,系统会自动评估已收集信息的充分性:
def reflection(state: OverallState, config: RunnableConfig) -> ReflectionState:
formatted_prompt = reflection_instructions.format(
current_date=current_date,
research_topic=get_research_topic(state["messages"]),
summaries="\n\n---\n\n".join(state["web_research_result"]),
)
llm = ChatGoogleGenerativeAI(
model=reasoning_model,
temperature=1.0,
max_retries=2,
api_key=os.getenv("GEMINI_API_KEY"),
)
result = llm.with_structured_output(Reflection).invoke(formatted_prompt)
return {
"is_sufficient": result.is_sufficient,
"knowledge_gap": result.knowledge_gap,
"follow_up_queries": result.follow_up_queries,
"research_loop_count": state["research_loop_count"],
"number_of_ran_queries": len(state["search_query"]),
}
反思机制的核心功能:
- 知识缺口识别:自动分析当前信息是否足够回答用户问题
- 后续查询生成:针对发现的知识缺口生成新的搜索查询
- 迭代控制:决定是否需要进行下一轮研究
阶段五:答案综合(Answer Finalization)
最终阶段将所有收集的信息综合成完整的答案:
def finalize_answer(state: OverallState, config: RunnableConfig):
formatted_prompt = answer_instructions.format(
current_date=current_date,
research_topic=get_research_topic(state["messages"]),
summaries="\n---\n\n".join(state["web_research_result"]),
)
llm = ChatGoogleGenerativeAI(
model=reasoning_model,
temperature=0,
max_retries=2,
api_key=os.getenv("GEMINI_API_KEY"),
)
result = llm.invoke(formatted_prompt)
# 处理引用链接
unique_sources = []
for source in state["sources_gathered"]:
if source["short_url"] in result.content:
result.content = result.content.replace(
source["short_url"], source["value"]
)
unique_sources.append(source)
return {
"messages": [AIMessage(content=result.content)],
"sources_gathered": unique_sources,
}
技术创新点
1. 自适应研究循环
系统通过evaluate_research
函数实现智能的研究循环控制:
def evaluate_research(state: ReflectionState, config: RunnableConfig) -> OverallState:
configurable = Configuration.from_runnable_config(config)
max_research_loops = (
state.get("max_research_loops")
if state.get("max_research_loops") isnotNone
else configurable.max_research_loops
)
if state["is_sufficient"] or state["research_loop_count"] >= max_research_loops:
return"finalize_answer"
else:
return [
Send(
"web_research",
{
"search_query": follow_up_query,
"id": state["number_of_ran_queries"] + int(idx),
},
)
for idx, follow_up_query in enumerate(state["follow_up_queries"])
]
这种设计确保了系统既能深入研究复杂问题,又能避免无限循环。
2. 智能引用管理
系统实现了完整的引用管理机制:
- URL解析:将复杂的搜索结果URL转换为简洁的引用格式
- 引用插入:自动在文本中插入引用标记
- 去重处理:确保最终答案中只包含实际使用的引用源
3. 多模型协作
系统巧妙地使用不同的Gemini模型处理不同任务:
- Gemini 2.0 Flash:用于查询生成和网络搜索,速度快
- Gemini 2.5 Flash:用于反思分析,平衡速度和质量
- Gemini 2.5 Pro:用于最终答案生成,确保高质量输出
系统架构图
用户输入 → 查询生成 → 并行网络搜索 → 反思分析 → 评估决策
↓ ↓ ↓ ↓
多个搜索查询 收集网络信息 知识缺口分析 继续研究/结束
↓ ↓
生成后续查询 答案综合
↓ ↓
返回搜索 最终答案
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。