大语言模型

以 OpenClaw Skills 机制为例:把一次性提示变成可复用能力

第九课
郑思尧
上海交通大学 国际与公共事务学院

今天的路线图

大纲标题是“大语言模型”。所以开头先讲 LLM 的技术底座: token、Transformer、上下文、训练、推理与幻觉风险。 后半段再进入 OpenClaw Skills:如何把 LLM 能力写成可复用、可审计的研究流程。

原理
LLM 如何从文本预测下一个 token
模型
GPT 模型、reasoning effort 与工具调用
机制
OpenClaw Skill 如何被发现、注入、调用
实践
为社科研究写一个可复用 SKILL.md

Part 1LLM 的技术底座

LLM 到底在做什么?

text
tokens
embeddings
Transformer
next token
大语言模型不是在“查数据库”,而是在给定上下文之后,对下一个 token 的概率分布进行建模。

因此,模型越像“懂了”,越需要问:它的判断来自上下文证据、训练中学到的模式,还是一次流畅的概率补全?

Token 与上下文窗口

Tokenization
模型读到的不是完整汉字、英文词或句子,而是被切分后的 token 序列。
Context window
提示词、历史对话、工具结果和输出都挤在同一个上下文预算里。
Implication
长文档任务要分块、引用来源、保留中间结果,而不是一次性全塞进去。

Transformer:注意力机制

Self-attention 让每个 token 在生成表示时“看向”上下文中相关的 token。 这使模型可以处理指代、长距离依赖、格式模仿和多步文本结构。

  • Query:当前 token 想找什么信息
  • Key:其他 token 提供什么线索
  • Value:被加权汇入的新表示
课堂直觉
注意力不是人类意义上的“注意”,而是一套可训练的加权计算: 哪些上下文片段会更影响下一个 token。

训练过程:从“会续写”到“会听指令”

pretrain
instruct
preference
tool / agent
预训练
从海量文本里学习语言、知识模式、代码结构和推理痕迹。
对齐与工具化
通过指令数据、偏好反馈、工具调用样例,让模型更像“助理”。

为什么会幻觉?

概率补全
生成目标是延续合理文本,不等于事实核验。
证据缺口
上下文没有材料时,模型仍可能给出流畅答案。
格式压力
用户要求表格、结论、引用时,模型会倾向补齐结构。
边界模糊
训练记忆、上下文事实、工具结果容易被混在一起。

社科研究中,LLM 输出必须绑定原始材料、证据摘录、处理脚本和审计记录;不能只保存“看起来合理”的最终答案。

从 LLM 到 Skill:工程化这一层

LLM
tool use
agent loop
skill

LLM 提供语言与推理能力;工具让它读写、搜索、计算;Agent Loop 让它多步执行; Skill 则把反复使用的流程写成明确、可复验的操作规程。

Prompt vs. Skill:差别在哪里?

一次性 Prompt

每次都要重新解释流程
容易遗漏输入、输出、验证步骤
很难统一给全班复用
修改后没有明确版本边界

OpenClaw Skill

一个目录 + 一个 SKILL.md
说明何时使用、如何使用、用哪些工具
可以附带脚本、模板、样例数据
可配置、可禁用、可按环境过滤
Skill 不是“更长的提示词”,而是可复用的操作规程。

Skills 机制总览

skill folder
discover
gate
prompt list
read SKILL.md
OpenClaw runtime
启动会话时,OpenClaw 扫描 eligible skills,生成一个紧凑的 <available_skills> 列表。 模型先只看到 name / description / location;真正需要使用时,再用 read 工具读取对应的 SKILL.md

Part 2Skill 的文件结构与提示词注入

一个 Skill 最少需要什么?

必要部分
目录名:能力边界
SKILL.md:元数据 + 指令
YAML frontmatter:名称与触发描述
Markdown 正文:执行步骤、工具、注意事项
skills/
  interview-coding/
    SKILL.md
    templates/
      codebook.md
    scripts/
      validate_labels.py
    examples/
      sample_interviews.csv

SKILL.md 的最小格式

---
name: interview-coding
description: Code interview excerpts into a finite qualitative codebook.
---

# Interview Coding Skill

Use this when the user asks to classify interview excerpts,
open-ended survey responses, or field notes.

Workflow:
1. Verify input path, encoding, and row count.
2. Read or create a finite codebook.
3. Label each excerpt with code, confidence, and evidence quote.
4. Save outputs as CSV and Markdown audit report.

OpenClaw 遵循 AgentSkills 兼容目录;frontmatter 的 key 需要保持单行,metadata 也建议写成单行 JSON。

为什么不是把全文都塞进系统提示词?

节省上下文
系统提示词只注入 compact skills list,不直接注入所有 SKILL.md 全文。
按需读取
模型判断相关后,再读取具体 skill 文件,降低噪音。
可审计
location 明确;可以检查模型是否真的读了 SKILL.md。
<available_skills>
  <skill>
    <name>interview-coding</name>
    <description>Code interview excerpts...</description>
    <location>/workspace/skills/interview-coding/SKILL.md</location>
  </skill>
