资讯动态

AI Agent Skill 机制解析:从能力拆解到动态编排的工程实践

发布时间:2026/10/22 9:49:30 来源:尧图企业网站定制
1. 从能聊天到能干活AI Agent Skill 到底在解决什么问题如果你最近半年一直在跟各种智能体框架打交道大概率会有一种强烈的割裂感模型本身越来越聪明但真让它去完成一件具体的事比如帮我把这份合同里的关键条款抽出来填进表格再发一封提醒邮件它就开始掉链子。不是漏步骤就是格式错乱要么干脆在某个环节卡死反复问你同一个问题。这个问题的根源不在于模型不够强而在于智能体缺少一套可复用、可组合、可独立迭代的能力单元。过去我们做智能体习惯把所有的提示词、工具调用逻辑、流程控制全部塞进一个巨大的系统提示里或者写成一坨几百行的编排代码。这种做法在demo阶段没问题一旦要接入真实业务维护成本就会指数级上升。改一个环节整条链路都要重新测换一个模型所有提示词都要重调。AI Agent Skill 这个概念本质上就是在解决这个一坨的问题。它把智能体的能力拆解成一个个独立的、自描述的、可插拔的技能模块。每个 Skill 封装了一类特定任务的知识、工具、约束和输出规范。智能体在运行时根据当前任务动态加载对应的 Skill就像给一个通用大脑装上了不同的专业插件。我更喜欢用基因编辑来类比这件事。传统的智能体开发像是在培养皿里反复筛选你只能通过调整整体环境来间接影响结果。而 Skill 机制让你可以直接定位到某一段能力基因精确地敲入、敲除或替换。你想让智能体学会处理财务报表不需要重新训练模型只需要给它加载一个财务报表解析的 Skill你想让它换一种输出风格只需要替换输出格式化这个 Skill其他部分纹丝不动。这套机制真正解决的问题有三个。第一是能力复用一个写好的 Skill 可以在不同智能体、不同项目之间直接迁移不用重复造轮子。第二是独立迭代每个 Skill 可以单独版本管理、单独测试、单独上线不会牵一发而动全身。第三是动态组合智能体可以根据任务复杂度在运行时决定加载哪些 Skill、以什么顺序执行而不是把所有可能性都硬编码在提示词里。适合读这篇内容的人我大致分三类。一类是已经在做智能体应用开发但被提示词膨胀和流程耦合折磨得够呛的工程师一类是产品经理或业务负责人想理解为什么有些智能体产品能快速迭代、有些却改一个需求要等两周还有一类是刚接触智能体开发的新手想从一开始就建立正确的架构认知避免走弯路。不管你是哪一类接下来的内容都会从设计思路、核心细节、实操过程到问题排查一层层拆开讲清楚。2. 智能体能力拆解的整体设计思路2.1 为什么是技能而不是工具或插件市面上已经有很多概念比如工具调用、插件系统、函数注册。这些和 Skill 有什么区别我刚开始也有这个疑问后来在实际项目中踩了几次坑才想明白。工具和插件的粒度太细了。一个查询天气的 API 是一个工具但它不构成一个技能。因为真实任务里用户说帮我安排明天下午的户外会议智能体需要做的远不止查天气它要理解户外会议对天气的敏感条件要判断降水概率、温度区间、风力等级要结合参会人日历找时间窗口最后还要生成一个带备选方案的回复。这一整套判断逻辑、参数映射、异常处理才是 Skill 要封装的东西。Skill 的粒度是完成一类任务所需的完整能力包。它内部可以调用多个工具可以包含条件分支可以有自己的状态管理甚至可以有独立的记忆空间。用一句话概括工具是手Skill 是会用手的那个动作记忆。这个区分非常关键因为它决定了你的架构分层。如果你把 Skill 当成工具来设计最后还是会回到提示词里塞满 if-else的老路。只有把 Skill 视为一个自包含的能力单元才能真正实现解耦。2.2 技能描述文件让智能体自己决定加载什么Skill 机制能跑起来核心依赖一个东西技能描述文件。这个文件用自然语言加结构化字段的方式告诉智能体我是谁、我能做什么、什么时候该用我、用了我会发生什么。我见过很多团队在这一步偷懒描述写得含糊其辞结果智能体要么该加载的时候不加载要么不该加载的时候乱加载。一个好的技能描述应该包含以下几个部分。技能名称与标识一个人类可读的名字加一个全局唯一的 ID方便日志追踪和版本管理。能力边界说明用一两句话讲清楚这个 Skill 能处理什么类型的任务以及明确不处理什么。边界越清晰误触发的概率越低。触发条件描述在什么用户意图、什么上下文状态下应该激活这个 Skill。这里可以用自然语言也可以配合一些关键词或意图标签。输入输出规范明确这个 Skill 期望接收什么格式的输入以及会产出什么格式的输出。这一步是后续组合编排的基础。依赖与前置条件说明这个 Skill 需要哪些工具权限、需要哪些上下文信息、是否依赖其他 Skill 的输出。执行约束比如超时时间、重试策略、是否需要人工确认、输出长度限制等。我实测下来描述文件里最容易被低估的是触发条件和执行约束。前者决定了智能体的路由准确率后者决定了线上稳定性。很多团队把这两块写得很随意结果就是智能体在复杂场景下频繁走错分支或者某个 Skill 卡住导致整个任务超时。2.3 分层架构路由层、执行层、编排层把 Skill 机制落地到工程上我建议采用三层架构。这不是什么新鲜设计但每一层的职责划分清楚之后后面排查问题会轻松很多。路由层负责一件事根据当前任务和上下文决定加载哪些 Skill。这一层通常由一个轻量级的意图识别模型或规则引擎驱动输入是用户请求加对话历史输出是一个 Skill 列表和优先级排序。路由层不需要理解 Skill 内部的执行细节它只需要知道每个 Skill 的能力标签和触发条件。执行层是每个 Skill 真正干活的地方。每个 Skill 独立运行拥有自己的提示词模板、工具调用逻辑、输出解析器和异常处理。执行层对外只暴露统一的输入输出接口内部怎么实现是 Skill 自己的事。这种封装带来的好处是你可以用完全不同的技术栈实现不同的 Skill只要接口对齐就能组合。编排层负责把多个 Skill 的执行结果串起来。有些任务只需要一个 Skill有些任务需要多个 Skill 按顺序或并行执行。编排层要处理的是 Skill 之间的数据传递、条件分支、循环重试和最终结果聚合。这一层最考验设计功力因为一旦编排逻辑复杂起来很容易变成新的一坨。我的经验是编排层尽量保持薄。能用一个 Skill 完成的事不要拆成三个 Skill 再编排。只有当任务确实跨越多个独立能力域时才引入编排。否则你只是把提示词的复杂度转移到了编排代码里问题并没有消失。2.4 动态加载与静态注册的取舍Skill 的加载方式有两种主流选择静态注册和动态加载。静态注册是指在智能体启动时把所有可用的 Skill 一次性加载进上下文。这种方式实现简单路由速度快但缺点是上下文窗口占用大。当 Skill 数量超过二三十个时光是技能描述就吃掉大量 token而且模型在过多选项中反而容易选错。动态加载是指智能体先根据任务类型从技能库中检索出候选 Skill再按需加载详细描述。这种方式对上下文更友好扩展性也更好但需要额外维护一个检索层。检索层可以用向量检索也可以用关键词匹配甚至可以用一个小模型做粗筛。我目前的建议是混合策略高频核心 Skill 静态注册长尾 Skill 动态检索。比如文本摘要格式转换数据查询这类几乎每个任务都可能用到的 Skill直接常驻上下文。而合同条款抽取医疗报告解读这类垂直场景 Skill按需加载。这样既保证了常用能力的响应速度又控制了上下文开销。3. 核心细节解析与实操要点3.1 技能描述文件的字段设计与写法示例前面讲了技能描述文件的重要性这里给一个我实际在用的字段结构。注意不同框架的具体字段名可能不同但核心信息是一致的。skill_id: contract_clause_extractor skill_name: 合同条款抽取 version: 1.2.0 description: 从合同文本中抽取关键条款包括甲方乙方、金额、期限、 违约责任、争议解决方式并输出结构化 JSON。 boundary: include: - 中文或英文合同文本 - 条款明确的正式合同 exclude: - 非合同类法律文书 - 手写扫描件且无 OCR 文本 trigger: intents: - 合同信息提取 - 条款整理 keywords: - 合同 - 条款 - 甲方 - 乙方 context_required: - 存在合同文本输入 input_schema: type: object properties: contract_text: type: string description: 合同全文 extract_fields: type: array items: type: string description: 需要抽取的字段列表 output_schema: type: object properties: clauses: type: object description: 字段名到抽取结果的映射 confidence: type: number description: 整体置信度 0-1 constraints: timeout_seconds: 30 max_retries: 2 require_human_confirm: false max_output_tokens: 2000 dependencies: tools: - text_segmenter - json_validator这个文件里我特别想强调boundary.exclude和constraints这两块。很多团队写描述时只写能做什么不写不能做什么结果智能体遇到边界情况时强行调用产出垃圾结果。明确写出排除项相当于给路由层一个负向信号能显著降低误触发。constraints里的require_human_confirm也很有用。对于涉及金额修改、对外发送、数据删除这类高风险操作把这一项设为 true智能体在执行前会先请求确认。这个设计在真实业务里救过我很多次避免了不少智能体自作主张的事故。3.2 技能内部的提示词组织分块而不是一锅炖一个 Skill 内部的提示词我建议分成四个独立块来组织而不是写成一大段。角色块定义这个 Skill 在执行时扮演什么角色。比如你是一个严谨的合同条款抽取助手只输出结构化结果不做法律建议。角色块要短一两句话即可目的是给模型一个稳定的行为基调。任务块描述具体要做什么。这里要把输入数据的结构、期望输出的结构、字段含义都讲清楚。任务块可以长一些但要用列表和示例来组织避免大段散文。约束块列出执行时的硬性规则。比如如果某个字段在原文中找不到输出 null不要编造金额统一转换为数字不带货币符号日期统一格式为 YYYY-MM-DD。约束块是保证输出稳定性的关键每一条都应该是可验证的。示例块给出至少一个完整的输入输出示例。示例的作用不是教模型做事而是锚定输出格式。我习惯给一个正常示例加一个边界示例比如字段缺失时怎么输出。这种分块组织的好处是当 Skill 需要迭代时你可以精确定位到是哪一块需要改。输出格式不对改任务块和示例块行为不稳定改约束块角色跑偏改角色块。而不是面对一坨提示词无从下手。3.3 工具调用的封装让 Skill 自己管好自己的手Skill 内部调用工具时我强烈建议做一层封装不要让 Skill 直接裸调外部 API。封装层要处理的事情包括参数校验、超时控制、重试策略、错误转换、结果缓存。参数校验很好理解模型生成的工具参数经常有格式问题比如该传数字传了字符串该传数组传了单个值。在封装层做一次校验和修正比让模型反复重试要高效得多。超时控制和重试策略是线上稳定性的保障。外部 API 偶尔抖动是常态如果 Skill 没有超时和重试机制一次网络波动就可能导致整个任务失败。我的习惯是给每个工具调用设置独立的超时时间读操作可以短一些写操作长一些重试次数一般不超过两次且要区分可重试错误和不可重试错误。错误转换是指把外部 API 的各种错误码转换成 Skill 内部统一的错误类型。这样 Skill 的异常处理逻辑只需要面对几种标准错误而不是几十种原始错误码。这一步在接入多个外部服务时尤其重要。结果缓存则是性能优化的手段。同一个 Skill 在一次任务中可能多次调用同一个工具如果参数相同直接返回缓存结果即可。缓存的有效期要根据业务特点设置查询类可以长一些状态类要短一些。3.4 输出解析与校验别让模型自由发挥Skill 的输出必须是可解析、可校验的。我见过太多项目Skill 返回一段自然语言然后下游用正则去抠字段稍微换个说法就解析失败。这种做法在 demo 里能跑上线必炸。正确的做法是在 Skill 的提示词里明确要求输出 JSON 或 YAML 等结构化格式然后在 Skill 执行完毕后用独立的解析器做校验。校验不通过时不要直接把错误抛给用户而是触发一次修复重试把解析错误信息和原始输出一起塞回给模型让它重新生成。这里有个细节值得注意修复重试的提示词要和首次执行的提示词分开写。首次执行时模型在做事修复重试时模型在改格式。两种任务的提示词侧重点不同混在一起效果会打折扣。另外对于关键字段我建议加一层业务校验。比如金额字段要检查是否为正数日期字段要检查是否在合理范围内枚举字段要检查是否在允许值列表里。这些校验规则写在 Skill 的配置里由解析器统一执行。校验失败的字段标记出来让模型针对性修复而不是整个输出重来。4. 实操过程与核心环节实现4.1 从零搭建一个 Skill 的完整流程假设我们要做一个会议纪要生成的 Skill输入是一段会议录音转写文本输出是结构化的会议纪要包含议题、结论、待办事项和负责人。我按实际操作的顺序走一遍。第一步是定义能力边界。这个 Skill 处理的是已有转写文本的会议纪要生成不处理音频转写本身不处理多人实时会议不处理非会议类对话。边界定清楚之后后面所有设计都围绕这个范围展开。第二步是设计输入输出结构。输入需要会议主题、参会人列表、转写文本、会议时长。输出需要议题列表每个议题包含讨论要点和结论、待办列表每项包含事项、负责人、截止时间、整体摘要。把这些字段写成 JSON Schema作为 Skill 的接口契约。第三步是编写技能描述文件。按照前面讲的字段结构把 skill_id、触发条件、依赖工具、执行约束都填好。触发条件里关键词可以设会议纪要会议记录待办整理意图标签设为会议内容结构化。第四步是组织内部提示词。角色块设定为你是一个专业的会议纪要整理助手擅长从口语化转写文本中提取结构化信息。任务块详细说明每个输出字段的含义和格式。约束块规定待办事项必须明确负责人无法确定时标记为待确认结论必须是明确达成的共识讨论过程中的观点不作为结论。示例块给一个简短的会议转写和对应的纪要输出。第五步是实现工具调用封装。这个 Skill 可能依赖一个文本分段工具用于处理超长转写文本。封装层负责把长文本按语义切分成合适大小的段落逐段处理后再合并结果。第六步是编写输出解析器。解析器负责把模型返回的 JSON 解析成内部对象校验必填字段检查待办事项的负责人字段是否为空检查时间格式是否规范。校验不通过时触发修复重试。第七步是接入路由层并测试。把 Skill 注册到技能库配置触发条件然后用一批测试用例验证路由准确率和执行成功率。测试用例要覆盖正常场景、边界场景和异常场景。4.2 参数选择与配置的计算过程在 Skill 配置里有几个参数需要根据实际情况计算不能拍脑袋填。超时时间的计算取决于 Skill 内部最长的工具调用链。假设一个 Skill 平均调用 3 个工具每个工具平均耗时 2 秒模型推理平均耗时 5 秒那么理论总耗时约 11 秒。考虑到网络抖动和重试超时时间设置为理论值的 2 到 3 倍比较合理也就是 25 到 35 秒。如果超过这个时间还没完成大概率是某个环节卡死了继续等待没有意义。最大重试次数的计算要考虑错误类型分布。如果历史数据显示 90% 的失败是瞬时错误重试一次能解决大部分问题那么重试次数设为 1 到 2 次即可。如果失败中有相当比例是逻辑错误比如参数不对重试再多次也没用这时候应该把重试次数设为 0直接走异常处理流程。输出 token 上限的计算要根据输出结构的复杂度来定。一个包含 10 个议题、每个议题 3 个字段的会议纪要每个字段平均 50 个 token加上 JSON 结构本身的开销大约需要 2000 到 3000 token。设置上限时留 50% 余量设为 4000 到 4500 比较稳妥。设太小会导致输出被截断设太大则浪费上下文预算。上下文窗口分配也需要算一笔账。假设模型总窗口是 128K token系统提示占 2K技能描述占 3K对话历史占 10K那么留给当前任务输入输出的空间大约是 113K。如果输入文本可能很长就要考虑是否需要分段处理或者是否需要动态裁剪对话历史。4.3 多 Skill 组合编排的实现方式单个 Skill 跑通之后真正的挑战在于多个 Skill 的组合。我以一个客户投诉处理场景为例说明编排层的实现思路。这个场景需要三个 Skill情绪识别 Skill判断客户情绪等级问题分类 Skill判断投诉类型回复生成 Skill根据前两者的输出生成回复。编排逻辑是先并行执行情绪识别和问题分类两个结果都返回后再执行回复生成。在编排层我用一个简单的 DAG有向无环图来描述这个流程。每个节点是一个 Skill 调用边表示数据依赖。编排引擎按拓扑顺序执行节点并行节点同时发起调用汇聚节点等待所有前置节点完成。数据传递方面我定义了一套统一的上下文对象。每个 Skill 执行完毕后把输出写入上下文对象的对应字段。后续 Skill 通过字段名读取前置结果。这样 Skill 之间不需要直接通信降低了耦合。异常处理方面编排层要区分节点失败和流程失败。单个节点失败时先看这个节点是否可跳过。情绪识别失败可以跳过用默认情绪等级继续问题分类失败则不能跳过因为回复生成依赖分类结果。不可跳过的节点失败时整个流程进入降级分支比如返回一个通用回复模板同时记录日志供后续分析。4.4 版本管理与灰度发布Skill 一旦上线就会面临迭代需求。我建议每个 Skill 都走独立的版本管理版本号遵循语义化版本规范。技能描述文件里的 version 字段要和代码仓库的 tag 对应方便追溯。灰度发布方面我习惯用技能别名机制。技能库中每个 Skill 有一个稳定别名比如meeting_notes实际指向某个具体版本。新版本发布时先让别名指向新版本但只对一小部分流量生效。观察一段时间确认成功率和输出质量没有下降再逐步扩大流量比例最终全量切换。回滚也很简单把别名指回旧版本即可。这种机制的好处是Skill 的迭代不会影响编排层的配置编排层始终引用别名不关心具体版本。5. 常见问题与排查技巧实录5.1 技能误触发与漏触发怎么排查这是路由层最常见的问题。误触发是指不该加载的 Skill 被加载了漏触发是指该加载的 Skill 没加载。排查误触发第一步是看技能描述文件的触发条件是不是太宽泛。比如关键词设了报告结果用户说报告一下进度也触发了报告生成Skill。解决办法是给关键词加限定或者引入意图标签做二次过滤。第二步是看技能之间的边界是否重叠。两个 Skill 都声称能处理数据整理路由层就会犯迷糊。解决办法是重新划分边界或者在描述文件里明确优先级。排查漏触发第一步是看用户表达是否超出了预设的触发条件。用户说帮我把这个会的内容理一理没有出现会议纪要关键词但意图是明确的。这时候需要补充同义表达或者引入语义匹配而不是纯关键词匹配。第二步是看上下文是否满足前置条件。有些 Skill 要求存在特定类型的输入如果输入格式不符合路由层会跳过。这时候要检查输入预处理环节是否正常工作。我整理了一个速查表方便对照排查。问题现象可能原因排查动作解决方向误触发触发条件过宽检查关键词和意图标签收窄条件增加负向关键词误触发技能边界重叠对比多个 Skill 的描述重新划分边界或设优先级漏触发表达超出预设收集未触发用例补充同义表达或改语义匹配漏触发前置条件不满足检查上下文字段修复输入预处理逻辑路由不稳定描述文件歧义人工审查描述文本改写描述消除模糊表述5.2 技能执行超时与卡死的处理超时问题我遇到最多的三种情况。第一种是外部工具响应慢比如调用的 API 本身就有几秒延迟叠加起来超过阈值。解决办法是给每个工具设置独立超时并在 Skill 层面设置总超时两者配合使用。第二种是模型推理时间过长。输入文本太长、输出要求太复杂、或者模型本身负载高都会导致推理变慢。解决办法是控制输入长度把大任务拆成小任务或者换用更快的模型处理简单环节。第三种是死循环。Skill 内部的修复重试逻辑如果没有设置上限可能陷入生成-校验失败-重新生成的循环。解决办法是给修复重试设置最大次数超过次数后直接返回当前最佳结果并标记异常。卡死和超时不同卡死是指 Skill 没有任何响应既不返回结果也不报错。这种情况通常是异步调用没有正确处理或者某个锁没有释放。排查时先看日志最后一条记录在哪里定位到具体环节然后检查该环节的异步逻辑和资源释放逻辑。5.3 输出格式不稳定的修复经验输出格式不稳定表现为同样的输入有时候返回标准 JSON有时候返回带 markdown 代码块的 JSON有时候干脆返回一段解释文字。这个问题困扰过我很久后来总结出几条经验。第一在提示词里明确说只输出 JSON不要输出任何其他文字不要用代码块包裹。这句话要放在约束块的最后靠近输出位置模型更容易遵守。第二给一个反面示例。比如在示例块里写错误输出json {...}然后写正确输出{...}。模型对反面示例的敏感度有时候比正面示例还高。第三解析器要做容错。如果返回的内容被代码块包裹解析器先剥离代码块标记再解析。如果返回的内容前后有解释文字解析器尝试提取第一个完整的 JSON 对象。这些容错逻辑不能替代提示词优化但能作为最后一道防线。第四如果格式问题反复出现考虑换用支持结构化输出约束的模型接口。有些模型提供 JSON mode 或 schema 约束功能能从解码层面保证输出格式比提示词约束可靠得多。5.4 技能组合时的数据传递陷阱多 Skill 组合时数据传递是最容易出问题的地方。我踩过的坑包括字段名不一致、数据类型不匹配、空值处理不统一。字段名不一致是指上游 Skill 输出conclusion下游 Skill 期望summary。这种问题在人工配置时容易发现但在动态编排时可能被忽略。解决办法是维护一份全局的上下文字段字典所有 Skill 的输入输出字段都从字典里选不允许自定义新字段名。数据类型不匹配是指上游输出字符串3下游期望数字3。这种问题在 JSON 解析时不会报错但下游逻辑可能出错。解决办法是在 Skill 的输出 schema 里严格定义类型解析器做类型转换和校验。空值处理不统一是指上游用null表示缺失下游用空字符串表示缺失还有的用N/A。解决办法是全局统一空值表示我习惯用null并在解析器里把所有变体统一转换成null。提示在编排层加一个数据契约校验环节每次 Skill 输出后都对照全局字段字典校验一遍能提前发现大部分数据传递问题。这个环节会增加一点延迟但相比线上事故的代价完全值得。5.5 技能库膨胀后的管理策略当 Skill 数量从几个增长到几十个甚至上百个时管理就成了新问题。我目前的策略是分三层管理。核心层是高频通用 Skill数量控制在 10 个以内静态注册每个季度 review 一次。这一层的 Skill 要求极高的稳定性和通用性不轻易新增。领域层是垂直场景 Skill按业务域分组比如财务域法务域客服域。每个域内的 Skill 动态加载域之间相互隔离。这一层的 Skill 由各业务团队自己维护但要走统一的注册和审核流程。实验层是探索性 Skill允许快速迭代但不直接接入生产流量。实验层的 Skill 验证有效后才能升级到领域层。除了分层还要建立 Skill 的退役机制。长期无人调用、成功率持续偏低、或者被新 Skill 替代的要定期清理。技能库不是越大越好维护一堆僵尸 Skill 只会增加路由负担和误触发概率。6. 技能生态的扩展方向与个人实践体会Skill 机制跑通之后会自然衍生出一些扩展方向。我目前观察到比较有价值的有三个。第一个是技能市场。当 Skill 的接口规范统一之后不同团队开发的 Skill 可以互相共享。一个团队做好的发票识别Skill另一个团队可以直接引入不用重复开发。这种共享机制会加速整个组织的智能体能力建设。当然共享的前提是接口规范足够稳定以及有一套质量评估和信任机制。第二个是技能自动生成。让一个元智能体观察人类操作流程自动抽象出 Skill 的描述文件和内部逻辑。这个方向目前还在早期但对于流程标准化程度高的场景比如数据录入、报表生成已经有了一些可用的尝试。第三个是技能性能画像。给每个 Skill 建立运行档案记录调用次数、成功率、平均耗时、常见失败原因。这些数据反过来指导路由层的优化比如把成功率低的 Skill 降权把耗时长的 Skill 做异步化改造。我个人在实际操作中的体会是Skill 机制最大的价值不在于技术本身而在于它强制你做一次能力梳理。过去很多智能体项目之所以难以维护是因为开发者从来没有认真想过这个智能体到底有哪些能力、这些能力的边界在哪里、它们之间是什么关系。Skill 机制逼着你把这些问题想清楚想清楚之后代码结构自然就清晰了。最后分享一个小技巧。如果你刚开始尝试 Skill 机制不要一上来就搞复杂的编排和动态加载。先从单个 Skill 做起把描述文件、提示词分块、输出校验这三件事做扎实。一个 Skill 跑稳了再复制这个模式做第二个、第三个。等你有五六个稳定运行的 Skill 之后再引入路由层和编排层。这个顺序能让你在每一步都获得正反馈而不是一开始就被复杂度淹没。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