Grok Skills:让 AI 不再每次都从零开始认识你

2026-05-20 24 预计阅读时间:1 分钟
来源:oschina.net AI 摘要 原文链接

免责声明:本文为 AI 摘要整理,建议结合原文阅读。摘要可能省略上下文、版本差异或边界条件,不作为官方说明。

预计阅读时间:11 分钟

用 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 是否正确传递...

这个脚本的关键设计点:

  1. 持久化到用户目录——~/.grok_skills.json,跨进程、跨对话都能读取
  2. 触发条件与规则分离——便于按场景选择性注入,避免无关 Skill 干扰
  3. build_system_prompt() 拼装注入——模拟了真实系统中"每次对话开头自动带上偏好"的机制

你可以把这个脚本改造成 HTTP 微服务,让任何 AI 客户端在发起对话前先拉取用户的 Skills 列表,拼进 system prompt。

真实边界与取舍

Grok Skills 解决了一个真实痛点,但也要看到几条边界:

  • 隐私风险——偏好数据持久存储意味着平台掌握了你的工作习惯和风格指纹。企业用户需要评估数据是否会被用于模型训练。
  • 规则冲突——当你定义了十条 Skill,其中两条规则互相矛盾(比如一条说"总是详细展开",另一条说"回答不超过 200 字"),AI 的优先级判断目前没有公开机制。
  • 更新成本——Skill 一旦保存就全局生效。如果你只想在某个项目里用特定格式,暂时没有"按项目切换 Skill 组合"的能力,需要手动禁用再启用。
  • 覆盖范围——目前 Skills 只在 Grok 生态内生效,无法迁移到 Claude 或 ChatGPT。如果你是多模型用户,仍然需要各自配置。

上手清单

如果你已经在用 Grok,可以这样开始:

  1. 先定义一条最痛的规则——别贪多,选那个你每次都要重复说的偏好(比如"用中文回答"或"代码用 Python"),存成第一条 Skill。
  2. 跑一下上面的脚本——理解持久化偏好的底层逻辑,方便你在自己的工具链里复用。
  3. 观察一周——看 Grok 是否稳定遵守保存的规则,记录它"忘记"的场景,据此调整 Skill 的措辞。自然语言定义越具体,AI 遵守的概率越高。
  4. 逐步扩展——确认一条 Skill 稳定生效后,再加第二条。避免一次性灌入太多规则导致冲突。

跨对话记忆不是新概念——ChatGPT 的 Memory、Claude 的 Projects 都在做类似的事。但 Grok Skills 把"自然语言定义 + 自动触发"做得更直白,降低了配置门槛。对每天要和 AI 反复协作的人来说,这省下的不只是时间,更是重复解释的耐心。


相关推荐