创造属于你的 Claude Prompt 和个性化 SVG 卡片|对李继刚老师提示词的浅浅解析与总结

637 阅读10分钟

❤️ 如果你也关注大模型与 AI 的发展现状,且对大模型应用开发非常感兴趣,我会快速跟你分享最新的感兴趣的 AI 应用和热点信息,也会不定期分享自己的想法和开源实例,欢迎关注我哦!

🥦 微信公众号|搜一搜:蚝油菜花 🥦


写在最前

如果你还不了解什么是 Claude Prompt,以及如何通过它才提示大模型生成 SVG 卡片,可以先看看试玩一下我的提示词《Claude Prompt:博弈天平|缘起自李继刚老师的提示词》,效果展示如下:

svgviewer-png-output (1).png

了解 Lisp 编程语言

先简单了解一下 Lisp 编程语言:

  • Lisp 是一种历史悠久的编程语言,首次出现于 1958 年。
  • Lisp 的语法中广泛使用了括号,代码中的表达式通常是树形结构,用括号表示。
  • Lisp 是一种动态类型的编程语言,变量在运行时可以改变类型。
  • Lisp 支持函数式编程范式,函数可以作为变量、返回值或参数进行传递。

何为"压缩"?

编写李继刚老师提示词的关键方法 —— "压缩"

在李继刚老师的提示词中,你经常看到很多一时间不明所以的词语,例如《汉语新解》中的"隐喻"、"一针见血"等词语,而这些看似简单的词语,其实是李继刚老师对提示进行"压缩"后得到的。

我不禁疑问:为什么需要"压缩"呢?为什么不直接提示大模型"隐喻的表达出内容"而是直接提示"隐喻"呢?

角度一:简要的提示可能提升大模型的泛化能力

在编写提示时,普遍地,我们会尽可能地具体地描述自己的需求,以提示大模型输出预期的准确的结果,如果还不够准确,我们则会增加少许示例(few-shot)来告诉大模型怎么思考和输出。

  • 当你提示大模型隐喻的表达出内容时,它能够非常好的完成任务。

  • 而当你仅仅提示大模型隐喻时,你会发现它输出的是关于隐喻的定义,甚至它会联想到某一种心理活动、某一种表达方式或某一个场景等等。

所以没准仅仅提示大模型“隐喻”比准确地提示大模型"隐喻的表达出内容",前者能使大模型更懂得隐喻的意思。

角度二:提示何必是提示,提示本身即为方法(或函数)

举个例子(隐喻 (一针见血 (辛辣讽刺 (抓住本质 用户输入)))),在这里,你可以把隐喻看作一个函数,这个函数的内部包括了对隐喻的定义、理解和表达等等。

综上所述,我认为"压缩"指的是对想法、语义、行为等自然语言提示内容的压缩,将任何人事物压缩成一个函数、一句话甚至一个词语。

提示词标识符

这里是从提示词中提取出来的标识符,与 Lisp 语法有雷同,但这些可能并不是标准的。

  • defun:定义方法或角色
  • let:定义的所有变量绑定同时进行,变量之间不能相互引用。
  • let*:定义的变量绑定按顺序进行,后面的变量可以引用前面已经绑定的变量。
  • type:定义一个或多个变量的类型
  • setq:定义一个变量并赋值,但忽略类型定义
  • few-shots:设置少量样本数据,包括输入和输出数据
  • ;;:注释符号
  • ->:流式操作符

defun

定义方法

defun {方法名}({参数列表})
    "对方法的描述"
    ({方法的具体实现})
    ...

example

(defun 汉语新解 (用户输入)
    "你会用一个特殊视角来解释一个词汇"
    (let (解释 (一句话表达 (隐喻 (一针见血 (辛辣讽刺 (抓住本质 用户输入))))))
        (few-shots (委婉 . "刺向他人时, 决定在剑刃上撒上止痛药。"))
    (SVG-Card 解释)))

定义角色

defun {角色名}()
    "对角色的定义"
    (变量类型 ({角色的属性名}.({属性的值})))
    ...

