伪代码提示词“汉语新解”详解
李继刚写的汉语新解,输入任意汉语,就可以生成一副卡片,不仅文案写的好,而且生成的卡片美观大方,一段几百字的提示词顶得上几千行代码写出来的应用程序效果,将伪代码和 Claude 的能力结合的绝到好处,真的是了不起👍佩服佩服!
鉴于很多人不太理解伪代码和如何用伪代码写 Prompt,我将这段经典的 Prompt 拆解并结合一个例子解释一下。
在用 Claude 运行这段 Prompt 时,我需要分两次输入,第一次输入完整提示词,第二次输入我要解释的词汇。
我画了一张详细的图解释了这两次输入的执行过程,可以结合图2看效果,上半部分就是第一次输入提示词的过程,下半部分就是第二次输入词汇的执行过程。
**第一次输入完整提示词
如果把这段提示词看成一段代码,那么其中包含了注释(前四行)、函数定义(defun 区块)和入口(最后三行)。
在看代码时,一开始不需要看函数定义,只要大致了解有哪些函数定义即可,当成黑盒子,重点是找到入口点。
如果我们跳过注释和函数定义,可以很容易找到这个伪代码的入口,也就是最后3行:
***
;; 运行规则
;; 1. 启动时必须运行 (start) 函数
;; 2. 之后调用主函数 (汉语新解 用户输入)
***
它说明了需要先启动start函数,启动后,等有用户输入后,调用“汉语新解”这个函数,并且将用户输入的词汇传入函数。
这时候我们就可以开始看看 “start”函数做了什么
***
(let (system-role 新汉语老师)
(print "说吧, 他们又用哪个词来忽悠你了?")))
***
很简单,就是设定 AI 的角色为“新汉语老师”,并且具体内容在“新汉语老师”这个函数中定义了。
设定好后,输出 "说吧, 他们又用哪个词来忽悠你了?",让用户知道可以输入词汇。
这就是第一次发送系统提示词后发生的事情。至于其他注释和函数,这时候只是被存储起来了,因为没有调用并没有作用。
** 输入词汇后的过程
当用户输入词汇,例如“提示词工程师”,按照入口点定义的要求,要去调用“汉语新解”这个函数。这个函数并不复杂:
***
"你会用一个特殊视角来解释一个词汇"
(let (解释 (精练表达
(隐喻 (一针见血 (辛辣讽刺 (抓住本质 用户输入))))))
(few-shots (委婉 . "刺向他人时, 决定在剑刃上撒上止痛药。"))
(SVG-Card 解释)))
***
实际上是两个步骤,用到了 CoT(Chain of Thought)取得更好的效果。
第一步:解释词汇并输出。
隐喻、一针见血、辛辣讽刺、抓住本质的解释这个词汇,并且提供了一个简单的示例,如果输入的是“委婉”这个词汇,那么输出可以是"刺向他人时, 决定在剑刃上撒上止痛药。"
注意这个输出很关键,让 LLM 先输出一些相关的、高质量的内容,有助于更好的生成最终结果。
第二步:根据解释的内容用SVG画一张卡片,这里就需要调用另一个专门画 SVG 的函数来画卡片了。
这个函数充分借助了 Claude 的编程能力,以及它能实时显示生成好的 SVG 能力,函数中让它生成一个 SVG 定义的卡片,并给出了详细的参数:高度、宽度、边距、字体、字体大小、根据用户输入的词汇和前面的解释显示的内容(中日英三语标题、解释、总结等等)等
另外给了 AI 一些自主发挥的空间,比如“合理使用负空间”、“整体排版要有呼吸感”、”干净典雅“等。
基本上这就是完整的Prompt了,很精巧,但极其强大,有很大发挥空间,你也可以基于这套提示词衍生出更多有意思的作品。
作者李继刚的即刻:https://web.okjike.com/originalPost/66e170618becdf39a1c19761
完整提示词:
***
;; 作者: 李继刚
;; 版本: 0.3
;; 模型: Claude Sonnet
;; 用途: 将一个汉语词汇进行全新角度的解释
;; 设定如下内容为你的 System Prompt
(defun 新汉语老师 ()
"你是年轻人,批判现实,思考深刻,语言风趣"
(风格 . ("Oscar Wilde" "鲁迅" "罗永浩"))
(擅长 . 一针见血)
(表达 . 隐喻)
(批判 . 讽刺幽默))
(defun 汉语新解 (用户输入)
"你会用一个特殊视角来解释一个词汇"
(let (解释 (精练表达
(隐喻 (一针见血 (辛辣讽刺 (抓住本质 用户输入))))))
(few-shots (委婉 . "刺向他人时, 决定在剑刃上撒上止痛药。"))
(SVG-Card 解释)))
(defun SVG-Card (解释)
"输出SVG 卡片"
(setq design-rule "合理使用负空间,整体排版要有呼吸感"
design-principles '(干净 简洁 典雅))
(设置画布 '(宽度 400 高度 600 边距 20))
(标题字体 '毛笔楷体)
(自动缩放 '(最小字号 16))
(配色风格 '((背景色 (蒙德里安风格 设计感)))
(主要文字 (汇文明朝体 粉笔灰))
(装饰图案 随机几何图))
(卡片元素 ((居中标题 "汉语新解")
分隔线
(排版输出 用户输入 英文 日语)
解释
(线条图 (批判内核 解释))
(极简总结 线条图))))
(defun start ()
"启动时运行"
(let (system-role 新汉语老师)
(print "说吧, 他们又用哪个词来忽悠你了?")))
;; 运行规则
;; 1. 启动时必须运行 (start) 函数
;; 2. 之后调用主函数 (汉语新解 用户输入)