ARTICLE DETAIL

资讯详情

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

Agentic AI:用一次交付过程做复盘

Agentic AI:用一次交付过程做复盘 聊《Agentic AI跑通那天我才发现前面的学习顺序反了》之前先说一句实在的别急着背概念先看它在真实项目里到底解决什么问题。摘要最近很多开发者跑来问我同一个问题自己写的 Agentic AI Demo 跑得挺顺为什么一交给团队就出乱子我复盘了几个翻车项目后发现问题不在模型能力而在权限管理、日志追踪和任务拆解这三个环节。这篇文章把我踩过的坑和总结的判断标准写出来希望能帮你少走弯路。目录Agentic 的定义别被概念带偏自主性边界能交给 Agent 的到底是什么任务拆解从一句话到可执行的步骤可观测性Demo 跑通只是第一步安全约束权限和日志才是团队接手的硬门槛总结---Agentic 的定义别被概念带偏很多人对 Agentic AI 的理解还停留在能对话的机器人阶段。实际上Agentic 的核心特征是自主决策工具调用任务执行而不是多轮对话能力。我见过太多项目一开始就把 Agentic 理解错了。比如一个客服场景开发者做了一个能回答问题的聊天机器人然后声称这是Agentic AI。但问题是这个系统没有工具调用能力不能主动查询数据库、提交工单、或者调用外部 API它只是一个带记忆的问答系统。真正的 Agentic AI 应该能1. 理解任务目标2. 自主拆解任务3. 调用工具执行4. 根据结果调整策略我最近帮一个团队做技术评审他们的 Agent 能回答各种问题但业务方提的需求是自动处理退款。这个 Agent 完全没有调用支付系统的权限也不能自主判断退款金额。我说这不是 Agentic AI只是一个智能客服。所以定义 Agentic 的关键判断标准是它能不能在没有人工干预的情况下完成一个完整的业务动作如果你写的 Agent 只能回答问题不能执行操作那它就不是 Agentic。---自主性边界能交给 Agent 的到底是什么自主性不是越强越好。我见过一个项目Agent 被赋予了完全自主的权限结果它在处理一个订单时自己决定取消订单、退款、并通知用户。整个过程没有人工审核最后导致客户投诉。自主性的边界应该怎么划我的判断标准是高风险操作必须人工确认低风险操作可以自主执行。具体来说查询类操作查订单、查库存可以完全自主写入类操作创建订单、修改价格需要人工确认删除类操作删除数据、取消订单必须人工确认涉及金钱的操作退款、付款必须人工确认我最近在做一个项目时给 Agent 设计了这样的权限层级from enum import Enum from typing import Optional class RiskLevel(Enum): LOW low MEDIUM medium HIGH high CRITICAL critical class Permission: def __init__(self, action: str, risk_level: RiskLevel, requires_approval: bool False): self.action action self.risk_level risk_level self.requires_approval requires_approval def can_execute(self, user_role: str) - bool: if self.risk_level RiskLevel.LOW: return True if self.risk_level RiskLevel.MEDIUM: return user_role in [agent, manager] if self.risk_level RiskLevel.HIGH: return user_role manager if self.risk_level RiskLevel.CRITICAL: return False # 必须人工确认这个设计让我可以明确告诉团队Agent 能做什么不能做什么。而不是一上来就给 Agent 最高权限然后出事了再补救。---任务拆解从一句话到可执行的步骤任务拆解是 Agentic AI 最容易被低估的环节。很多人觉得让模型自己拆解不就行了但实际上模型拆解的任务质量直接影响最终结果。我复盘了一个订单处理 Agent 的项目它的任务拆解逻辑是这样的import json from typing import List, Dict class TaskPlanner: def __init__(self, llm_client): self.llm llm_client def decompose_task(self, task_description: str, context: Dict) - List[Dict]: prompt f 请根据以下任务描述拆解成可执行的步骤。 任务{task_description} 上下文{json.dumps(context, ensure_asciiFalse)} 要求 1. 每个步骤必须有明确的输入和输出 2. 步骤之间要有依赖关系 3. 高风险步骤需要标注人工确认 请以JSON数组格式返回每个元素包含 - step: 步骤描述 - tool: 调用的工具名称 - input: 输入参数 - output: 预期输出 - requires_approval: 是否需要人工确认 response self.llm.generate(prompt) steps json.loads(response) return steps这个设计的关键是让模型返回结构化的任务列表而不是自由文本。这样后续的执行引擎才能正确解析和执行。我见过很多项目任务拆解做得很粗糙导致 Agent 执行时出现死循环或者遗漏关键步骤。比如一个处理客户投诉的任务如果拆解成查询订单-查询物流-判断责任-执行退款每个步骤都有明确的输入输出那执行起来就很顺畅。但如果只是让模型自己去处理那结果就很难预测。任务拆解的判断标准每个步骤是否独立可执行步骤之间的依赖关系是否清晰是否有明确的终止条件---可观测性Demo 跑通只是第一步这是我最想强调的部分。很多开发者在写 Demo 时只关注功能是否跑通而忽略了可观测性。但可观测性恰恰是项目能否交给团队维护的关键。我最近做了一个项目一开始只关注 Agent 能不能完成任务结果上线后团队完全不知道 Agent 在执行什么。每次出问题时只能去查日志但日志里没有 Agent 的思考过程只有最终的执行结果。可观测性应该包含三个层面1. 执行轨迹Agent 每一步做了什么调用了什么工具输入输出是什么2. 决策理由Agent 为什么选择这个工具为什么这样拆解任务3. 性能指标每次执行的耗时、成功率、失败原因我设计了一个简单的可观测性框架import time import uuid from datetime import datetime from typing import Dict, Any, List import json class AgentObserver: def __init__(self, agent_id: str): self.agent_id agent_id self.execution_id str(uuid.uuid4()) self.start_time datetime.now() self.steps: List[Dict] [] def record_step(self, step_name: str, tool: str, input_data: Dict, output_data: Any, duration: float): self.steps.append({ step_name: step_name, tool: tool, input: input_data, output: output_data, duration_ms: duration * 1000, timestamp: datetime.now().isoformat() }) def get_summary(self) - Dict: return { agent_id: self.agent_id, execution_id: self.execution_id, start_time: self.start_time.isoformat(), total_duration_ms: sum(s[duration_ms] for s in self.steps), step_count: len(self.steps), steps: self.steps } # 使用示例 observer AgentObserver(order_agent) observer.record_step( step_name查询订单信息, toolorder_query, input_data{order_id: ORD123456}, output_data{status: shipped, tracking: SF123456}, duration0.5 ) print(json.dumps(observer.get_summary(), indent2, ensure_asciiFalse))这个框架让我可以追踪 Agent 的每一步执行包括耗时和结果。当团队接手项目时他们可以通过这些日志快速定位问题。可观测性的判断标准当 Agent 出问题时团队能否在5分钟内定位到具体是哪一步出了问题---安全约束权限和日志才是团队接手的硬门槛这是我踩坑最多的地方。一开始我以为 Agent 的安全问题主要是模型输出的安全问题比如防止生成有害内容。但实际上真正的问题是 Agent 能调用什么工具、能访问什么数据。我复盘了几个翻车项目发现共同点是Agent 的权限设置太宽泛导致它可以执行超出预期范围的操作。安全约束应该从三个层面设计1. 工具权限Agent 只能调用明确授权的工具。不能因为它看起来能做就允许它调用。2. 数据权限Agent 只能访问授权的数据范围。比如客服 Agent 只能查询用户自己的订单不能查询所有用户的订单。3. 操作限制高风险操作必须人工确认不能由 Agent 自主执行。我设计了一个安全策略引擎class SecurityPolicy: def __init__(self): self.allowed_tools { order_query: {description: 查询订单信息, risk_level: RiskLevel.LOW}, create_order: {description: 创建订单, risk_level: RiskLevel.HIGH}, refund: {description: 退款操作, risk_level: RiskLevel.CRITICAL}, cancel_order: {description: 取消订单, risk_level: RiskLevel.HIGH} } self.data_scopes { customer_service: [user_own_orders], manager: [all_orders, user_orders], admin: [all_data] } def check_tool_access(self, agent_id: str, tool_name: str, user_role: str) - bool: if tool_name not in self.allowed_tools: return False tool_config self.allowed_tools[tool_name] if tool_config[risk_level] RiskLevel.CRITICAL: return False if tool_config[risk_level] RiskLevel.HIGH: return user_role in [manager, admin] return True def check_data_access(self, agent_id: str, data_scope: str, user_role: str) - bool: allowed_scopes self.data_scopes.get(user_role, []) return data_scope in allowed_scopes这个策略引擎让我可以明确控制 Agent 的行为边界。上线前我会让安全团队审核这个配置文件确保没有遗漏的权限漏洞。安全约束的判断标准Agent 是否只能做它被明确授权的事情超出授权范围的操作是否会被拒绝---总结这篇文章聊了 Agentic AI 落地时最容易踩的三个坑权限给太大、任务拆解太粗糙、可观测性没做好。我的建议是别急着让 Agent 自主执行。先把它当成一个需要严格监督的实习生——给它明确的权限边界、清晰的任务拆解、完整的执行日志。这样即使出问题也能快速定位和修复。Demo 跑通只是开始能让团队放心接手才是真正完成。资料展示下面是我整理的AI大模型学习资料和工具包预览适合收藏后按主题逐步学习。如果你想看完整资料目录可以在评论区留言「资料」也欢迎告诉我你更关注AI大模型里的哪类内容。
返回列表