
提示词工程 与 智能体 工作流构建最小可运行架构与组件职责拆分清晨的阳光透过窗帘缝隙打在桌面杯里的白开水微微冒着热气。很多人在尝试构建 Agent智能代理时最容易犯的错误就是“从宏大构想开始”。想要做一款能够全自动规划日程、整理邮件、生成分析报告的超级助手结果写了上千行复杂的 Prompt调试时却发现系统经常陷入死循环或者在执行第三步时尽量迷路。与其被庞大的概念困住不如回到原点从一个具体的真实任务拆起。比如构建一个“每日健康与办公日程编排 Agent”。把它拆成几个职责极其单一的微型模块用代码把状态控制在手心里。Prompt 不是神仙咒语而是精准的组件职责契约在复杂的 Agent 工作流中试图用一段漫长的 系统提示词System Prompt解决所有问题注定会导致系统的不稳定。模型在面对过长的指令时会出现“中间忽略效应”或“工具选择混淆”。合理的做法是把 Prompt 拆分成“角色上下文”、“当前任务目标”、“输入/输出 JSON Schema”以及“严格的边界限制”四个部分。每一个 Agent 阶段只负责完成一件微小的事意图拆解阶段只负责将模糊的自然语言转化成确定的任务节点列表。工具调用阶段只根据节点数据拼接参数并调用具体的 Python 函数或 API。结果汇总阶段只负责将调用返回的结构化数据转换为温和、自然的对话文本。当每一个环节的职责界限划定清楚后系统即使遇到 LLM 输出格式异常也能够精准定位并进行局部重试而不是让整个工作流崩溃。实现轻量级状态机 Agent 工作流引擎下面的 Python 代码示范了一个最小可运行的 Agent 工作流架构。它包含了状态上下文管理、工具注册与执行、JSON 解析失败自动纠错以及最大迭代次数防护完全不依赖昂贵的庞大框架逻辑清晰易读。import json import logging from typing import Dict, Any, Callable, List, Optional from pydantic import BaseModel, Field logging.basicConfig(levellogging.INFO, format%(asctime)s - [%(levelname)s] - %(message)s) logger logging.getLogger(AgentRunner) class AgentState(BaseModel): user_query: str current_step: str INIT extracted_params: Dict[str, Any] Field(default_factorydict) tool_results: Dict[str, Any] Field(default_factorydict) final_output: Optional[str] None retry_count: int 0 max_retries: int 3 class ToolRegistry: 工具注册表负责管控 Agent 可调用的底层能力 def __init__(self): self._tools: Dict[str, Callable] {} def register(self, name: str, func: Callable): self._tools[name] func logger.info(f工具已注册: {name}) def execute(self, name: str, **kwargs) - Any: if name not in self._tools: raise KeyError(f未找到工具: {name}) return self._tools[name](**kwargs) # 拟合工具函数 def get_user_schedule(date_str: str) - List[str]: 模拟查询用户日程 return [f{date_str} 10:00 团队早会, f{date_str} 14:30 方案评审] def get_weather_info(city: str) - str: 模拟查询天气信息 return f{city} 今日天气晴朗气温 22°C ~ 28°C class WorkflowAgent: 轻量级状态机 Agent 运行器 拆分 Prompt 责任并控制流转链路 def __init__(self, registry: ToolRegistry): self.registry registry def _parse_llm_json_response(self, raw_text: str) - Dict[str, Any]: 稳健解析 LLM 返回的 JSON 字符串包含简单剥离容错 cleaned raw_text.strip() if cleaned.startswith(json): cleaned cleaned[7:] if cleaned.endswith(): cleaned cleaned[:-3] return json.loads(cleaned.strip()) def _mock_llm_call(self, prompt: str) - str: 模拟大语言模型返回结构化 JSON 指令 if 意图拆解 in prompt: return {action: CALL_TOOL, tool_name: get_schedule, params: {date_str: 2026-08-18}} elif 汇总结果 in prompt: return {action: FINISH, reply: 您在 2026-08-18 有 2 项日程安排10:00 团队早会14:30 方案评审。天气适宜祝工作愉快} return {action: ERROR} def step(self, state: AgentState) - AgentState: 状态机单步流转控制 logger.info(f当前 Agent 状态: {state.current_step}, 重试计数: {state.retry_count}) if state.retry_count state.max_retries: state.current_step FAILED state.final_output 系统处理超时或出现连续解析错误无法完成任务。 return state try: if state.current_step INIT: # 步骤 1意图拆解 Prompt prompt f任务: 意图拆解。用户需求: {state.user_query} raw_llm_out self._mock_llm_call(prompt) parsed self._parse_llm_json_response(raw_llm_out) if parsed.get(action) CALL_TOOL: state.extracted_params parsed.get(params, {}) state.current_step EXECUTE_TOOL else: state.retry_count 1 elif state.current_step EXECUTE_TOOL: # 步骤 2安全执行工具 res self.registry.execute(get_schedule, **state.extracted_params) state.tool_results[schedule] res state.current_step SUMMARIZE elif state.current_step SUMMARIZE: # 步骤 3结果汇总 Prompt prompt f任务: 汇总结果。数据: {state.tool_results} raw_llm_out self._mock_llm_call(prompt) parsed self._parse_llm_json_response(raw_llm_out) if parsed.get(action) FINISH: state.final_output parsed.get(reply) state.current_step COMPLETED else: state.retry_count 1 except Exception as e: logger.error(f执行步骤 {state.current_step} 时捕获异常: {e}) state.retry_count 1 return state def run(self, user_query: str) - str: 运行完整工作流直到结束 state AgentState(user_queryuser_query) while state.current_step not in (COMPLETED, FAILED): state self.step(state) return state.final_output or 生成失败 # 测试驱动执行 if __name__ __main__: registry ToolRegistry() registry.register(get_schedule, get_user_schedule) registry.register(get_weather, get_weather_info) agent WorkflowAgent(registry) result agent.run(帮我查一下 2026年08月18日 的日程) logger.info(f最终 Agent 响应:\n{result})在真实业务场景中保持架构的优雅扩展当我们完成了最小可运行架构MVP后后续的拓展就会变得有条不紊。如果需要增加一个新功能例如在查询日程的同时查询路况只需要在工具注册表中增加一个新的工具方法并在意图解析模块的规则中增加对应的识别逻辑即可。架构的简洁明了能够极大降低调试难度。在构建复杂的 AI 应用时不需要一开始就追求花哨的全局智能用严谨的代码为 Agent 画好跑道它才能在既定的路线里发挥出最大的功效。