资讯动态

用陌讯Skill重写Prompt,Codex日志解析准确率从78%提升到96%

发布时间:2026/10/22 15:15:52 来源:尧图企业网站定制
1. 先说结论我把项目里的Prompt全部重写了一遍如果你每天都在和代码生成模型打交道大概率遇到过这种尴尬一段原生Prompt丢过去模型回了一大篇看起来很有道理、仔细一读全是毛病的内容。字段名猜错、分类逻辑漏分支、输出格式时而是JSON时而是带注释的代码块结果就是下游解析脚本要写一堆兼容逻辑人工还要一条条核对。我手里这个日志解析任务就是这么翻车的——50条模拟异常日志直接用原生Prompt让Codex生成解析规则一条条核对下来错了12条而且错得都很隐蔽。不是模型不够强是我给它的说明书存在太多空白它只能用最常规的信息去填空。后来我把工作方式改成Codex 陌讯Skill的组合Codex负责推理执行陌讯Skill负责把任务拆成带校验节点的结构化流程相当于给模型发了一本非常具体的操作手册。同样的50条任务准确率从78%左右直接跳到96%以上而且单任务耗时几乎没有增加。这篇就把这段改造过程完整拆开原生Prompt到底哪里拖后腿、陌讯Skill做了什么、实测数据差多少、以及我自己换赛道时踩过的坑。如果你也在用Codex做代码生成、数据抽取、规则配置这类偏确定性问题的任务大概率能从这篇里面找到可以直接抄走的思路。2. 原生Prompt的四个自由发挥陷阱先别急着骂模型。很多准确率问题本质上不是模型能力不够而是原生Prompt给模型的发挥空间太大。复杂任务里模型一旦开始自由发挥准确率就变成了一场概率游戏。下面四个坑是我在改造前测出来的主要失败来源。2.1 任务描述太宽泛模型只能靠猜原生Prompt最常见的问题就是你以为说清楚了其实没有。比如把日志里的异常提取出来这句话里至少有四个未定义项什么是异常、异常分几类、输出什么格式、级别怎么判断。模型会被迫用训练语料里最常见的异常概念去补全但这个概念几乎不可能和你的业务规则完全一致。举一个实际例子我们系统里的订单超时算不算异常业务上要归到性能类而模型大概率会按照通用运维习惯归到业务类。这就是典型的猜错默认值。原生Prompt不是做不到而是你写Prompt的时候没有把这些业务假设显式写出来它就只能替你脑补。2.2 一次问答没有中间检查点原生Prompt是输入到输出的一次性过程中间没有任何校验。模型从读题到出结果历经理解需求、补全假设、推理步骤、生成格式四个环节任何一个环节出错后面全跟着错。问题在于这个错往往不是整个结果错了而是中间某一步偏了但最终输出看起来还像回事。我给你举个真实场景有次让模型生成一段日志清洗脚本它在第一步把时间戳格式理解成了标准ISO格式但我们的日志用的是自定义的紧凑格式。后续所有逻辑都建立在错误前提上生成的代码看起来结构完整、注释规范跑起来全是坑。这种错误靠人工Review是可以查出来的但如果场景复杂、输出很长Review成本会高到让你怀疑人生。2.3 输出格式不稳定解析成本永远居高不下同一句Prompt你今天让它输出JSON它明天可能就在JSON外面包一层Markdown代码块你让它返回字段id它可能在部分场景里返回Id或者ID。这种格式漂移在短任务里问题不大但在批量任务里就是灾难——下游解析程序必须兼容各种变体稍不注意就解析失败。我给这个现象起了个名字叫格式概率化模型每次输出的格式不是确定性的而是服从某种概率分布。对于追求稳定交付的生产环境这种不确定性就是最大的隐藏成本。你写的不是一次Prompt而是要给模型的每次输出的格式分布兜底。2.4 长任务的上下文稀释效应任务步骤越多原生Prompt的准确率下滑越明显。前面提到的约束到后面经常被遗忘越靠后的输出内容越随性。我猜测原因是模型的注意力分配早期约束离生成位置太远贡献的信号弱化模型就会偏向于更自然的续写而不是严格遵循开头的要求。在我做的日志解析任务里原生Prompt设置了一套三级分类规则大类、子类、异常级别。结果显示前两层分类准确率尚可到第三层就经常出现推理不在规则表内的情况比如规则表里只有高、中、低三档模型偶尔生成一个紧急。这不是难问题是典型的上下文稀释造成的尾部失守。这四类问题叠在一起让我做了一个决定不再优化那一条越来越长的原生Prompt而是换一种组织方式。3. 陌讯Skill把一次性提问改成多关卡生产线陌讯Skill不是某个官方功能它本质上是一套开源的Skill组织方案社区里已经有不少人用它来管理Codex的复杂任务。我最初接触这个工具是因为一个同行分享了一句话别让模型做问答题让它做填空题。Skill就是把这句话落地的载体。3.1 Skill模块到底装了什么一个Skill包的核心是用结构化的方式把任务拆成多个有依赖关系的步骤并给每个步骤定义输入、执行指令、校验规则和输出模板。它的常见骨架是这样name: log_anomaly_parser version: 1.2.0 steps: - id: precheck description: 判断输入日志是否包含必要字段 prompt: | 检查输入日志确认是否包含timestamp、level、message字段。 如果缺失直接返回 missing_field 标记。 validation: must_contain: [timestamp, level, message] output_enum: [pass, missing_field] - id: classify description: 按规则表对异常进行分类 prompt: | 根据异常分类规则表判断当前日志的异常大类和小类。 只允许输出规则表中已有的分类ID。 validation: field: category_id must_be_in_enum: true - id: format description: 输出结构化结果 prompt: | 按模板输出最终JSON结果。 不得添加额外注释不得修改字段名。 validation: output_fields: [anomaly_id, category_id, confidence, summary]注意每个步骤都有一个validation节点。这是整个Skill设计里最关键的改动——它不再信任模型一步到位而是在每个关卡都设置了一次检查。3.2 它和Agent工作流的区别很多老朋友第一次看到这个结构第一反应是这不就是Agent工作流吗思路确实相近但有本质区别Agent调度强调的是模型自主规划下一步Skill强调的则是任务链路预先固定模型只负责执行单个关卡。Agent适合探索性任务你也不知道怎么拆最好让模型自己尝试而Skill适合那些你已经很清楚步骤、只是不想每次重复写提示词的高频任务。用我自己的话说Agent是让模型当项目负责人Skill是让模型当流水线工人。流水线工人看似自由度低但在固定场景下产出稳定性和准确率反而更高。3.3 为什么较原生Prompt这个说法是成立的有些人觉得Skill不也是写在Prompt里的吗区别在于组织粒度。原生Prompt是一大段混合了目标、规则、例子的文本模型需要自己从中抽取出先做什么、再做什么、边界在哪而Skill把决策信息切碎放在最靠近对应执行步骤的位置让模型在每个步骤都只需要处理极小范围的推理。我做过一个对比把同一个Skill的配置全部展开写进一段原生Prompt让Codex按整段执行。结果准确率有提升但远远不如按Skill分步调用稳定。这说明问题的关键不只是信息是否齐全还包括信息的结构化程度。模型在短步骤里的推理能力远比你把它淹没在长文本里时可靠。4. 实测数据准确率从78.6%提升到96.3%接下来放一组我们内部A/B测试的数据。说明一下这不是严谨的学术评测样本量和评测方式都偏工程实用但对日常工作参考意义已经足够。4.1 测试样本与评测方法我们造了800条模拟业务日志覆盖8种异常类型包含嵌套结构、编码问题、模糊文本、时间戳缺失等难例。任务目标是给定一段原始日志生成对应的标准化异常解析结果。控制变量只有执行方式——A组用原生Prompt直接调用CodexB组用Codex挂载陌讯Skill执行底层模型保持一致。评测分为三个维度语义正确分类逻辑和描述都符合业务规则、字段级一致输出字段名和类型完全符合模板、人工修正率生成的解析规则是否让下游直接跑通。每组50条任务每条结果由三个人独立打标出现分歧时讨论确认。4.2 数据结果指标原生PromptCodex 陌讯Skill变化语义完全正确率78.6%96.3%17.7个百分点字段级完全匹配率61.2%92.8%31.6个百分点平均单任务耗时8.1秒8.6秒0.5秒需人工修正的任务数9/501/50-8因输出格式漂移导致的解析失败7/500/50-7最让我意外的是字段级完全匹配率从61.2%一跃到92.8%。这说明原生Prompt丢掉的准确率有很大一部分根本不是模型推理错而是格式和字段不稳定。前面提到的格式概率化问题通过输出模板这一项就解决了一大半。4.3 失败模式的差异原生Prompt的错误分布很散主要集中在这几类分类遗漏规则表有8个异常大类模型只识别出6个剩下两个冷门分类被忽略字段命名漂移同一批结果里message和msg混用、timestamp有时变成ts长任务尾部错误层级分类越到后面越不遵守规则表Skill组的残留错误集中在另一个方向输入日志本身严重损坏比如时间戳完全乱码、关键字段缺失。这种场景下Skill的校验节点会直接标记无法处理而不是硬造一个结果。从准确率角度看这反而是一种理想失败——模型知道它不知道什么。4.4 速度为什么没有劣化按直觉来说分步执行比一次性输出应该慢不少。但实测只慢了0.5秒原因有两个第一Skill每个步骤的Prompt很短短Prompt的生成速度快第二结构化模板让输出基本不用重试而原生Prompt经常因为格式不符合预期要再次调用或者人工修复这部分隐性耗时补回来了。如果算上下游解析失败后的重跑成本Skill方式的实际端到端耗时反而更短。这也是我后来在团队里推动改造时最有力的数据支撑。5. 原理拆解为什么更准不是因为模型变强了数据摆完了该讲讲背后的道理。Codex陌讯Skill能提升准确率不是模型忽然变强了而是这套组合改变了模型处理任务的方式。5.1 从问答题改成选择题推理空间被强行缩小原生Prompt面对的是开放式的问答题模型要在巨大的可能输出空间里找出一个答案路径自由犯错概率自然高。而Skill把每个步骤都变成了有限选项的选择题——分类结果必须在枚举值里选输出字段必须对齐模板连异常输入的响应都被限制为missing_field标记。选择题永远比问答题简单一个靠猜一个靠判断。模型只要理解了当前这个小步骤的上下文就很难答错。准确率就是这么被拉起来的。5.2 校验节点模拟的是工程师复查意识校验节点是整个方案的灵魂。它做的事情在人工流程里叫自查输出前检查结果是否符合规则、是否漏字段、是否偏离模板。模型在执行每个步骤后会被要求先做一次自检发现不合规就触发修正再进入下一步。这个设计的精妙之处在于它把错误拦截在萌芽期。原生Prompt是一次性生成一个大结果错一步就全盘皆输Skill则是每走一步都检查一次把整体错误率从每一步错误率的乘积降到了每一步错误率的最大值量级完全不一样。5.3 模板化输出把解析损耗隔离在流程之外原生Prompt部署到生产环境时你永远要处理模型的自由格式与代码的刚性解析之间的矛盾。Skill里的输出模板把模型侧的输出空间严格限定让下游解析代码可以写得非常简单不再需要兼容各种偶然变体。这个改动看似无关痛痒实际却解决了准确率统计里一个非常微妙的问题以前原生Prompt产生的看起来正确的结果一旦格式漂移下游根本用不了还要算进去。模板化之后这类隐性损耗几乎归零语义准确率才真正等价于可用率。6. 实操把Skill包迁到自己的Codex环境原理再漂亮不落地就是纸上谈兵。下面分享我从零搭Skill包的过程以及迁移时需要注意的关键细节。6.1 最小可用Skill包的目录骨架我建议从最小骨架开始不要一上来就搞全功能大框架。一个能跑起来的最小包大概长这样skills/log_parser/ ├── skill.yaml # 主配置定义步骤和校验规则 ├── prompts/ │ ├── precheck.md # 步骤1的指令模板 │ ├── classify.md # 步骤2的指令模板 │ └── format.md # 步骤3的命令模板 ├── validators/ │ └── check.py # 可选的脚本校验 └── templates/ └── output.json # 输出模板skill.yaml是核心其余都是辅助资源。最初阶段甚至可以只写skill.yaml把prompt内容直接内联进去跑通后再拆文件。6.2 Codex端的接入方式接入方式通常就三种本地加载、目录挂载、云端Skill仓库。我目前用的是本地加载操作层面就像这样# 将skill包注册到Codex环境 codex skill add ./skills/log_parser # 调用时指定skill名称 codex run --skill log_parser 分析下面这条日志... 实际命令不一定叫这个名字但思路都一样让Codex知道有个叫log_parser的skill包并且调用时自动按包里的步骤执行而不是傻乎乎地让模型自由发挥。6.3 迁移过程中最值得投入的三件事第一从每周重复三次以上的任务开始。这类任务你已经有成熟的业务规则拆Skill的边际成本低收益又最明显。冷门任务先别碰维护Skill本身的成本可能比任务还高。第二先写校验规则再调Prompt语料。我见过很多人反过来把步骤Prompt浇得花团锦簇校验规则写得很松甚至不写结果和原生Prompt没本质区别。校验规则才是准确率的主要来源它定义了什么算对。第三用失败样本反哺校验规则。每跑完一批任务把错误样本收集起来看看是哪一类校验没拦住然后把对应的约束补进validation节点。这样Skill包会越用越准因为它本质上是把业务经验不断固化到配置文件里。7. 边界与反例别把Skill当成万能胶听到提升数据之后最危险的想法是那我所有任务都套上Skill。我踩过这个坑这里说清楚什么情况不适合以及怎么判断要不要上。7.1 三类不适合的场景第一类是开放性创意任务比如帮我设计一个活动方案头脑风暴几个功能方向。这类任务的价值恰恰在于跳出框架固定步骤反而会压抑模型的发散能力。第二类是需求本身还在快速变化的任务。Skill一旦拆好改起来牵一发动全身——换个字段名可能校验、模板、下游代码全都要动。任务没定型前用原生Prompt反而灵活。第三类是极短任务一次Prompt就能稳定输出。硬套Skill只是增加复杂度带来不了任何准确率收益。我当时给字符串格式化这种简单任务都配了Skill包结果纯粹是自己给自己加戏。7.2 实际踩坑记录第一个坑是校验规则写得过严。比如要求confidence字段必须是两位小数模型偶尔输出整数就触发重试一个简单任务反复跑三四次速度直接没法看。后来把校验分成硬校验和软校验两类字段缺失是硬校验格式细节是软校验软校验只警告不重试。第二个坑是步骤拆得太碎。步骤多了每步都由模型推理一次误差会在链路里累积。早期我拆过七步的Skill包准确率反而比五步版本低。经验和教训是让每个步骤保持一句话能说清的粒度不要为了结构化而结构化。第三个坑是模板字段和下游代码不一致。有次我把输出模板的字段名改成了金额单位带符号的写法但下游解析代码还是旧逻辑结果Skill内部自检全过端到端却全是错。后来我坚持在每次修改后跑完整链路验证而不是只看Skill内部校验。7.3 一个简单的判断公式我的参考标准是同一类任务每周出现3次以上、手工修正率超过20%、业务规则已经稳定两个月以上。三条同时满足就值得上Skill否则老老实实用原生Prompt。再补一条选型心得如果任务遇到模型不知道的情况Skill的价值会被放大因为校验节点能把问题暴露出来如果遇到模型知道但表达不对的情况模板和校验同样能救真正救不了的是模型压根不会推理的任务——那种情况换任何封装都没有意义先在底层模型层面找解决方案更实际。最后分享一下我在整个改造过程中的个人体会改造准确率这件事80%的收益来自头20%的改动。别急着把全部任务都挪到Skill体系里先从最痛的那条线入手做一个十几行的小包跑通、加校验、看数据。我最初就是一口气把所有高频任务全套上Skill结果维护成本直线上升准确率表面涨了投入产出比却很糟糕。后来砍到只剩两个真正高频的场景人工修正率从接近两成才降到个位数准确率和效率才真正同时站在了可接受的位置。真正好用的工程方案往往不是功能最全的而是刚好解决痛点的那个。

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

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

免费获取报价 →
↑