AI 应用从“能聊天”走向“能干活”中间隔着的往往不是模型能力而是一层被大多数人忽略的东西——技能。我接触过不少团队模型换了一茬又一茬提示词写了一版又一版可真正落到业务里效果始终飘忽不定。问题常常不在模型本身而在于我们把“能力”和“技能”混为一谈了。模型提供的是通用能力而技能是把这种能力约束到具体场景、具体流程、具体输出格式上的一套可复用封装。这篇内容就围绕 AI 中的 Skills 展开讲清楚它到底是什么、为什么值得单独拎出来设计、以及怎么落地。三个实战案例会覆盖文档处理、数据分析和流程自动化三个典型方向无论你是刚接触 AI 应用的新手还是已经在做智能体编排的老手都能从中找到可以直接抄作业的结构和避坑点。1. 先把概念掰开AI 里的 Skills 到底指什么1.1 从“会说话”到“会办事”的那道坎很多人第一次听到 Skills 这个词会下意识把它等同于提示词模板。这个理解不算错但太窄了。提示词模板解决的是“怎么问”而技能解决的是“怎么稳定地把一件事做完”。举个生活里的例子一个人会说话不代表他会填报销单。填报销单需要知道要哪些票据、金额怎么算、哪些项目不能报、表格怎么填、最后交给谁。这一整套东西才是技能。放到 AI 应用里一个技能通常包含四个层次的东西。第一层是触发条件也就是什么情况下该调用这个技能而不是让模型自由发挥。第二层是执行步骤把一件复杂任务拆成有序的、可检查的环节。第三层是工具与资源包括能调用的接口、能读取的文件、能参考的知识库。第四层是输出约束规定结果长什么样、必须包含哪些字段、哪些格式是硬性要求。这四层合在一起才构成一个真正可用的技能。只写一段提示词顶多算第一层和第二层的雏形缺了工具和输出约束稳定性就无从谈起。我在实际项目里见过太多“提示词写得漂亮、一跑就翻车”的案例根子都在这里。1.2 技能、提示词、智能体三者的关系这三者经常被混着说其实边界挺清楚。提示词是原料技能是菜谱智能体是厨师。厨师可以照着菜谱做菜也可以临场发挥但要想保证每次出品一致菜谱就得写清楚。技能就是那份写清楚的菜谱它不负责“谁来炒”只负责“怎么炒”。再往深一层说智能体负责的是决策和调度它判断当前该用哪个技能、几个技能怎么串、失败了怎么回退。技能本身则是相对静态的、可复用的能力单元。一个设计良好的技能应该能被不同的智能体调用也能被同一个人在不同项目里反复使用。这种可复用性是技能区别于一次性提示词的核心价值。我个人的经验是当你发现某个提示词在三个以上场景里反复出现、每次只需要改几个参数时就该把它抽成技能了。这个判断标准很土但特别管用。1.3 为什么现在值得认真对待技能设计模型能力越强技能设计反而越重要。这话听起来反直觉但逻辑很顺。模型弱的时候你得手把手教它每一步提示词里塞满细节模型强的时候它什么都能聊两句反而容易在具体任务上“自由发挥过头”输出看着像那么回事细看全是漏洞。技能的作用就是给这种自由发挥套上缰绳。另一个现实原因是成本。通用对话的 token 消耗看着不多但一旦上量、一旦涉及多轮工具调用成本会迅速膨胀。技能通过约束输入范围、明确执行路径能显著减少无效的来回试探。我做过一个粗略对比同一个文档摘要任务用自由对话方式平均要 4 到 6 轮才能收敛用技能封装后基本 1 到 2 轮就能出结果稳定性还更高。2. 技能设计的核心思路为什么这么拆2.1 触发层让模型知道“什么时候该出手”触发层是整个技能的门面。设计得不好要么该调用的时候不调用要么不该调用的时候乱调用。我见过最典型的翻车场景是用户只是随口问一句“这个数据大概什么水平”结果系统直接启动了一整套数据分析技能跑了几十秒最后给出一份用户根本不需要的完整报告。解决这个问题的关键是把触发条件写得足够具体同时留出“不触发”的出口。具体做法上我习惯用三类信号来判断意图信号用户想干什么、对象信号操作对象是什么、约束信号有没有明确的格式或范围要求。三个信号里至少命中两个才认为该触发。这个阈值不是拍脑袋定的而是根据误触发和漏触发的实际代价来调的。误触发代价高就提高阈值漏触发代价高就降低阈值。提示触发条件不要写成“用户提到分析就触发”这种模糊描述要写成可判定的具体条件比如“用户提供了结构化数据且明确要求对比或统计”。2.2 执行层把大任务切成可检查的小步执行层的设计原则只有一条每一步都要能被单独验证。为什么这么强调因为 AI 执行长流程时错误会累积。第一步偏了一点第三步可能就偏到姥姥家了。如果中间没有检查点你根本不知道是哪一步出的问题。我的做法是把任务切成 3 到 7 步每步都有明确的输入和输出。步数太少单步太复杂不好排查步数太多调度开销大还容易在步骤衔接处丢信息。这个区间是实践里比较舒服的平衡点。每一步内部还要区分“必须做”和“可以做”。必须做的是硬性流程比如读取数据、校验字段可以做的是增强项比如补充背景说明、生成可视化建议。这种区分能让技能在资源紧张时优雅降级而不是直接崩掉。2.3 工具层给技能配上“手脚”没有工具的技能本质上还是提示词。工具层决定了技能能不能真正“办事”。这里的关键不是工具多而是工具边界清晰。一个工具只做一件事输入输出定义明确出错时有清晰的错误码。我特别不建议把多个功能塞进一个工具里那样调用方根本没法判断该传什么参数。工具选型上优先用现成的、经过验证的接口而不是自己现写。原因很简单现成接口的边界情况已经被踩过一遍了自己写的往往在异常处理上留坑。如果确实需要自建至少要把超时、重试、空结果这三种情况处理干净否则技能跑起来就是随机崩。2.4 输出层把“差不多”变成“必须这样”输出层是最容易被忽视、却最影响可用性的部分。很多人觉得输出格式是小事结果下游系统一接就报错。我的经验是输出约束要写到“机器可校验”的程度。比如要求返回 JSON就明确字段名、类型、是否必填、枚举值范围要求返回文本就明确段落数、每段字数区间、必须包含的关键信息。这里有个实用技巧先定义输出再倒推执行。也就是先想清楚最终结果长什么样再反推每一步该产出什么中间结果。这样设计出来的技能衔接处特别顺因为每一步的输出都是下一步的输入格式天然对齐。3. 实战案例一文档结构化处理技能3.1 场景与痛点拆解第一个案例来自文档处理场景。某团队每天要处理大量格式各异的说明文档需要从中提取关键信息整理成统一的结构化记录。人工做一份文档平均要十几分钟量大时根本忙不过来。用通用对话方式让模型处理问题也很明显不同文档提取出来的字段名不统一有的多有的少格式五花八门下游根本没法直接用。这个场景的核心痛点不是“提取不出来”而是“提取出来不能用”。所以技能设计的重点从一开始就放在输出一致性上而不是提取能力上。这个判断很关键方向错了后面怎么调都别扭。3.2 技能结构设计这个技能我拆成了四步。第一步是文档预处理把各种格式统一成纯文本同时保留章节层级信息。第二步是字段识别根据预设的字段清单逐项判断文档里有没有对应信息。第三步是内容抽取对识别到的字段提取具体内容并做规范化处理。第四步是结构组装按固定 schema 输出 JSON。字段清单是提前定义好的大概十几个字段每个字段都有明确的定义和取值范围。这一步看着笨但特别有效。因为字段清单固定了模型就不会自由发挥去“发明”新字段输出的一致性有了根本保障。3.3 关键参数与实操细节预处理环节有个细节值得说章节层级信息一定要保留。很多文档的关键信息藏在标题层级里比如“注意事项”下面的内容和正文里的内容重要性完全不同。如果预处理时把层级抹平了后面抽取就容易抓错重点。我的做法是用简单的标记把层级编码进文本比如一级标题前加固定前缀这样模型能感知到结构。字段识别环节我用了“逐项确认”而不是“一次性提取”。原因是逐项确认时模型对每个字段的注意力更集中漏检率明显下降。代价是调用次数变多但换来的是准确率提升这笔账算得过来。实测下来逐项确认的字段召回率比一次性提取高出不少尤其是在字段较多的情况下。输出 schema 这块我坚持用严格模式字段名、类型、必填项全部写死。遇到文档里确实没有的信息统一填固定占位符而不是留空或省略。这个约定看着小但下游处理起来省了大量判空逻辑。3.4 效果与经验总结这套技能跑下来单份文档处理时间从十几分钟压到一分钟以内字段一致性基本做到百分之百。踩过的坑主要有两个。一个是早期字段定义太宽泛导致模型把相似但不相同的信息混在一起后来把字段定义收窄、加上排除说明才解决。另一个是预处理阶段对表格处理不到位表格里的信息经常丢后来专门加了表格转文本的环节。注意字段定义宁窄勿宽宽了模型会自作主张合并信息窄了顶多是漏检漏检还能补合并错了很难拆。4. 实战案例二数据分析问答技能4.1 场景与痛点拆解第二个案例是数据分析问答。用户用自然语言提问系统需要理解问题、找到对应数据、算出结果、用通俗语言回答。这个场景的难点在于用户的问题千奇百怪同一个意思有无数种问法而数据口径必须严格一致。自由对话方式下模型经常“理解对了但算错了”或者“算对了但口径不对”。核心矛盾是灵活性和严谨性的冲突。技能设计的目标就是在这两者之间找平衡入口尽量灵活执行尽量严谨。4.2 技能结构设计这个技能拆成五步。第一步是意图归类把用户问题归到预设的几类分析意图里比如对比、趋势、占比、排名。第二步是口径确认根据意图确定用哪套数据口径和计算规则。第三步是查询构建把自然语言转成结构化查询。第四步是结果校验对算出来的结果做合理性检查。第五步是自然语言生成把结果转成用户能看懂的话。意图归类这一步是整个技能的地基。归类错了后面全错。所以我在这里设了两道关先做粗分类再做细分类两次结果不一致时触发澄清而不是硬着头皮往下走。这个设计牺牲了一点自动化率但换来的是准确率的大幅提升。4.3 关键参数与实操细节口径确认环节我建了一个口径映射表把每类意图对应到具体的计算规则和数据范围。这个表是人工维护的看着不智能但特别可靠。模型只负责匹配意图不负责决定口径职责分清楚了出错概率就下来了。结果校验环节有几个硬性检查数值是否在合理区间、同比环比是否异常、样本量是否过小。任何一项不通过就不直接输出结论而是提示“结果可能存在异常建议核对”。这个机制拦下了不少低级错误尤其是数据更新不及时导致的偏差。自然语言生成环节我要求必须包含三样东西结论、依据、口径说明。结论一句话说清依据列出关键数字口径说明交代数据范围和计算方式。这样用户看到答案时知道这个数是怎么来的信任度完全不一样。4.4 效果与经验总结上线后常见问题的回答准确率提升明显用户追问率下降了不少。踩的坑主要在意图归类上早期分类太细导致很多问题归不进去后来把分类收粗配合澄清机制反而更稳。另一个教训是口径映射表一定要有版本管理数据口径变了但表没更新出的错特别隐蔽排查起来很费劲。检查项检查内容不通过时的处理数值区间结果是否落在业务合理范围提示异常不直接下结论同比环比变化幅度是否异常标注异常建议核对样本量数据量是否足够支撑结论提示样本不足弱化结论5. 实战案例三多步骤流程自动化技能5.1 场景与痛点拆解第三个案例是流程自动化。某团队有一个固定流程收到需求、拆解任务、分配执行、汇总结果、生成报告。这个流程步骤多、涉及多个工具、中间还有人工确认环节。用通用对话方式跑经常出现步骤遗漏、顺序错乱、中间结果丢失的问题。这个场景的痛点很典型流程本身是清楚的但 AI 执行时缺乏“流程感”。技能设计要解决的就是把隐性的流程显性化让每一步都有据可依。5.2 技能结构设计这个技能的核心是状态机。整个流程被定义成若干个状态每个状态有明确的进入条件、执行动作、退出条件。状态之间的流转由规则控制而不是让模型自由决定。这样做的好处是流程走到哪一步、下一步该干什么永远是确定的。具体状态包括待拆解、拆解中、待分配、执行中、待汇总、已完成。每个状态对应一个子技能子技能只负责当前状态内的事不越界。这种拆分让每个子技能都很轻好维护也好测试。5.3 关键参数与实操细节状态流转规则里我特别加了“回退”和“超时”两个机制。回退是指某个状态执行失败时能退回到上一个稳定状态而不是卡死。超时是指某个状态停留时间过长时触发告警并转人工。这两个机制看着是防御性的实际用起来救了不少场。人工确认环节的设置也有讲究。不是每个状态都设确认只在关键节点设比如任务分配前、报告生成前。确认点太多流程就卡住了太少又容易出大错。我的经验是涉及资源分配和对外输出的节点必须设确认其余节点可以自动流转。中间结果的存储也很关键。每个状态的输出都落盘保存带上时间戳和状态标识。这样出问题时能完整回溯知道是哪一步偏的。这个习惯是从多次排查事故里养出来的强烈建议照做。5.4 效果与经验总结流程跑顺之后整体耗时下降明显步骤遗漏基本杜绝。踩的坑主要是状态定义太粗早期把“执行中”当成一个状态结果里面藏了太多子步骤出问题根本定位不了。后来把执行中拆成几个细状态可观测性一下就上来了。另一个经验是状态机的规则要写成配置而不是硬编码在提示词里改起来方便也便于不同流程复用。6. 技能落地时的常见问题与排查技巧6.1 触发不准怎么调触发不准分两种该触发没触发不该触发乱触发。排查时先看日志确认是意图识别错了还是阈值设错了。意图识别错就补充触发条件的描述把边界情况写清楚阈值设错就根据误判代价调整。我一般会准备一批标注好的测试用例每次调整后跑一遍看误触发和漏触发的比例变化避免拍脑袋调参。还有个隐蔽的原因是触发条件之间互相冲突。比如两个技能的触发条件有重叠模型就会随机选一个。这种情况要把条件写得更互斥或者在调度层加优先级规则。6.2 执行中途跑偏怎么定位执行跑偏先看是哪一步开始偏的。方法很简单把每一步的中间输出都打出来逐步比对预期。偏得最早的那一步就是问题所在。常见原因有三个上一步输出格式不对导致下一步理解错、某一步的工具调用失败但没报错、步骤之间的上下文丢失。针对第一个原因加强步骤间的格式校验第二个原因给工具调用加显式的成功失败判断第三个原因把关键上下文在步骤间显式传递而不是依赖模型的隐式记忆。6.3 输出不稳定怎么收敛输出不稳定八成是输出约束不够硬。先检查 schema 是否严格、必填项是否明确、枚举值是否封闭。如果这些都做了还不稳那就是执行路径本身有随机性需要把关键步骤的决策逻辑固化下来减少模型自由发挥的空间。另一个容易被忽视的点是输入噪声。输入里如果有大量无关信息模型容易被带偏。预处理阶段做一轮清洗把无关内容去掉输出稳定性会明显改善。问题现象可能原因排查动作该触发不触发触发条件描述模糊补充边界情况加测试用例乱触发阈值过低或条件重叠提高阈值写互斥条件中途跑偏步骤衔接格式不一致打印中间输出逐步比对输出格式乱schema 约束不严收紧字段定义封闭枚举结果时好时坏输入噪声大增加预处理清洗环节6.4 几个踩过才知道的坑第一个坑是过度设计。早期我总想把技能做得大而全结果一个技能包了太多功能维护起来特别痛苦。后来学乖了一个技能只干一件事组合靠调度层反而更灵活。第二个坑是忽视降级。技能跑失败时如果没有降级方案整个流程就断了。现在我会给每个关键技能配一个简化版兜底主技能失败时至少能给出部分结果而不是彻底没输出。第三个坑是测试用例太少。技能不像普通代码边界情况特别多测试用例不够上线就是开盲盒。我的做法是把每次线上出问题的案例都沉淀成测试用例慢慢积累覆盖面就上来了。提示技能上线前至少准备正常、边界、异常三类测试用例每类不少于五个跑通了再上。7. 技能复用与组合的一点心得技能设计到后期真正的价值不在单个技能多强而在技能之间能不能顺畅组合。我现在的做法是所有技能都遵循统一的输入输出约定输入用统一的结构化格式输出也统一。这样组合时不用做格式转换拼接成本极低。组合方式上常见的有串行、并行、条件分支三种。串行适合有先后依赖的流程并行适合互不依赖的子任务条件分支适合根据中间结果走不同路径。这三种方式覆盖了大部分场景再复杂的流程也能拆解成这三种的组合。还有一点体会是技能库要定期清理。用不上的技能留着不仅占地方还会干扰调度时的选择。我一般每季度过一遍把长期没调用、或者已经被更好方案替代的技能下线保持库的干净。最后分享一个小技巧给每个技能写一份“使用说明”说清楚它适合什么场景、不适合什么场景、有哪些已知限制。这份说明不用给模型看是给人看的。团队协作时这份说明能省掉大量沟通成本新人上手也快得多。我自己就吃过没写说明的亏隔了几个月回头看自己写的技能愣是想不起来当初为什么那么设计。
企业数字化 ERP 产品动态
相关推荐
API接口突然报错?十分钟定位地址迁移与最小化修复指南 1. 接口突然报错,先别急着删代码 上周三下午,一位做独立开发的朋友给我发消息,说他的应用整个挂掉了,日志里全是 401 和 404 交替刷屏。他第一反应是密钥泄露被封了,第二反应是服务商跑路了,差点就把整个接… · 2026/11/4 8:37:07
从15.6%到71.0%:R1-Zero纯强化学习与R1多阶段训练选型 简介:这份PDF文档聚焦DeepSeek团队第一代推理模型DeepSeek-R1-Zero与DeepSeek-R1的研发脉络,面向机器学习研究者、开发者及希望提升大模型推理性能的从业者,回应“如何以强化学习激发语言模型推理能力”这一问题。全文围绕纯RL训练、冷启动数… · 2026/11/4 8:37:07
中小学信息学竞赛真题的CT式诊断与动态验证方法 简介:本资源为2024年海淀区中小学生信息学竞赛校级预选赛官方试题PDF,面向小学高年级及初中阶段编程初学者,聚焦基础编程能力与算法思维的阶段性测评。试题涵盖编程基础知识单选题(变量命名、赋值语句、进制转换、表达式运算、逻辑… · 2026/11/4 8:36:06
LangGraph入门:状态图、条件路由与Agent工具调用循环 最近连续有几个人跑来问我同一个问题:LangGraph 和 LangChain 到底什么区别?问得多了,我发现大家不是不懂用法,而是卡在了同一个点上——链式调用写多了之后,根本想象不出"图"怎么组织 Agent。这篇就围绕标题… · 2026/11/4 9:24:26
NPS增强版内网穿透部署与优化实战指南 1. 项目概述:从原版NPS到增强版的技术迁移 作为一名长期从事网络运维的工程师,我亲历了原版NPS(ehang-io/nps)从活跃到停滞的整个过程。这个曾经广受欢迎的内网穿透工具,由于长期缺乏维护(最后一次提交停留… · 2026/11/4 9:24:26
CentOS7下OpenSSL生成CA根证书全流程详解 1. CentOS7环境下CA根证书生成全流程解析在Linux服务器运维和分布式系统部署中,证书颁发机构(CA)的建立是构建可信安全体系的基础环节。作为在金融行业浸淫多年的系统架构师,我经常需要为内部系统搭建私有CA。本文将详细记录在CentOS7环境下从零开始建立… · 2026/11/4 9:24:26
美团Hera分布式监控系统:微服务全链路追踪实战 1. 分布式监控系统Hera的核心价值在微服务架构成为主流的今天,系统复杂度呈指数级增长。记得去年我们团队遇到一个棘手的生产问题:用户投诉订单支付成功率突然下降,但各个服务日志都没有明显异常。整整两天时间,我们像无头苍蝇一样… · 2026/11/4 9:24:26
STM32硬件SPI驱动AT45DB161D实战:时序匹配、忙等待与页擦除避坑指南 简介:本资源是一套基于STM32硬件SPI驱动AT45DB161D串行Flash的完整嵌入式开发工程,面向嵌入式初学者与STM32进阶开发者,解决外置大容量非易失存储器在ARM Cortex-M平台上的可靠读写难题。工程适配红牛STM32F103ZET6开发板,涵盖SPI… · 2026/11/4 9:24:26
LangChain LLM应用缓存实战:从普通缓存到语义缓存,降本提速 上个月我盯了一眼项目账单,某一天的日志里同一个问题被问了几百次,扣费记录翻了好几页。那一刻我突然意识到一件事:很多团队花大力气优化 prompt、压缩上下文、换更便宜的模型,却漏掉了最基础也最直接的一招——缓存。 这篇文章是… · 2026/11/4 9:23:25
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38
AI辅助技术栈评估:提升研发决策效率60% 1. 项目背景与核心价值技术决策一直是研发团队面临的重大挑战。随着技术生态的快速演进,技术栈的选择、维护和迭代变得愈发复杂。我们团队在过去两年里,先后经历了三次重大技术栈迁移,每次都需要投入大量人力进行技术评估和风险分析。直到去年… · 2026/11/4 0:00:17
从生成Token到直接决策:Jev如何重塑AI Agent工程实践 1. 从"生成文字"到"拍板决策":Jev 到底在解决什么问题大多数人第一次接触大模型,脑子里建立的模型是"输入问题、输出文字"。你问它今天天气怎么样,它给你一段描述;你让它写个周报,它给你… · 2026/11/4 0:00:17
32G统一内存跑大模型:内存账、TPS实测与端云分流 想在一台 32G 统一内存的小主机上把大模型跑成"日常可用",这件事我前后折腾了小半年。标题里说的这台 Mac mini M6,是我们这次讨论的目标平台,具体到手规格以实物为准;但下面这套推算方法和实测思路,对任何统… · 2026/11/4 0:00:17
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38