这次我们看的不是某个开源模型,也不是一个能一键启动的本地整合包,而是一套关于 Agent 开发的官方课程:吴恩达(Andrew Ng)在 DeepLearning.AI 上与 OpenAI 团队合作的 Agent Skills。标题写没写“全网唯一”不重要,关键看它能不能把 Agent 这件事讲清楚,而不是把概念包装成玄学。
这门课解决一个非常具体的问题:很多开发者已经把提示词工程玩得很熟,写 Prompt 的能力不差,但做出来的 AI 应用仍然停留在“问答”阶段。任务一旦涉及写代码、查文件、浏览网页、处理数据,模型就断掉,只能把方案“说”出来,不能真正“做”出来。Agent Skills 给出的答案是:不要把模型只当成一个更聪明的问答数据库,而要把它当成一个能调用技能完成任务的员工。模型负责拆解任务、选择技能、判断结果,真正动手干活的是一段段可复用的本地工具,以及一个可靠的执行循环。
课程的主线围绕 OpenAI 的 Responses API 和 Agent Skills 体系展开,包括 Agent 工作循环、内置技能的使用、自定义技能的封装、工具调用失败后的处理等内容。从课程组织形式看,它主要面向云端模型 API 和在线 notebook 实验,不需要本地显卡,不需要在电脑上部署几十个 G 的开源模型,入门硬件门槛比很多本地 AI 项目低得多。需要的是一点 Python 基础、一个能访问官方服务的网络环境,以及一个愿意一步步跑代码的耐心。
这篇文章不是课程翻译,也不是某个 UP 主的观后感,而是把“学完 Agent Skills”这件事拆开:它到底在讲什么、和 Prompt 工程有什么区别、适合哪些人、先修什么、怎么动手验证、最容易踩哪些坑。你可以把它当作学习这门课之前的路线图,也可以当作学完之后回看复习的提纲。
1. Agent Skills 是什么:从“会回答”到“会干活”
先看 Agent 与传统 Chatbot 的区别。Chatbot 的基本流程是输入一句话,输出一段文字,模型不需要对结果负责。Agent 不一样,它有一个目标,并且可以为了完成目标做多步行动:调用搜索、执行代码、读写文件、读取工具返回结果,再根据结果决定下一步。这个“思考、行动、观察、再思考”的循环,是 Agent 应用和普通聊天应用最大的分水岭。
那 Skill 是什么?Skill 可以理解成给 Agent 装上的一项具体能力,例如“执行 Python 代码”“搜索网页”“读取本地 PDF”“调用企业内部门禁接口”。一个 Skill 至少包含三部分:第一,模型能读到的功能描述,说明这个技能在什么情况下用、怎么传参;第二,真正干活的实现代码,比如一个 Python 函数;第三,输入输出约定,模型调用后应用层怎么执行、执行结果怎么返回给模型。模型不负责实现 Skill,只负责“决定是否调用”和“生成参数”,执行工作在 Agent 应用侧完成。
所以 Agent Skills 与传统提示词工程解决的是不同层面的问题。提示词工程做的是“让模型回答得更好”,改动主要集中在输入文本;Agent Skills 做的是“让模型真正把事情做完”,改动集中在模型与外部世界的连接方式。吴恩达在课程中反复传递的一个观点是:现在构建 AI 应用,真正拉开差距的地方往往不再是模型本身,而是你有没有一套可靠的工具和流程让模型用起来。Skills 的价值就在于此:它把容易出错、逻辑复杂的可复用能力,从“每次都要现场写 Prompt 提示模型”变成“封装好的模块,随时可以调用”。
这门课在 DeepLearning.AI 课程体系里的定位,也是把学习方向从“训练模型”“调 Prompt”进一步推向“构建 Agent 应用”。如果你之前只接触过机器学习基础或者提示词工程,Agent Skills 正好是连接两者的下一站。
2. 核心能力速览与学习收获
在决定要不要学之前,先用一张表看整体情况。
| 维度 | 情况 |
|---|---|
| 项目类型 | 官方在线课程 / 动手实验教程 |
| 出品方 | DeepLearning.AI 与 OpenAI 团队 |
| 主讲人 | Andrew Ng(吴恩达)与 OpenAI 技术讲师 |
| 内容主线 | Agent 工作循环、Responses API、内置 Skills、自定义 Skills、实战项目 |
| 本机硬件要求 | 基本不需要本地显卡,主要依靠云端模型 API |
| 编程基础要求 | 建议有 Python 基础,能写函数、能读懂 API 调用代码 |
| 学习方式 | 视频讲解 + 在线 notebook 动手实验 |
| 主要学习成果 | 跑通一个完整的 Agent 闭环,能设计并封装自己的 Skill |
| 适合应用场景 | Agent 应用开发、办公自动化、数据分析、内容生产、企业内部工作流 |
| 需要特别确认的 | 能正常访问 OpenAI 相关服务,并遵守当地法规与平台条款 |
这里最值钱的学习收获有三点。
第一是形成 Agent 闭环思维。很多人提到 Agent 就想到“AI 自动写代码”或者“AI 自动操作电脑”,但真正落地时最缺的是对“循环”的理解:先给目标,再让模型产生行动请求,接着执行工具,再把执行结果喂回模型,最后判断任务是否完成。这个循环一旦跑通,你就能把任意能力接入 Agent。
第二是学会怎么看模型调用结果。工具被调用之后,返回值有可能是正常结果,也有可能是报错。一个合格的 Agent 应该能根据报错信息自我修正。课程里会花不少篇幅处理“模型和工具之间的来回交互”,这部分是工程经验,不是背 API 能替代的。
第三是能封装自己的 Skill。也就是说,学完之后你不只能使用别人写好的技能,还能把自己日常工作里的重复动作整理成一个描述清楚、参数明确的工具模块。
不要把目标定成背 API,这门课学完真正应该带走的是“任务拆解 + 工具调用 + 结果判断”这套工程方法。
3. 适用人群与学习边界
先说适合谁来学。
有 Prompt 工程经验但产品停留在 Chatbot 阶段的开发者,是这门课最典型的受众。你已经知道怎么让模型输出更好,下一步就是让模型能行动。做 RAG 应用的开发者也很合适,因为大多数 RAG 系统只解决了“查资料”这一步,查完之后的通知、整理、报告生成、操作写入这些动作,正好可以用 Agent Skills 补上。准备面试 Agent 相关岗位的开发者同样值得过一遍,因为 Agent 开发面试里常问的“模型如何调用工具”“工具调用失败怎么处理”“怎么避免模型反复横跳”,课程都有对应的工程化解释。
那哪些人不适合?完全没有写过代码的纯小白,不建议直接从这个课程入门。课程的重点不是讲 Python 语法,也不是讲机器学习数学原理,需要你先能看懂函数、能运行 Jupyter notebook。只对训练大模型感兴趣的人也不适合,这门课不涉及权重训练。想找一个本地整合包部署到自己的机器上的人更不适合,它不是一个本地部署项目,而是以 API 调用和在线实验为主。
学习边界也要提前说清楚。这门课使用的模型和 API 来自 OpenAI,实际运行时需要你有一个可以正常访问官方服务的网络环境,并且账号、密钥、结算都要符合平台条款和当地法律法规。如果暂时不具备访问官方服务的条件,可以先学习 Agent 循环和技能设计思路,这部分纯概念不需要联网,实操环节等环境具备后再补。如果用在企业项目里,还要额外评估数据是否允许通过 API 发送到云端,涉及用户隐私、企业机密的内容要做好脱敏和授权。Agent 一旦接入了工具,就具备了真实的“执行能力”,生产环境中必须对它可以执行的动作做权限限制,敏感操作要设计人工确认节点。
4. 学习路径:从哪开始、按什么顺序
很多人的学习误区是拿到课程就从第一个视频看到最后一个,看完发现还是不会写。更合理的方式是按“概念 → 最小闭环 → 内置 Skill → 自定义 Skill → 实战项目”的顺序推进。
先理解 Agent 的基本循环。不用动手写代码,先在脑子里建立“模型 + 工具 + 结果回传”的模型。可以简单列一个流程:用户目标、模型决策、工具执行、结果观察、再决策。任何 Agent 框架,本质上都在帮你管理这个循环。
然后补工具调用的基础知识。工具调用说白了就是让模型输出一个结构化动作请求,应用层解析这个请求并执行真正的函数。很多 Agent 教程卡在这里,原因是没有理解“模型只生成参数,不真正执行”这件事。如果之前没用过函数调用,可以先跑一个最简单的天气查询例子,把工具调用的请求和返回打出来看一遍。
接着学习 Responses API 的通用调用方式。课程里会把 API 调用封装成一个个函数,你需要关注的是消息格式、工具列表、结果回传这三个地方。第一次跑 API 时别追求复杂任务,先跑一次“模型回答一个普通问题”,再跑一次“模型调用一个工具”,对比两者的消息结构差异。
熟悉内置 Skill。课程会提供已经封装好的技能,例如代码执行类的 Jupyter 技能、文件处理类的技能。这一步的目的是看别人怎么定义技能描述,怎么设计参数,怎么处理返回结果。建议把内置技能当成一份“标准答案”,认真学习它的写法,而不是跳过。
最后再做自定义 Skill 和实战项目。自定义技能是这门课最核心的作业:写一段技能描述,封装一个函数,让模型在合适的时候调用它。你先从最熟悉的任务开始,比如把“文件归档”“数据清洗”这种动作封装成 Skill,然后用几个不同描述的任务去测试模型触发是否稳定。
如果你是零基础,可以先补一下吴恩达的《AI for Everyone》这类入门课程,把 AI 的基本能力和边界搞清楚,再学 Python 和 API 调用,最后回到 Agent Skills。如果目标是算法研发,再去跟进吴恩达的机器学习课程;但只做 Agent 应用开发,不必把线性代数、反向传播全部啃完再开始。
5. Agent 工作循环、Skill 调用机制与最小实验
用一个最小循环来理解 Agent 和 Skill 的配合。一次任务可以简化成以下几步。
第一步,用户给出目标,例如“统计这份销售数据中每个地区的订单量,并画一张柱状图”。第二步,模型读到目标后,不是直接输出图表,而是生成一个工具调用请求,例如“调用 execute_python,参数是分析数据的代码”。第三步,Agent 应用层收到这个请求,在本地执行对应的 Python 函数,得到计算结果或图表文件路径。第四步,执行结果作为新的消息返回给模型。第五步,模型看到结果后,判断任务是否完成,如果完成就整理最终答复,如果没完成就继续生成下一个工具调用。
这个循环看起来不复杂,但实际工程中容易卡在两个地方。第一个是模型不调用工具或调用错工具,通常是因为技能描述写得不清楚,模型不知道这个技能在什么场景下用。第二个是工具执行失败,但模型看不到失败原因,导致 Agent 只能反复重试。解决方式是让工具返回值足够结构化:正常结果返回数据和日志,异常时返回错误信息和建议,这样模型才有信息做下一步判断。
用一个简化版 Python 循环帮助理解:
# 简化版 Agent 循环,用于理解执行过程 def run_agent(user_task, available_skills, max_steps=10): messages = [{"role": "user", "content": user_task}] for step in range(max_steps): response = llm_generate( messages=messages, tools=available_skills, ) if not response.has_tool_call: return response.text tool_result = execute_skill( skill_name=response.tool_call.name, args=response.tool_call.arguments, ) messages.append({ "role": "tool", "name": response.tool_call.name, "content": tool_result, }) return "任务未在限定步数内完成"上面代码只是为了展示思路,并不是某门课程里的真实源码。真正运行时,你需要根据所用 SDK 的接口文档替换llm_generate和execute_skill。看懂这个循环,后面所有 Agent 项目都不会绕远路。
接下来给一个最小入门实验的验证目标:让 Agent 对一个简单的数据列表求均值,并生成一张折线图。整个过程要求模型至少调用一次代码执行技能,并将执行结果组织成最终答案。
环境准备只需要三件事。第一,Python 3.9 以上的解释器。第二,目标平台的 SDK,以及一个可用的 API Key,密钥要通过环境变量或配置文件保存,不要硬编码在代码里。第三,一个 Jupyter notebook 或 VS Code 脚本文件,用于逐步打印执行消息。
# 安装示例,实际包名以官方文档为准 pip install openai # 设置 API Key,避免写死在代码里 export OPENAI_API_KEY="your-key-here"实验流程分成四步。
第一步,定义系统提示词。在系统提示词里写清楚“你可以使用 Python 执行技能,收到数据计算或绘图需求时,先调用代码执行技能”。技能描述要说明调用条件,避免模型把普通问答任务也丢给代码执行。
第二步,组装用户输入。可以使用“请计算 [1, 3, 5, 7, 9] 的平均值,并画一张折线图保存到本地”这样一个明确但不会太复杂的任务。
第三步,传工具列表调用模型,收到工具调用请求后,在本地解析请求中的代码参数并执行。执行结果可以是标准输出、错误信息或图片保存路径,把这些内容返回给模型。
第四步,模型拿到结果后生成最终回复。如果平均值计算正确,且图片路径真实存在,说明最小 Agent 闭环跑通了。
这个实验的验证标准有三个:模型在需要计算时主动发起了工具调用;工具执行结果成功回传到模型;模型最终回答里包含正确均值和图片路径。
如果模型始终直接输出答案而不调用工具,优先检查系统提示词里是否明确声明了技能的存在和调用时机。如果工具执行后报错,优先检查返回给模型的错误文本是否完整。
6. 进阶:如何封装自己的 Skill
看完课程、跑完内置示例之后,进阶目标就是封装自己的 Skill。这里给一套可以复用的设计流程。
第一步,明确技能边界。一个技能只解决一类任务。把“文件归档”和“数据清洗”混在一起会让模型难以判断何时触发,技能描述也会越写越模糊。正确的做法是每个技能只负责一个清晰的动作。
第二步,定义输入输出。Skill 的参数和返回值尽量使用 JSON 可表达的类型,避免传复杂对象。比如归档技能的参数就是文件路径和归档目录,返回值就是新路径或错误信息。输入输出足够简单,模型才容易生成正确参数。
第三步,写模型能读懂的描述。描述不是写给人看的注释,而是写给模型看的调用说明。它需要包含几块内容:技能在什么场景下使用;参数分别代表什么;返回值长什么样;哪些情况下不应该调用。可以加一句“当用户只是描述性提问,不需要动文件时,不要调用该技能”,来防止误触发。
第四步,在代码里做好异常捕获。工具函数不能把异常直接抛到模型调用层,应该把异常捕获并转成文字信息返回给模型。模型看到错误原因后,才有可能纠正参数重新调用,或者在多次失败后向用户说明。一个好的 Skill 在异常发生时应当返回“失败原因 + 建议”,而不是空白响应。
第五步,做触发测试。准备 5 到 10 个不同表达的任务,覆盖正常调用、边缘情况和不应该调用三种类型,检查模型触发是否准确。触发不准确时,优先修改技能描述,而不是修改函数逻辑。
下面是一个文件归档 Skill 的示例,它只演示“描述 + 函数实现”这个设计模式,不能直接粘贴到课程作业里运行:
# 自定义 Skill 示例,仅演示设计思路 import shutil from pathlib import Path SKILL_DESCRIPTION = """ 将指定文件移动到目标归档目录。 调用时机:用户要求把文件归档、整理、移动到 backup 或 archive 目录时。 参数: source_path: 源文件绝对路径 archive_dir: 目标目录绝对路径 返回: 成功时返回新文件路径,失败时返回 error 开头的错误信息。 只有在用户明确要求移动文件时才调用,不要对路径做任何修改。 """ def archive_file(source_path: str, archive_dir: str) -> str: try: src = Path(source_path) dst_dir = Path(archive_dir) dst_dir.mkdir(parents=True, exist_ok=True) dst = dst_dir / src.name shutil.move(str(src), str(dst)) return f"moved to {dst}" except Exception as exc: return f"error: {exc}"封装完技能后,把它注册到 Agent 的工具列表中,再用真实任务做三轮测试。第一轮验证它在该调用时会调用,第二轮验证它在不该调用时不调用,第三轮验证执行失败时模型能拿到可用的错误信息。三轮都稳定,这个 Skill 才算合格。
7. Agent Skills 常见问题与排查方法
学习 Agent Skills 时,多数卡点不是模型能力不够,而是使用方式不对。下面把常见问题整理成一张排查表。
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
| 模型从来不会调用技能 | 系统提示词里没有声明技能,或技能描述不清晰 | 打印系统提示词和工具列表,检查技能名称是否出现 | 在提示词中明确写出技能调用时机和参数格式 |
| 技能被错误调用 | 技能描述边界太宽,模型过度触发 | 记录模型每次调用前后文,看触发原因 | 在描述里增加“不要调用的情况”,缩小边界 |
| 工具执行一直报错 | 依赖缺失、路径错误、权限不足 | 单独在 notebook 里直接运行该函数 | 在函数内部捕获异常并返回结构化错误信息 |
| API 调用失败 | API Key 无效、配额用完、网络不稳定 | 查看 API 返回的状态码和错误体 | 检查密钥、配额、网络;增加重试和日志 |
| Agent 反复调用同一个工具 | 模型没有从工具结果中获取有效信息 | 检查工具返回值是否包含错误和下一步建议 | 让工具返回更详细的执行状态信息 |
| Notebook 运行到一半卡住 | 模型等待超时或工具死循环 | 在循环内打印每步消息 | 设置最大步数、增加超时控制、打印日志 |
| 学完还是不会应用到自己的项目 | 只看了视频,没有做自定义技能实验 | 回顾课程作业,按“最小闭环”重写一遍 | 把自己手头一个重复性任务封装成 Skill |
这几点里,最容易被低估的是工具返回信息的质量。很多 Agent 项目跑不稳,不是模型不行,而是工具返回的结果太简陋。模型拿不到错误上下文,就只能猜。所以写 Skill 时,函数本身和函数描述同样重要,甚至比框架选型更重要。
8. 把 Agent Skills 用到工作流
学完课程之后,如果不落地,很快会忘。建议从自己手头最重复的那件事开始改造。
数据分析岗可以把 pandas 处理流程封装成 Skill,让 Agent 自动完成数据读取、清洗、聚合和出图,你只需要审核结果。内容运营可以把素材搜集、内容整理、文案生成、排版建议拆成多个 Skill,让 Agent 按流程串起来。做 RAG 应用的可以把“检索”当成 Skill 之一,再补上“生成报告”“发送通知”等动作,系统就从“只能给资料”变成“能闭环完成任务”。
在企业内部使用时,有两条原则要守住。第一,权限最小化。Agent 能调用的工具应该只覆盖任务所需的操作范围。没有必要的写入、删除、外发接口,不要注册成 Skill。第二,关键节点人工确认。涉及对外发送、资金操作、批量修改数据时,Agent 应该执行到准备阶段就停下来,把结果交给人工确认。课程里讲的是“能力怎么实现”,落地上还要补“能力怎么受限”。
另一个工程化建议是记录日志。每次模型调用、工具调用、执行结果都写进日志,出问题时才能回溯。尤其是批量任务和长期运行的 Agent,没有日志等于没有排查手段。日志字段至少包括时间、任务 ID、模型返回内容、工具名、工具参数、工具结果状态。
9. 总结与下一步
这门课最值得学的点,不是某一段 API 怎么写,而是把 Agent 应用从“能聊”变成“能干活”的完整思路。模型负责拆任务、选工具、看结果,应用层负责执行,每个 Skill 都能独立设计、独立测试、组合使用。
学完之后,建议先验证三件事:你能不能跑通一个最小的 Agent 循环;你能不能把某个内置 Skill 的调用链完整解释给同事听;你能不能把自己手头的一个重复性任务封装成新的 Skill。三件事都能做到,说明这门课没白学。
最容易踩的坑,还是想一步到位。很多人看完视频就去做复杂系统,结果模型调用混乱、工具报错堆成山。更稳的路线是先做一个只带一个 Skill 的最小任务,跑稳后再加第二个。每加一个 Skill,都要重新审视技能描述是否会互相干扰。
下一步的方向可以这样选:如果你所在团队已经在做 RAG,下一个版本可以尝试把报告生成和通知发送做成 Skill;如果你在独立做产品,可以挑一个用户高频操作,把它做成一个“一键完成”的 Agent 流程。Agent Skills 不是终点,它只是把 AI 应用从“回答问题”推向“完成任务”的一层基础设施。