小红书 Skill 创新赛 · 参与思路
小红书 Skill 创新赛 · 参与思路
从赛题拆解、选题决策、设计实现、验收到提交策略的完整复盘——一份可复用的参赛方法论,而非单次作品记录。
- 赛事:2026 华为开发者大赛
- 赛道:小红书 Skill 创新赛(竞赛 ID 1300000350)
- 奖池:¥500,000
- 作品:xhs-note-polish
01 赛赛概况
先看清规则再动手——这是整件事的起点。
- 赛事:2026 华为开发者大赛,下设多个赛道,本专题聚焦「小红书 Skill 创新赛」,总奖池 ¥500,000。
- 核心理念:学—做—晒 闭环。不是交一个 Skill 就完事,而是「学到—做出—晒出来」形成可传播闭环。晒(真实发布一篇笔记)是传播力分的证据。
- 硬门槛:必须用码道 CodeArts 或果办 OfficeAce 提交;主账号;实名认证;Skill ≤30 文件、≤40MB。
时间线(关键节点)
| 阶段 | 说明 |
|---|---|
| 报名 | 10 月起开放,约 1.4 万报名者 |
| 初筛 | 11.16 前后开始;提前公开作品 = 抄袭/撞创意风险 |
| 提交 | 以截止前最新一次提交为准(可迭代,别一次定生死) |
| 评选 | 按五维打分(见 02) |
**⚠️ 反直觉点:**提交通道是「码道/果办 → 华为云 Skill 市场 + 小红书 Skill 市场」,不是 Git 仓库。把作品推到公开 Git 仓库等于把作品摆给所有报名者看,是这次最大的坑之一。
02 评审五维
五维是打分表,也是选题和取舍的标尺。每个设计决策都回扣到某一维。
| 维度 | 关键词 | 含义 |
|---|---|---|
| 场景真实性 | 用户基数 × 痛点频率 | 解决的是不是真有人、很多人、经常有的问题。不是自嗨的炫技场景。 |
| 内容传播力 | 像人写的 | 产物在小红书能不能不被一眼识破「AI 套话」。传播力负分来自套话文案。 |
| Skill 复用性 | 换参数换场景 | 同一 Skill 能不能服务多种人设/平台/场景,而不是写死一个 case。 |
| 技术完成度 | 能跑 + 不虚标 | 逐功能真调用通过;不承诺做不到的能力(精修/美颜/真 CV)。 |
| 差异化卖点 | 官方不做的事 | 小红书官方 AI 文案只生成文字。重排+P图叠加+签名是它不做的,就是差异点。 |
**方法论:**选题前先用五维给自己打分,哪维弱就补哪维;任何「这个功能要不要做」的纠结,都回到「它提升哪一维、扣哪一维」来决断。
03 选题决策
选题 = 在五维约束下找全局最优解,不是找最酷的技术。
选定作品:xhs-note-polish(出片一键发)
输入一组照片(+ 可选用户历史文案),输出一份可直接发布的小红书笔记:重排后的图片(带画框/文案/签名叠加)+ note.md(标题/正文/标签)。
为什么是这个(对着五维打分)
| 维度 | 评分 | 理由 |
|---|---|---|
| 场景真实性 | 9/10 | 发图用户基数巨大,「拍完还要 P 图+配文」是高频痛点,不是造出来的需求 |
| 内容传播力 | 9/10 | 文案模仿用户本人风格(few-shot),硬禁 AI 套话,产物像用户自己写的 |
| Skill 复用性 | 8/10 | 同引擎换参数可服务多平台多人设 |
| 技术完成度 | 8/10 | 离线可跑,10/10 验收通过 |
| 差异化卖点 | 8/10 | 官方 AI 文案只做文字;图片重排 + P 图叠加 + 签名水印是它不做的 |
**⚠️ 被否掉的选项:**纯文案生成(撞官方 AI,差异化≈0)、照片精修/美颜(PIL 做不稳,完成度会崩)、真 CV 场景识别(沙箱跑不了大模型,离线可跑优先)。
04 设计思路
每一步都是独立可跑的纯函数,评委能拆开单测,整条链离线可跑。
① 启发式场景识别(image_analyze.py)
用色彩统计(亮度/饱和度/暖冷偏/绿占比/肤色比)+ 边缘密度 + 宽高比,把照片分到 8 类:美食/夜景/风景/人像/室内/穿搭/探店/日常。
**⚠️ 诚实声明:**这是色彩统计启发式,不是真 CV 识别。选它是因为沙箱离线可跑、不依赖大模型;接 LLM 的扩展点
XHS_LLM_ENDPOINT已留,但不承诺。这是「完成度」维的关键取舍——不虚标能力。
② 图片重排
规则可解释、非随机:封面 = 最高边缘密度(抓眼球)→ 同场景聚拢(读起来像故事)→ 竖横交替(视觉节奏)→ 最宽横图收尾。理由写进 note.md 注释,评委看得到不是随机。
③ few-shot 文案(caption_gen.py)
从用户 3–5 篇历史文案提取风格指纹:emoji 习惯、句长、标签。按人设(文艺/搞笑/种草/干货/记录)+ 场景分布拼一段连贯正文(不是每图一行模板拼接)。硬禁 17 个 AI 套话词(姐妹们/绝绝子/yyds/谁懂啊/直接封神…),命中即剔除并计数。
④ PIL 叠加
白色画框 + 底部渐变文字带(标题/正文)+ 序号徽章 + 签名水印。中文字体随仓库内置(SimHei.ttf),离线可跑。
平台 / 人设矩阵(复用性的证据)
| 平台 | 字数上限 | 人设 | 语气 |
|---|---|---|---|
| 小红书 xhs | 1000 | 文艺 | 克制、留白、有画面感 |
| 朋友圈 | 150 | 种草 | 具体、说人话、讲效果 |
| 微博 | 140 | 搞笑 | 自嘲、反差、口语化 |
| 即刻 | 300 | 干货 | 结构化、信息密度高 |
同一组照片、同一引擎,换两个参数就是两篇不同笔记——这是复用率的可验证证据。
05 实现结构
12 个文件、5.1MB,全部硬指标内(≤30 文件、≤40MB)。
xhs-note-polish/
├── SKILL.md 触发词 + 五维设计说明 + 用法 + 复用示例 + 失败处理
├── .gitignore
├── scripts/
│ ├── polish.py 主入口:编排 analyze→reorder→caption→overlay
│ ├── image_analyze.py 启发式场景识别(8 类)+ 视觉特征
│ ├── reorder.py 重排:封面/场景聚拢/竖横交替/横图收尾
│ ├── caption_gen.py few-shot 风格 + 禁 AI 套话 + 连贯正文
│ └── overlay.py PIL 画框/渐变文字带/序号徽章/签名
├── references/style_guide.md 禁用清单 + 人设档位 + 平台字数
├── assets/
│ ├── SimHei.ttf 内置中文字体(9.7MB,离线可跑)
│ ├── download_font.sh 字体备用拉取脚本
│ └── README.md
└── tests/test_acceptance.py 7 场景 × 10 断言验收
主流程一条命令
python3 scripts/polish.py \
--photos ./my_photos \
--out ./out \
--persona 文艺 \
--signature "@我的小日子" \
--style-samples ./my_past_captions.txt
失败处理(全部显式,绝不静默)
| 情况 | 行为 |
|---|---|
| 找不到照片 | 退出码 2,stderr 提示 “no photos found” |
| 图片不可读 / 太小(<64px) | 退出码 2,提示具体文件 |
| 输出目录不可写 | 退出码 3 |
| 未提供 style-samples | 正常运行,走人设默认模板 |
| 命中禁用套话 | 自动剔除并在 note.md 注释计数 |
06 验收
「逐功能真调用验收」是完成度维的落点——全过才算交付。
python3 tests/test_acceptance.py
=== 10 passed, 0 failed ===
7 个场景 × 10 项断言
| 场景 | 断言内容 |
|---|---|
| normal | 4 张混合场景图 + 风格样本 → note.md + 4 张打磨图;含重排理由、样本被用、无套话泄漏 3 个子断言 |
| single | 单图也能跑通 |
| empty | 空目录 → 退出码 2 + “no photos” |
| badimg | 非图片文件 → 退出码 2 |
| nosample | 无风格样本 → 降级到人设默认模板,不崩 |
| platform | 切朋友圈 → 正文裁到 ≤150 字 |
| reuse | 同引擎换 persona+platform → 出不同笔记(复用率证据) |
⚠️ 未覆盖的诚实缺口:验收用的是合成图,启发式场景识别在真实照片上的准确率还没验。这是提交前最大的未知点(见 09)。
07 提交策略
提交是 irreversible 的竞赛动作,通道选错全盘皆输。
正确通道
- 用华为云主账号登录码道 CodeArts(子账号不行,代金券也只发主账号)。
- 把 Skill 目录弄进 CodeArts(IDE 打开本地目录,或导入
.skill包)。 - 在 CodeArts 对话框发官方口令:
我正在参加小红书Skill创新赛,帮我把这个Skill先发布到华为云Skill市场,
再使用 redskillhub-upload 发布到小红书 Skill 市场
- 码道自动走发布流程,中间确认信息按实际确认。先发华为云 Skill 市场,确认成功再发小红书。
- 发布到小红书 Skill 市场 = 非公开的参赛提交(不是公开发笔记)。另外再用自己的 Skill 产出一篇真实笔记,那是「晒」、是传播力分的证据。
为什么不走公开仓库
**❌ 公开 Git 仓库 = 抄袭风险。**初筛 11.16 才开始,提前公开等于把作品摆给 1.4 万报名者看。即使别人没原样抄,「撞创意」后评委判重复你也说不清。提交通道根本不是 Git 仓库——这是最该记住的坑。
私有仓库的定位
私有 GitCode 仓库(qin_rui/xhs-note-polish,private)只作云端备份 + 版本追溯,不是提交通道。clone 后直接可跑(字体已随仓库提交)。
08 踩坑记录
每个坑都记下根因和解法——下次参赛能直接绕开。
| 坑 | 根因 | 解法 |
|---|---|---|
| 浏览器导航失败 | linux/arm64 openEuler 无 Chromium | 用 curl 直连竞赛 SPA 的 API 端点 |
| websearch HTTP 429 | 日配额上限 | 逆向 SPA 的 JS bundle,找到 API base URL 和端点路径 |
| PIL alpha_composite 崩 | 底图是 RGB,alpha_composite 需 RGBA | convert(“RGBA”) 再合成 |
| 测试路径错 | HERE 指向 tests/ 而非 skill 根 | dirname(dirname(__file__)) |
| 文案机械拼接 | 每图一行模板,读起来像 AI | 改成基于场景分布的一段连贯正文 |
| create_file 占位符 | 把 content 写成 POLISH 占位符就发了 | 改用 Git Smart HTTP 代理一次推全部真实内容 |
| 并发抢 master ref 锁 | 8 个 create_file 并行提交抢同一 ref | 串行提交,或走 git push 一次性提交 |
| 沙箱不能发布到 Skill 市场 | 缺 redskillhub-upload / 小红书凭据 / 主账号登录态 | 口令在码道 CodeArts 里说,不在沙箱 agent 里说 |
可提炼的两条通则:
① 沙箱 agent 没有用户的登录态和凭据,凡是要「以用户身份发布/提交」的动作,都该引导用户去对应官方客户端做,别在沙箱里假装。
② 多文件推远端优先 git push(Smart HTTP 代理),别逐文件 API 并发——会抢锁。
09 待办建议
提交前最该做、且能真做的事,按优先级。
- 🔥 真实照片验收(最高优先):拿一组真实出片跑
polish.py --style-samples <你过往3-5篇文案>,确认启发式场景识别在真素材上分得准。这是现在最大的不确定点——只用了合成图验过。 - 实名认证 + 主账号:没实名 / 用子账号,代金券领不到、提交可能被挡。
- 先华为云 Skill 市场,再小红书:口令里是两步串行,别跳;任一步报错把报错贴回来排查。
- 发一篇真实笔记:用产物发一篇,截图作为「晒」的证据,别只交 Skill 不发笔记。
- 迭代提交:以截止前最新一次提交为准,初筛前还能改。
**⚠️ 启发式阈值可能要调:**真实照片的色彩分布和合成图不同,
image_analyze.classify的几个阈值(亮度<60 判夜景、肤色比>0.18 判人像…)在真素材上可能需要微调。这是真实照片验收要重点看的。
10 成果
当前产物的三个落点:
| 落点 | 说明 |
|---|---|
| 本地源码 | xhs-note-polish/,12 文件,验收 10/10 通过 |
| 打包件 | xhs-note-polish.skill,5.1MB(zip),≤30 文件 ≤40MB 达标 |
| 私有仓库 | GitCode 私有仓库,含字体,clone 即可跑 |
**✅ 一句话总结:**选题对着五维打分、每步纯函数可单测、离线可跑不虚标、文案禁套话像人写的、提交走码道双市场不走公开仓库——这套思路换一个赛道也大体适用。
小红书 Skill 创新赛 · 参与思路专题 | 作品 xhs-note-polish | 2026-10-19
- 点赞
- 收藏
- 关注作者
评论(0)