maxoreric

user-confirm-skill

- v1.0.0 (2026-01-19): 初始版本

maxoreric 0 Updated 4mo ago

Resources

1
GitHub

Install

npx skillscat add maxoreric/sop-engine/skills-user-confirm-skill

Install via the SkillsCat registry.

SKILL.md

user-confirm-skill

用途: 判别式确认 - 展示内容并获取用户反馈

核心理念:

  • 做选择题,不做填空题
  • 人类擅长判别(喜不喜欢),不擅长生成(描述细节)
  • 展示具体方案,让用户说"对/不对"

输入参数

input:
  content: object | string     # 要确认的内容(方案、结果等)
  format: string               # 展示格式(见下方)
  question: string             # 确认问题
  options: array               # 可选:预定义的选项

format 选项

格式 说明 适用场景
visual_summary 可视化摘要(emoji + 结构化) 展示设计方案
file_list_with_summary 文件列表 + 功能说明 展示执行结果
comparison_table 对比表格 展示多个选项
markdown 完整 Markdown 通用
simple 简单文本 快速确认

输出

output:
  approved: boolean           # 是否通过
  satisfied: boolean          # 是否满意(同义,兼容性)
  confidence: number          # 用户信心(1-10)
  comments: string            # 用户反馈
  specific_issues: array      # 具体问题点(如果有)
  suggestions: array          # 改进建议(如果有)

执行逻辑

1. 格式化内容

根据 format 参数,将 content 格式化为易读的展示:

def format_content(content, format_type):
    if format_type == "visual_summary":
        return format_visual_summary(content)
    elif format_type == "file_list_with_summary":
        return format_file_list(content)
    elif format_type == "comparison_table":
        return format_comparison(content)
    elif format_type == "markdown":
        return content  # 已经是 markdown
    else:
        return str(content)

2. 展示给用户

展示模板:

[格式化的内容]

{question}

请回答:
✅ 通过/满意/可以
❌ 需要调整(请说明哪里需要改)
❓ 有疑问(请提出)

3. 解析用户回复

识别关键词:

用户回复 approved confidence
"通过" / "可以" / "满意" / "好的" true 9
"基本可以" / "还行" / "差不多" true 7
"需要调整" / "不太对" / "有问题" false 5
"完全不对" / "重新来" false 2

4. 提取反馈

如果用户说"需要调整",引导提取具体问题:

Claude: "明白了,具体哪里需要调整?我可以帮你改进。"
用户: "workflow 太复杂了,而且缺少 XXX 功能"
→ specific_issues: ["workflow 过于复杂", "缺少 XXX 功能"]
→ suggestions: ["简化 workflow", "增加 XXX 功能"]

实现示例

示例 1: 展示设计方案

输入:

content:
  system_name: health-system
  structure:
    agents: 1
    skills: 8
    workflows: 3
  workflows:
    - name: daily-check
      trigger: "21:00"
    - name: weekly-report
      trigger: "Sunday 20:00"
    - name: checkup-analysis
      trigger: "file_upload"
  
format: visual_summary
question: "这个方案符合你的预期吗?需要调整哪里?"

Claude 输出:

我已经完成设计!这是方案摘要:

📁 系统结构:
  - 1 个 Agent(健康顾问)
  - 8 个 Skills(体检分析、指标追踪等)
  - 3 个 Workflows(每日检查、每周报告、体检分析)

🔄 核心流程:
  ① 每天 21:00 自动检查当日数据,生成健康提醒
  ② 每周日汇总本周情况,分析趋势
  ③ 上传体检报告时,自动分析并更新健康档案

📊 数据管理:
  - 个人档案:基础信息、病史
  - 指标记录:按日期存储
  - 报告输出:Markdown 格式

这个方案符合你的预期吗?需要调整哪里?

请回答:
✅ 通过/满意/可以
❌ 需要调整(请说明哪里需要改)
❓ 有疑问(请提出)

用户回复: "看起来不错,可以开始创建"

输出:

{
  "approved": true,
  "satisfied": true,
  "confidence": 9,
  "comments": "看起来不错,可以开始创建",
  "specific_issues": [],
  "suggestions": []
}

示例 2: 用户提出调整

用户回复: "需要调整,我还想要饮食记录功能,而且每日检查改到早上 8 点"

Claude 追问:

明白了!你希望:
1. 增加饮食记录功能
2. 每日检查改到早上 8:00

还有其他需要调整的吗?

用户: "没了"

输出:

{
  "approved": false,
  "satisfied": false,
  "confidence": 7,
  "comments": "需要调整,我还想要饮食记录功能,而且每日检查改到早上 8 点",
  "specific_issues": [
    "缺少饮食记录功能",
    "每日检查时间不合适(应该是早上 8:00)"
  ],
  "suggestions": [
    "增加 diet-log-skill",
    "调整 daily-check workflow 的触发时间为 08:00"
  ]
}

示例 3: 展示执行结果

输入:

content:
  created_files:
    - "health-system/.claude/agents/health-advisor.md"
    - "health-system/.claude/skills/checkup-analysis/SKILL.md"
    - "health-system/.claude/workflows/daily-check.yaml"
    # ... 更多文件
  summary:
    total_files: 25
    agents: 1
    skills: 8
    workflows: 3

