
OpenClaw 能够把 skill 和工具 进行多步调用,高效完成复杂任务。本文带你拆解 OpenClaw 调用 skill 的核心能力原理,用流程图逻辑+Python代码对应,一次性讲透交互全过程。
🔍 一、核心交互流程:用户→大模型→Tool→Skill
当用户提出问题,整套调用链路会按固定逻辑循环执行,最多支持 10轮 调用,直至输出最终答案。

1. 问题分析与 Skill 初选
用户问题 → 大模型接收 → 大模型遍历所有 Skill(Name+Describe)
→ 大模型分析需求,选定目标 Skill(例:读文件工具)
2. Skill 内容读取
大模型指令:读取对应 Skill 文件 → 获取 Skill 完整使用规则
→ 规则回传大模型,掌握 Skill 使用方法
3. Tool 执行与命令调用
大模型生成执行指令 → 调用 Tool 执行(主流:curl命令/Shell脚本)
→ 执行 Skill 对应的 API → 获取返回结果
4. 多轮循环判断
结果回传大模型 → 校验是否为最终答案
✅ 是:结束流程,返回结果
❌ 否:开启下一轮 Skill 调用,重复上述步骤
→ 最多循环 10轮 终止
💻 二、代码层对应:Python 实现逻辑
理论落地到代码,每一步都有明确对应关系,清晰易懂。
1. 初始化:加载所有 Skill
程序启动 → 读取全部 Skill 文件 → 提取 Skill 名称+描述
→ 拼接进 System 提示词 → 整合入 Message 结构体
# 加载 skillsskills = load_skills(SKILLS_DIR)if not skills:print("[错误] 未找到任何 SKILL 文件,请检查 SKILLS_DIR 配置")returnprint(f"\n已加载 {len(skills)} 个技能: {', '.join(skills.keys())}\n")# 构建 system prompt(参考 openclaw 的 buildEmbeddedSystemPrompt)system_prompt = build_system_prompt(skills)messages = [{"role": "system", "content": system_prompt},*conversation_history,{"role": "user", "content": user_input},]
2. 消息结构组装
System 提示词(含 Skill 信息)+ 历史对话 + 用户最新问题
→ 生成完整请求 Message

3. 接口调用:Function Call 核心
Message 传入 chat.completion 接口
→ 同步传入 TOOLS 参数(开启 Function Call 能力)
# 始终用 stream=True(对应 openai-completions.js 的 stream: true)stream = client.chat.completions.create(model=MODEL_ID,messages=messages,tools=TOOLS,tool_choice="auto",stream=True,stream_options={"include_usage": True},extra_body={"enable_thinking": True},)
🛠️ 三、OpenClaw 必备双 Tool 设计
为支撑 Skill 多步调用,至少需配置两个核心工具,分工明确:
- 读工具
📖
专属作用:读取 Skill 文件,获取完整执行规则 - 执行工具
⚙️
专属作用:运行脚本,主流为执行 curl 命令,完成 Skill 落地TOOLS = [{"type": "function","function": {"name": "read_file","description": ("读取文件内容。用于读取 SKILL.md 技能说明文件,获取接口地址、参数格式等信息。"),"parameters": {"type": "object","required": ["file_path"],"properties": {"file_path": {"type": "string","description": "文件路径(绝对路径或相对路径)",}},},},},{"type": "function","function": {"name": "exec_command","description": ("执行 Shell 命令。用于执行 curl 命令调用外部 API 接口,获取查询结果。""只允许执行 curl 命令,不允许执行其他命令。"),"parameters": {"type": "object","required": ["command"],"properties": {"command": {"type": "string","description": "要执行的 Shell 命令(仅限 curl)",}},},},},]
🔁 四、最终执行闭环
大模型输出 Function Call 结果 → 解析结果数据
→ 触发 Tool 执行 → 结果回传 → 循环/终止
→ 输出最终答案
while iteration < max_iterations:iteration += 1print(f"\n[循环 {iteration}/{max_iterations}] 调用大模型...", flush=True)
夜雨聆风