wewrite/evals/evals.json
wangzhuc dd1de0d1e9 重构为单用户模式:去掉多客户架构 + 新增 Onboard/环境检查 + 修复 10 项问题
架构转变:从代运营多客户模式改为开源单用户模式。
- 去掉 clients/ 目录,style.yaml/history.yaml 扁平化到 skill root
- Step 1 简化(不再提取客户名,直接读 style.yaml)
- 新增 Step 0 环境检查(config/依赖/API 配置,降级标记传递到后续 Step)
- Onboard 改为首次设置流程(交互式问答 + 支持"用默认的直接写")
- 3 个脚本去掉 --client 参数,路径扁平化
- 修复 10 项 workflow 问题(降级传递、历史写入、wechat-constraints 引用等)
- evals 更新为单用户模式的 3 个场景
- 新增 style.example.yaml 作为默认模板

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 22:36:36 +08:00

97 lines
4.4 KiB
JSON
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"skill_name": "wewrite",
"evals": [
{
"id": 0,
"name": "first-time-onboard",
"prompt": "我想用 WeWrite 写公众号文章。我的公众号叫「AI前哨站」主要写 AI 和科技方向,风格偏轻松有趣,像跟朋友聊天。不用配微信 API先不配直接用默认的就行。",
"expected_output": "完成 Onboard 流程:通过对话收集信息生成 style.yaml检测到无 config.yaml 时设置降级标记而非报错停止",
"files": [],
"assertions": [
{
"name": "creates_style_yaml",
"type": "file_exists",
"description": "应在 skill 目录下生成 style.yaml"
},
{
"name": "style_has_required_fields",
"type": "content_check",
"description": "style.yaml 包含 name、topics、tone 字段"
},
{
"name": "no_client_directory",
"type": "negative_check",
"description": "不应创建 clients/ 子目录(旧模式已移除)"
},
{
"name": "graceful_no_config",
"type": "behavior_check",
"description": "检测到无 config.yaml 时应设置降级标记并继续,而非报错停止"
}
]
},
{
"id": 1,
"name": "topic-writing-anti-ai",
"prompt": "写一篇公众号文章,选题:为什么 AI Agent 正在杀死传统 SaaS。不要用交互模式全自动跑完。不用推送生成本地预览就行。",
"expected_output": "一篇 1500-2500 字的公众号 Markdown 文章,通过 7 层去 AI 痕迹验证,包含维度随机化记录,保存到 output/ 目录",
"files": [],
"assertions": [
{
"name": "article_word_count",
"type": "range_check",
"description": "文章字数在 1500-2500 之间"
},
{
"name": "no_banned_words",
"type": "content_check",
"description": "文章不包含禁用词:首先、其次、总之、综上所述、值得注意的是、不可否认、众所周知、至关重要、不言而喻"
},
{
"name": "has_broken_sentences",
"type": "content_check",
"description": "文章包含至少 3 处破句/不完整句(如破折号中断、自我纠正、省略)"
},
{
"name": "has_specific_details",
"type": "content_check",
"description": "文章包含具体时间/地点/人物/非整数数字等细节,而非泛化表达"
},
{
"name": "dimensions_recorded",
"type": "behavior_check",
"description": "输出中展示了本次激活的随机维度(如叙事视角、类比域等)"
},
{
"name": "saved_to_output",
"type": "file_exists",
"description": "文章 Markdown 文件保存到 output/ 目录"
}
]
},
{
"id": 2,
"name": "markdown-to-wechat",
"prompt": "帮我把下面这段 markdown 转成微信公众号格式,用 professional-clean 主题预览一下:\n\n# 为什么你应该停止追求完美代码\n\n## 完美是个陷阱\n\n说实话我写了十年代码最大的领悟不是什么设计模式而是——完美的代码根本不存在。\n\n你以为 Google 的代码库很优雅?去看看 Chromium 的源码,保证刷新你的三观。\n\n## 够用就是最好的\n\n我之前一个同事重构一个模块重构了三周。结果呢性能提升了 2%,但错过了整个 sprint 的交付。\n\n老板的原话是「我要的是能跑的不是能裱起来的。」\n\n## 最后说两句\n\n写代码跟做饭一样——你妈做的菜不一定摆盘好看但你就是爱吃。",
"expected_output": "生成微信兼容的内联样式 HTML 文件H1 提取为独立标题H2 有主题样式,可在浏览器预览",
"files": [],
"assertions": [
{
"name": "html_generated",
"type": "file_exists",
"description": "生成了 HTML 预览文件"
},
{
"name": "inline_styles_only",
"type": "content_check",
"description": "HTML 使用内联 style 属性,不包含 <style> 标签(微信限制)"
},
{
"name": "h1_extracted",
"type": "content_check",
"description": "H1 标题被提取为独立标题字段,不在正文 HTML 中"
}
]
}
]
}