深入openJiuwen DeepSearch搜索智能体Action Pool与状态机循环探索完整设计解析【免费下载链接】deepsearchopenJiuwen DeepSearch是一款知识增强的深度搜索与研究框架有业界领先的片段级引用和溯源推理能力提供精准Agentic搜索与研究能力项目地址: https://gitcode.com/openJiuwen/deepsearchopenJiuwen DeepSearch 搜索智能体通过「状态初始化 → 候选动作生成 → Action Pool 加权采样 → 状态验证」的状态机循环让 AI 像研究员一样反复探索信息空间。本文带你快速看懂这套 Agentic 搜索的核心机制Action Pool 评分采样、状态深度控制与循环终止策略并附上关键源码路径方便新手入门与二次开发 。一、为什么搜索智能体要用循环探索传统的 RAG 是一问一答用户提问 → 检索一次 → 生成回答。面对复杂研究性问题比如某技术近三年的演进对比单次检索往往证据不足。DeepSearch 的做法是把搜索建模成一个状态机循环把问题拆解为带线索clues和候选值candidate的状态变量每轮循环从动作池Action Pool中采样出若干**候选动作Action**并行执行执行结果网页搜索、语料检索、答案会回写状态再产出新的候选动作直到验证器判定答案可信或达到终止条件才收敛输出。二、状态机循环4 个核心节点整个搜索循环由 4 类节点驱动全部位于 search_nodes/ 目录1. 初始化状态Initialize Stateinitialize_state.py 中的run_initialize_state调用大模型把自然语言问题解析成结构化State初始状态id 0、depth 0作为整棵探索树的根状态内含若干Variable变量每个变量有question_clues问题线索、discovered_clues探索中发现的新线索、candidate候选值和candidate_strength置信度。你可以把它理解为把问题翻译成了待验证假设清单。2. 发现动作空间Find Actionfind_action.py 中的run_find_action_space基于当前 query、状态和已有结果让 LLM 生成一批ActionProposal动作提议每个提议自带一个 0~1 的score分值。解析失败会自动重试最多 4 次并把错误信息塞回对话让模型自我修正——这是保证循环稳定运行的关键容错设计。3. 执行动作Run Actionrun_action.py 是循环的手脚根据模式暴露原生工具Web 模式web_search批量关键词搜索web_fetch抓取网页并按目标摘要检索模式retrieve在固定语料库中做相似度检索。LLM 的输出有三种形态模式含义后续动作tool_calls调用搜索/抓取/检索工具工具结果写回消息上下文继续 ReAct 循环state提出一组新状态分支apply_patch合并进基础状态depth 1answer给出最终答案 新状态进入答案验证值得一提的是工具名白名单归一化机制resolve_native_tool_call_name模型给出的工具名必须先命中白名单才会执行可有效防止提示注入触发未授权工具 。4. 状态验证Validate New Statevalidate_new_state.py 对每个新状态中的候选值做线索级核验先用检索找关联信息再由验证模型逐条判断线索是否 pass/fail/pending最终计算该候选值的整体置信度。验证结果决定这个状态分支是否继续扩张、还是被剪枝。三、Action Pool候选动作的蓄水池Action Poolaction_pool.py是整个搜索智能体的调度中枢管理着所有待执行动作的生命周期pending(_pool) → sample() → running_actions → completed_actions ↑ │ └────────── find_action 生成的新动作 ←───────────────┘它内置了一个即时队列immediate_queue放入其中的动作在采样时会按 FIFO 顺序优先执行完全绕过分值逻辑——适合必须立刻做的关键动作。评分公式决定先探索哪条路_compute_base_score的打分逻辑非常直白基础分 动作提议的proposal.score加分状态中每个已有候选值的candidate_strength累加线索越充实越优先浅层奖励depth 2加 100 分——优先展开浅层分支快速覆盖广度深层衰减depth 5时分数乘以(12 - depth) / 8——深度超过阈值 12 的状态基本不会被采样天然限制了搜索树的深度。多样性保护避免钻牛角尖当配置开启promote_unique_states时池内相同状态哈希的动作越多每个动作的采样权重被同状态数量除权。效果是系统不会把算力全耗在同一个状态分支上而是鼓励探索不同路径 。采样本身是加权随机random.choices既保留了高分动作的优先性又留出了随机探索的空间。Top-K 答案聚合Pool 还提供了两个收口方法get_best_answer()从已成功产出答案的动作中返回答案变量candidate_strength最高的一对动作 结果get_best_guess()从所有已完成动作中挑出最强猜测作为兜底答案。配合 workflow.py 中的槽位调度sample(available_slots)多个动作可以并行执行完成后record_completed记账新一轮find_action再往池里补充新动作——循环由此闭环。四、循环如何终止理解三个刹车条件就能看懂 DeepSearch 何时收手答案验证通过answer模式的输出通过validate_answer校验直接收敛深度软上限MAX_STATE_DEPTH 12的衰减机制让深分支权重趋近于零探索自然停止上下文超限自愈当 LLM 调用因上下文超限失败时run_action.py 支持多种降级策略——缩小检索 top_k 重试、剥离历史工具响应后再试delete_tool_responses避免整个搜索循环因一次超长对话而崩溃。五、延伸阅读从源码到文档想动手调试这套搜索智能体推荐按下面顺序读循环入口与编排workflow.py、main_graph_nodes.py数据契约State/Action/Result 模型search_context.py各节点 Prompt 模板deepsearch_initialize_state.md、deepsearch_find_action_space.md、deepsearch_run_action.md功能文档search-agent.md单元测试行为最好的活文档test_action_pool.py、test_deep_search_agent_smoke.py小结openJiuwen DeepSearch 搜索智能体的精髓在于用状态机循环驱动探索用 Action Pool 的加权采样平衡深挖与广搜用分层验证保证答案可信。理解这套设计你不仅看懂了 DeepSearch也掌握了一个通用的 Agentic 搜索架构范式完全可以迁移到自己的研究与检索项目中 ✨。【免费下载链接】deepsearchopenJiuwen DeepSearch是一款知识增强的深度搜索与研究框架有业界领先的片段级引用和溯源推理能力提供精准Agentic搜索与研究能力项目地址: https://gitcode.com/openJiuwen/deepsearch创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
