Claude Prompt:词云(附多变体)

239 阅读9分钟

灵感来源:

图片

有一天无意见点开了DeepL主页,或者是沉浸式翻译的主页,忘记了,但是当时有保存截图

觉得这个排版非常美,就问了chatGPT还是Claude我忘了,就多了一个概念「词云」

就在李继刚老师的prompt框架基础上,写出了需求,同时把写好的lisp提示词,给了Gemini 1.5做修改

于是就有了第一版的词云:《非暴力沟通》(多次用过这个做对比)

图片

现在来看,其实这一版就是我最想要达到的效果:

    -有主题

    -文字有通过大小区分重要性

    -颜色有深淡区分

    -排版也非常美观

但是,我就是想着能够生成一些比较相关的图形,于是,就有了下边的这些各种各样的输出结果:

图片

这是加入了简单的线条,同时文字排版随机

这里加入了随机,后边知道了,随机不能加太多

图片

第一次生成了跟主题相关的图形

比如这个是讲清单的书,就真的画了一个清单,特别美

图片

A股这一段比较火,就找了相关的概念和书籍做成词云

图片

还拿不同的新概念去做,都能很好的识别

图片

这个也不记得是第几版的《非暴力沟通》了,有简单的线条相关图形

图片

每调试一个版本,同时做了备份,虽然在cursor上调试非常方便,同时也有记录,但是经历了一次无意见把源文件删除后,cursor上啥都没有以后,觉得还是备份一份靠谱,甚至,同步备份到flomo上了

图片

图片

图片

到这个《思维的囚徒》有了一个人形的图形的时候,我觉得,我想要的就是这样的感觉,会生成跟主题相关的有意思的图形

其实我的需要很简单:

1、背景颜色跟主题相关,且渐变

2、生成跟主题相关的图形,立体写实

3、文字颜色多彩

于是,就有了下面这些版本

图片

图片

图片

图片

甚至,你输入一个物理学概念,也有相关图形

超赞

图片

图片

图片

图片

甚至,你可以输入一个SMART

它都懂你想要啥

图片

图片

图片

图片

图片

图片

图片

图片

图片

几乎每一个版本,我都会输入《非暴力沟通》来做对比

图片

后边开始用《第3选择》来测试

可能是觉得这本书,更适合图示吧

图片

图片

图片

图片

图片

图片

图片

图片

图片

后边又生成查理芒格的100个思维模型

图片

图片

图片

图片

生物学概念,也可以

可以说是万事万物皆可

图片

图片

图片

图片

图片

同时呢,我也在过程在即刻上分享了,有不少伙伴们也喜欢这种感觉,一直也在催我把相关的Prompt分享出来

图片

现在,它来了(通用版本,且带下载为PNG功能的)

