ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

同样是Agentic AI,为什么有的能干活有的只能演示?

同样是Agentic AI,为什么有的能干活有的只能演示? 聊《同样是Agentic AI为什么有的能上线、有的只能演示》之前先说一句实在的别急着背概念先看它在真实项目里到底解决什么问题。摘要摘要 最近团队接入 Claude Code 和 Codex 做协作开发表面看效率提升明显但真正上线后才发现能跑 Demo和能扛生产之间差了一大截。本文复盘一次 Agent 从演示到上线的真实踩坑经历重点讲清楚任务拆解、可观测性、安全约束三个最容易忽略的工程细节以及学习路线上该先补什么、暂时放什么。---目录Agentic 的定义不止是会调工具自主性边界Agent 不该越权的三件事真实案例一个任务拆解失败的协作场景排查过程从能跑到崩了的链路还原代码解释可观测日志的关键结构失败原因业务、配置、环境三类的区分方法适用边界什么时候该用、什么时候别用总结学习路线上的取舍建议---目录Agentic 的定义不止是会调工具自主性边界Agent 不该越权的三件事真实案例一个任务拆解失败的协作场景排查过程从能跑到崩了的链路还原代码解释可观测日志的关键结构失败原因业务、配置、环境三类的区分方法适用边界什么时候该用、什么时候别用总结学习路线上的取舍建议Agentic 的定义不止是会调工具很多人对 Agentic AI 的理解停留在能调用工具。但真正决定一个 Agent 能不能上线的不是它能不能调工具而是它在什么条件下调、调错了怎么回退、结果能不能被追踪。我见过太多 Demo 漂亮的 Agent上线后第一件事就是任务跑到一半卡死没有人知道卡在哪也没有人能决定是重试还是放弃。Agentic 的核心不是自主而是可控的自主。区别在于前者是模型自己跑后者是模型在框架约束下跑。---自主性边界Agent 不该越权的三件事团队刚用 Claude Code 做代码生成时所有人都觉得太爽了。但很快暴露问题Agent 会自己决定重构模块、会直接提交代码、会在没有 review 的情况下改生产配置。自主性不是越大越好上线前必须明确三条边界1. 写权限边界Agent 能写哪些目录、哪些文件类型必须显式配置不能默认全开2. 执行权限边界subprocess、os.system这类调用必须白名单控制3. 提交权限边界代码生成可以放开但 commit 和 push 必须人工确认这三条不是建议是上线前的硬性要求。 Demo 阶段可以放开但进入协作流程就必须收。---真实案例一个任务拆解失败的协作场景场景 团队让 Agent 完成为现有 API 添加分页查询功能。输入现有代码仓库路径/project/api-service任务描述在/users接口增加page和size参数返回分页结果使用的工具文件读取、代码编辑、终端执行步骤Agent 实际执行1. 读取了routes/users.py理解现有结构2. 直接修改了路由文件添加了分页参数解析3. 修改了 service 层添加了分页逻辑4. 运行了pytest测试通过5. 直接执行了git commit -m add pagination6. 尝试执行git push被权限拦截可观察结果代码逻辑正确测试通过但 Agent 在修改 service 层时没有读取现有测试文件导致部分边界 case 没覆盖commit 信息过于简略后续 review 困难最关键的问题Agent 没有记录它改动了哪些文件review 时需要人工逐文件对比这个案例的失败不是模型能力问题是任务拆解不完整——Agent 不知道改代码和确保质量是两件事。---排查过程从能跑到崩了的链路还原上线后第一个线上问题Agent 在处理复杂任务时偶尔会陷入无限循环。现象 任务执行时间超过 10 分钟CPU 占用持续 100%没有任何输出。验证动作1. 检查 Agent 的日志发现循环发生在任务规划阶段模型反复生成相同的子任务2. 检查工具调用记录发现某个工具返回了空结果但 Agent 没有判断空结果的语义继续用空结果发起下一次调用3. 检查超时配置发现默认超时是 30 分钟太长导致问题持续排除结果不是模型本身的问题同一个 prompt 在简化场景下正常工作不是工具本身的问题工具返回空结果是正常的业务场景问题出在循环检测和结果验证的缺失最终的修复方案在 Agent 框架层面增加两步——① 记录最近 N 步的子任务序列检测到重复则强制终止② 工具返回空结果时要求模型明确说明是否需要重试或跳过。---代码解释可观测日志的关键结构下面这段代码是我们团队在 Agent 框架中增加的可观测层核心思路是把 Agent 的每一步决策都记录下来而不是只记录最终结果。import time import json from typing import List, Dict, Any class ObservableAgent: def __init__(self, base_agent, logger): self.base_agent base_agent self.logger logger self.execution_log: List[Dict] [] def run(self, task: str, max_steps: int 10) - Dict[str, Any]: start_time time.time() step_count 0 context {task: task, steps: []} try: while step_count max_steps: step_start time.time() # 记录当前状态 snapshot { step: step_count, timestamp: step_start, status: running } # 调用基础 Agent 执行一步 result self.base_agent.step(context) # 记录结果 snapshot.update({ duration_ms: (time.time() - step_start) * 1000, tool_called: result.get(tool), tool_output: self._sanitize_output(result.get(output)), status: completed }) self.execution_log.append(snapshot) self.logger.info(json.dumps(snapshot, ensure_asciiFalse)) # 检测循环检查最近3步是否重复 if self._detect_loop(): snapshot[status] loop_detected self.execution_log.append(snapshot) raise LoopException(Detected repetitive task pattern) # 检查是否完成 if result.get(done): break step_count 1 except Exception as e: self.execution_log.append({ step: step_count, status: error, error: str(e) }) raise finally: context[total_duration_ms] (time.time() - start_time) * 1000 context[total_steps] step_count return context def _detect_loop(self) - bool: 检测最近3步的子任务是否重复 if len(self.execution_log) 3: return False recent self.execution_log[-3:] tools [s.get(tool_called) for s in recent] return len(set(tools)) 1 and all(t is not None for t in tools) def _sanitize_output(self, output: Any) - str: 脱敏处理避免日志泄露敏感信息 if isinstance(output, str): return output[:500] # 截断过长输出 return str(output)[:500]逐段解释__init__包装基础 Agent增加日志记录能力。execution_log是核心记录每一步的完整状态。run方法主循环限制最大步数防止无限执行。每一步记录开始时间、工具调用、输出结果。_detect_loop循环检测逻辑。如果最近 3 步调用了相同的工具认为陷入循环抛出异常终止执行。这是解决前面案例中无限循环问题的关键。_sanitize_output输出脱敏。日志里不能出现完整的 API key、密码等敏感信息同时截断过长的输出避免日志文件过大。---失败原因业务、配置、环境三类的区分方法上线后 Agent 出问题排查的第一步是分类。三类错误的处理方式完全不同业务错误Agent 逻辑正确但业务规则理解有误。特征日志完整能追踪到模型推理的每一步错误发生在决策环节处理优化 prompt补充业务规则增加 few-shot 示例典型表现Agent 正确调用了工具但参数传错了配置错误权限、路径、环境变量配置不当。特征Agent 在第一步就失败或者工具调用返回权限拒绝处理检查配置文件对比 Demo 环境和生产环境的差异典型表现Permission denied、Path not found环境错误网络、依赖、资源问题。特征错误随机出现同样输入有时成功有时失败处理检查网络连通性、依赖版本、资源配额典型表现超时、连接重置、内存溢出区分这三类的方法很简单看日志的完整度。业务错误日志完整但逻辑不对配置错误日志在早期就断掉环境错误日志随机且不可复现。---适用边界什么时候该用、什么时候别用Agentic AI 不是万能的明确适用边界比盲目跟进更重要。适合用 Agent 的场景任务有明确输入输出中间步骤可拆解需要调用多个工具或系统如代码仓库、数据库、API容错空间较大允许一定试错有完整日志和监控能力不适合用 Agent 的场景实时性要求极高Agent 的推理延迟不可控错误成本极高且不可回退如金融交易、医疗诊断任务高度依赖隐性知识难以形式化描述没有可观测性基础设施无法追踪 Agent 决策团队刚开始用 Agent 时最容易犯的错误是把不适合的场景强行用 Agent 解决。比如一个简单的 CRUD 接口完全没必要引入 Agent直接写代码反而更可靠。---总结学习路线上的取舍建议结合这次从 Demo 到上线的踩坑经历给想往 Agentic AI 方向发展的开发者几个取舍建议先补的1. 可观测性日志、追踪、监控是上线的前提比调 prompt 更重要2. 安全约束权限控制、输入校验、输出脱敏这是团队协作的底线3. 任务拆解学会把复杂任务拆成 Agent 能处理的子步骤这是工程能力的核心暂时放一放的1. 复杂的多 Agent 协作单 Agent 还没跑稳别急着上多 Agent 架构2. 自研 Agent 框架先用成熟的工具Claude Code、Codex 等理解模式后再考虑自建3. 追求完全自主可控的自主比完全的自主更实用也更安全Agentic AI 从 Demo 到上线的差距不在模型能力在工程细节。把可观测性、安全约束、任务拆解这三件事做好比研究最新的技术论文更能让你在实际项目中站稳脚跟。资料展示下面是我整理的AI大模型学习资料和工具包预览适合收藏后按主题逐步学习。如果你想看完整资料目录可以在评论区留言「资料」也欢迎告诉我你更关注AI大模型里的哪类内容。
返回列表