
AI Agent大模型后端任务调度【免费下载链接】XAgentAn Autonomous LLM Agent for Complex Task Solving项目地址https://gitcode.com/gh_mirrors/xa/XAgent点击查看免费下载本文基于 XAgent 仓库中 ReACT.md 文档及其对应源码 ReACT.py系统讲解 XAgent 内环搜索的核心机制make_message如何为任务树中每个节点生成 LLM 消息序列ReACTChainSearch类如何通过“推理—工具调用—更新节点”的循环把子任务执行到提交以及max_subtask_chain_length、enable_summary、enable_ask_human_for_help等配置项在其中的实际作用。读完本文你可以完整理解 XAgent 内环inner loop的搜索流程、状态码流转与人工介入机制。一、ReACT 链式搜索在 XAgent 工作流中的位置XAgent 把一次用户请求拆分为“外环”规划、子任务管理、反思和“内环”在单个子任务内执行链式搜索两层。内环的入口是 task_handler.py 中的inner_loop方法其核心调用链为通过agent_dispatcher.dispatch(RequiredAbilities.tool_tree_search, ...)获取负责工具树搜索的代理即 ToolAgent其能力集为RequiredAbilities.tool_tree_search从 reasoning.yml 中取出action_reasoning的函数 schema 作为参数规范构造ReACTChainSearch(xagent_core_componentsself.xagent_core)并调用search_method.run(...)根据返回的search_method.status判定任务成功SearchMethodStatusCode.SUCCESS或失败SearchMethodStatusCode.FAIL并更新计划状态为TaskStatusCode.SUCCESS/FAIL。run调用时传入的functions参数来自self.function_handler.intrinsic_tools(self.config.enable_ask_human_for_help)即代理可用的内置工具列表其中是否包含ask_human_for_help取决于同名配置项。二、make_message为任务树每个节点生成消息序列make_message是 ReACT.py 中的模块级函数用于为当前节点生成消息序列。参数说明参数类型说明now_nodeToolNode当前工具节点实例max_lengthint子任务链的最大长度max_subtask_chain_lengthconfig配置对象搜索的配置设置now_dealing_taskPlan当前处理的任务函数返回当前节点的消息序列list[Message]。内部逻辑如果配置启用了摘要功能enable_summary为 True则调用 summarize.py 中的summarize_plan对当前处理的任务进行摘要结果赋值给terminal_task_info否则将当前任务转为 JSON用json.dumps(..., indent2, ensure_asciiFalse)格式化为字符串作为terminal_task_info创建空的消息序列列表message_sequence构建当前子任务的提示now_subtask_prompt包含terminal_task_info作为Message(user, ...)加入序列获取当前节点的process属性赋值给action_process。从 node.py 的ToolNode.process属性实现看该属性会沿着father指针自当前节点回溯到根节点把路径上所有节点的data含thoughts、command、tool_output、tool_status_code按序汇总成列表即“已经执行过的所有步骤”如果配置启用摘要config.enable_summary为 True则用summarize_action(action_process, terminal_task_info)对动作过程做摘要构建用户提示user_prompt包含action_process作为第二条Message(user, ...)加入序列返回消息序列。使用注意源自文档需传入正确的四个参数now_node、max_length、config、now_dealing_task启用摘要时任务信息与动作过程都会先经过summarize_plan/summarize_action压缩以控制送入 LLM 的上下文长度返回的是消息序列供调用方进一步处理或展示。输出示例源自文档[ Message(user, Now you will perform the following subtask:\n\n{terminal_task_info}\n\n), Message(user, The following steps have been performed (you have already done the following and the current file contents are shown below):\n\n{action_process}) ]源码细节补充summarize_action并非简单截断——它会为每个历史动作调用function_manager(summarize_action, ...)生成摘要再调用actions_reflection提取key_actions与suggestions并为最近成功/失败动作补充返回内容总长度受MAX_RETURN_LENGTH约束。这使得长链搜索中后一步推理仍能“看到”前面关键步骤的结果而不会爆上下文。三、ReACTChainSearch 类链式搜索的主体ReACTChainSearch继承自 base_search.py 中的BaseSearchMethod用于执行基于链式搜索的任务。它通过维护一个任务树的列表tree_list来表示处理过的任务并提供一系列方法操作任务树。3.1 基类 BaseSearchMethod 提供的公共状态从 base_search.py 源码看基类维护两个关键字段status: SearchMethodStatusCode搜索方法状态初始为DOINGneed_for_plan_refine: bool标志位表示计划是否需要优化refine初始为 False。对应的状态枚举定义在 utils.py 中枚举值含义SearchMethodStatusCode.DOING0搜索进行中SearchMethodStatusCode.SUCCESS1搜索成功SearchMethodStatusCode.FAIL2搜索失败SearchMethodStatusCode.HAVE_AT_LEAST_ONE_ANSWER3至少已得到一个答案工具调用的结果则由ToolCallStatusCode表达其中与搜索终止直接相关的是SUBMIT_AS_SUCCESS 7子任务成功提交与SUBMIT_AS_FAILED 8子任务失败提交。3.2init对象初始化__init__函数初始化ReACTChainSearch对象维护一个树的列表表示已处理的任务。函数首先调用父类构造函数super().__init__()然后定义tree_list已处理任务的树的列表finish_node任务的结束节点初始为Nonexagent_core_componentsXAgentCoreComponents对象承载日志、交互、工具服务器接口、函数处理器等核心组件。使用注意创建实例前需先构造XAgentCoreComponents对象并传入初始化后可通过tree_list属性访问已处理任务的树列表通过finish_node属性获取任务结束节点。四、run 函数重试循环与状态收敛run函数用于运行链式搜索任务签名与参数如下参数说明config搜索的配置信息agent负责链式搜索的基础代理BaseAgentarguments当前任务的参数需符合action_reasoning的参数规范functions可供代理使用的可用函数需包含代理所需内置工具task_id当前任务的 IDnow_dealing_task当前处理的任务plan_agent计划代理max_try最大尝试次数默认 1max_answer最大接收答案的数量默认 1执行逻辑函数在for _attempt_id in range(max_try)循环中反复调用generate_chain直到达到最大尝试次数随后收敛状态——如果self.status为HAVE_AT_LEAST_ONE_ANSWER则置为SUCCESS否则置为FAIL。使用注意源自文档需要提供正确的配置信息和代理对象arguments需要符合函数action_reasoning的参数规范即 reasoning.yml 中定义的结构包含四个必填字段plan数组最多 1 条下一步计划约 30 词、thought内部推理约 50 词、reasoning给出 thought 的理由约 100 词、criticism对当前 thought 与 plan 的自批评functions需要包含代理所需的内置工具task_id需要提供正确的任务 IDmax_try与max_answer可按需调整。五、generate_chain链式搜索主循环generate_chain是整个内环的核心负责运行链式搜索任务。参数为config、agent、arguments、functions、task_id、now_dealing_task、plan_agent无返回值。其作用是生成任务搜索树并根据配置的最大子任务链长度限制搜索深度。从源码看主循环每一轮迭代依次做以下事情建立尝试树为本次尝试append一个新的TaskSearchTree()从now_attempt_tree.root开始深度限制while now_node.get_depth() config.max_subtask_chain_length超过深度即停止。get_depth的实现见 node.py是沿father递归计数根节点深度为 0人工介入若节点有父节点且interaction.interrupt被触发则调用get_origin_data(now_node.data)取出当前可修改的思考数据通过interaction.receive(can_modify)接收用户输入再用rewrite_input_func(now_node.data, receive_data)更新节点数据并重打印助手的 thoughts构造消息调用make_message生成message_sequence末端强制提交当now_node.get_depth() config.max_subtask_chain_length - 1到达链深末端时将function_call置为{name: subtask_submit}强制模型在本步给出提交结论获取工作区文件结构通过toolserver_interface.execute_command_client(FileSystemEnv_print_filesys_struture, {return_root: True})获取文件树并用clip_text(file_archi, 1000, clip_endTrue)截断至 1000 token人类求助提示根据config.enable_ask_human_for_help决定human_prompt——允许求助时提示使用ask_human_for_help否则明确告知“人类不可用禁止以任何形式求助信息不足时尽力使用默认值”注入全局计划取plan_agent.latest_plan.to_json()按config.enable_summary决定用summarize_plan摘要或json.dumps序列化作为all_plan占位符调用代理agent.parse(...)传入占位符all_plan、workspace_files、subtask_id、max_length、step_num、human_help_prompt、arguments、functions、function_call以及additional_messagesmessage_sequence插入位置 -1。从 tool_agent/agent.py 的parse实现看当default_request_type openai时会临时禁用原生arguments/functions把可用工具序列化进 system 消息改用subtask_submit/subtask_handle两个函数 schema 让模型以 JSON 字段形式输出工具调用并配合jsonschema校验与dynamic_json_fixes修复非法 JSON落树并执行工具agent.message_to_tool_node(new_message)将 LLM 返回转成新的ToolNodefunction_handler.handle_tool_call(new_tree_node)执行工具调用返回tool_output、tool_output_status_code、need_for_plan_refine、using_tools随后now_attempt_tree.make_father_relation(now_node, new_tree_node)建立父子关系并将带using_tools的过程数据插入交互流interaction.insert_data其中is_include_pictures决定该条数据是否携带图片终止判定若tool_output_status_code ToolCallStatusCode.SUBMIT_AS_SUCCESS置self.status HAVE_AT_LEAST_ONE_ANSWER并break若为SUBMIT_AS_FAILED则直接break。循环结束后self.finish_node now_node。注意源自文档每次迭代会根据enable_ask_human_for_help是否在消息中添加人类求助提示会根据enable_summary决定是否对计划进行摘要。函数无返回值结果体现在任务树与status上。六、辅助方法详解6.1 get_finish_node检索任务树中已完成的节点无参数返回self.finish_node。在任务处理过程中当一个节点完成时可通过该函数获取。示例假设已完成的节点为node1则返回node1。6.2 get_origin_data检索最初输入的数据。参数data为包含最初输入数据的字典实际为节点data字段函数内部初始化assistant_thoughts_reasoning、assistant_thoughts_plan、assistant_thoughts_speak、assistant_thoughts_criticism变量依次取data[thoughts]→[properties]→[thought]等字段以字典形式返回。输出示例源自文档{ args: { thoughts: XXX, reasoning: XXX, plan: XXX, criticism: XXX } }6.3 rewrite_input_func人工改写输入的合法性检查与合并该函数检查新输入是否有效如果有效则用新输入更新旧输入。参数old旧的输入条目当前节点的datanew要替换旧输入的新输入条目用户在交互端提交的修改。返回值为(更新后的输入, 重写状态 bool)。函数内部逻辑源自文档与源码首先判断新输入是否为字典类型如果不是则不进行任何操作如果新输入为None返回(old, False)否则从新输入中获取args字段的值并初始化assistant_thoughts_reasoning、assistant_thoughts_plan、assistant_thoughts_speak、assistant_thoughts_criticism变量从旧输入中获取thoughts字段的值再取其中properties子字典如果旧thoughts非空则依次检查args中是否存在thoughts/thought、reasoning、plan、criticism字段并把新值写入旧输入thoughts.properties对应键新值缺省时保留旧值返回(old, True)。从源码结构看该方法与get_origin_data形成闭环get_origin_data把节点数据“投影”成可编辑的args结构交给用户用户改完回来后rewrite_input_func再把它合并回节点数据从而实现了文档第三节所述“人类随时可纠正 Agent 思考”的机制。6.4 to_json将ReACTChainSearch对象转换为 JSON。该函数目前是占位函数pass尚未实现具体功能返回None。使用时无需依赖其返回值。6.5 is_include_pictures判断工具输出是否含图片判断给定的using_tools字典中是否包含 png 文件输出。逻辑从using_tools获取tool_name与tool_output若using_tools不是字典类型两者分别置为空字符串与空字典若tool_name PythonNotebook_execute_cell遍历tool_output列表对每个output判断其是否为字典且包含file_name键是则返回True否则返回False。输出示例源自文档假设using_tools为{tool_name: PythonNotebook_execute_cell, tool_output: [{file_name: image1.png}, {file_name: image2.jpg}]}则函数返回True。该结果会被generate_chain传入interaction.insert_data(..., is_include_pictures...)用于前端交互流中是否渲染图片。七、关键配置项对照链式搜索的行为受配置文件控制仓库自带示例 gpt-3.5-turbo_config.yml 与 xagentllama.yml 中均包含相关配置典型取值为配置项示例值在 ReACT 链式搜索中的作用max_subtask_chain_length15限制generate_chain主循环的最大迭代深度节点深度上限达到末端一步时强制subtask_submitenable_summarytrue控制make_message中对任务/动作过程做摘要、generate_chain中对全局计划做摘要enable_ask_human_for_helpFalse决定消息中human_help_prompt的内容以及内置工具列表是否含ask_human_for_helpsummary.single_action_max_length/max_return_length见配置摘要时单动作与总返回的 token 上限summarize.py 中读取以上配置以当前仓库assets/下示例文件实际内容为准不同模型如本地 LLaMA 类模型可能需要在该基础上自行调整。八、完整调用示例综合文档中的输出示例一次典型的使用序列如下search_method ReACTChainSearch(xagent_core_componentscore_components) search_method.run(config, agent, arguments, functions, task_id, now_dealing_task, plan_agent) finish_node search_method.get_finish_node() origin_data search_method.get_origin_data(data) updated_input, rewrite_status search_method.rewrite_input_func(old, new) search_method.generate_chain(config, agent, arguments, functions, task_id, now_dealing_task, plan_agent) search_method.to_json() include_pictures search_method.is_include_pictures(using_tools)其中run内部已会调用generate_chain单独调用generate_chain更多用于理解流程或测试finish_node指向链末节点可供后续反思reflection与知识提取阶段读取执行轨迹。九、小结make_message把“当前子任务 历史动作过程”压缩为两条 user 消息是 ReACT 上下文组装的基本单元且可通过enable_summary切换“JSON 原文”与“LLM 摘要”两种模式ReACTChainSearch.run以max_try控制整体重试用SearchMethodStatusCode状态机收敛搜索结果generate_chain是主循环深度受限、可人工改写、末端强制提交、工具状态码决定终止并通过need_for_plan_refine与finish_node向外环计划优化、反思、总结传递信息rewrite_input_func/get_origin_data/is_include_pictures分别支撑人工介入、数据投影与前端展示三条支线。主要参考文件ReACT.py、base_search.py、node.py、utils.py、task_handler.py、tool_agent/agent.py、summarize.py、reasoning.yml、gpt-3.5-turbo_config.yml、xagentllama.yml。赞分享AI Agent大模型后端任务调度【免费下载链接】XAgentAn Autonomous LLM Agent for Complex Task Solving项目地址https://gitcode.com/gh_mirrors/xa/XAgent点击查看免费下载相关推荐DeepCode Automation 架构深度解析Agent 定时任务如何复用 Goal/Turn 耐用执行链路DeepCode Automation 架构深度解析Agent 定时任务如何复用 Goal/Turn 耐用执行链路 导读 本文以 DeepCode 开源仓库的人工智能大模型AI AgentAgent 框架多智能体代码智能体代码生成工具调用MCP ClientsMCP 服务桌面应用AI 评测Nacos 任务执行引擎Task Execution深度解析延迟任务、执行任务与领域调度机制Nacos 任务执行引擎Task Execution深度解析延迟任务、执行任务与领域调度机制 本文以 Nacos 官方设计规范 Foundation Ta后端微服务配置中心服务注册发现云原生SO-ARM100 仿真实操一条命令跑通模型可视化SO ARM100 仿真实操一条命令跑通模型可视化 想确认装配后的姿态却还要等 3D 打印排程想在校准电机前核对关节角度上下限最快的办法是直接加载模型看硬件开发机器人智能硬件具身智能人工智能上一篇ZeroClaw 社区沟通指南Discord、GitHub Issues、Discussions 与维护者协作全攻略下一篇Squirrel.Windows终极指南如何让Windows桌面应用更新效率提升300%创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考