</available_skills>

Skill 从哪里加载?优先级是什么?

位置作用优先级
<workspace>/skills 当前 agent / 当前课堂项目专用 skill 最高
~/.openclaw/skills 本机共享、可管理、可覆盖 bundled 的 skill
bundled skills OpenClaw 安装包或 OpenClaw.app 自带 最低
skills.load.extraDirs 额外共享 skill 包目录 最低扩展层

同名冲突时:workspace wins。课堂实验优先把自定义 skill 放进当前 workspace。

Part 3加载、过滤、配置与热更新

Load-time filters:不是所有 skill 都会出现

  • os:只在 darwin / linux / win32 中某些平台启用
  • requires.bins:要求命令在 host 的 PATH 上存在
  • requires.anyBins:多个命令至少存在一个
  • requires.env:要求环境变量或配置提供
  • requires.config:要求 openclaw.json 中某项为真
---
name: policy-crawler
description: Crawl policy pages into auditable CSV.
metadata: {"openclaw":{"requires":{"bins":["python3"],"env":["TAVILY_API_KEY"]},"primaryEnv":"TAVILY_API_KEY"}}
---

注意:requires.bins 检查的是 host;如果实际运行在 Docker sandbox,容器里也必须有这个命令。

openclaw.json:skills 的控制面

{
  skills: {
    allowBundled: ["gemini", "peekaboo"],
    load: {
      extraDirs: ["~/Projects/course-skills"],
      watch: true,
      watchDebounceMs: 250
    },
    install: {
      preferBrew: true,
      nodeManager: "npm"
    },
    entries: {
      "policy-crawler": {
        enabled: true,
        apiKey: { source: "env", provider: "default", id: "TAVILY_API_KEY" },
        config: { maxPages: 30 }
      },
      sag: { enabled: false }
    }
  }
}

Env / API Key 的作用域

Agent run 开始
读取 skill metadata,应用 entries.envapiKey
运行期间
密钥注入 host process 环境;不要写进 prompt、日志或报告。
运行结束
OpenClaw 恢复原始环境;不是全局 shell 配置。

沙箱会话里,skill 进程在 Docker 内运行;sandbox 不继承 host process.env。需要用 sandbox docker env 或自定义镜像。

Session snapshot 与 watcher

new session
snapshot eligible skills
reuse list
next turn refresh

默认情况下,会话开始时记录 eligible skills;改动 skill 或配置后,通常新会话生效。 如果 watcher 开启,SKILL.md 改动会刷新 snapshot,下一轮 agent turn 可拾取。

{ skills: { load: { watch: true, watchDebounceMs: 250 } } }

Plugin skills、ClawHub 与课堂边界

Plugins + skills
插件可在 openclaw.plugin.json 里声明 skills 目录。 插件启用后,其 skills 参与正常优先级规则。
ClawHub
公开 skill registry,可安装、更新、同步。 课堂上只把它当作发现来源,第三方内容必须先读后用。
clawhub install <skill-slug>
clawhub update --all
clawhub sync --all

补充GPT 模型与 Skill 选型

Skill 与 GPT 模型:不是同一层

SKILL.md
workflow contract
model execution
audited output
Skill 决定“怎么做”
触发条件、输入输出、工具边界、保存路径、验证步骤、失败时要不要停下来。
模型决定“做得怎样”
推理深度、工具选择精度、长上下文能力、输出风格、速度、成本与稳定性。

不要把 OpenClaw 的 skill discovery 与 OpenAI 模型文档中的 “supported tools: skills” 混为一谈;前者是 OpenClaw 的运行时机制,后者是模型/平台工具能力。

GPT 系列:给 Agent 工作流的粗略选型

模型官方定位(2026-04)适合放在哪类 Skill 后面课堂提醒
gpt-5.5 最新 frontier reasoning model;面向复杂专业工作 工具密集、多步分析、长文档综合、复杂代码执行 默认 reasoning.effort=medium,复杂任务再升高
gpt-5.4 frontier model;更偏可负担的专业工作 常规研究助理、代码分析、文档处理、批量工作流 支持 none/low/medium/high/xhigh
gpt-5.1 coding / agentic tasks 的旗舰模型 较稳定的编码、工具调用、agent 任务 可作为课程演示里的强基线
gpt-5 上一代 reasoning / coding / agentic model 兼容旧 workflow 或复现实验设置 新项目优先评估更新模型

注:模型名与可用性会变化;正式部署前以当前 provider / OpenAI API 文档为准。

Reasoning effort:给 Skill 加一个“成本旋钮”

none
极低延迟;简单分类、格式转换、轻量检索。
low
日常 agent 任务;多数课堂练习的起点。
medium
平衡质量、速度、成本;GPT-5.5 默认起点。
high / xhigh
复杂推理、长链工具调用、异步高价值任务。

原则:不要因为模型“更会想”就盲目拉高 effort。先用代表性样例做 eval;只有质量收益超过成本和延迟,才提高推理档位。

