AI智能体架构设计:Plan-and-Execute范式解析与工程实践
1. 项目概述:拆解Agent架构的经典范式
最近和几个做AI应用落地的朋友聊天,发现一个挺有意思的现象:大家一提到构建生产级的智能体(Agent),尤其是在处理复杂、多步骤任务时,几乎都会不约而同地提到“规划与执行分离”这个架构思想。这听起来像是一个老生常谈的软件工程原则,但在大模型驱动的Agent领域,它被赋予了新的内涵和紧迫性。今天我们就来深挖一下这个被称为“Plan-and-Execute”的范式,看看它为什么能从众多Agent架构中脱颖而出,成为构建可靠、可维护、可解释的生产级AI系统的基石。
简单来说,Plan-and-Execute是一种将智能体的决策过程明确划分为“规划”和“执行”两个阶段的架构模式。规划阶段,由一个大模型(通常是更强大的“思考者”模型)负责分析任务、拆解步骤、制定策略;执行阶段,则由另一个模型或专门的执行模块,严格遵循规划好的步骤,调用工具、查询知识库或与环境交互,逐步完成任务。这和我们人类处理复杂问题的方式很像:接到一个项目,先花时间做方案设计、任务分解和资源规划,然后再按部就班地去执行,而不是一头扎进去边做边想。
为什么这个话题值得单独拿出来讲?因为在实际的AI产品研发和面试中,对Plan-and-Execute的理解深度,直接反映了你对AI系统工程化、对智能体可靠性、以及对大模型能力边界认知的水平。它不仅仅是一个技术选型,更是一种设计哲学。接下来,我们就从为什么需要拆分、如何具体实现、以及落地时会遇到哪些“坑”这几个维度,把它掰开揉碎了讲清楚。
2. 核心需求解析:为什么“边想边做”在生产环境行不通
在讨论Plan-and-Execute之前,我们得先明白它要解决什么问题。很多初学者,或者基于简单Demo构建的Agent,采用的是一种“ReAct”或类似“思维链”提示的即时推理模式。模型接收到用户请求后,即时思考下一步该做什么,然后执行,再根据结果思考下一步,如此循环。这种方式在简单任务上表现灵动,但一旦进入生产环境,面对真实世界的复杂性和不确定性,其弊端就会暴露无遗。
2.1 可靠性危机:单步决策的脆弱性
生产环境的核心要求之一是稳定和可预测。一个“边想边做”的Agent,其每一步决策都严重依赖上一步的执行结果和模型的即时推理。这就像让一个没有地图的司机在陌生城市里开车,每个路口都现想该往哪拐。一旦某一步执行出错,或者模型在某次推理中“头脑发热”做出了一个离谱的决定,整个任务链就可能跑偏,甚至陷入死循环。例如,一个处理客户订单的Agent,如果在“验证库存”和“创建物流单”之间反复横跳,就是因为缺乏一个顶层的任务流视图。
注意:这种脆弱性在长周期、多依赖的任务中会被放大。模型可能会忘记长远目标,陷入局部最优,或者被中途的异常信息带偏方向。
2.2 可解释性与可控性的缺失
当业务方或运维人员发现一个Agent任务失败时,他们最需要的是快速定位问题:“它到底想干什么?在哪一步出了问题?”在即时推理模式下,模型的“思考过程”散落在交互历史中,与工具调用结果交织在一起,难以梳理。你很难向产品经理解释为什么这个客服Agent突然开始给用户推荐毫不相关的产品,因为它的决策逻辑是黑盒的、连续的。
将规划与执行分离后,规划阶段会产生一个明确的、结构化的任务计划(比如一个步骤列表或一个有向无环图)。这个计划本身就是最好的“设计文档”和“日志”。无论是调试、审计,还是人工干预(比如批准某个关键步骤),都有了清晰的抓手。
2.3 资源与成本优化
大模型的API调用是按Token计费的,复杂的工具调用(如数据库查询、第三方API)也可能产生成本和延迟。在即时推理模式下,模型可能会进行一些不必要的、重复的思考或工具调用。一个清晰的规划阶段,可以在行动开始前就优化路径。例如,规划器可以识别出“查询用户信息”和“查询订单历史”这两个步骤可以合并为一次数据库联合查询,或者意识到某些步骤依赖于相同的外部数据,可以预先批量获取。这能显著降低总体延迟和运营成本。
2.4 能力分工与系统集成
不同的模型或模块擅长不同的事。比如,GPT-4在复杂逻辑推理和规划上可能更强,而GPT-3.5-Turbo或更小的模型在遵循指令、格式化输出方面性价比更高。Plan-and-Execute架构天然支持这种分工:让“大将”运筹帷幄(规划),让“士兵”高效冲锋(执行)。同时,规划器产生的结构化计划,可以很方便地集成到现有的工作流引擎、任务调度系统或监控告警平台中,让AI能力成为企业IT架构中的一个标准组件,而非一个难以管控的黑盒应用。
3. 架构设计与核心组件拆解
理解了“为什么”,我们来看看“是什么”。一个典型的Plan-and-Execute架构包含几个核心组件,它们各司其职,共同协作。下图展示了一个简化的逻辑视图:
[用户请求] | v [规划器 (Planner)] | (生成结构化计划) v [计划 (Plan)]: 步骤1 -> 步骤2 -> 步骤3 | v [执行器 (Executor)] ----> [工具集/知识库/环境] | (按步骤执行,收集结果) v [最终结果] -> [返回给用户]3.1 规划器:系统的“大脑”
规划器是整个架构的起点,也是智能的核心体现。它的输入是用户的自然语言请求和可选的上下文信息(如用户资料、会话历史),输出是一个可执行的结构化计划。
规划器的核心职责包括:
- 任务理解与目标澄清:准确理解用户的意图,必要时通过多轮对话澄清模糊需求。
- 任务分解:将宏观目标分解为一系列原子化的、可执行的子任务。例如,“帮我策划一个周末旅行”可能被分解为“确定预算和偏好”、“搜索目的地和交通”、“查找并对比酒店”、“制定每日行程草案”。
- 依赖关系分析:识别子任务之间的前后顺序和依赖关系。比如,“预订酒店”可能依赖于“确定目的地”,“租车”可能依赖于“航班时间确定”。
- 资源与约束识别:明确执行计划所需的资源(需要调用哪些工具、查询哪些数据源)和约束条件(时间、预算、规则限制)。
- 计划表述:将上述分析结果输出为一种结构化的格式。常见的格式有:
- 线性步骤列表:最简单,适用于顺序任务。
- 有向无环图:能清晰表达并行、选择、循环等复杂逻辑。
- 领域特定语言:针对特定业务场景设计的结构化描述。
实现规划器的常见技术路径:
- 提示工程:设计精妙的提示词,引导大模型直接输出JSON、YAML或特定格式的文本。这是最快速的原型方法。例如,使用类似“你是一个任务规划专家,请将以下目标分解为步骤,并以JSON数组输出,每个步骤包含‘id‘, ‘action‘, ‘dependencies‘字段...”的提示。
- 规划微调模型:使用任务分解和规划的数据集,对一个大模型进行微调,使其专门擅长生成高质量的计划。这能获得更稳定、更符合业务逻辑的输出。
- 基于规则的规划器:对于流程高度标准化、确定性的领域(如IT运维、数据ETL),可以直接使用基于规则引擎或状态机的规划器,其确定性和性能最高。
3.2 计划:沟通的“蓝图”
计划是规划器的输出,也是连接规划与执行的桥梁。一份好的计划应该具备以下特性:
- 可执行性:每个步骤都必须对应一个执行器能够理解并执行的动作(如调用某个工具函数)。
- 无歧义:步骤的描述、输入参数必须清晰明确。
- 可观测:包含足够的元数据,如步骤ID、预期输出、超时时间、重试策略等,便于监控和调试。
一个计划的数据结构示例(JSON格式):
{ “plan_id”: “travel_plan_20240520_001”, “goal”: “为预算5000元的两口之家策划一个北京三日游”, “steps”: [ { “id”: 1, “description”: “根据预算和偏好,筛选出3个备选目的地方案”, “action”: “call_tool”, “tool_name”: “destination_recommender”, “parameters”: {“budget”: 5000, “duration”: 3, “travelers”: 2, “interests”: [“history”, “food”]}, “dependencies”: [], “expected_output”: “一个包含目的地名称、主要景点、预估费用的列表” }, { “id”: 2, “description”: “查询未来两周内往返北京的机票价格”, “action”: “call_tool”, “tool_name”: “flight_search”, “parameters”: {“origin_city”: “上海”, “destination_city”: “北京”, “date_range”: “next_two_weeks”}, “dependencies”: [1], // 依赖于步骤1确定了目的地 “expected_output”: “航班时刻表及价格列表” }, // ... 更多步骤 ], “constraints”: {“max_budget”: 5500, “must_return_by”: “2024-06-10”} }3.3 执行器:可靠的“双手”
执行器是计划的忠实履行者。它接收规划器产生的计划,按顺序(或按依赖关系解析出的顺序)逐步执行每个步骤。
执行器的核心逻辑:
- 计划解析与调度:读取计划,解析步骤间的依赖关系,确定执行顺序。对于可以并行执行的步骤,可以启动多个执行线程。
- 上下文管理:维护一个“执行上下文”,用于在步骤间传递数据。例如,步骤1输出的“目的地列表”需要被传递给后续依赖它的步骤作为输入。
- 工具调用与集成:根据步骤描述中的
action和tool_name,调用对应的工具函数(如调用搜索引擎API、查询数据库、运行代码)。这里需要健壮的错误处理和重试机制。 - 结果收集与验证:收集每个步骤的执行结果,并与
expected_output进行粗略比对(如检查返回类型是否合理,是否包含错误信息)。将结果更新到执行上下文中。 - 状态持久化与恢复:对于长时间运行的任务,执行器需要将计划执行进度和上下文持久化到数据库。这样即使系统中断,重启后也能从断点继续,这是生产级系统的必备能力。
- 异常处理与反馈:当某个步骤执行失败(如工具调用超时、返回错误),执行器不能直接崩溃。它需要根据预设的策略(重试、跳过、转入人工处理)进行处理,并可能将异常信息反馈给规划器或监控系统,触发计划的动态调整。
4. 实操要点与关键技术实现
理论讲完了,我们来看看怎么动手搭建一个最基本的Plan-and-Execute框架。这里我们以Python环境为例,使用LangChain框架来简化开发,但原理是通用的。
4.1 构建一个基础的规划器
我们首先实现一个基于提示工程的简单规划器。假设我们有一个“旅行规划”的场景。
from langchain.prompts import PromptTemplate from langchain.chat_models import ChatOpenAI from langchain.output_parsers import StructuredOutputParser, ResponseSchema import json # 1. 定义我们期望的计划输出结构 response_schemas = [ ResponseSchema(name=“goal”, description=“原始用户目标”), ResponseSchema(name=“steps”, type=“List[str]”, description=“有序的任务步骤列表”), ResponseSchema(name=“constraints”, type=“List[str]”, description=“需要遵守的约束条件”), ] output_parser = StructuredOutputParser.from_response_schemas(response_schemas) format_instructions = output_parser.get_format_instructions() # 2. 构建规划提示模板 planning_template = “”” 你是一个资深的旅行规划专家。请将用户的旅行需求分解为具体、可执行的任务步骤。 用户需求:{user_input} 请严格按照以下要求输出: 1. 明确最终目标。 2. 将实现目标的过程分解为多个步骤,步骤应原子化、无歧义。 3. 列出所有已知的约束条件。 {format_instructions} “”” prompt = PromptTemplate( template=planning_template, input_variables=[“user_input”], partial_variables={“format_instructions”: format_instructions} ) # 3. 初始化大模型并调用 llm = ChatOpenAI(model_name=“gpt-4”, temperature=0) # 使用低temperature保证输出稳定性 planning_chain = prompt | llm | output_parser # 4. 示例调用 user_request = “我想在七月份,用8000元预算,带家人(两大一小)去青岛玩四天三晚,孩子6岁,希望行程轻松,有沙滩和海洋馆。” try: plan = planning_chain.invoke({“user_input”: user_request}) print(json.dumps(plan, indent=2, ensure_ascii=False)) except Exception as e: print(f“规划失败: {e}”)实操心得:
- Temperature参数:规划阶段务必使用较低的temperature(如0或0.1),以确保输出的计划稳定、可重复。高随机性会导致每次生成的计划不一致,给调试和运维带来噩梦。
- 结构化输出:使用
StructuredOutputParser或类似库(如Pydantic)强制模型输出JSON等结构化数据,这比解析自由文本可靠得多。 - 提示词工程:在提示词中明确要求“原子化”、“可执行”,并给出好的示例(Few-shot),能显著提升规划质量。
4.2 实现一个状态感知的执行器
执行器需要跟踪计划状态。我们实现一个简单的版本。
class SimpleExecutor: def __init__(self, tools): self.tools = {tool.name: tool for tool in tools} # 工具字典 self.context = {} # 执行上下文 def execute_step(self, step_description): “”“模拟执行一个步骤。在实际中,这里会解析description,调用对应工具。”“” # 这里是一个简化模拟。真实场景需要更复杂的NLU来理解step_description并映射到工具。 print(f“执行: {step_description}”) # 假设执行成功,并返回一个模拟结果 simulated_result = f“{step_description} 的完成结果” return {“success”: True, “result”: simulated_result} def execute_plan(self, plan): “”“顺序执行计划中的步骤”“” results = [] for i, step in enumerate(plan[“steps”]): print(f“\n=== 开始步骤 {i+1}/{len(plan[‘steps’])} ===") step_result = self.execute_step(step) if step_result[“success”]: # 将结果存入上下文,键可以是步骤ID或描述 self.context[f“step_{i}_result”] = step_result[“result”] results.append(step_result) else: print(f“步骤 {i+1} 执行失败: {step_result.get(‘error‘, ‘Unknown‘)}”) # 这里应触发错误处理逻辑,如重试或终止计划 break return results # 模拟使用 plan = { “goal”: “测试计划”, “steps”: [“第一步:搜索青岛七月份天气”, “第二步:查找适合亲子入住的酒店”, “第三步:规划每日行程”] } executor = SimpleExecutor(tools=[]) # 暂时不传入具体工具 executor.execute_plan(plan)4.3 处理依赖与动态调整
简单的顺序执行远远不够。我们需要处理步骤间的依赖,并允许动态调整。
import networkx as nx class AdvancedExecutor(SimpleExecutor): def __init__(self, tools): super().__init__(tools) self.dependency_graph = nx.DiGraph() def build_dependency_graph(self, plan): “”“根据计划中的依赖关系构建有向图”“” self.dependency_graph.clear() for step in plan[“steps”]: self.dependency_graph.add_node(step[“id”], **step) for dep in step.get(“dependencies”, []): self.dependency_graph.add_edge(dep, step[“id”]) def execute_plan_with_deps(self, plan): “”“基于依赖关系拓扑排序后执行”“” self.build_dependency_graph(plan) try: # 进行拓扑排序,得到合理的执行顺序 execution_order = list(nx.topological_sort(self.dependency_graph)) except nx.NetworkXUnfeasible: print(“错误:计划中存在循环依赖!”) return [] results = {} for step_id in execution_order: step_data = self.dependency_graph.nodes[step_id] print(f“\n=== 开始步骤 {step_id}: {step_data[‘description’]} ===") # 准备输入参数:可以从上下文或之前步骤的结果中获取 params = step_data.get(“parameters”, {}) # 这里可以添加逻辑,将依赖步骤的结果注入到params中 # 例如:如果参数中有`{step_1_result}`, 则用results[1]替换 # 执行步骤(这里调用真实工具) # tool = self.tools.get(step_data[“tool_name”]) # result = tool.run(params) result = {“success”: True, “output”: f“Step {step_id} mock output”} if result[“success”]: results[step_id] = result[“output”] self.context[step_id] = result[“output”] else: print(f“步骤 {step_id} 失败,可能影响后续步骤。”) # 动态调整策略:可以跳过、重试、或调用一个“重新规划器” # replan_decision = self.handle_failure(step_id, result) # if replan_decision == “abort”: # break return results关键点:
- 依赖解析:使用图像论库(如NetworkX)可以方便地处理复杂的依赖关系,并进行拓扑排序,找到合法的执行顺序,还能检测出循环依赖这种错误。
- 上下文注入:执行器需要智能地将上游步骤的输出,作为参数注入到下游步骤的输入中。这通常需要在步骤定义或工具定义时约定好参数映射规则。
- 失败处理:步骤失败后的策略是执行器的关键。简单的重试、跳过,复杂的可以触发一个“重新规划”子流程,让规划器基于当前状态和失败原因,生成一个调整后的剩余计划。
5. 生产级落地的挑战与应对策略
把Plan-and-Execute跑起来不难,但要让它稳定、高效地运行在生产环境中,会面临一系列挑战。
5.1 规划器的“幻觉”与不确定性
大模型生成的计划可能不完整、不合理或包含虚构步骤(幻觉)。例如,规划一个数据分析任务时,可能会漏掉“数据清洗”这个关键步骤,或者凭空捏造一个不存在的API。
应对策略:
- 约束引导:在提示词中强加入业务规则和约束(如“必须包含数据验证步骤”、“不能使用外部付费API”)。
- 计划验证层:在规划器之后,增加一个独立的“计划验证”模块。这个模块可以是一个规则引擎,也可以是一个专门训练的小模型,用于检查计划的合理性、完整性和安全性。
- 人工审核回路:对于高风险或关键任务,生成的计划可以先提交给人工审核确认后再执行。这尤其适用于金融、医疗等领域。
5.2 长周期任务的持久化与状态恢复
一个计划可能执行几个小时甚至几天(如监控一个长期实验)。服务器重启、网络波动都可能导致中断。
解决方案:
- 状态持久化:将计划本身、每个步骤的执行状态(待执行、执行中、成功、失败)、执行上下文以及中间结果,全部保存到数据库(如PostgreSQL, MongoDB)或分布式存储中。
- 执行器无状态化:执行器本身设计成无状态的,每次从持久化存储中加载任务状态并执行一步或几步,然后再保存回去。这样执行器可以随时扩缩容或重启。
- 使用成熟框架:考虑使用Celery、Airflow、Temporal等成熟的工作流引擎来管理任务的状态、调度和持久化,将执行器作为这些引擎的“Worker”。
5.3 工具执行的错误处理与重试
工具调用失败是常态而非异常。网络超时、API限流、数据格式不符等问题层出不穷。
健壮性设计:
- 分级重试策略:不是所有失败都值得重试。可以定义不同的重试策略:
- 瞬时错误(如网络超时):立即重试,最多3次,指数退避。
- 业务错误(如参数无效):不重试,直接标记失败,记录错误原因。
- 资源不足错误(如API限流):等待较长时间后重试,或升级告警。
- 熔断与降级:如果某个工具持续失败,可以触发“熔断”,暂时停止调用该工具,并执行降级方案(如返回缓存数据、使用备用工具、或通知人工处理)。
- 详尽的日志记录:记录每次工具调用的入参、出参、耗时和错误信息。这是事后排查问题的唯一依据。
5.4 监控、可观测性与调试
当线上Agent行为异常时,你需要快速回答:它在执行什么计划?当前在哪一步?这一步的输入输出是什么?为什么卡住了?
可观测性建设:
- 结构化日志:不要打印纯文本日志。使用JSON格式记录每一个关键事件,如
{“event”: “plan_created”, “plan_id”: “xxx”, “steps”: […]},{“event”: “step_started”, “step_id”: 1, …},{“event”: “tool_called”, “tool”: “search”, “params”: …, “result”: …, “duration_ms”: 120}。这样便于日志系统(如ELK)进行聚合和查询。 - 分布式追踪:为每个用户请求分配一个唯一的
trace_id,并让这个ID贯穿规划、执行的每一个步骤和工具调用。这样可以在复杂的分布式调用中,完整还原一个请求的生命周期。可以使用OpenTelemetry等标准。 - 指标监控:定义关键业务和技术指标(KPI),并持续监控:
- 业务指标:任务成功率、平均完成时间、用户满意度。
- 技术指标:规划耗时、各步骤执行耗时、工具调用失败率、大模型Token消耗。
- 设置告警阈值,当指标异常时及时通知。
6. 进阶模式与架构变体
基础的Plan-and-Execute是串行的“规划-执行”一次完成。但在更复杂的场景下,衍生出了几种强大的变体。
6.1 反射式规划与执行
这是对基础模式的增强,在执行过程中引入了“反思”环节。模型不仅按计划执行,还会在关键节点或遇到困难时,停下来评估当前进展和状态,判断原计划是否依然可行,必要时重新规划。
工作流变为:规划 -> 执行N步 -> 反思当前状态与目标差距 -> [如果OK] 继续执行 -> [如果不行] 重新规划 -> 基于新规划继续执行。
适用场景:环境动态变化、信息不完全的任务。例如,一个游戏AI,最初规划了进攻路线,但执行中发现敌人增援,就需要重新规划。
6.2 分层规划
将规划本身也分层级。一个顶层的“战略规划器”制定高级目标(如“赢得市场占有率”),中层“战术规划器”将其分解为具体战役(如“发起促销活动”、“优化产品页面”),底层的“操作规划器”再生成可执行步骤(如“配置优惠券”、“修改网页文案”)。
优点:模块清晰,不同层级的规划可以使用不同复杂度的模型,也便于在不同粒度上进行监控和干预。
6.3 多智能体协作规划
在一个系统中部署多个具有不同专长的智能体,它们共同参与规划和执行。例如,一个“数据分析Agent”负责规划数据提取和清洗步骤,一个“可视化Agent”负责规划图表生成步骤,一个“协调Agent”负责统筹它们的工作顺序和数据传递。
Plan-and-Execute架构在这里成为了协调多智能体的框架。中央协调器生成一个总体计划,将不同子任务分配给对应的专家Agent去执行,并管理它们之间的交互和依赖。
7. 面试视角下的深度考察点
如果你在面试中遇到关于Plan-and-Execute的问题,面试官想考察的绝不仅仅是概念。他们希望看到你对其背后工程挑战的深刻理解。
可能的问题与回答思路:
“Plan-and-Execute相比ReAct等即时推理模式,最主要的trade-off是什么?”
- 答:主要权衡在于灵活性与可靠性/效率。Plan-and-Execute通过前置的深度思考,牺牲了一定的应对突发变化的灵活性(因为计划是事先定好的),换来了更高的任务完成可靠性、更好的可解释性、更优的资源利用(减少冗余思考)以及对长周期任务的支持。而ReAct模式更灵活,能边做边调整,但在复杂任务中容易迷失、出错率高,且难以管理和调试。
“如何评估一个规划器生成计划的质量?”
- 答:可以从多个维度设计评估指标:
- 正确性:计划最终能达成用户目标的比例(成功率)。
- 完整性:计划是否覆盖了所有必要的子任务,没有关键遗漏。
- 效率:计划所需的步骤数、预计总耗时或总成本(如API调用费用)是否最优。
- 可执行性:每个步骤是否都清晰、无歧义,且都有对应的可用工具或能力去实现。
- 安全性/合规性:计划是否违反了业务规则或安全约束。
- 答:可以从多个维度设计评估指标:
“当执行器发现某个步骤无法完成(如工具失效)时,系统应该怎么做?”
- 答:这是一个典型的异常处理设计题。一个健壮的系统应该有分层处理策略:
- 第一步:本地重试与降级。检查是否是瞬时错误(网络、限流),进行有限次重试。如果有备用工具或方案,尝试降级处理。
- 第二步:计划局部调整。如果步骤失败但非关键,是否可以跳过?或者是否有替代步骤?可以触发一个轻量的“局部重规划”模块。
- 第三步:全局重新规划。如果步骤关键且无法替代,则将当前状态(已完成步骤结果、失败信息)反馈给规划器,请求基于新状态生成一个新的剩余计划。
- 第四步:人工介入。如果自动重规划也失败,或任务非常关键,应立即暂停任务,并通知人工处理,同时提供完整的上下文和日志。
- 答:这是一个典型的异常处理设计题。一个健壮的系统应该有分层处理策略:
“在微服务架构下,如何设计一个高可用的Plan-and-Execute服务?”
- 答:这考察分布式系统设计能力。关键点包括:
- 服务拆分:将规划器、执行器、工具网关、状态存储拆分为独立服务,便于独立部署和扩展。
- 无状态与弹性:规划器和执行器实例应设计为无状态的,通过负载均衡提供服务。状态(计划、上下文)必须持久化在共享存储(如Redis、DB)中。
- 消息队列解耦:用户请求进入消息队列,规划器作为消费者。生成的计划作为消息放入执行队列,由多个执行器Worker并发消费。这实现了异步处理和流量削峰。
- 幂等性:执行器的每个步骤操作应尽量设计为幂等的,防止因重试导致重复副作用(如重复下单)。
- 健康检查与熔断:每个服务都需要健康检查端点。工具调用层要实现熔断机制,防止故障扩散。
- 答:这考察分布式系统设计能力。关键点包括:
我个人在多个AI项目中实践Plan-and-Execute架构的体会是,它最大的价值在于将AI的“智能”纳入了软件工程的管控体系。规划阶段产出的结构化计划,就像一份标准的产品需求文档或设计图,使得整个AI系统的行为变得可预期、可评审、可测试。执行器的标准化接口和状态管理,则使得AI能力能够像微服务一样被调度和运维。这或许是当前阶段,将大模型的能力可靠、规模化地融入复杂商业系统的必经之路。