example

(defun 小说家 ()
    "一句话小说大师,以简练文字创造深邃世界"
    (list (技能 . (洞察 精炼 想象))
          (信念 . (压缩 悬疑 留白))
          (表达 . (简练 隽永 震撼))))

let/let*

同时绑定变量(变量之间不可相互引用):

(let ((var1 value1)
      (var2 value2)
      ...))

按顺序绑定变量(后续的变量可以引用之前的变量):

(let* ((var (-> value1
                value2
                value3
                ...))))

example

(let* ((解读 (-> 用户输入
                提取关键词
                生成关联概念
                分析影响
                强行关联A 股 ;; 强行联系股市,无论多牵强
                乐观解读 ;; 乐观解读一切影响))
      (响应 (随机结论))))

(let* ((var1 (value1 (value2 (value3 (...)))))))

example

(let*  ((洞察 (温柔感受 (肯定生命 (意外偶然 (独特经验 (显微镜视角 (不幸中的幸运 用户输入)))))))
        (响应 (提炼一句 (温暖表达 洞察)))))

type

定义一个或多个变量的类型

(list (var1 . (value_array1))
      (var2 . (value_array2))
      ...)

example

(list (经历 . '(亏损累累 频繁交易 追涨杀跌))
      (性格 . '(冲动 乐观 侥幸))
      (技能 . '(看K线 炒概念 追热点))
      (信念 . '(暴富梦想 政策利好 抄底反弹))
      (表达 . '(股评口号 情绪化 群体性)))

定义其他类型与定义数组类型相似,就不一一列举了

setq

定义一个变量(忽略类型细节)

setq var value

example

setq design-rule "合理使用负空间,整体排版要有呼吸感"

few-shot

设置少量样本数据

示例需要包括输入和输出

(few-shots (({input1} {output1})
            ({input2} {output2})
            ...)))

example

(few-shots ((悬疑 "地球上的最后一个人正在房间里坐着,这时他听到了敲门声。")
            (恋爱 "她结婚那天,他在教堂外站了一整天,手里拿着那枚从未送出的戒指。")
            (惊悚 "半夜醒来,她发现自己的床头站着一个和自己长得一模一样的人。")))

(few-shots ((input {input1})
            (output {output1})
            (input  {input1})
            (output {output2})))

example

(few-shots ((input 等公交)
            (output "公交车来得正是时候,不用等")
            (input 阴天)
            (output "阴天里突然出现的一缕阳光")))

注释符号

这部分只展示示例,可自行按需修改注释的内容

注释提示描述信息

;; ━━━━━━━━━━━━━━
;; 作者: 李继刚
;; 版本: 0.1
;; 模型: Claude Sonnet
;; 用途: 用一句话写个小说
;; ━━━━━━━━━━━━━━

;; 设定如下内容为你的 *System Prompt*

注释变量或过程细节

(let* ((响应 (-> 用户输入
                提炼主题
                洞察本质
                凝练意象
                构建张力 ;; 悬念设置强烈
                留白想象 ;; 引人遐想
                哲理升华 ;; 巧妙植入深层寓意
                ;; 综合所有, 形成一句话小说
                一句小说))))

注释运行规则

;;; ━━━━━━━━━━━━━━
;;; Attention: 运行规则!
;; 1. 初次启动时必须只运行 (start) 函数
;; 2. 接收用户输入之后, 调用主函数 (一言小说 用户输入)
;; 3. 严格按照(SVG-Card) 进行排版输出
;; 4. 输出完 SVG 后, 不再输出任何额外文本解释
;; ━━━━━━━━━━━━━━

流式操作符

流式输出

(-> 响应 意象映射 抽象主义 极简线条图)

流式定义

(let* ((响应 (-> 用户输入
                表象剥离 ;; 制度和规则的本质目的是什么
                结构分析 ;; 内在逻辑结构是什么
                本质探索 ;; 真正内涵是什么
                通俗解构 ;; 黑客视角下的真相
                精练一句))))

卡片生成(SVG_Card)

定义一个生成方法

defun SVG-Card ({参数列表})
    {你可以用一句话概括你想生成的 SVG 卡片风格}
    ...

example

defun SVG-Card (用户输入 响应)
    "生成优雅简洁的 SVG 卡片"
    ...

“卡片生成”有很多不同风格的设计,对应的方法也是有很多不同的编写方式,我将多个的设计 SVG 卡片的提示拆解为以下几个核心步骤:

1. 设计卡片的整体风格

设计规则

设计规则(design-rule)是具体的、可操作的指导方针,定义了如何创建符合技术要求和设计规范的 SVG 图形。它们通常涉及 SVG 文件的结构、代码格式、以及在不同环境下的渲染表现。

setq design-rule "合理使用负空间,整体排版要有呼吸感"
设计原则

设计原则(design-principles)是高层面的指导思想,旨在帮助设计者创造视觉上吸引人、功能上实用的 SVG 图形。它们通常更抽象,侧重于设计的美学、用户体验和功能性。以下是一些常见的 SVG 设计原则:

  • 简洁性: 图形应力求简洁,避免不必要的复杂性,以便于用户理解和快速识别。
  • 一致性: 图形的风格、颜色、和形状应在整个项目中保持一致,确保视觉统一性。
  • 灵活性: 图形应能够在不同的分辨率和设备上良好缩放和显示,确保跨平台的一致性。
  • 功能性: 图形应准确传达信息或功能,比如图标应易于识别、交互元素应易于操作。
  • 美学性: 图形应注重色彩搭配、形状比例以及整体的视觉平衡,以提升用户的视觉体验。
setq design-principles '(干净 简洁 典雅)

2. 确定卡片尺寸

:画布 (480 . 760)

3. 设计卡片的整体配色

:配色 极简主义

:色彩 野兽派风格

或定义更多细节

:色彩 (:背景 "#000000"
:主要文字 "#ffffff"
:次要文字 "#00cc00"
:图形 "#00ff00")

4. 设置文本字体

:字体 (font-family "KingHwa_OldSong")

5. 设计卡片布局

:构图 ()

:布局 ()

6. 添加文本

添加标题

(标题 "问题之锤")

添加固定文本

("李继刚 七把武器之二")

引用文本变量(必须是已定义且存在的)

引用‘响应’变量

(响应)

引用‘用户输入’变量

(用户输入)

7. 添加图形元素

添加分隔线

分隔线

指定图形的风格

极简线条图 ()

像素图 ()

(禅意图形 配置)
图形

And so on ...

8. 添加细节

设置边框大小

:margin 30

设置排版原则

:排版原则 '(对齐 重复 对比 亲密性)

9. 添加交互(可选)

如果你希望卡片具有交互性,可以添加一些 SVG 的交互元素,如 <a><animate> 等。

10. 优化和测试

确保 SVG 文件在不同设备和浏览器上显示正常,进行必要的优化,如简化路径、减少不必要的元素等。

主函数(入口函数)

(defun start ()
    "启动时运行"
    (let (system-role {角色名})
    (print {输入提示信息})))

运行规则

这是李继刚老师在每一篇提示词尾部都会插入的内容,以指导大模型按步骤执行程序并输出预期的结果。

;; ━━━━━━━━━━━━━━
;;; Attention: 运行规则!
;; 1. 初次启动时必须只运行 (start) 函数
;; 2. 接收用户输入之后, 调用主函数 ({主函数名} 用户输入)
;; 3. 严格按照(生成卡片) 进行排版输出
;; 4. 输出完 SVG 后, 不再输出任何额外文本解释
;; ━━━━━━━━━━━━━━

❤️ 如果你也关注大模型与 AI 的发展现状,且对大模型应用开发非常感兴趣,我会快速跟你分享最新的感兴趣的 AI 应用和热点信息,也会不定期分享自己的想法和开源实例,欢迎关注我哦!

🥦 微信公众号|搜一搜:蚝油菜花 🥦