format: file_list_with_summary
question: "试用一下,有没有不符合预期的地方?"

Claude 输出:

✅ 系统创建完成!

📁 health-system/
  ├── .claude/
  │   ├── agents/health-advisor.md
  │   ├── skills/ (8 个)
  │   │   ├── checkup-analysis/
  │   │   ├── health-indicators/
  │   │   ├── risk-assessment/
  │   │   └── ...
  │   └── workflows/ (3 个)
  │       ├── daily-check.yaml
  │       ├── weekly-report.yaml
  │       └── checkup-analysis.yaml
  ├── data/
  │   ├── profile.json (示例)
  │   └── indicators/
  ├── outputs/
  └── README.md

🚀 下一步:
  1. 填写 data/profile.json(你的基本信息)
  2. 试用: "执行每日健康检查"
  3. 上传体检报告测试分析功能

试用一下,有没有不符合预期的地方?

请回答:
✅ 满意/没问题
❌ 有问题(请说明)

格式化函数

visual_summary 格式

def format_visual_summary(content):
    """
    可视化摘要格式
    使用 emoji + 结构化展示
    """
    output = []
    
    # 系统结构
    if "structure" in content:
        output.append("📁 系统结构:")
        structure = content["structure"]
        if "agents" in structure:
            output.append(f"  - {structure['agents']} 个 Agent")
        if "skills" in structure:
            output.append(f"  - {structure['skills']} 个 Skills")
        if "workflows" in structure:
            output.append(f"  - {structure['workflows']} 个 Workflows")
    
    # 核心流程
    if "workflows" in content:
        output.append("\n🔄 核心流程:")
        for i, wf in enumerate(content["workflows"], 1):
            trigger = wf.get("trigger", "手动触发")
            output.append(f"  {chr(9311 + i)} {wf['name']}: {trigger}")
    
    # 数据管理
    if "data_structure" in content:
        output.append("\n📊 数据管理:")
        for item in content["data_structure"]:
            output.append(f"  - {item}")
    
    return "\n".join(output)

file_list_with_summary 格式

def format_file_list(content):
    """
    文件列表 + 摘要格式
    """
    output = ["✅ 系统创建完成!\n"]
    
    # 文件树
    if "created_files" in content:
        output.append("📁 创建的文件:")
        # 简化显示,只显示关键文件
        for file in content["created_files"][:10]:
            output.append(f"  - {file}")
        if len(content["created_files"]) > 10:
            output.append(f"  ... 共 {len(content['created_files'])} 个文件")
    
    # 摘要
    if "summary" in content:
        output.append("\n📊 摘要:")
        summary = content["summary"]
        for key, value in summary.items():
            output.append(f"  - {key}: {value}")
    
    return "\n".join(output)

关键设计

1. 判别式交互

错误方式(生成式):

Claude: "你想要什么功能?"
用户: "呃...我想要...那个...嗯..."

正确方式(判别式):

Claude: "我设计了这个方案:[具体方案]。符合预期吗?"
用户: "基本可以,但需要调整 X"

2. 引导式反馈

当用户说"需要调整"时,不要让用户自己描述:

错误:

Claude: "好的,请详细描述你想要的调整"
用户: "呃...怎么说呢..."

正确:

Claude: "明白了!具体哪里需要调整?
  A. 功能缺失(缺少某个功能)
  B. 流程问题(步骤不对)
  C. 时间安排(触发时间)
  D. 其他(请说明)"

3. 信心评估

根据用户的措辞判断信心:

措辞 confidence 含义
"完美" / "很好" 10 非常满意
"可以" / "不错" 9 满意
"还行" / "基本可以" 7 勉强接受
"有些问题" 5 不满意但可修复
"不对" / "重新来" 2 严重不满

使用场景

场景 1: 设计方案确认

input:
  content: <设计方案>
  format: "visual_summary"
  question: "这个方案符合你的预期吗?"

场景 2: 执行结果验证

input:
  content: <执行结果>
  format: "file_list_with_summary"
  question: "试用一下,有没有不符合预期的地方?"

场景 3: 快速二选一

input:
  content: "方案 A vs 方案 B"
  format: "comparison_table"
  question: "你更倾向哪个?"
  options: ["A", "B", "都可以", "都不要"]

实现注意事项

1. 自然语言理解

需要识别各种表达:

  • 肯定:✅ "可以" / "好的" / "满意" / "没问题" / "👍"
  • 否定:❌ "不行" / "需要调整" / "有问题" / "重新来"
  • 中性:❓ "还行" / "差不多" / "基本可以"

2. 提取具体反馈

使用简单的 NLP 技巧:

  • 识别否定词:不、没、缺、少
  • 识别需求词:需要、想要、希望、增加
  • 识别问题词:问题、错误、不对、太...

3. 超时处理

如果用户长时间没回复:

(等待 24 小时后)
Claude: "我还在等待你的确认。如果暂时没时间查看,我会先执行当前方案,后续你可以再调整。"

评价标准

criteria.md


版本历史

  • v1.0.0 (2026-01-19): 初始版本