ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

分层组合性AI智能体:构建复杂任务分解与模块化执行架构

分层组合性AI智能体:构建复杂任务分解与模块化执行架构 1. 项目概述什么是“分层组合性”智能体最近在捣鼓AI智能体AI Agent项目时我一直在思考一个问题如何让一个智能体真正变得“有用”而不仅仅是能回答几个问题我们经常看到一些演示智能体可以调用工具、执行简单任务比如查天气、发邮件。但一旦任务稍微复杂一点比如“帮我规划一个周末的短途旅行预算控制在2000元以内要包含交通、住宿、景点和美食推荐并生成一份可分享的行程单”很多智能体就“卡壳”了。它们要么只能完成其中一步比如只查了天气要么生成一个笼统、无法执行的计划。这背后的核心瓶颈往往不是大模型本身的能力不足而是智能体的“思考”和“行动”方式缺乏有效的结构。这正是“分层组合性”Hierarchical Compositionality要解决的问题。简单来说它就像乐高积木。你有一堆基础积木块原子技能比如“查询交通信息”、“筛选酒店”、“总结景点介绍”。分层组合性就是一套设计图纸和组装逻辑它告诉智能体面对一个宏大目标比如“规划旅行”你应该如何将它逐层分解成子目标“规划交通”、“预订住宿”、“安排行程”每个子目标又如何由更小的任务“查询北京到上海的航班”、“对比三家酒店的价格和评分”组合而成最终调用那些基础的积木块来具体执行。所以“分层组合性辅助AI智能体”这个项目本质上是在构建一个具备“任务分解”与“模块化执行”能力的高级助手。它不再是一个简单的“问答机”或“单步工具调用器”而是一个能理解复杂用户意图、自主制定分层计划、并协调各种技能可靠执行的“大脑”。这对于实现真正意义上的个人助理、自动化工作流、甚至垂直领域的专业顾问都至关重要。无论你是开发者想构建更强大的Agent还是技术爱好者想理解下一代AI应用的走向搞懂分层组合性都是关键一步。2. 核心设计思路为何“分层”与“组合”是智能体的灵魂要理解这个设计我们可以把它和传统的智能体架构做个对比。目前最常见的智能体框架比如基于ReActReasoning Acting模式或类似AutoGPT的架构其工作流通常是线性的感知用户输入→ 思考生成一个动作或回复→ 行动执行该动作→ 观察获取结果→ 循环。这种模式在处理明确、单步的任务时很有效但面对复杂任务时问题就暴露了。2.1 传统智能体的局限陷入“思维迷宫”想象一下你让一个传统架构的智能体去完成那个旅行规划任务。它可能会这样“思考”用户要旅行规划。我需要先查天气。行动调用天气API天气查完了。接下来需要交通信息。行动调用交通查询API但用户没说出发地和目的地它可能卡住或者胡乱猜一个如果幸运地查到了交通接下来需要酒店。预算2000元怎么分配它没有这个概念。你会发现它的“思考”是短视的、缺乏全局规划的。它像一个在迷宫里乱撞的人走一步看一步很容易陷入死胡同比如缺少关键参数或者在一个细节上无限循环比如反复比较两个无关紧要的酒店。这是因为缺乏一个顶层的、指导性的“计划”。2.2 分层组合性的破局之道自上而下的蓝图绘制分层组合性智能体则采用了完全不同的思路。它的核心流程可以概括为目标分解 → 技能组合 → 分层执行 → 统一协调。目标分解Decomposition智能体接收到复杂指令后第一件事不是急于行动而是进行“战略规划”。利用大模型的推理能力将顶层目标Goal分解为一个树状结构的任务层级Task Hierarchy。例如根任务规划一个预算2000元的周末短途旅行。一级子任务交通规划、住宿安排、景点与美食规划、行程单整合。二级子任务以交通规划为例确认出发地与目的地、查询交通方式与价格、根据时间和预算选择最优方案。三级子任务以查询交通为例调用航班查询工具、调用火车票查询工具。技能组合Composition这个任务树上的每一个叶子节点不可再分的最小任务都需要对应一个或多个可执行的“技能”Skill。技能是智能体的原子能力通常对应一个工具函数Tool Function、一段代码或一个API调用。设计的关键在于技能要足够“原子化”和“可复用”。例如“查询航班信息”是一个技能“查询酒店价格”是另一个技能。而“规划交通”这个高层任务则是通过组合“确认地点”、“查询航班”、“查询火车”、“比价决策”等多个技能的逻辑来实现的。分层执行Hierarchical Execution智能体从任务树的根部或某个高层节点开始但它并不直接执行所有叶子任务。它采用一种“管理者”模式高层任务负责协调和决策将具体工作委派给低层任务。例如“交通规划”这个节点会先调用“确认地点”技能获得“北京”到“上海”的信息后再并发调用“查询航班”和“查询火车”技能最后根据结果和预算调用“决策”逻辑可能也是一个简单的规则或模型来选择方案。这个过程中每一层都只关心自己的输入、输出和子任务的调度。统一协调Orchestration一个中央调度器或称为“执行引擎”负责监控整个任务树的执行状态。它处理子任务之间的依赖关系例如必须先有地点信息才能查交通、处理执行失败的重试或回退、管理上下文信息将子任务的结果传递给父任务并最终将各个部分的结果整合成完整的输出。这种设计的巨大优势在于可解释性强整个解决问题的过程像一份清晰的项目计划书你可以看到任务是如何被拆解和完成的哪里出了问题一目了然。鲁棒性高某个子任务失败比如某个API暂时不可用智能体可以在该层级尝试备用方案而不至于导致整个任务崩溃。可扩展性好要增加智能体的能力只需要开发新的原子技能并将其注册到技能库中。高层任务可以像搭积木一样组合这些新技能无需重写核心逻辑。效率提升通过识别可以并行执行的独立子任务如同时查询航班和火车可以显著缩短整体执行时间。实操心得分解的粒度是关键在目标分解时最难把握的是分解的“粒度”。分得太粗如只分解到“安排行程”和没分解一样分得太细如把“点击查询按钮”也作为一个任务会导致任务树过于庞大调度开销激增且容易陷入细节。我的经验是一个叶子任务应该对应一个有明确输入输出、能通过一次或一组确定的工具调用完成的单元。例如“获取未来三天上海的天气”是一个好的叶子任务“分析天气”就不是因为它不明确具体要做什么。3. 架构拆解如何构建一个分层组合性智能体理论讲完了我们来看看具体怎么搭。一个典型的分层组合性智能体系统通常包含以下几个核心模块我会结合一个简单的代码框架思路来解释。3.1 核心模块构成模块名称职责关键技术点/实现选择任务规划器 (Task Planner)将用户目标解析并分解为层次化任务树。这是智能体的“大脑皮层”。依赖大语言模型LLM。通过精心设计的Prompt让LLM按照特定格式如JSON、YAML输出结构化的任务树。通常需要提供技能库的描述作为上下文。技能库 (Skill Library)存储所有可用的原子技能及其元数据描述、输入输出格式、调用方式。可以用一个Python字典或专门的注册表管理。每个技能对应一个函数函数需要有清晰的文档字符串docstring来描述其功能这会被用于Prompt工程。技能执行器 (Skill Executor)负责调用技能库中的具体函数并处理输入输出。通常利用Python的反射机制根据技能名动态调用对应的函数。需要做好错误处理和类型转换。工作流引擎 (Workflow Engine)核心调度系统。负责遍历任务树管理任务状态待执行、执行中、成功、失败解析任务间的依赖决定执行顺序串行、并行。可以自己实现一个简单的状态机也可以利用现成的轻量级工作流引擎如Prefect、Airflow的核心概念。对于复杂依赖需要引入有向无环图DAG来管理。上下文管理器 (Context Manager)在任务执行过程中传递和共享数据。例如子任务A输出的“目的地城市”需要传递给子任务B作为输入。维护一个全局或会话级的上下文字典。关键设计是定义清晰的数据槽Slot和填充规则。父任务的结果如何映射到子任务的输入参数需要明确的约定。3.2 一个简化的实现流程让我们用伪代码勾勒一下从用户输入到最终输出的核心循环class HierarchicalAgent: def __init__(self, llm_client, skill_lib): self.llm llm_client self.skills skill_lib self.context {} def run(self, user_input: str): # 步骤1规划 - 生成任务树 task_tree self._plan(user_input) # 步骤2执行 - 工作流引擎调度 final_result self._execute_task(task_tree.root) return final_result def _plan(self, goal: str) - TaskTree: # 构建Prompt让LLM基于目标和个人技能进行分解 prompt f 你是一个任务规划专家。你的技能库如下 {self._format_skills_for_prompt()} 请将用户目标分解为层次化的任务树。目标{goal} 输出格式必须是严格的JSON包含id, name, description, skills_needed所需的技能名列表 sub_tasks子任务列表等字段。 llm_response self.llm.generate(prompt) task_tree_json parse_json(llm_response) return TaskTree.from_json(task_tree_json) def _execute_task(self, task_node: TaskNode): # 如果这是一个叶子任务有具体技能需要执行 if task_node.skills_needed: results [] for skill_name in task_node.skills_needed: # 从上下文和任务描述中提取该技能所需的参数 skill_params self._extract_params_for_skill(skill_name, task_node, self.context) # 调用技能执行器 result self.skill_executor.execute(skill_name, skill_params) results.append(result) # 将结果更新到上下文中供后续任务使用 self._update_context(skill_name, result) # 合并叶子任务的结果 return self._merge_results(results, task_node) else: # 如果这是一个复合任务有子任务则递归执行子任务并整合结果 child_results [] for child_task in task_node.sub_tasks: # 这里可以加入依赖判断和并行执行优化 result self._execute_task(child_task) child_results.append(result) return self._merge_child_results(child_results, task_node)3.3 关键技术选型与考量大模型选择任务规划器的质量直接取决于LLM的推理和遵循指令能力。GPT-4、Claude 3等顶级闭源模型效果最好但成本高。开源模型如Qwen、DeepSeek、Llama 3的指令微调版本也是不错的选择但需要在Prompt工程上投入更多精力确保其输出结构化。技能描述如何向LLM清晰描述你的技能库至关重要。描述应包括1) 功能简述2) 必需的输入参数及其类型和含义3) 输出格式。清晰的描述能极大提升规划器匹配技能的准确率。错误处理与重试在分层架构中错误处理也需要分层。叶子技能执行失败如API超时可以在该层级设置重试机制或启用备用技能。如果整个子任务失败工作流引擎应能向上汇报由父任务决定是重试整个子任务、选择替代方案还是整体失败。上下文管理策略简单的键值对存储可能不够。需要考虑上下文的作用域全局、任务链、会话、生命周期以及冲突解决当多个任务试图写入同一个上下文键时。一种常见模式是使用“黑板”模式所有任务都可以读写但需要版本或来源标记。注意事项Prompt工程是成败关键让LLM稳定输出结构化的任务树是整个系统的基石。这需要极其精细的Prompt设计。除了提供清晰的技能描述和输出格式要求外最好在Prompt中加入几个高质量的示例Few-shot Learning。例如给出一个“订餐”目标及其对应的标准任务树JSON。这能显著减少LLM的“胡思乱想”提高输出结构的稳定性和准确性。同时必须在代码中对LLM的输出进行严格的校验和解析对不符合格式的响应要有降级或重试策略。4. 实战演练从零搭建一个旅行规划助手光说不练假把式。我们以“周末短途旅行规划”为例手把手走一遍构建核心组件的流程。假设我们已经有了一个能调用外部API的大模型客户端比如OpenAI或国内平台的SDK。4.1 第一步定义原子技能库首先我们需要定义智能体能用的“积木块”。这里我们创建几个最基础的技能。# skill_library.py class SkillLibrary: def __init__(self): self.skills {} self._register_skills() def _register_skills(self): # 技能1确认地点信息从模糊描述中提取具体城市 self.skills[clarify_location] { function: self._clarify_location, description: 从用户模糊的地点描述中提取出明确的出发城市和目的城市。例如‘从北京去上海’ - (‘北京’ ‘上海’), input_schema: {description: str}, output_schema: {departure: str, destination: str} } # 技能2查询航班信息模拟 self.skills[search_flights] { function: self._search_flights, description: 根据出发地、目的地、日期查询航班信息和价格。, input_schema: {departure: str, destination: str, date: str}, output_schema: {flights: list} # 列表里是航班详情字典 } # 技能3查询酒店信息模拟 self.skills[search_hotels] { function: self._search_hotels, description: 根据城市、入住日期、离店日期和价格范围查询酒店信息。, input_schema: {city: str, check_in: str, check_out: str, max_price: int}, output_schema: {hotels: list} } # 技能4生成行程摘要 self.skills[generate_itinerary] { function: self._generate_itinerary, description: 将交通、住宿、景点等零散信息整合成一份格式优美的Markdown行程单。, input_schema: {transport: dict, accommodation: dict, activities: list}, output_schema: {itinerary_md: str} } # 下面是具体的技能函数实现模拟 def _clarify_location(self, description): # 这里应该调用一个NER模型或LLM来解析。为简化我们模拟一下。 if 北京 in description and 上海 in description: return {departure: 北京, destination: 上海} # ... 其他逻辑 return {departure: 未知, destination: 未知} def _search_flights(self, departure, destination, date): # 模拟API调用返回假数据 return { flights: [ {airline: 航司A, dep_time: 08:00, arr_time: 10:00, price: 1200}, {airline: 航司B, dep_time: 14:00, arr_time: 16:00, price: 900}, ] } # ... 其他技能函数类似4.2 第二步实现任务规划器规划器的核心是构造一个能让LLM“乖乖听话”的Prompt。# planner.py class TaskPlanner: def __init__(self, llm_client, skill_lib): self.llm llm_client self.skill_lib skill_lib def plan(self, goal): skills_prompt self._build_skills_prompt() system_prompt f你是一个高级任务规划AI。请将用户目标分解为可执行的任务层次结构。 你可以使用的技能如下 {skills_prompt} 请以JSON格式输出任务树。每个任务节点必须包含以下字段 - id: 唯一标识符。 - name: 任务名称。 - description: 任务详细描述。 - skills_needed: 执行此任务所需的具体技能名称列表必须是上面提供的技能名。如果是需要进一步分解的复合任务此列表为空。 - sub_tasks: 子任务列表格式同父任务。如果没有子任务则为空列表。 输出示例 {{ id: root, name: 规划周末旅行, description: 总体协调旅行规划, skills_needed: [], sub_tasks: [ {{ id: t1, name: 确认旅行细节, description: 明确出发地、目的地、时间和预算, skills_needed: [clarify_location, extract_budget_and_date], sub_tasks: [] }} // ... 其他子任务 ] }} user_prompt f用户目标{goal} # 调用LLM response self.llm.chat_completion( systemsystem_prompt, messages[{role: user, content: user_prompt}], temperature0.1 # 低温度保证输出稳定 ) # 解析并返回任务树对象 return self._parse_response(response)4.3 第三步构建工作流引擎与执行循环这是最复杂的部分我们需要一个能遍历树、管理状态和上下文的引擎。# workflow_engine.py class WorkflowEngine: def __init__(self, skill_executor): self.skill_executor skill_executor self.context {} # 全局上下文黑板 def execute_tree(self, task_tree): return self._execute_node(task_tree.root) def _execute_node(self, node): print(f[执行] 开始任务: {node.name}) # 情况1叶子任务有具体技能要执行 if node.skills_needed: results {} for skill_name in node.skills_needed: # 从节点描述和全局上下文中提取该技能需要的参数 # 这里需要一个参数提取器可能也需要LLM辅助或基于规则 params self._extract_parameters(skill_name, node, self.context) print(f 调用技能: {skill_name}, 参数: {params}) try: skill_result self.skill_executor.execute(skill_name, params) # 将技能结果按预定规则存入上下文 self._update_context_with_result(skill_name, skill_result) results[skill_name] skill_result except Exception as e: print(f 技能 {skill_name} 执行失败: {e}) # 这里可以实现失败重试、备用技能等逻辑 return {status: failed, error: str(e)} # 所有技能执行成功合并结果返回给父任务 merged_result self._merge_skill_results(results, node) node.result merged_result return merged_result # 情况2复合任务需要执行子任务 else: child_results [] # 这里可以优化分析子任务间依赖决定串行还是并行执行 for child in node.sub_tasks: child_result self._execute_node(child) if child_result.get(status) failed: # 子任务失败可以在这里决定是否继续或向上传递失败 pass child_results.append(child_result) # 所有子任务完成整合结果 final_result self._synthesize_results(child_results, node) node.result final_result return final_result4.4 第四步组装并运行智能体最后我们把所有模块像拼图一样组装起来。# main.py from llm_client import get_llm_client from skill_library import SkillLibrary from planner import TaskPlanner from workflow_engine import WorkflowEngine from skill_executor import SkillExecutor def main(): # 1. 初始化所有组件 llm get_llm_client(api_keyyour_key) # 你的LLM客户端 skill_lib SkillLibrary() planner TaskPlanner(llm, skill_lib) executor SkillExecutor(skill_lib) # 技能执行器 engine WorkflowEngine(executor) # 2. 创建智能体 agent HierarchicalAgent(planner, engine) # 3. 运行 user_goal 帮我规划一个从北京到上海的周末旅行总预算不超过2000元包含交通和住宿最后给我一份行程单。 print(f用户目标: {user_goal}) print(*50) final_itinerary agent.run(user_goal) print(*50) print(【最终行程单】) print(final_itinerary) if __name__ __main__: main()运行这个程序你会看到智能体一步步地规划、确认地点、查询航班酒店、进行预算分配最终生成一份整合好的行程单。虽然这里的技能都是模拟的但整个分层决策和执行的骨架已经清晰可见。实操心得从模拟到真实的挑战在原型阶段用模拟函数快速验证流程是完全可行的。但当你接入真实API时会立刻遇到几个挑战1)API稳定性与错误处理真实网络请求会超时、会返回异常格式。必须在技能执行层做好重试和异常捕获。2)参数提取的复杂性_extract_parameters函数在实际中会非常复杂。一个任务的描述文本中如何准确找到调用“search_hotels”技能所需的city、check_in、max_price等参数这本身可能就需要一个小的LLM调用或一套复杂的规则引擎。3)成本控制每一次任务分解、每一次参数提取可能都需要调用LLM累积起来成本不菲。需要对频繁、固定的任务模式进行缓存或固化比如将常见的任务树模板存储起来直接复用。5. 进阶探讨架构演进与核心挑战实现了一个基础版本后我们会发现还有很多可以优化和深入的地方。分层组合性智能体的架构设计本身就是一个充满挑战和趣味的领域。5.1 动态技能发现与组合我们之前的技能库是静态注册的。但在一个开放环境中智能体可能需要使用它之前不知道的技能。这就引出了动态技能发现。例如智能体可以访问一个技能市场或一个工具文档库。当规划器发现现有技能无法满足某个子任务时它可以主动查询技能库寻找描述匹配的新技能并将其动态组合到当前的任务计划中。这要求技能必须有机器可读的、标准化的描述例如遵循OpenAPI规范。5.2 分层强化学习与反思最初的规划可能不是最优的。智能体需要在执行中学习。我们可以引入分层强化学习的思想。每个任务节点尤其是高层决策节点都可以被赋予一个“价值”评估。当整个任务成功完成并得到用户正面反馈时成功路径上的所有节点都会获得“奖励”从而强化那些做出正确决策如选择了正确的子任务分解方式、选择了性价比高的航班的节点。反之失败则会带来“惩罚”。通过多次运行智能体可以学会更好的分解和决策策略。另一个关键机制是反思。在执行完一个任务尤其是失败后智能体可以启动一个“反思”子任务让LLM分析执行日志找出问题根源是规划不合理技能选择错误参数不对并据此修正当前的任务树或未来的规划策略实现自我改进。5.3 与现有框架的融合你不必完全从零开始。许多新兴的Agent开发框架已经开始支持分层或工作流的概念。例如LangChain其LangGraph库非常适合构建有状态、带循环的工作流你可以用它来实现任务树的调度和执行引擎。Microsoft Autogen支持定义多Agent协作你可以将不同的“子任务”分配给不同角色的Agent一个负责规划一个负责查询一个负责整合天然契合分层思想。CrewAI明确以“角色Agent 任务Task 流程Process”为核心其流程概念如顺序执行、分层执行可以直接用来建模我们的任务树。我的建议是在理解核心原理后可以基于这些成熟框架进行构建能省去大量底层调度和通信的麻烦。5.4 当前面临的核心挑战规划可靠性LLM生成的任务树可能逻辑混乱、不完整或无法执行。需要设计更鲁棒的规划-验证-重规划循环。上下文管理爆炸随着任务树变深变宽需要在不同层级间传递的数据量巨大如何高效、准确地进行上下文传递和版本管理是一大难题。长程依赖与回溯有时执行深层的子任务时才发现高层的某个假设是错的比如预算根本不够。这就需要智能体能够“回溯”到上层甚至修改整个计划。这要求工作流引擎具备更强的状态管理和回滚能力。评估与调试如何评估一个分层智能体的好坏不像简单问答有准确率。需要设计一套针对任务完成度、步骤合理性、效率等多维度的评估体系。调试一个出错的智能体也像调试一个分布式系统非常复杂。6. 典型问题排查与优化技巧在实际开发和运行中你会遇到各种各样的问题。下面是我踩过的一些坑和总结的应对方法。6.1 常见问题速查表问题现象可能原因排查步骤与解决方案LLM规划器输出格式错误Prompt指令不清晰LLM未遵循格式输出被截断。1. 在Prompt中加入更严格的格式描述和示例。2. 降低生成温度temperature。3. 在代码中添加输出格式校验和自动修复逻辑如尝试用正则表达式提取JSON。4. 对于复杂规划采用“分步规划”策略先让LLM输出大纲再细化每一层。技能执行失败参数错误参数提取逻辑有误上下文数据未正确传递技能描述与规划器理解不匹配。1. 打印出技能调用前的完整上下文和提取的参数进行比对。2. 强化参数提取器可考虑用一个小型LLM专门做参数映射。3. 确保技能描述清晰无歧义输入输出格式定义精确。任务陷入无限循环或重复执行任务树中存在循环依赖工作流引擎的状态管理有BugLLM生成了递归性质的任务分解。1. 为任务树中的每个节点增加执行状态未开始、执行中、完成、失败和访问记录。2. 在执行前检查依赖环。3. 设置最大执行深度或超时时间防止死循环。整体执行时间过长所有任务串行执行部分技能如网络请求耗时久LLM调用延迟高。1. 分析任务树将没有依赖关系的子任务改为并行执行。2. 对耗时的技能调用设置合理的超时和异步机制。3. 对LLM的规划结果进行缓存对于相似的用户目标直接复用之前的任务树。结果质量差不符合用户意图任务分解偏离主题技能组合逻辑不合理最终结果合成方式不佳。1. 在规划阶段让LLM同时评估任务树的“可行性”和“与目标的相关性”。2. 在最终结果合成前增加一个“质量检查”步骤用LLM判断结果是否满足用户核心诉求。3. 引入用户反馈机制在关键步骤请求用户确认如“我找到了A和B两个航班您更看重时间还是价格”。6.2 性能与成本优化技巧规划结果缓存对于常见、通用的用户目标如“查天气”、“写周报”其任务树结构往往是相似的。可以将(用户目标, 技能库版本)作为键将规划好的任务树缓存起来。下次遇到类似请求直接使用缓存省去一次LLM调用。技能调用批处理如果多个叶子任务需要调用同一个外部API比如都需要查询不同城市的天气可以将这些请求合并成一个批量请求减少网络开销。轻量级模型分工不是所有步骤都需要最强的GPT-4。可以用小模型如小型开源模型处理简单的参数提取、格式转换、结果初步过滤等任务用大模型专注于核心的复杂规划和决策。这种“大小模型混用”的策略能有效控制成本。异步与非阻塞执行工作流引擎应采用异步设计。当某个技能在等待网络响应时引擎可以去调度其他独立的子任务充分利用等待时间。6.3 提升智能体“智能”感的技巧渐进式呈现不要让用户长时间等待最终结果。智能体可以在执行过程中阶段性输出一些中间成果。例如“已为您找到3个符合预算的航班选项正在比对时间...”、“酒店已筛选完毕接下来为您规划景点路线”。这能极大提升用户体验。提供选择与解释在做出关键决策如选择航班时智能体可以将其推理过程简要呈现给用户“选择了航班A因为它时间最优且价格在预算内”甚至提供几个选项让用户定夺。这增加了透明度和可控性。记忆与个性化为智能体引入长期记忆。记住用户的历史偏好如“用户通常选择靠过道的座位”、“喜欢中式早餐”并在后续规划中主动应用这些偏好会让它感觉更贴心、更智能。构建一个成熟可用的分层组合性智能体是一个系统工程涉及Prompt工程、软件架构、算法设计等多个方面。它没有银弹需要根据具体的应用场景进行大量的迭代和调优。但毫无疑问这是通向更强大、更可靠AI助手的一条必经之路。从今天开始尝试为你自己的智能体引入“分层”和“组合”的思想你会发现它的能力边界将被大大拓展。
返回列表