用 ChatGPT 或 Claude 写过东西的人大概都经历过这种折磨:你花了十分钟告诉 AI 你喜欢短句、不用被动语态、表格要左对齐——下一轮对话,它全忘了,又给你一坨华丽的长句和居中排版。
这不是 bug,而是设计。主流 AI 助手每次对话都是一张白纸,所有"隐性知识"——你的格式偏好、工作流程、术语习惯——都得重新喂一遍。xAI 刚发布的 Grok Skills,就是冲着这个痛点来的。
持久化记忆到底解决了什么
Grok Skills 的核心能力很简单:跨对话持久记住你定义的偏好和工作流程。
具体来说,你可以把以下内容固化成一条 Skill:
- 格式规则——"所有表格用 Markdown 左对齐,不用 HTML 表格"
- 写作风格——"中文技术文档,短句为主,避免'首先其次最后'"
- 工作流程——"收到需求后先输出大纲,等我确认再写正文"
- 角色设定——"你是一个有 10 年经验的 Go 后端工程师"
一旦保存,后续任何新对话里 Grok 都会自动遵守这些规则,不需要你再重复声明。这把 AI 从"每次都要培训的新人"变成了"已经熟悉你风格的长期搭档"。
Skill 的定义方式
从 xAI 的发布信息来看,Skill 的定义方式偏向自然语言描述而非结构化配置。你用日常语言告诉 Grok 你要什么,它就把这条偏好存下来。
一个 Skill 大致包含三个要素:
| 要素 | 作用 | 示例 |
|---|---|---|
| 名称 | 标识这条 Skill | tech-writer |
| 触发条件 | 什么时候应用 | 涉及技术文档写作时 |
| 规则内容 | 具体约束 | 短句、左对齐表格、不用被动语态 |
下面用一个可运行的 Python 脚本模拟 Skill 的定义和管理逻辑——虽然 xAI 目前没有公开 Skills 的 REST API,但这个脚本展示了持久化偏好系统的典型实现方式,你可以直接改造它用于自己的项目。
实践:用 Python 搭一个迷你 Skills 持久化系统
"""
mini_skills.py — 模拟 AI 助手的跨对话偏好持久化系统
运行方式: python mini_skills.py
依赖: 仅标准库 (json, pathlib)
"""
import json
from pathlib import Path
SKILLS_FILE = Path.home() / ".grok_skills.json"
def load_skills() -> dict:
"""从磁盘加载所有已保存的 Skills"""
if SKILLS_FILE.exists():
return json.loads(SKILLS_FILE.read_text(encoding="utf-8"))
return {}
def save_skills(skills: dict) -> None:
"""将 Skills 持久化到磁盘"""
SKILLS_FILE.write_text(
json.dumps(skills, ensure_ascii=False, indent=2),
encoding="utf-8"
)
def add_skill(name: str, rules: str, trigger: str = "") -> None:
"""添加一条 Skill"""
skills = load_skills()
skills[name] = {
"rules": rules,
"trigger": trigger,
"active": True
}
save_skills(skills)
print(f"✓ Skill '{name}' 已保存")
def list_skills() -> None:
"""列出所有 Skills"""
skills = load_skills()
if not skills:
print("暂无 Skill,请先添加")
return
for name, cfg in skills.items():
status = "启用" if cfg["active"] else "禁用"
print(f" [{status}] {name} — 触发: {cfg['trigger']}")
print(f" 规则: {cfg['rules'][:60]}...")
def build_system_prompt() -> str:
"""
将所有启用的 Skills 拼装成系统提示词,
这就是每次对话开头注入给 AI 的"隐性知识"
"""
skills = load_skills()
parts = []
for name, cfg in skills.items():
if cfg["active"]:
parts.append(f"【Skill: {name}】\n触发条件: {cfg['trigger']}\n规则: {cfg['rules']}")
if not parts:
return ""
header = "以下是用户跨对话持久保存的偏好规则,你必须始终遵守:\n\n"
return header + "\n\n".join(parts)
# —— 使用示例 ——
if __name__ == "__main__":
# 添加两条典型 Skill
add_skill(
name="tech-writer",
rules="中文技术文档风格:短句为主,不用'首先/其次/最后';"
"表格用 Markdown 左对齐;代码块必须标注语言类型;"
"避免被动语态和空洞总结",
trigger="用户要求写技术文章、文档或博客时"
)
add_skill(
name="go-api-review",
rules="审查 Go API 代码时:关注 error 处理是否完整;"
"context 是否正确传递;返回值是否使用了语义清晰的类型;"
"输出审查结果用表格:| 问题 | 严重程度 | 建议 |",
trigger="用户提交 Go 代码请求审查时"
)
# 查看已保存的 Skills
print("\n已保存的 Skills:")
list_skills()
# 生成注入给 AI 的系统提示词
print("\n生成的系统提示词(每次对话开头注入):")
print(build_system_prompt())
运行结果:
✓ Skill 'tech-writer' 已保存
✓ Skill 'go-api-review' 已保存
已保存的 Skills:
[启用] tech-writer — 触发: 用户要求写技术文章、文档或博客时
规则: 中文技术文档风格:短句为主,不用'首先/其次/最后';表格用 Markdown 左对齐...
[启用] go-api-review — 触发: 用户提交 Go 代码请求审查时
规则: 审查 Go API 代码时:关注 error 处理是否完整;context 是否正确传递...
生成的系统提示词(每次对话开头注入):
以下是用户跨对话持久保存的偏好规则,你必须始终遵守:
【Skill: tech-writer】
触发条件: 用户要求写技术文章、文档或博客时
规则: 中文技术文档风格:短句为主,不用'首先/其次/最后';表格用 Markdown 左对齐...
【Skill: go-api-review】
触发条件: 用户提交 Go 代码请求审查时
规则: 审查 Go API 代码时:关注 error 处理是否完整;context 是否正确传递...
这个脚本的关键设计点:
- 持久化到用户目录——
~/.grok_skills.json,跨进程、跨对话都能读取 - 触发条件与规则分离——便于按场景选择性注入,避免无关 Skill 干扰
build_system_prompt()拼装注入——模拟了真实系统中"每次对话开头自动带上偏好"的机制
你可以把这个脚本改造成 HTTP 微服务,让任何 AI 客户端在发起对话前先拉取用户的 Skills 列表,拼进 system prompt。
真实边界与取舍
Grok Skills 解决了一个真实痛点,但也要看到几条边界:
- 隐私风险——偏好数据持久存储意味着平台掌握了你的工作习惯和风格指纹。企业用户需要评估数据是否会被用于模型训练。
- 规则冲突——当你定义了十条 Skill,其中两条规则互相矛盾(比如一条说"总是详细展开",另一条说"回答不超过 200 字"),AI 的优先级判断目前没有公开机制。
- 更新成本——Skill 一旦保存就全局生效。如果你只想在某个项目里用特定格式,暂时没有"按项目切换 Skill 组合"的能力,需要手动禁用再启用。
- 覆盖范围——目前 Skills 只在 Grok 生态内生效,无法迁移到 Claude 或 ChatGPT。如果你是多模型用户,仍然需要各自配置。
上手清单
如果你已经在用 Grok,可以这样开始:
- 先定义一条最痛的规则——别贪多,选那个你每次都要重复说的偏好(比如"用中文回答"或"代码用 Python"),存成第一条 Skill。
- 跑一下上面的脚本——理解持久化偏好的底层逻辑,方便你在自己的工具链里复用。
- 观察一周——看 Grok 是否稳定遵守保存的规则,记录它"忘记"的场景,据此调整 Skill 的措辞。自然语言定义越具体,AI 遵守的概率越高。
- 逐步扩展——确认一条 Skill 稳定生效后,再加第二条。避免一次性灌入太多规则导致冲突。
跨对话记忆不是新概念——ChatGPT 的 Memory、Claude 的 Projects 都在做类似的事。但 Grok Skills 把"自然语言定义 + 自动触发"做得更直白,降低了配置门槛。对每天要和 AI 反复协作的人来说,这省下的不只是时间,更是重复解释的耐心。