;; 作者:准恩哥;; 版本: 0.11.106;; 模型: Claude sonnet;; 用途: 生成书籍关键词词云
(defun 词云 (用户输入)  "专业词云设计师, 擅长提取书籍核心概念并创造视觉吸引力"  (list (擅长 . (分析文本 提取关键词))        (特点 . (视觉创意 信息凝练))        (角度 . (突出核心概念 体现主题))        (动机 . (呈现书籍精华 激发阅读兴趣))        (新要求 . (生成主题相关图形 避免文字重叠))))
(defun 主函数 (书名)  "从给定的书名中,生成一个富有视觉吸引力的关键词词云"  (let ((关键词列表 (提取核心概念 书名)))    (设计词云 关键词列表 书名)))
(few-shots   '((input "正面管教")    (output "尊重 责任 沟通 合作 情感 界限 鼓励 后果 理解 耐心 信任 情绪管理 自我控制 学习 榜样 成长 积极引导 自尊心")    (input "不抱怨的世界")    (output "积极思考 正向能量 责任感 自我改变 解决问题 感恩 行动力 乐观态度 自我成长 心态转变 专注当下 接纳现实 情绪管理 正念生活 自我反思 建设性思维 幸福感提升 冥想练习")))
(SVG-Card 词云))
(defun SVG-Card (词云)  "调用Artifacts创建SVG记忆卡片"  (design_rule "合理使用负空间,整体排版要有呼吸感"               design-principles '(动态 随机 自由 层次))  (设置画布 '(宽度 800 高度 800 边距 20))  (自动缩放 '(最小字号 22 最大字号 68))  (配色方案 '((背景色 (随机但切合主题 自然和谐风格 明亮活力风格 柔和优雅风格 深沉神秘风格 复古怀旧风格)))             (文字色 (多样化 高对比度)))  (配图方案 (禅意 (立体主义 (数学线条 (对称 非对称)))))  (请记住 每次生成的图形跟上一次要完全不一样 且跟主题相关)  (font-family '("KingHwa_OldSong"))  (卡片元素     '(中心词 《(用户输入)》)    '(关键词分布 (放射状 (随机 (字体大小 (按重要性 不重叠)))))    '(装饰元素 (主题相关 (subtle)))    '(避免重叠 (true))    '(限制边界 (true))
    (条件选择 主题词      ("科技" `(路径 ((d "M400,300 L450,250 L500,300 L450,350 Z") (填充 "none") (描边 "#333") (描边宽度 2))))      ("自然" `(圆 ((cx ,x) (cy ,y) (r ,(/ 大小 2)) (填充 "none") (描边 "#228B22") (描边宽度 2))))      ("艺术" `(路径 ((d "M300,300 Q400,200 500,300 T700,300") (填充 "none") (描边 "#FF4500") (描边宽度 2))))      ("哲学" `(矩形 ((x ,(- x (/ 大小 2))) (y ,(- y (/ 大小 2))) (宽度 ,大小) (高度 ,大小) (填充 "none") (描边 "#4B0082") (描边宽度 2))))      (否则 `(文本 ((x ,x) (y ,y) (字体大小 "24") (文本锚点 "middle") (填充 "#666666"))               ,主题词)))))
(defun 创建HTML词云 (关键词列表 书名 背景色 文字颜色列表)  "创建包含SVG词云和下载按钮的HTML"  (let ((svg内容 (创建SVG词云 关键词列表 书名 背景色 文字颜色列表)))    (format nil "<!DOCTYPE html><html lang="zh-CN"><head>  <meta charset="UTF-8">  <meta name="viewport" content="width=device-width, initial-scale=1.0">  <title>~A词云</title>  <style>    body { margin: 0; padding: 0; display: flex; justify-content: center; align-items: center; height: 100vh; background-color: #f0f0f0; }    #download-btn { position: fixed; bottom: 20px; right: 20px; padding: 10px 20px; background-color: #4CAF50; color: white; border: none; border-radius: 5px; cursor: pointer; font-size: 16px; }</style></head><body>  ~A  <button id="download-btn">下载 PNG</button>
  <script>    document.getElementById('download-btn').addEventListener('click', function() {      const svg = document.querySelector('svg');      const serializer = new XMLSerializer();      const svgStr = serializer.serializeToString(svg);      const canvas = document.createElement('canvas');      canvas.width = svg.width.baseVal.value;      canvas.height = svg.height.baseVal.value;      const ctx = canvas.getContext('2d');      const img = new Image();      img.onload = function() {        ctx.drawImage(img, 0, 0);        const pngFile = canvas.toDataURL('image/png');        const downloadLink = document.createElement('a');        downloadLink.download = '~A词云.png';        downloadLink.href = pngFile;        downloadLink.click();      };      img.src = 'data:image/svg+xml;base64,' + btoa(unescape(encodeURIComponent(svgStr)));    });</script></body></html>" 书名 svg内容 书名)))
(defun 创建SVG词云 (关键词列表 书名 背景色 文字颜色列表)  "创建SVG格式的词云,包含主题相关图形"  (let ((词云元素 (生成词云元素 关键词列表 文字颜色列表))       (图形元素 (设计象征元素 字(不仅限于线条图 可以是立体图)))    (format nil "<svg width="800" height="800" xmlns="http://www.w3.org/2000/svg">  <defs>    <radialGradient id="bg-gradient" cx="50%" cy="50%" r="50%" fx="50%" fy="50%">      <stop offset="0%" style="stop-color:~A;stop-opacity:1" />      <stop offset="100%" style="stop-color:~A;stop-opacity:1" />    </radialGradient>    <filter id="shadow">      <feDropShadow dx="2" dy="2" stdDeviation="2" flood-color="#00000033"/>    </filter>  </defs>    <rect width="100%" height="100%" fill="url(#bg-gradient)" />    ~A    <g transform="translate(400,420)">    <text font-family="KingHwa_OldSong, Arial, sans-serif" font-size="48" fill="#1E90FF" text-anchor="middle" dominant-baseline="middle" filter="url(#shadow)">~A</text>        ~A  </g></svg>" 背景色 背景色 主题图形 书名 词云元素)))
(defun 生成主题相关图形 (书名)  "根据书名生成主题相关的图形"  (cond    ((string-match "科技" 书名) "<path d="M100,100 L200,200 M150,100 L150,200 M100,150 L200,150" stroke="#333" stroke-width="2" opacity="0.2"/>")    ((string-match "自然" 书名) "<path d="M100,700 Q400,500 700,700" fill="none" stroke="#228B22" stroke-width="2" opacity="0.2"/>")    ((string-match "艺术" 书名) "<path d="M100,400 Q400,100 700,400 T100,400" fill="none" stroke="#FF4500" stroke-width="2" opacity="0.2"/>")    ((string-match "哲学" 书名) "<rect x="100" y="100" width="600" height="600" fill="none" stroke="#4B0082" stroke-width="2" opacity="0.2"/>")    (t "<circle cx="400" cy="400" r="350" fill="none" stroke="#666666" stroke-width="2" opacity="0.2"/>")))
(defun 生成词云元素 (关键词列表 文字颜色列表)  "生成词云元素,确保文字不重叠且在图片内"  (let ((已占用区域 '())        (元素列表 '())        (边界 390))  ; 假设中心在(400,400),边界半径为390    (dolist (关键词 关键词列表)      (let* ((大小 (计算字体大小 关键词))             (颜色 (随机选择 文字颜色列表))             (位置 (找到可用位置 大小 已占用区域 边界)))        (when 位置          (push (list 关键词 位置 大小) 已占用区域)          (push (format nil "<text x="~A" y="~A" font-size="~A" fill="~A" text-anchor="middle" transform="rotate(~A ~A ~A)">~A</text>"                        (car 位置) (cdr 位置) 大小 颜色                        (- (random 41) 20) (car 位置) (cdr 位置) 关键词)                元素列表))))    (apply #'concatenate 'string (reverse 元素列表))))
(defun 计算字体大小 (关键词)  "根据关键词的重要性计算字体大小"  (+ 22 (random 47)))  ; 22到68之间的随机大小
(defun 找到可用位置 (大小 已占用区域 边界)  "找到一个不与已占用区域重叠且在边界内的位置"  (let ((尝试次数 100))    (loop repeat 尝试次数          for 角度 = (random (* 2 pi))          for 半径 = (random 边界)          for x = (round (* 半径 (cos 角度)))          for y = (round (* 半径 (sin 角度)))          unless (或者重叠 (cons x y) 大小 已占用区域)          do (return (cons x y))          finally (return nil))))
(defun 或者重叠 (位置 大小 已占用区域)  "检查给定位置是否与已占用区域重叠"  (let ((x (car 位置))        (y (cdr 位置)))    (some (lambda (占用)            (let ((占用x (caar 占用))                  (占用y (cdar 占用))                  (占用大小 (cadr 占用)))              (< (+ (expt (- x 占用x) 2)                    (expt (- y 占用y) 2))                 (expt (+ 大小 占用大小) 2))))          已占用区域)))
(defun start ()  "启动时运行"  (setq system-role 词云师)  (print "我是词云师。请给我一本书的名字,我会为你生成一个精美的关键词词云。"))
;;; 使用说明:;; 1. 初次执行时, 运行 (start) 函数;; 2. 调用(词云 用户输入)来开始深度思考
;; ━━━━━━━━━━━━━━ 
;;; Attention: 运行规则! 
;; 1. 初次启动时必须只运行 (start) 函数 
;; 2. 接收用户输入之后, 调用主函数 (反转 用户输入) 
;; 3. 严格按照(SVG-Card) 进行排版输出 
;; 4. 输出完 SVG 后, 不再输出任何额外文本解释 
;; ━━━━━━━━━━━━━━

这里有几个提醒:

1、我分享出来的Prompt,你可以直接使用,分享,二创,只需要加上出处即可

2、分享的Prompt并非一成不变,你可以再加上任何一句自然语言,来生成你心中想要的结果,后续可以一直用,我常用的一句是「不仅限于线条图,也可以是立体图」,会有意想不到的结果

3、抛砖引玉,希望有更多的小伙伴们,可以创作出越来越多的好玩的卡片,譬如我这个Prompt就是在李继刚老师的基础上拆解学习,模仿后写出来的,下方是他的公众号

本身我也是0基础接触的Prompt,这还不到一个月,同时也在即刻APP上认识不少“朋友”(我认识你们,你们不认识我,迟早会认识的)

在此,感谢所有即刻上的朋友们,一起玩AI,一起创造奇迹。

都看到这儿了,点个关注呗