共计 1640 个字符,预计需要花费 5 分钟才能阅读完成。
基本概念与应用场景
Claude Code Skill 是对话式 AI 的核心配置模块,相当于机器人的 ” 大脑程序 ”。通过 YAML 定义对话逻辑和 Python 实现业务处理,典型应用包括:

- 智能客服问答系统
- 语音助手技能开发
- 自动化流程对话机器人
新手常见三大配置错误
-
意图表达式(Intent Expression)语法错误
错误示例:user.say == '查余额'(缺少引号)
正确写法:user.say == "查余额" -
上下文变量(Context Variables)传递中断
在多轮对话中未使用context.set()保存状态,导致下次请求获取不到历史数据 -
槽位填充(Slot Filling)校验缺失
未对用户输入的手机号、日期等格式做验证,导致业务流程异常
核心配置详解
标准 YAML 技能定义
# 技能元数据(必填)skill:
name: "bank_assistant" # 技能英文 ID
version: "1.0"
description: "银行账户查询服务"
# 意图定义(必填)intents:
- name: "check_balance" # 意图标识
triggers: # 触发表达式
- "user.say contains' 余额 '"-"user.say ~ '剩余多少钱'"
# 对话流配置(可选)dialogs:
- trigger: "intent =='check_balance'" # 条件表达式
steps:
- action: "request_account" # 自定义 Python 函数
- prompt: "请输入 6 位银行卡密码"
- slot: "password" # 槽位收集
validate: "len(value) == 6" # 验证规则
Python 上下文处理示例
def handle_request(context):
# 获取上次对话保存的账号(上下文传递)last_account = context.get("account")
if not last_account:
# 首次询问账号
context.set("step", "ask_account") # 记录当前步骤
return "请先输入您的银行卡号"
else:
# 已有账号继续流程
balance = query_balance(last_account)
return f"当前余额为 {balance} 元"
对话状态机设计原则
stateDiagram
[*] --> 待命状态
待命状态 --> 账号询问: 触发查余额意图
账号询问 --> 密码验证: 收到有效账号
密码验证 --> 余额展示: 密码正确
余额展示 --> [*]: 对话完成
密码验证 --> 密码重试: 验证失败 <3 次
密码重试 --> 密码验证: 重新输入
生产环境避坑指南
必须验证的 5 个配置项
intents.triggers是否覆盖用户常见表达dialogs.steps中的槽位是否全部有验证规则- 所有
context.set()变量是否都有对应的context.get() - 超时逻辑:
timeout参数是否合理(默认 30 秒) - 错误处理:
fallback_response是否配置
日志分析技巧
查看 NLP 日志重点关注:
[DEBUG] Intent matching score:
check_balance: 0.72 # 意图匹配分数
transfer_money: 0.31
[WARN] Slot validation failed: password="123" # 槽位验证失败
进阶优化建议
性能优化配置
runtime:
warm_up: true # 开启预加载
keep_alive: 300 # 保持实例活跃(秒)
安全验证模板
import re
# 手机号验证正则
PHONE_REGEX = r"^1[3-9]\d{9}$"
def validate_input(text, pattern):
return bool(re.fullmatch(pattern, text))
实践资源与思考
完整示例项目:
GitHub – claude-bank-demo
思考题:
1. 如何处理用户中途说 ” 取消 ” 的打断行为?
2. 当相同意图有不同业务流程时(如查询余额分储蓄卡 / 信用卡),该如何设计对话流?
正文完
发表至: 人工智能开发
四天前
