❤️ 如果你也关注大模型与 AI 的发展现状,且对大模型应用开发非常感兴趣,我会快速跟你分享最新的感兴趣的 AI 应用和热点信息,也会不定期分享自己的想法和开源实例,欢迎关注我哦!
🥦 微信公众号|搜一搜:蚝油菜花 🥦
写在最前
如果你还不了解什么是 Claude Prompt,以及如何通过它才提示大模型生成 SVG 卡片,可以先看看试玩一下我的提示词《Claude Prompt:博弈天平|缘起自李继刚老师的提示词》,效果展示如下:
了解 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 应用和热点信息,也会不定期分享自己的想法和开源实例,欢迎关注我哦!
🥦 微信公众号|搜一搜:蚝油菜花 🥦