把模型策略写进 Skill,而不是写死模型

# Model policy

Default:
- Use a fast/low-effort model for schema checks, deduplication, and simple labeling.

Escalate:
- Use a stronger reasoning model when:
  1. codebook definitions conflict,
  2. confidence is low on more than 20% of rows,
  3. the task requires tool-heavy multi-step execution.

Do not:
- Change model silently after producing results.
- Hide cost/latency tradeoffs from the user.
- Treat model output as validated evidence without spot-checks.

好的 skill 写“模型选择规则”,不把某个模型神化为答案。研究流程要能换模型、能复验、能解释差异。

Part 4怎样设计一个研究型 Skill

Skill 设计协议:先把规格空间写有限

1
Trigger
什么请求触发?什么请求不该触发?
2
Input / Output
输入文件、字段、编码、输出格式、保存路径。
3
Tool surface
允许读写哪些目录?是否需要 exec、web search、API key?
4
Validation
抽检、日志、失败条件、不可 silent fallback 的警告。

课堂示例:开放题编码 Skill

---
name: open-response-coding
description: Classify Chinese open-ended survey answers with a finite codebook and audit trail.
---

# Open Response Coding

Use when the user provides CSV/XLSX/text responses and asks for coding,
categorization, or qualitative labeling.

Rules:
- Verify file path, encoding, row count, and target column before analysis.
- Do not invent unlimited categories; propose at most 6 codes first.
- For each row, output: id, code, confidence, evidence_quote.
- Save `coded_responses.csv` and `coding_report.md`.
- Randomly spot-check 10 rows and report disagreements or low confidence.
- If input contains direct identifiers, stop and ask for de-identification.

把脚本和模板放进 Skill,而不是塞进 Prompt

  • templates/codebook.md:固定输出结构
  • scripts/validate_labels.py:检查标签、置信度、缺失值
  • examples/sample.csv:给模型具体 I/O 参照
  • {baseDir}:在说明中引用 skill 自身目录
Before final answer:
1. Run:
   python3 {baseDir}/scripts/validate_labels.py coded_responses.csv
2. Include validation output in the report.
3. If validation fails, repair the CSV instead of hiding the error.

测试一个 Skill:不要只看“有没有回复”

最小 smoke test
openclaw agent --message "use open-response-coding on examples/sample.csv"
检查模型是否读取了 SKILL.md,是否生成指定文件。
研究完整性 test
查看输出行数、编码空间、抽检样本、低置信度说明、验证脚本输出。

如果 skill 需要跑重任务或外部 API,先用小样本;不要把失败包装成“已完成”。

Part 5社科课堂里的三类 Skills

类型一:编码与标注 Skill

User
我上传了 200 条市民对社区治理的开放题回答。请用 open-response-coding 生成不超过 6 类的编码表,并保存结果。
Skill 应保证:
先确认字段和编码 → 提出有限 codebook → 逐条标注 → 输出 CSV + Markdown 报告 → 抽检低置信度样本

研究者负责解释与修订 codebook;skill 负责让流程可重复、可检查。

类型二:政策文本采集 Skill

适合封装
固定来源、固定字段、固定限速、固定输出路径。 例如:标题、发布日期、发布机构、URL、摘要。
必须写清
目标站点、时间范围、去重规则、失败重试、robots/访问限制、代理或 API key 使用边界。
Output contract:
policy_list.csv columns:
source, title, date, agency, url, fetched_at, hash

类型三:可复现分析 Skill

input data
validate schema
run script
save artifacts
audit report
Research integrity
分析型 skill 的核心不是“自动跑代码”,而是把输入检查、依赖记录、随机种子、日志、图表路径、异常与警告都写成可审计输出。

课堂练习:20 分钟写一个 Mini Skill

  1. 1选择一个小任务:开放题分类、政策标题抽取、CSV 描述统计。
  2. 2skills/my-mini-skill/SKILL.md:name、description、触发条件、输出契约。
  3. 3加一个样例输入,要求 agent 保存结构化输出。
  4. 4新开会话测试:确认它读了 skill,且没有绕开验证步骤。

提交标准:SKILL.md + sample input + output artifact + 你认为最需要人工复核的一点。

常见失败模式

机制错误
skill 放错目录;frontmatter 多行解析失败;同名 skill 被 workspace 覆盖;改完后旧 session 没刷新。
执行错误
host 有命令但 sandbox 没有;API key 注入到 host 但容器里没有;脚本路径没有用 {baseDir}
研究错误
类别空间无限膨胀;没有保存证据引用;没有抽检;把低置信度结果写成确定结论。
安全错误
第三方 skill 未读即用;把密钥写进 SKILL.md;把敏感访谈原文交给不可信脚本或外部 API。

今天的 takeaway

Skill 是 Agent 的
可复用研究规程

OpenClaw 用 SKILL.md 把能力边界、工具使用、输出契约和验证步骤写入系统。
好的 skill 不追求“更聪明”,而追求可复现、可审计、可修改、可共享

Write the procedure once; make every run inspectable.