[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-phodal--prompt-patterns":3,"tool-phodal--prompt-patterns":61},[4,18,26,36,44,53],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":17},4358,"openclaw","openclaw\u002Fopenclaw","OpenClaw 是一款专为个人打造的本地化 AI 助手，旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚，能够直接接入你日常使用的各类通讯渠道，包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息，OpenClaw 都能即时响应，甚至支持在 macOS、iOS 和 Android 设备上进行语音交互，并提供实时的画布渲染功能供你操控。\n\n这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地，用户无需依赖云端服务即可享受快速、私密的智能辅助，真正实现了“你的数据，你做主”。其独特的技术亮点在于强大的网关架构，将控制平面与核心助手分离，确保跨平台通信的流畅性与扩展性。\n\nOpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者，以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力（支持 macOS、Linux 及 Windows WSL2），即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你",349277,3,"2026-04-06T06:32:30",[13,14,15,16],"Agent","开发框架","图像","数据工具","ready",{"id":19,"name":20,"github_repo":21,"description_zh":22,"stars":23,"difficulty_score":10,"last_commit_at":24,"category_tags":25,"status":17},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,"2026-04-05T11:01:52",[14,15,13],{"id":27,"name":28,"github_repo":29,"description_zh":30,"stars":31,"difficulty_score":32,"last_commit_at":33,"category_tags":34,"status":17},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",157379,2,"2026-04-15T23:32:42",[14,13,35],"语言模型",{"id":37,"name":38,"github_repo":39,"description_zh":40,"stars":41,"difficulty_score":32,"last_commit_at":42,"category_tags":43,"status":17},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",108322,"2026-04-10T11:39:34",[14,15,13],{"id":45,"name":46,"github_repo":47,"description_zh":48,"stars":49,"difficulty_score":32,"last_commit_at":50,"category_tags":51,"status":17},6121,"gemini-cli","google-gemini\u002Fgemini-cli","gemini-cli 是一款由谷歌推出的开源 AI 命令行工具，它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言，它提供了一条从输入提示词到获取模型响应的最短路径，无需切换窗口即可享受智能辅助。\n\n这款工具主要解决了开发过程中频繁上下文切换的痛点，让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用，还是执行复杂的 Git 操作，gemini-cli 都能通过自然语言指令高效处理。\n\n它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口，具备出色的逻辑推理能力；内置 Google 搜索、文件操作及 Shell 命令执行等实用工具；更独特的是，它支持 MCP（模型上下文协议），允许用户灵活扩展自定义集成，连接如图像生成等外部能力。此外，个人谷歌账号即可享受免费的额度支持，且项目基于 Apache 2.0 协议完全开源，是提升终端工作效率的理想助手。",100752,"2026-04-10T01:20:03",[52,13,15,14],"插件",{"id":54,"name":55,"github_repo":56,"description_zh":57,"stars":58,"difficulty_score":10,"last_commit_at":59,"category_tags":60,"status":17},4487,"LLMs-from-scratch","rasbt\u002FLLMs-from-scratch","LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目，旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型（LLM）。它不仅是同名技术著作的官方代码库，更提供了一套完整的实践方案，涵盖模型开发、预训练及微调的全过程。\n\n该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型，却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码，用户能够透彻掌握 Transformer 架构、注意力机制等关键原理，从而真正理解大模型是如何“思考”的。此外，项目还包含了加载大型预训练权重进行微调的代码，帮助用户将理论知识延伸至实际应用。\n\nLLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API，而是渴望探究模型构建细节的技术人员而言，这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计：将复杂的系统工程拆解为清晰的步骤，配合详细的图表与示例，让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础，还是为未来研发更大规模的模型做准备",90106,"2026-04-06T11:19:32",[35,15,13,14],{"id":62,"github_repo":63,"name":64,"description_en":65,"description_zh":66,"ai_summary_zh":66,"readme_en":67,"readme_zh":68,"quickstart_zh":69,"use_case_zh":70,"hero_image_url":71,"owner_login":72,"owner_name":73,"owner_avatar_url":74,"owner_bio":75,"owner_company":76,"owner_location":77,"owner_email":78,"owner_twitter":79,"owner_website":80,"owner_url":81,"languages":82,"stars":83,"forks":84,"last_commit_at":85,"license":82,"difficulty_score":86,"env_os":87,"env_gpu":87,"env_ram":87,"env_deps":88,"category_tags":91,"github_topics":92,"view_count":32,"oss_zip_url":82,"oss_zip_packed_at":82,"status":17,"created_at":97,"updated_at":98,"faqs":99,"releases":100},8072,"phodal\u002Fprompt-patterns","prompt-patterns","Prompt 编写模式：如何将思维框架赋予机器，以设计模式的形式来思考 prompt","prompt-patterns 是一套专为提升 AI 交互质量而设计的思维框架指南。它借鉴了软件工程中经典的“设计模式”理念，将零散的提示词（Prompt）编写经验系统化，提炼出特定指令、指令模板、代理角色及示例演示等核心模式。\n\n该工具主要解决了用户在面对大语言模型或生成式 AI 时，因缺乏结构化思路而导致输出结果不稳定、不准确或难以控制的痛点。通过提供标准化的模式要素与类比方法，它帮助用户更精准地传达意图，从而获得高质量、可预期的文本或图像生成结果。\n\n这套资源非常适合开发者、AI 研究人员、产品经理以及希望深入掌握提示工程技巧的进阶用户。其独特亮点在于创造性地将抽象的编程设计模式概念迁移至自然语言交互领域，并配有详尽的速查表（Cheatsheet）和可视化图解，让复杂的提示策略变得直观易懂且易于落地实践。","# Prompt 编写模式：如何将思维框架赋予机器\n\n欢迎使用集成了这些模式的工具：https:\u002F\u002Fgithub.com\u002Fprompt-engineering\u002Fclick-prompt\n\n本书旨在介绍一系列的 Prompt 编写模式，以更好地应用 Prompt 对 AI 进行编程。\n\n我们非常感谢您对本书的关注和支持，并欢迎您为该项目做出贡献！您可以通过以下方式参与本书的开发：\n\n- 发现问题并报告：如果您在使用本书时发现任何问题或错误，请在项目的 Issue 页面中提出问题，我们将尽快修复。\n- 编写和改进章节：如果您想要贡献新的章节或者改进现有的章节，欢迎您提交 Pull Request。\n- 翻译本书：如果您是非英语母语的人士，并且想要将本书翻译成其他语言，请在项目的 Issue 页面中提出请求，我们将会指导您如何进行翻译。\n- 分享本书：如果您认为本书对其他人也有帮助，请将本书分享给您的朋友和同事，让更多的人了解和使用 Prompt 进行 AI 编程。\n\n我们希望通过大家的共同努力，能够让本书更加完善和实用，为更多的开发人员提供有价值的帮助和指导。谢谢您的支持和贡献！\n\n\nChatGPT Simple Cheatsheet\n\n![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fphodal_prompt-patterns_readme_c1d901fba4b7.jpg)\n\nDownload: [pdf](cheatsheet\u002Fprompt-simple-cheatsheet.pdf), [pptx](cheatsheet\u002Fprompt-simple-cheatsheet.pptx)\n\n如何理解 Prompt ？\n\n![Prompt Enginneering](patterns\u002Fprompt-engine.svg)\n\n> prompt 通常指的是一个输入的文本段落或短语，作为生成模型输出的起点或引导。prompt 可以是一个问题、一段文字描述、一段对话或任何形式的文本输入，模型会基于 prompt 所提供的上下文和语义信息，生成相应的输出文本。\n\n举个例子，对于一个语言模型，prompt 可以是 \"The cat sat on the\"，模型可以通过对接下来的词语进行预测，生成类似于 \"mat\"、\"chair\"、\"sofa\" 等不同的输出：\n\n![The Cat](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fphodal_prompt-patterns_readme_53ffc9ce856d.png)\n\n上图为 Stable Diffusion 生成 (Prompt: The cat sat on the , Steps: 30, Sampler: Euler a, CFG scale: 7, Seed: 234310862, Size: 512x512, Model hash: d8722b4a4d, Model: neverendingDreamNED_bakedVae)\n\nPrompt 在人工智能语言生成领域中扮演着重要的角色，因为它可以帮助模型更好地理解用户意图，并生成更准确、有意义的文本内容。 诸如于如下的 prompt\n\n> women back view without face, flowing dress, edge of the sea, backview, back turned to the camera, upon the glow of the setting sun, sun below the horizon, golden light over the water, hair sways gently, Chinese style clothes, black hair,\n\n可以在 Stable Diffusion 生成图片（配置了 negative prompt）：\n\n\u003Ctable>\n  \u003Ctr>\n    \u003Ctd>\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fphodal_prompt-patterns_readme_d8ac506a8480.png\" width=\"256px\" height=\"256px\">\u003C\u002Ftd>\n    \u003Ctd>\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fphodal_prompt-patterns_readme_bcf85607196c.png\" width=\"256px\" height=\"256px\">\u003C\u002Ftd>\n    \u003Ctd>\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fphodal_prompt-patterns_readme_70568784a51f.png\" width=\"256px\" height=\"256px\">\u003C\u002Ftd>\n   \u003C\u002Ftr> \n\u003C\u002Ftable>\n\n所以，质量看上去不错，但是可能不是你想要的。在 ChatGPT 则可以生成文本，质量上也是相似的，但是对于 AI 输出的文本来说，质量并没有这么直观。\n\n# 模式要素\n\n> 省去几千字\n\n如果您指的是 AI 领域中的 prompt 模式，它通常是指一种输入-输出的数据格式，用于训练和评估机器学习模型。下面是一个完整的定义：\n\n- 模式名称（Pattern Name）：Prompt 模式\n- 问题描述（Problem）：如何准备训练数据，以便用于机器学习模型的训练和评估。\n- 解决方案（Solution）：Prompt 模式是一种输入-输出数据格式，它由一个输入文本和一个输出文本组成。输入文本是一个问题或指令，输出文本是模型预测的答案或结果。通过使用这种格式，可以减少训练数据的需求量，提高模型的泛化性能，同时也使得模型的输出更易于理解和解释。\n- 效果（Consequences）：使用 Prompt 模式可以简化训练数据的准备过程，提高模型的效率和准确率，同时也增加了模型的可解释性和可理解性。\n- 适用性（Applicability）：Prompt 模式适用于自然语言处理领域中的各种任务，如文本分类、情感分析、问答系统、机器翻译等。它也可以用于其他领域中需要使用自然语言作为输入和输出的任务。\n- 结构图（Structure）：Prompt 模式的结构由一个输入文本和一个输出文本组成，它们被定义为模型的输入和输出。通常，输入文本包括一些关键词或短语，用于指定模型需要执行的任务或操作，而输出文本则是模型的预测结果。\n- 参考（References）：相关的文献包括 \"GPT-3: Language Models are Few-Shot Learners\"， \"Zero-Shot Learning - A Comprehensive Evaluation of the Good, the Bad and the Ugly\" 等。常用的机器学习框架包括 TensorFlow，PyTorch 等。\n\n# 核心思想：概念与类比\n\n开始之前，可以看一下这个问题示例：\n\n1. 设计模式的要素是哪些？\n2. 对于 AI 领域的 prompt 编写来说，我们通常使用的模式有哪些？\n3. 能将 AI 领域的 prompt 常见的设计模式用 \"设计模式要素\" 的格式一一表达吗？\n\n核心思想，将设计模式要素作为一个概念，让 AI 类比到 prompt 里的模式。详细见：\n\n1. [design-pattern.analogy](.\u002Fdesign-pattern.analogy.md)\n2. [design-pattern.analogy2](.\u002Fdesign-pattern.analogy2.md)\n\n当然了，类比和定义概念不一定都会成功。\n\n# 基础模式\n\n四种基础模式：\n\n- 特定指令（By specific）：在这种模式下，我们给模型提供一些特定信息，例如问题或关键词，模型需要生成与这些信息相关的文本。这种模式通常用于生成答案、解释或推荐等。特定信息可以是单个问题或多个关键词，具体取决于任务的要求。\n- 指令模板（Instruction Template）：在这种模式下，我们给模型提供一些明确的指令，模型需要根据这些指令生成文本。这种模式通常用于生成类似于技术说明书、操作手册等需要明确指令的文本。指令可以是单个句子或多个段落，具体取决于任务的要求。\n- 代理模式（By proxy）：在这种模式下，可以充当了一个代理，代表某个实体（例如人、角色、机器人等）进行操作或交互。代理模式的核心思想是引入一个中介对象来控制对实际对象的访问，从而实现一定程度上的隔离和保护。诸如于在 ChatGPT 中，\"act as xxx\" 可以让 ChatGPT 充当一个代理，扮演某个角色或实体的身份，以此来处理与该角色或实体相关的任务或请求。\n- 示例模式（By demonstration）：在这种模式下，我们给模型提供一些示例文本，模型需要生成与示例文本类似的文本。这种模式通常用于生成类似于给定示例的文本，例如自动生成电子邮件、产品描述、新闻报道等。示例文本可以是单个句子或多个段落，具体取决于任务的要求。\n\n## 特定指令（By specific）\n\n![Prompt Enginneering](patterns\u002Fspecific.svg)\n\n> 在这种模式下，我们给模型提供一些特定信息，例如问题或关键词，模型需要生成与这些信息相关的文本。这种模式通常用于生成答案、解释或推荐等。特定信息可以是单个问题或多个关键词，具体取决于任务的要求。\n\n如 `翻译`、`告诉我`，以我们的开头来说：\n\n- 定义一下 prompt 工程\n\n类似的场景还可以有：\n\n- 翻译一下：永和九年，岁在癸丑，暮春之初，会于会稽山阴之兰亭，修禊事也。\n- 转为现代汉语：永和九年，岁在癸丑，暮春之初，会于会稽山阴之兰亭，修禊事也。\n\n对应的，还有一系列的子模式\n\n### 子模式\n\n如我们通过下面的 prompt 转换了 ChatGPT 输出的子模式：\n\n> 转化为 markdown 的 \"\"\"```markdown {} ```\"\"\" 表格形式，其中的字段为英语模式、中文、简述、示例。\n\n表格示例：\n\n| 英语模式                 | 中文  | 简述                    | 示例                                                  |\n|----------------------|-----|-----------------------|-----------------------------------------------------|\n| Completion-based     | 补全型 | 用户提供部分文本，AI 根据上下文生成建议 | 用户输入“我想买一件…”，ChatGPT 生成“红色连衣裙”                      |\n| Classification-based | 分类型 | 用户提供问题或任务描述，AI 生成答案   | 用户输入“如何做巧克力蛋糕？”ChatGPT 生成“将巧克力蛋糕放入预热好的烤箱中烤25-30分钟。” |\n| Generation-based     | 生成型 | 用户提供初始信息，AI 生成新文本     | 用户输入“科技创新”，ChatGPT 生成“人工智能是科技创新领域的重要方向之一。”          |\n| Translation-based    | 翻译型 | 用户提供文本，AI 进行翻译        | 用户输入“Hello”，ChatGPT 生成“你好”                          |\n| Question-answering   | 问答型 | 用户提供问题，AI 生成答案        | 用户输入“什么是机器学习？”，ChatGPT 生成“机器学习是一种人工智能的分支。”          |\n| Conversation-based   | 对话型 | 用户与 AI 进行对话，AI 生成回答   | 用户输入“今天天气怎么样？”ChatGPT 生成“今天天气晴朗，温度适宜。”              |\n| Summarization-based  | 摘要型 | 用户提供文本，AI 生成文本摘要      | 用户输入一篇文章，ChatGPT 生成该文章的摘要          |\n\n其重点是：Output Driven\n\n在提示的开头包含所有相关信息，包括任何上下文或期望的结果，以及 长度，格式样式等。诸如于：`用 100 字总结一下 ChatGPT`。\n\n## 指令模板（Instruction Template）\n\n![Instruction](patterns\u002Finstruction.svg)\n\n> 在这种模式下，我们给模型提供一些明确的指令，模型需要根据这些指令生成文本。这种模式通常用于生成类似于技术说明书、操作手册等需要明确指令的文本。指令可以是单个句子或多个段落，具体取决于任务的要求。\n\n如下是一个示例：\n\n```markdown\n使用 STAR 原则与下面的格式总结一下这段话：\n\n\"\"\"\n最近几天，因为工作 + 兴趣的原则，我在研究用 text 2 image 来展示如何演进 prompt、用 text 2 article 来展示充足 prompt 的优点、结合 GitHub Copliot 来实现 prompt 完成工作。然后，我在本地部署了一个 Stable Diffusion、使用 ChatGPT 写作展示 text 2 article、在 IDEA 中使用 GitHub Copilot。最后，得到了多篇文章和好多的文章阅读量、几个 Jupyter 代码段、以及一些经验。\n\"\"\"\n\n情境(Situation): \n任务(Task): \u003Ccomma_separated_list_of_task>\n行动(Action):  -||-\n结果(Result):  -||-\n```\n\n输出文本时要注意中英文之间插入空格，留出间隔，诸如于 \"\"\"Hello 你好\"\"\"，用这种方式输出一下刚才的文本：\n\n```markdown\n情境(Situation): 最近几天，在工作和兴趣的驱动下，研究如何使用 text 2 image 和 text 2 article 展示 prompt 演进以及结合 GitHub Copliot 来完成工作。\n\n任务(Task):\n\n    研究如何使用 text 2 image 展示 prompt 的演进过程\n    研究如何使用 text 2 article 展示 prompt 的优点\n    结合 GitHub Copliot 来实现 prompt 完成工作\n\n行动(Action):\n\n    本地部署了一个稳定的 Diffusion 模型\n    使用 ChatGPT 撰写文章来展示 text 2 article 的效果\n    在 IDEA 中使用 GitHub Copilot\n\n结果(Result):\n\n    得到了多篇文章和很多的文章阅读量\n    获得了几个 Jupyter 代码段以及相关经验\n```\n\n### 最佳实践\n\n- zero-shot、few-shot 优先，最开始可以不给示例（因为示例可能是错的），看任务执行情况，再提供少量样本，如果不行，再对模型进行微调。\n\n## 代理模式(By proxy)\n\n![Proxy](patterns\u002Fproxy.svg)\n\n> Proxy 模式是指用户可以要求 ChatGPT 以特定的身份、角色或者身份扮演某个特定的人、角色或对象来生成回答。这种模式通常用于模拟某个特定人物的语言风格和语境，生成特定情境下的对话、回答或其他形式的文本。\n\n### 例子 1：公司客服\n\n当使用 ChatGPT 来代替某个人或实体时，可以使用 by proxy 模式。\n\n例如，可以使用以下 prompt 提问 ChatGPT 代替某个公司的客服：\n\n> 我是一家餐饮公司的客服，有顾客反馈说我们的菜品质量有问题，我们该怎么处理呢？\n\n在这种情况下，ChatGPT 会扮演客服的角色，并根据提示来回答，从而帮助公司解决问题。ChatGPT 可以使用类似以下的方式来回答：\n\n> 您好，很抱歉听到您的反馈。我们将会仔细审核您的反馈，并尽快采取相应措施来解决这个问题。为此，我们需要更多的信息来进一步了解您的反馈，包括哪些菜品有问题，具体问题是什么等。请问您可以提供更多的信息吗？\n\n### 例子 2：终端计算机\n\n这种方式可以通过让 ChatGPT 扮演某个实体的角色，例如客服、销售代表等等，来帮助用户解决问题。\n\n在 [Awesome ChatGPT Prompts](https:\u002F\u002Fgithub.com\u002Ff\u002Fawesome-chatgpt-prompts) 中：\n\n> Human: Act as a Linux Terminal\n\nRobot: \n\n> ChatGPT: I want you to act as a linux terminal. I will type commands and you will reply with what the terminal should show. I want you to only reply with the terminal output inside one unique code block, and nothing else. do not write explanations. do not type commands unless I instruct you to do so. When I need to tell you something in English, I will do so by putting text inside curly brackets {like this}. My first command is pwd\n\n## 示例模式（By demonstration）\n\n> 在这种模式下，我们给模型提供一些示例文本，模型需要生成与示例文本类似的文本。这种模式通常用于生成类似于给定示例的文本，例如自动生成电子邮件、产品描述、新闻报道等。示例文本可以是单个句子或多个段落，具体取决于任务的要求。\n\n示例：\n\n```\n任务表述 颜色代表了温度\n例子1 绿色代表寒冷 \n例子2 蓝色代表寒冷 \n例子3 红色代表温暖 \n例子4 黄色代表温暖\n执行 橙色代表什么\n```\n\n![](patterns\u002Fcohere-PromptEngineering_Visual_8.svg)\n\n上图为 Cohere AI 官网的示例图，对应的聊天记录如下：\n\n```markdown\nEnglish: Writing about language models is fun.\nRoish: Writingro aboutro languagero modelsro isro funro.\nEnglish: The weather is lovely!\nRoish:\n```\n\n# 增强 Prompt\n\n## 符号化模式\n\n![Symbol](patterns\u002Fprompt-symbol-pattern.svg)\n\n> 符号化方法通常通过定义符号、符号之间的关系以及基于这些关系的规则来表示知识。\n\n简单来说，我们可以创建一个符号来表示特写的规则，诸如于：\n\n```\n\"\"\"\n我们来玩一个名为 gkzw 的写作游戏，每当我说 gkzw，你开始写作，规则如下：\n\n1. 字数不少于 200 字。\n2. 文中必须出现 \"小明\"。\n\n明白了吗？\n\"\"\"\n```\n\n围绕这个模式，我们可以创建复制的规则。\n\n## 反向 Prompt 模式\n\n> Negative prompt（负向提示）是一种在使用语言模型时，针对模型输出不希望的结果而设置的一种文本输入方式。通过使用负向提示，可以帮助模型避免输出不良、不准确或不恰当的文本。\n\n具体来说，负向提示通常是以否定的形式呈现的，例如在文本生成任务中，使用“不要写...”、“不要提及...”、“不要使用...”等方式来限制模型生成不想要的文本。在情感分析任务中，使用“不是...”、“并不...”等方式来指示模型识别出一段文本的负面情感。在QA（问答）任务中，使用“不是...”、“不包括...”等方式来指示模型回答问题时避免输出错误或不准确的答案。\n\nNegative Prompt 在 Stable Diffusion 被广泛使用，相似的，在 ChatGPT 中，我们也会经常使用到。\n\n诸如于：\n\n```markdown\n我们能玩一个名为 kfc 的谜语创作游戏，当我说 \"kfc\"，你写一个谜题，要求：\n\n1. 不少于 200 字\n2. 谜题不能出现肯德基、星期四、KFC\n3. 正文可以夹杂小语种语言，如 \"\"\"他说：Ciao\"\"\"\n4. 谜底必须是 ###原来今天是肯德基疯狂星期四！！###\n\n格式类似于：\n\n....\n```\n\n## 再生成模式\n\n根据 AI 提供的信息，再让 AI 生成内容。\n\n### 例子 1\n\n当我们无法确定我们的 prompt 是否准确，便可以通过 AI 来帮我们丰富 prompt 。\n\n如我在：[基于编程、绘画、写作的 AI 探索与总结](https:\u002F\u002Fgithub.com\u002Fphodal\u002Fai-research-for-practise) 的例了一样\n\n- phodal: 我想写一段话描述一张照片，帮我美化一下：一年轻女子穿着裙子，背对着镜头，在海边看着日落，太阳已经到地平线下面了，她的头发在风中飘动。\n- ChatGPT: 这张照片中的场景令人心醉，一位年轻女子穿着一条裙子，站在海边，背对着镜头，凝视着地平线下的夕阳。太阳已经沉入了海面，一片金黄色的光芒在海面上弥漫，照亮了整片海洋，仿佛这个时刻被定格在了时间的某个角落里。女子的头发随着微风轻轻飘动，轮廓被余晖映照得柔和而温暖。她的目光凝视着远方，仿佛在思考着生命的意义和无尽的未来。这张照片中蕴含着一种深刻的内涵，让人感受到时间和自然的力量，也让人思考着自己在这个宏大而美丽的世界中的角色和意义。 \n\n再去除掉不合适的词，进行润色，就可以再创作：\n\n- phodal：翻译成英语\n\n然后再提炼直至扔至 Stable Diffusion 中：\n\n> women back view without face, flowing dress, edge of the sea, backview, back turned to the camera, upon the glow of the setting sun, sun below the horizon, golden light over the water, hair sways gently, Chinese style clothes, black hair,\n\n而后，根据图片的结果，我们再反复修改。\n\n## 控线模式\n\nTODO：这里需要给出更精准的定义，如何让 ChatGPT 做到？\n\n在没有推出 ControlNet，对于一个 Stable Diffusion 玩家，它需要反复地吟唱咒语，才能获取到满意的图案。\n\n在有了 ControlNet 之后，我们可以创建一个 Openpose，或者是导入图片从图片生成 pose，相当于是给机器一个示例，而后生成的图片就会有令人满意的姿势。：\n\n\u003Ctable>\n  \u003Ctr>\n    \u003Ctd>\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fphodal_prompt-patterns_readme_a6f89d47840a.png\" width=\"256px\" height=\"256px\">\u003C\u002Ftd>\n    \u003Ctd>\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fphodal_prompt-patterns_readme_98ade40808bb.png\" width=\"256px\" height=\"256px\">\u003C\u002Ftd>\n    \u003Ctd>\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fphodal_prompt-patterns_readme_2b415f1755c6.png\" width=\"256px\" height=\"256px\">\u003C\u002Ftd>\n   \u003C\u002Ftr> \n\u003C\u002Ftable>\n\n在 GitHub Copilot，我们可以通过设置输入和输出，结合函数名三个要素，Copilot 就能生成大致准确的代码：\n\n![GitHub Copilot 示例](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fphodal_prompt-patterns_readme_9d408de5df53.png)\n\n而在必要的情况下，添加一下注释就能更完整了：\n\n```kotlin\nfun listAllDirInDir(dir: String): List\u003CFile> {\n    \u002F\u002F ignore hidden files\n    \n}\n```\n\n生成的代码会更贴近我们的需求。\n\n# 概念模式集\n\n## Language is Language\n\n对于 ChatGPT 来说，语言就是语言，他不区分自然语言和编程语言，甚至有可能编程语言对它更友好。所以我们可以直接通过编程语言与之交流：\n\n```markdown\n我有下列遗留代码，我想在接口的函数名、参数名不变的情况下（可以新参数，旧的参数不能变）加入新功能：\n\nmodule.exports = async function loadYamlFile(filepath, workdir = path.dirname(filepath)) { \n  const content = await fs.readFile(filepath, 'utf8'); \u002F\u002F 读取文件内容\n  \u002F\u002F TODO: 将 content 看做ejs模板的字符串，进行渲染，如果传入了渲染ejs时的context值不为undefined，就进行渲染，否则不进行渲染。\n\n  \u002F\u002F TODO：将渲染后的结果传给yaml.load\n  const data = yaml.load(content); \u002F\u002F 解析YAML为JSON对象\n  \n\n  \u002F\u002F 遍历JSON对象，查找$ref属性\n  const processRef = async (obj) => {\n    if (typeof obj === 'object' && obj !== null) { \u002F\u002F 如果是对象\n      if ('$ref' in obj) { \u002F\u002F 如果包含$ref属性\n        const refPath = path.join(workdir, obj.$ref.split('#')[0]); \u002F\u002F 获取引用文件路径\n        const pointer = obj.$ref.split('#')[1]; \u002F\u002F 获取JSON指针\n\n        \u002F\u002F TODO: 递归调用的时候，取出context中以obj.$ref的属性值作为属性名的值作为新的context向下传递\n        const refData = await loadYamlFile(refPath, path.dirname(refPath)); \u002F\u002F 递归读取引用文件\n        const value = getValueByPointer(refData, pointer); \u002F\u002F 修复了 # 号问题\n        return value;\n      } else { \u002F\u002F 如果不包含$ref属性，递归处理子属性\n        for (const prop in obj) {\n          obj[prop] = await processRef(obj[prop]);\n        }\n      }\n    }\n    return obj;\n  };\n```\n\n上述描述会比纯自然语言更容易描述我们的需求，适合于更精细的指导。同时，不一定是编程语言，结构化的声明式DSL它也可以很好的解析，如：\n\n\n```markdown\n把我给定的输入输出，按照下面的格式写成一个测试用例的描述：\n\n{\n    desc: 'Test with $p_ref returning array',\n    input: {\n      filepath: '.\u002Ftest18.yml',\n      workdir: '.\u002Ftest\u002Fv2',\n    },\n    expected: {\n        \"name\": \"Alice\",\n        \"age\": 20\n      }\n  }\n```\n\n结果：\n\n```markdown\n{\n  desc: 'Test with $p_ref returning array',\n  input: {\n    filepath: '.\u002Ftest19.yml',\n    workdir: '.\u002Ftest\u002Fv2',\n  },\n  expected: [\n    {\n      \"name\": \"Bob\"\n    },\n    {\n      \"name\": \"Alice\"\n    },\n    {\n      \"name\": \"Bob\"\n    },\n    {\n      \"name\": \"Alice\"\n    }\n  ]\n}\n该测试用例输入了一个 YAML 文件 test19.yml，该文件中包含了一个 $flaten 属性，其值为两个 $p_ref 对象组成的数组，引用了一个返回数组的 YAML 文件 test19_ref.yml。\n\n执行该测试用例后，期望得到的输出是一个数组，其中包含了两个 $p_ref 引用结果的 flatten 后的结果。\n\n需要注意的是，由于该测试用例涉及到文件读取和模板渲染等操作，需要在测试前确保相关文件和依赖库已经正确安装并配置好。\n```\n\n通过使用DSL，还可以缩短输入和输出的token数，从而放大 ChatGPT 的能力。\n\n\n## 概念抽象\n\n对于 ChatGPT 尚不存在的概念，可以通过 Google 相关的内容之后，由 ChatGPT 进行总结。\n\n```markdown\n根据下面的文本重新解释一下 ControlNet：\n\n- 官网介绍：ControlNet is a neural network structure to control diffusion models by adding extra conditions.\n- 模式：根据给的底图，生成一个类似建模效果（法线贴图）的中间图，再生成图片 \n- 场景：用来实现骨骼绑定、精准控线、线稿上色、依据深度图结构透视精准重绘等。\n```\n\n结果：\n\n```markdown\n根据给出的文本，ControlNet是一种神经网络结构，旨在通过添加额外条件来控制扩散模型。在特定场景下，ControlNet被用于生成类似建模效果（法线贴图）的中间图和相关的图像。这种技术可以被应用于多个领域，如骨骼绑定、精准控线、线稿上色、深度图结构透视精准重绘等。\n\n具体来说，ControlNet技术可以被用来控制模型的扩散过程，从而提取特定的信息并生成新的图像。在骨骼绑定、线稿上色等场景中，ControlNet技术可以被用来增强图像，使其更加真实和生动。在依据深度图结构透视精准重绘的场景中，ControlNet技术可以被用来根据图像的深度信息，生成精确的重绘图像，从而提高图像的真实感和逼真度。\n```\n\n缩短：`能用一句话解释一下 ControlNet 吗`\n\n结果：\n\n```\nControlNet 是一种神经网络结构，通过添加额外的条件来控制扩散模型，从而实现图像增强、重构和生成等功能。\n```\n\n\n## 概念对齐\n\n如在 ChatGPT 中对于自举的理解是不符合我们这里的需求：\n\n![Bootstrap](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fphodal_prompt-patterns_readme_f1da48b92e90.png)\n\n第一步，定义\n\n> phodal：自举是指就编译器可以自行编译自己的编译器。 实现方法就是这个编译器的作者用这个语言的一些特性来编写编译器并在该编译器中支持这些自己使用到的特性。\n\n第二步，试探\n\n> phodal：将自举应用在游戏领域，应该是怎样的？\n\n第三步，确认理解：\n\n> 那么，抽象一下我们新定义的自举？\n\n![总结](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fphodal_prompt-patterns_readme_ad24c007624c.png)\n\n最后一问：\n\n![自举](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fphodal_prompt-patterns_readme_4b12ce9cb08c.png)\n\nPS：mmp，他一定是故意的。\n\n# 类比模式集（待定）\n\n> 类比是指将一个事物或概念与另一个事物或概念进行比较，找出它们之间的相似之处，以此来推理或说明某个问题或情况。\n\n## CoT\n\n> CoT 是 \"Chain of Thought\" 的缩写，是一种针对自然语言处理 (NLP) 模型的提示方法，旨在提高模型的推理能力。通过将多步骤问题分解为中间推理步骤，CoT 提示使得模型可以更有效地处理需要多步骤推理的任务，如数学问题和常识推理。与传统提示方法不同，CoT 提示引导模型生成中间推理步骤，从而模拟人类推理的直觉过程。\n\nTODO:（rename to Manual-Cot\u002FAuto-CoT ）\n\n## 模板方法\n\n> 模板方法模式是一种行为型模式，它定义了一个操作中的算法骨架，将某些步骤延迟到子类中实现，从而使得子类可以在不改变算法结构的情况下重新定义算法中的某些步骤。\n\n在接下来的例子中，我们会创建一个 muji 游戏中。在游戏的实现可以分为多个步骤，例如初始化游戏、生成随机数、获取用户输入、计算得分等等，而这些步骤可以通过模板方法模式来进行实现。\n\n```\n我们来玩一个编程游戏名为 wula，包含五个步骤：\n\n第一步. 问题分析：每一轮游戏，你将看到一个以 \"wula:\" 开头的问题，你需要分析这个问题并简单介绍一下通常解决这个问题的方法。\n\n第二步. 代码编写：你需要用 JavaScript 编写解决这个问题的代码，并输出对应的代码，并介绍一下你的代码（不少于 200 字）。\n\n第三步. 代码执行：你需要作为 JavaScript Console 执行第二步写的代码，如果没有给出测试数据，你需要自己随机生成测试数据，并将这些数据输入到代码中进行计算。\n\n第四步. 错误处理：如果你的代码存在错误或无法正常执行，你需要输出错误，并回到第二步重新开始游戏，直到你的代码能够正常工作。\n\n第五步. 总结：你需要用不少于 100 字左右总结一下这个问题，以及你的解决方案，让其他人可以简单了解这个问题及其解决方法。\n\n示例如下：\n\n\"\"\"\nwula: 头共10，足共28，鸡兔各几只？\n\n简介：这是一个鸡兔同笼问题，{}，\n\n## 鸡兔同笼\n\n\u002F\u002F 计算鸡兔数量的函数\nfunction calcAnimals(heads, legs) {\n  const rabbitCount = (legs - 2 * heads) \u002F 2;\n  const chickenCount = heads - rabbitCount;\n  return {\"chicken\": chickenCount, \"rabbit\": rabbitCount};\n}\n\n\u002F\u002F 计算鸡兔数量\nconst result = calcAnimals(10, 28);\n\n\u002F\u002F 输出结果\nconsole.log(result);\n\n代码的输出结果是：{}\n\n## 总结\n\n{}\n\n\"\"\"\n\n明白这个游戏怎么玩了吗？\n```\n\n在这个游戏里，我们结合了几种不同的模式：\n\n1. Instruction：让 ChatGPT 创建了一个名为 wula 的游戏，并定义了游戏的步骤。\n2. Specific：让 ChatGPT 用 JavaScript 编写一个程序\n3. Proxy：让 ChatGPT 作为 JavaScript Console 执行程序，并返回结果。\n4. Specific：让 ChatGPT 做总结\n5. Demonstration：提供了一个示例，让 ChatGPT 理解游戏的步骤。\n\n## 自举模式\n\n> 自举（Boostrapping）的核心思想是利用一组基础工具和材料来构建和生成一个新的工具或系统，从而逐步替代掉原有的基础工具和材料。在这个过程中，新的工具或系统会逐渐变得更为高效和强大，从而实现对原有基础工具和材料的完全替代。\n\n如下图所示：\n\n![Bootstrap](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fphodal_prompt-patterns_readme_c29bddd746f5.png)\n\nTODO：重新解释，上图出自：《[Bootstrapping in Compiler Design](https:\u002F\u002Fwww.geeksforgeeks.org\u002Fbootstrapping-in-compiler-design\u002F)\n\n先看例子 1：文章\n\n![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fphodal_prompt-patterns_readme_6869aac8904b.png)\n\n\n例子 2：Wula 2.0\n\n```\n> wula：创作一个新游戏名为 muji，并解释一下这个游戏：\"\"\"类似于 wula，可以做简单的图形计算，如体积、面积等。这个游戏还能把解决过程解释清楚，拥有有可运行的 Python 代码，最后的输出结果是一篇文章。\"\"\"\n```\n\n![Muji Sample](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fphodal_prompt-patterns_readme_0cb22bd1e687.png)\n\n## 拆解模式\n\n> 对于复杂问题，ChaGPT 无法一次性输出全部内容，需要进行拆解。\n\n已知问题：ChatGPT 当前版本会丢失上下文。\n\n```markdown\n我们来定义一下 DDD 游戏的步骤，一共有 6 个步骤，步骤如下：\n\n\"\"\"\n第一步. 拆解场景。分析特定领域的所有商业活动，并将其拆解出每个场景。\n第二步. 场景过程分析。选定一个场景，并使用 \"{名词}已{动词}\" 的形式描述过程中所有发生的事件，其中的名词是过程中的实体，其中的动词是实体相关的行为。\n第三步. 针对场景建模。基于统一语言和拆解出的场景进行建模，以实现 DDD 设计与代码实现的双向绑定。\n第四步. 持续建模。回到第一步，选择未完成的场景。你要重复第一到第四步，直到所有的场景完成。\n第五步. 围绕模型生成子域。对模型进行分类，以划定不同的子域，需要列出所有的模型包含英语翻译。\n第六步. API 生成。对于每一个子域，生成其对应的 RESTful API，并以表格的形式展现这些 API。\n\"\"\"\n\n需要注意的是，当我说 \"\"\"ddd 第 {} 步: {}\"\"\" 则表示进行第几步的分析，如 \"\"\"ddd 第一步: 博客系统\"\"\" 表示只对博客系统进行 DDD 第一步分析。我发的是 \"\"\"ddd: {}\"\"\"，则表示按 6 个步骤分析：\n\n明白这个游戏怎么玩了吗？\n```\n\n完整过程见：[DDD Sample](.\u002Fddd.sample.md)\n\n# 其它模式？\n\n## pipeline模式（TODO）\n\n后处理 pipe，示例：当你希望给我图片的时候，用mermaid表达\n\n\n## 图形化实践\n\nphodal: 能用 uml 表示一下上文中的 \"\"\"ArchGuard Pipeline 的工作流程\"\"\" 吗？\n\n> 当然可以。下面是 ArchGuard Pipeline 的工作流程的 UML 类图表示：\n\n```lua\n+-----------------+          +-----------------+\n| ArchGuardConfig  |          | ArchGuardRunner  |\n+-----------------+          +-----------------+\n| - configData     |          | - runnerType     |\n+-----------------+          | - runnerImage    |\n                             | - runnerCommands |\n                             +-----------------+\n                                     ^\n                                     |\n                                     |\n+-----------------+          +-----------------+\n|    ArchGuard     |          |    RunnerPool    |\n+-----------------+          +-----------------+\n| - runnerRegistry |          | - runners        |\n+-----------------+          +-----------------+\n| # downloadRunner|          | # getRunner      |\n+-----------------+          +-----------------+\n```\n\nArchGuardConfig 类包含了 ArchGuard Pipeline 的配置信息，ArchGuardRunner 类则表示一个具体的 Runner，即一个执行 ArchGuard Scanner 或者其他工具的实例。RunnerPool 则是 Runner 的管理池，用于动态加载不同的 Runner。ArchGuard 则是整个 ArchGuard Pipeline 的控制类，用于根据 ArchGuardConfig 中的配置信息，加载对应的 Runner，执行任务。\n\nphodal: 能用 mermaid 表示一下上文中的 \"\"\"ArchGuard Pipeline 的工作流程\"\"\" 吗？\n\n当然可以！以下是使用 Mermaid 表示的 ArchGuard Pipeline 的工作流程：\n\n```mermaid\n\ngraph TD;\n    A[解析 archguard.yml] --> B[下载 runner]\n    B --> C[执行 runner]\n    C --> D[输出制品]\n    D --> E[上传到服务器]\n```\n\n注：这与我之前用 UML 表示的工作流程是等价的。\n\n# 其它\n\n## 人类如何思考问题？\n\n人类相对于其他动物更擅长于类比、概念抽象、符号化等高级认知活动，这些认知活动可以帮助人类在面对新问题时，从已有的知识和经验中找到相似的部分，快速理解和解决新问题。\n\n而对于机器来说，机器学习算法通过大量的数据和计算，学习到数据中的规律和模式，并将这些规律和模式应用到新的数据中，从而实现预测和决策等功能。例如，机器学习算法可以通过大量的图像数据学习到图像的特征，并在新的图像中识别出相应的物体；也可以通过大量的自然语言数据学习到语言的规律，从而生成自然语言文本。\n\n# 相关资源\n\n本文相关的模式图片参考来源主要是：[Prompt Engineering](https:\u002F\u002Fdocs.cohere.ai\u002Fdocs\u002Fprompt-engineering)\n\n## Practise\n\n参考：[Best practices for prompt engineering with OpenAI API](https:\u002F\u002Fhelp.openai.com\u002Fen\u002Farticles\u002F6654000-best-practices-for-prompt-engineering-with-openai-api)\n\n## 相关资源 Prompt Engineering\n\n- [OpenAI Cookbook](https:\u002F\u002Fgithub.com\u002Fopenai\u002Fopenai-cookbook)\n- [Awesome Prompt Engineering](https:\u002F\u002Fgithub.com\u002Fpromptslab\u002FAwesome-Prompt-Engineering)\n- [Awesome ChatGPT Prompts](https:\u002F\u002Fgithub.com\u002Ff\u002Fawesome-chatgpt-prompts)\n\n### 入门\n\n- [A Complete Introduction to Prompt Engineering For Large Language Models](https:\u002F\u002Fwww.mihaileric.com\u002Fposts\u002Fa-complete-introduction-to-prompt-engineering\u002F)\n- [Prompt Engineering Guide: How to Engineer the Perfect Prompts](https:\u002F\u002Frichardbatt.co.uk\u002Fprompt-engineering-guide-how-to-engineer-the-perfect-prompts\u002F)\n\n### Code\n\n- https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fprompt-engine, This repo contains an NPM utility library for creating and maintaining prompts for Large Language Models (LLMs).\n\n### 安全问题\n\n- Prompt injection: [Exploring Prompt Injection Attacks](https:\u002F\u002Fresearch.nccgroup.com\u002F2022\u002F12\u002F05\u002Fexploring-prompt-injection-attacks\u002F)\n\n### 相关文章\n\n - [How to get Codex to produce the code you want!](https:\u002F\u002Fmicrosoft.github.io\u002Fprompt-engineering\u002F)\n","# 提示词编写模式：如何将思维框架赋予机器\n\n欢迎使用集成了这些模式的工具：https:\u002F\u002Fgithub.com\u002Fprompt-engineering\u002Fclick-prompt\n\n本书旨在介绍一系列的 Prompt 编写模式，以更好地应用 Prompt 对 AI 进行编程。\n\n我们非常感谢您对本书的关注和支持，并欢迎您为该项目做出贡献！您可以通过以下方式参与本书的开发：\n\n- 发现问题并报告：如果您在使用本书时发现任何问题或错误，请在项目的 Issue 页面中提出问题，我们将尽快修复。\n- 编写和改进章节：如果您想要贡献新的章节或者改进现有的章节，欢迎您提交 Pull Request。\n- 翻译本书：如果您是非英语母语的人士，并且想要将本书翻译成其他语言，请在项目的 Issue 页面中提出请求，我们将会指导您如何进行翻译。\n- 分享本書：如果您认为本書对其他人也有帮助，请将本書分享给您的朋友和同事，让更多的人了解和使用 Prompt 进行 AI 编程。\n\n我们希望通过大家的共同努力，能够让本書更加完善和实用，为更多的开发人员提供有价值的帮助和指导。谢谢您的支持和贡献！\n\n\nChatGPT 简单备忘录\n\n![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fphodal_prompt-patterns_readme_c1d901fba4b7.jpg)\n\n下载：[pdf](cheatsheet\u002Fprompt-simple-cheatsheet.pdf), [pptx](cheatsheet\u002Fprompt-simple-cheatsheet.pptx)\n\n如何理解 Prompt ？\n\n![Prompt 工程](patterns\u002Fprompt-engine.svg)\n\n> prompt 通常指的是一个输入的文本段落或短语，作为生成模型输出的起点或引导。prompt 可以是一个问题、一段文字描述、一段对话或任何形式的文本输入，模型会基于 prompt 所提供的上下文和语义信息，生成相应的输出文本。\n\n举个例子，对于一个语言模型，prompt 可以是 \"The cat sat on the\"，模型可以通过对接下来的词语进行预测，生成类似于 \"mat\"、\"chair\"、\"sofa\" 等不同的输出：\n\n![The Cat](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fphodal_prompt-patterns_readme_53ffc9ce856d.png)\n\n上图为 Stable Diffusion 生成 (Prompt: The cat sat on the , Steps: 30, Sampler: Euler a, CFG scale: 7, Seed: 234310862, Size: 512x512, Model hash: d8722b4a4d, Model: neverendingDreamNED_bakedVae)\n\nPrompt 在人工智能语言生成领域中扮演着重要的角色，因为它可以帮助模型更好地理解用户意图，并生成更准确、有意义的文本内容。 诸如于如下的 prompt\n\n> women back view without face, flowing dress, edge of the sea, backview, back turned to the camera, upon the glow of the setting sun, sun below the horizon, golden light over the water, hair sways gently, Chinese style clothes, black hair,\n\n可以在 Stable Diffusion 生成图片（配置了 negative prompt）：\n\n\u003Ctable>\n  \u003Ctr>\n    \u003Ctd>\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fphodal_prompt-patterns_readme_d8ac506a8480.png\" width=\"256px\" height=\"256px\">\u003C\u002Ftd>\n    \u003Ctd>\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fphodal_prompt-patterns_readme_bcf85607196c.png\" width=\"256px\" height=\"256px\">\u003C\u002Ftd>\n    \u003Ctd>\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fphodal_prompt-patterns_readme_70568784a51f.png\" width=\"256px\" height=\"256px\">\u003C\u002Ftd>\n   \u003C\u002Ftr> \n\u003C\u002Ftable>\n\n所以，质量看上去不错，但是可能不是你想要的。在 ChatGPT 则可以生成文本，质量上也是相似的，但是对于 AI 输出的文本来说，质量并没有这么直观。\n\n# 模式要素\n\n> 省去几千字\n\n如果您指的是 AI 领域中的 prompt 模式，它通常是指一种输入-输出的数据格式，用于训练和评估机器学习模型。下面是一个完整的定义：\n\n- 模式名称（Pattern Name）：Prompt 模式\n- 问题描述（Problem）：如何准备训练数据，以便用于机器学习模型的训练和评估。\n- 解决方案（Solution）：Prompt 模式是一种输入-输出数据格式，它由一个输入文本和一个输出文本组成。输入文本是一个问题或指令，输出文本是模型预测的答案或结果。通过使用这种格式，可以减少训练数据的需求量，提高模型的泛化性能，同时也使得模型的输出更易于理解和解释。\n- 效果（Consequences）：使用 Prompt 模式可以简化训练数据的准备过程，提高模型的效率和准确率，同时也增加了模型的可解释性和可理解性。\n- 适用性（Applicability）：Prompt 模式适用于自然语言处理领域中的各种任务，如文本分类、情感分析、问答系统、机器翻译等。它也可以用于其他领域中需要使用自然语言作为输入和输出的任务。\n- 结构图（Structure）：Prompt 模德的结构由一个输入文本和一个输出文本组成，它们被定义为模型的输入和输出。通常，输入文本包括一些关键词或短语，用于指定模型需要执行的任务或操作，而输出文本则是模型的预测结果。\n- 参考（References）：相关的文献包括 \"GPT-3: Language Models are Few-Shot Learners\"， \"Zero-Shot Learning - A Comprehensive Evaluation of the Good, the Bad and the Ugly\" 等。常用的机器学习框架包括 TensorFlow，PyTorch 等。\n\n# 核心思想：概念与类比\n\n开始之前，可以看一下这个问题示例：\n\n1. 设计模式的要素是哪些？\n2. 对于 AI 领域的 prompt 编写来说，我们通常使用的模式有哪些？\n3. 能将 AI 领域的 prompt 常见的设计模式用 \"设计模式要素\" 的格式一一表达吗？\n\n核心思想，将设计模式要素作为一个概念，让 AI 类比到 prompt 里的模式。详细见：\n\n1. [design-pattern.analogy](.\u002Fdesign-pattern.analogy.md)\n2. [design-pattern.analogy2](.\u002Fdesign-pattern.analogy2.md)\n\n当然了，类比和定义概念不一定都会成功。\n\n# 基础模式\n\n四种基础模式：\n\n- 特定指令（By specific）：在这种模式下，我们给模型提供一些特定信息，例如问题或关键词，模型需要生成与这些信息相关的文本。这种模式通常用于生成答案、解释或推荐等。特定信息可以是单个问题或多个关键词，具体取决于任务的要求。\n- 指令模板（Instruction Template）：在这种模式下，我们给模型提供一些明确的指令，模型需要根据这些指令生成文本。这种模式通常用于生成类似于技术说明书、操作手册等需要明确指令的文本。指令可以是单个句子或多个段落，具体取决于任务的要求。\n- 代理模式（By proxy）：在这种模式下，可以充当了一个代理，代表某个实体（例如人、角色、机器人等）进行操作或交互。代理模式的核心思想是引入一个中介对象来控制对实际对象的访问，从而实现一定程度上的隔离和保护。诸如于在 ChatGPT 中，\"act as xxx\" 可以让 ChatGPT 充当一个代理，扮演某个角色或实体的身份，以此来处理与该角色或实体相关的任务或请求。\n- 示例模式（By demonstration）：在这种模式下，我们给模型提供一些示例文本，模型需要生成与示例文本类似的文本。这种模式通常用于生成类似于给定示例的文本，例如自动生成电子邮件、产品描述、新闻报道等。示例文本可以是单个句子或多个段落，具体取决于任务的要求。\n\n## 特定指令（By specific）\n\n![Prompt 工程](patterns\u002Fspecific.svg)\n\n> 在这种模式下，我们给模型提供一些特定信息，例如问题或关键词，模型需要生成与这些信息相关的文本。这种模式通常用于生成答案、解释或推荐等。特定信息可以是单个问题或多个关键词，具体取决于任务的要求。\n\n如 `翻译`、`告诉我`，以我们的开头来说：\n\n- 定义一下 prompt 工程\n\n类似的场景还可以有：\n\n- 翻译一下：永和九年，岁在癸丑，暮春之初，会于会稽山阴之兰亭，修禊事也。\n- 转为现代汉语：永和九年，岁在癸丑，暮春之初，会于会稽山阴之兰亭，修禊事也。\n\n对应的，还有一系列的子模式\n\n### 子模式\n\n如我们通过下面的 prompt 转换了 ChatGPT 输出的子模式：\n\n> 转化为 markdown 的 \"\"\"```markdown {} ```\"\"\" 表格形式，其中的字段为英语模式、中文、简述、示例。\n\n表格示例：\n\n| 英语模式                 | 中文  | 简述                    | 示例                                                  |\n|----------------------|-----|-----------------------|-----------------------------------------------------|\n| Completion-based     | 补全型 | 用户提供部分文本，AI 根据上下文生成建议 | 用户输入“我想买一件…”，ChatGPT 生成“红色连衣裙”                      |\n| Classification-based | 分类型 | 用户提供问题或任务描述，AI 生成答案   | 用户输入“如何做巧克力蛋糕？”ChatGPT 生成“将巧克力蛋糕放入预热好的烤箱中烤25-30分钟。” |\n| Generation-based     | 生成型 | 用户提供初始信息，AI 生成新文本     | 用户输入“科技创新”，ChatGPT 生成“人工智能是科技创新领域的重要方向之一。”          |\n| Translation-based    | 翻译型 | 用户提供文本，AI 进行翻译        | 用户输入“Hello”，ChatGPT 生成“你好”                          |\n| Question-answering   | 问答型 | 用户提供问题，AI 生成答案        | 用户输入“什么是机器学习？”，ChatGPT 生成“机器学习是一种人工智能的分支。”          |\n| Conversation-based   | 对话型 | 用户与 AI 进行对话，AI 生成回答   | 用户输入“今天天气怎么样？”ChatGPT 生成“今天天气晴朗，温度适宜。”              |\n| Summarization-based  | 摘要型 | 用户提供文本，AI 生成文本摘要      | 用户输入一篇文章，ChatGPT 生成该文章的摘要          |\n\n其重点是：Output Driven\n\n在提示的开头包含所有相关信息，包括任何上下文或期望的结果，以及 长度，格式样式等。诸如于：`用 100 字总结一下 ChatGPT`。\n\n## 指令模板（Instruction Template）\n\n![Instruction](patterns\u002Finstruction.svg)\n\n> 在这种模式下，我们给模型提供一些明确的指令，模型需要根据这些指令生成文本。这种模式通常用于生成类似于技术说明书、操作手册等需要明确指令的文本。指令可以是单个句子或多个段落，具体取决于任务的要求。\n\n如下是一个示例：\n\n```markdown\n使用 STAR 原则与下面的格式总结一下这段话：\n\n\"\"\"\n最近几天，因为工作 + 兴趣的原则，我在研究用 text 2 image 来展示如何演进 prompt、用 text 2 article 来展示充足 prompt 的优点、结合 GitHub Copliot 来实现 prompt 完成工作。然后，我在本地部署了一个 Stable Diffusion、使用 ChatGPT 写作展示 text 2 article、在 IDEA 中使用 GitHub Copilot。最后，得到了多篇文章和好多的文章阅读量、几个 Jupyter 代码段、以及一些经验。\n\"\"\"\n\n情境(Situation): \n任务(Task): \u003Ccomma_separated_list_of_task>\n行动(Action):  -||-\n结果(Result):  -||-\n```\n\n输出文本时要注意中英文之间插入空格，留出间隔，诸如于 \"\"\"Hello 你好\"\"\"，用这种方式输出一下刚才的文本：\n\n```markdown\n情境(Situation): 最近几天，在工作和兴趣的驱动下，研究如何使用 text 2 image 和 text 2 article 展示 prompt 演进以及结合 GitHub Copliot 来完成工作。\n\n任务(Task):\n\n    研究如何使用 text 2 image 展示 prompt 的演进过程\n    研究如何使用 text 2 article 展示 prompt 的优点\n    结合 GitHub Copliot 来实现 prompt 完成工作\n\n行动(Action):\n\n    本地部署了一个稳定的 Diffusion 模型\n    使用 ChatGPT 撰写文章来展示 text 2 article 的效果\n    在 IDEA 中使用 GitHub Copilot\n\n结果(Result):\n\n    得到了多篇文章和很多的文章阅读量\n    获得了几个 Jupyter 代码段以及相关经验\n```\n\n### 最佳实践\n\n- zero-shot、few-shot 优先，最开始可以不给示例（因为示例可能是错的），看任务执行情况，再提供少量样本，如果不行，再对模型进行微调。\n\n## 代理模式(By proxy)\n\n![Proxy](patterns\u002Fproxy.svg)\n\n> Proxy 模式是指用户可以要求 ChatGPT 以特定的身份、角色或者身份扮演某个特定的人、角色或对象来生成回答。这种模式通常用于模拟某个特定人物的语言风格和语境，生成特定情境下的对话、回答或其他形式的文本。\n\n### 例子 1：公司客服\n\n当使用 ChatGPT 来代替某个人或实体时，可以使用 by proxy 模式。\n\n例如，可以使用以下 prompt 提问 ChatGPT 代替某个公司的客服：\n\n> 我是一家餐饮公司的客服，有顾客反馈说我们的菜品质量有问题，我们该怎么处理呢？\n\n在这种情况下，ChatGPT 会扮演客服的角色，并根据提示来回答，从而帮助公司解决问题。ChatGPT 可以使用类似以下的方式来回答：\n\n> 您好，很抱歉听到您的反馈。我们将会仔细审核您的反馈，并尽快采取相应措施来解决这个问题。为此，我们需要更多的信息来进一步了解您的反馈，包括哪些菜品有问题，具体问题是什么等。请问您可以提供更多的信息吗？\n\n### 例子 2：终端计算机\n\n这种方式可以通过让 ChatGPT 扮演某个实体的角色，例如客服、销售代表等等，来帮助用户解决问题。\n\n在 [Awesome ChatGPT Prompts](https:\u002F\u002Fgithub.com\u002Ff\u002Fawesome-chatgpt-prompts) 中：\n\n> Human: Act as a Linux Terminal\n\nRobot: \n\n> ChatGPT: I want you to act as a linux terminal. I will type commands and you will reply with what the terminal should show. I want you to only reply with the terminal output inside one unique code block, and nothing else. do not write explanations. do not type commands unless I instruct you to do so. When I need to tell you something in English, I will do so by putting text inside curly brackets {like this}. My first command is pwd\n\n## 示例模式（By demonstration）\n\n> 在这种模式下，我们给模型提供一些示例文本，模型需要生成与示例文本类似的文本。这种模式通常用于生成类似于给定示例的文本，例如自动生成电子邮件、产品描述、新闻报道等。示例文本可以是单个句子或多个段落，具体取决于任务的要求。\n\n示例：\n\n```\n任务表述 颜色代表了温度\n例子1 绿色代表寒冷 \n例子2 蓝色代表寒冷 \n例子3 红色代表温暖 \n例子4 黄色代表温暖\n执行 橙色代表什么\n```\n\n![](patterns\u002Fcohere-PromptEngineering_Visual_8.svg)\n\n上图为 Cohere AI 官网的示例图，对应的聊天记录如下：\n\n```markdown\nEnglish: Writing about language models is fun.\nRoish: Writingro aboutro languagero modelsro isro funro.\nEnglish: The weather is lovely!\nRoish:\n```\n\n# 增强 Prompt\n\n## 符号化模式\n\n![Symbol](patterns\u002Fprompt-symbol-pattern.svg)\n\n> 符号化方法通常通过定义符号、符号之间的关系以及基于这些关系的规则来表示知识。\n\n简单来说，我们可以创建一个符号来表示特写的规则，诸如于：\n\n```\n\"\"\"\n我们来玩一个名为 gkzw 的写作游戏，每当我说 gkzw，你开始写作，规则如下：\n\n1. 字数不少于 200 字。\n2. 文中必须出现 \"小明\"。\n\n明白了吗？\n\"\"\"\n```\n\n围绕这个模式，我们可以创建复制的规则。\n\n## 反向 Prompt 模式\n\n> Negative prompt（负向提示）是一种在使用语言模型时，针对模型输出不希望的结果而设置的一种文本输入方式。通过使用负向提示，可以帮助模型避免输出不良、不准确或不恰当的文本。\n\n具体来说，负向提示通常是以否定的形式呈现的，例如在文本生成任务中，使用“不要写...”、“不要提及...”、“不要使用...”等方式来限制模型生成不想要的文本。在情感分析任务中，使用“不是...”、“并不...”等方式来指示模型识别出一段文本的负面情感。在QA（问答）任务中，使用“不是...”、“不包括...”等方式来指示模型回答问题时避免输出错误或不准确的答案。\n\nNegative Prompt 在 Stable Diffusion 被广泛使用，相似的，在 ChatGPT 中，我们也会经常使用到。\n\n诸如于：\n\n```markdown\n我们能玩一个名为 kfc 的谜语创作游戏，当我说 \"kfc\"，你写一个谜题，要求：\n\n1. 不少于 200 字\n2. 谜题不能出现肯德基、星期四、KFC\n3. 正文可以夹杂小语种语言，如 \"\"\"他说：Ciao\"\"\"\n4. 谜底必须是 ###原来今天是肯德基疯狂星期四！！###\n\n格式类似于：\n\n....\n```\n\n## 再生成模式\n\n根据 AI 提供的信息，再让 AI 生成内容。\n\n### 例子 1\n\n当我们无法确定我们的 prompt 是否准确，便可通过 AI 来帮我们丰富 prompt 。\n\n如我在：[基于编程、绘画、写作的 AI 探索与总结](https:\u002F\u002Fgithub.com\u002Fphodal\u002Fai-research-for-practise) 的例了一样\n\n- phodal: 我想写一段话描述一张照片，帮我美化一下：一年轻女子穿着裙子，背对着镜头，在海边看着日落，太阳已经到地平线下面了，她的头发在风中飘动。\n- ChatGPT: 这张照片中的场景令人心醉，一位年轻女子穿着一条裙子，站在海边，背对着镜头，凝视着地平线下的夕阳。太阳已经沉入了海面，一片金黄色的光芒在海面上弥漫，照亮了整片海洋，仿佛这个时刻被定格在了时间的某个角落里。女子的头发随着微风轻轻飘动，轮廓被余晖映照得柔和而温暖。她的目光凝视着远方，仿佛在思考着生命的意义和无尽的未来。这张照片中蕴含着一种深刻的内涵，让人感受到时间和自然的力量，也让人思考着自己在这个宏大而美丽的世界中的角色和意义。 \n\n再去除掉不合适的词，进行润色，就可以再创作：\n\n- phodal：翻译成英语\n\n然后再提炼直至扔至 Stable Diffusion 中：\n\n> women back view without face, flowing dress, edge of the sea, backview, back turned to the camera, upon the glow of the setting sun, sun below the horizon, golden light over the water, hair sways gently, Chinese style clothes, black hair,\n\n而后，根据图片的结果，我们再反复修改。\n\n## 控线模式\n\nTODO：这里需要给出更精准的定义，如何让 ChatGPT 做到？\n\n在没有推出 ControlNet，对于一个 Stable Diffusion 玩家，它需要反复地吟唱咒语，才能获取到满意的图案。\n\n在有了 ControlNet 之后，我们可以创建一个 Openpose，或者是导入图片从图片生成 pose，相当于是给机器一个示例，而后生成的图片就会有令人满意的姿势。：\n\n\u003Ctable>\n  \u003Ctr>\n    \u003Ctd>\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fphodal_prompt-patterns_readme_a6f89d47840a.png\" width=\"256px\" height=\"256px\">\u003C\u002Ftd>\n    \u003Ctd>\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fphodal_prompt-patterns_readme_98ade40808bb.png\" width=\"256px\" height=\"256px\">\u003C\u002Ftd>\n    \u003Ctd>\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fphodal_prompt-patterns_readme_2b415f1755c6.png\" width=\"256px\" height=\"256px\">\u003C\u002Ftd>\n   \u003C\u002Ftr> \n\u003C\u002Ftable>\n\n在 GitHub Copilot，我们可以通过设置输入和输出，结合函数名三个要素，Copilot 就能生成大致准确的代码：\n\n![GitHub Copilot 示例](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fphodal_prompt-patterns_readme_9d408de5df53.png)\n\n而在必要的情况下，添加一下注释就能更完整了：\n\n```kotlin\nfun listAllDirInDir(dir: String): List\u003CFile> {\n    \u002F\u002F ignore hidden files\n    \n}\n```\n\n生成的代码会更贴近我们的需求。\n\n# 概念模式集\n\n## Language is Language\n\n对于 ChatGPT 来说，语言就是语言，他不区分自然语言和编程语言，甚至有可能编程语言对它更友好。所以我们可以直接通过编程语言与之交流：\n\n```markdown\n我有下列遗留代码，我想在接口的函数名、参数名不变的情况下（可以新参数，旧的参数不能变）加入新功能：\n\nmodule.exports = async function loadYamlFile(filepath, workdir = path.dirname(filepath)) { \n  const content = await fs.readFile(filepath, 'utf8'); \u002F\u002F 读取文件内容\n  \u002F\u002F TODO: 将 content 看做ejs模板的字符串，进行渲染，如果传入了渲染ejs时的context值不为undefined，就进行渲染，否则不进行渲染。\n\n  \u002F\u002F TODO：将渲染后的结果传给yaml.load\n  const data = yaml.load(content); \u002F\u002F 解析YAML为JSON对象\n  \n\n  \u002F\u002F 遍历JSON对象，查找$ref属性\n  const processRef = async (obj) => {\n    if (typeof obj === 'object' && obj !== null) { \u002F\u002F 如果是对象\n      if ('$ref' in obj) { \u002F\u002F 如果包含$ref属性\n        const refPath = path.join(workdir, obj.$ref.split('#')[0]); \u002F\u002F 获取引用文件路径\n        const pointer = obj.$ref.split('#')[1]; \u002F\u002F 获取JSON指针\n\n        \u002F\u002F TODO: 递归调用的时候，取出context中以obj.$ref的属性值作为属性名的值作为新的context向下传递\n        const refData = await loadYamlFile(refPath, path.dirname(refPath)); \u002F\u002F 递归读取引用文件\n        const value = getValueByPointer(refData, pointer); \u002F\u002F 修复了 # 号问题\n        return value;\n      } else { \u002F\u002F 如果不包含$ref属性，递归处理子属性\n        for (const prop in obj) {\n          obj[prop] = await processRef(obj[prop]);\n        }\n      }\n    }\n    return obj;\n  };\n```\n\n上述描述会比纯自然语言更容易描述我们的需求，适合于更精细的指导。同时，不一定是编程语言，结构化的声明式DSL它也可以很好的解析，如：\n\n\n```markdown\n把我给定的输入输出，按照下面的格式写成一个测试用例的描述：\n\n{\n    desc: 'Test with $p_ref returning array',\n    input: {\n      filepath: '.\u002Ftest18.yml',\n      workdir: '.\u002Ftest\u002Fv2',\n    },\n    expected: {\n        \"name\": \"Alice\",\n        \"age\": 20\n      }\n  }\n```\n\n结果：\n\n```markdown\n{\n  desc: 'Test with $p_ref returning array',\n  input: {\n    filepath: '.\u002Ftest19.yml',\n    workdir: '.\u002Ftest\u002Fv2',\n  },\n  expected: [\n    {\n      \"name\": \"Bob\"\n    },\n    {\n      \"name\": \"Alice\"\n    },\n    {\n      \"name\": \"Bob\"\n    },\n    {\n      \"name\": \"Alice\"\n    }\n  ]\n}\n该测试用例输入了一个 YAML 文件 test19.yml，该文件中包含了一个 $flaten 属性，其值为两个 $p_ref 对象组成的数组，引用了一个返回数组的 YAML 文件 test19_ref.yml。\n\n执行该测试用例后，期望得到的输出是一个数组，其中包含了两个 $p_ref 引用结果的 flatten 后的结果。\n\n需要注意的是，由于该测试用例涉及到文件读取和模板渲染等操作，需要在测试前确保相关文件和依赖库已经正确安装并配置好。\n```\n\n通过使用DSL，还可以缩短输入和输出的token数，从而放大 ChatGPT 的能力。\n\n\n## 概念抽象\n\n对于 ChatGPT 尚不存在的概念，可以通过 Google 相关的内容之后，由 ChatGPT 进行总结。\n\n```markdown\n根据下面的文本重新解释一下 ControlNet：\n\n- 官网介绍：ControlNet is a neural network structure to control diffusion models by adding extra conditions.\n- 模式：根据给的底图，生成一个类似建模效果（法线贴图）的中间图，再生成图片 \n- 场景：用来实现骨骼绑定、精准控线、线稿上色、依据深度图结构透视精准重绘等。\n```\n\n结果：\n\n```markdown\n根据给出的文本，ControlNet是一种神经网络结构，旨在通过添加额外条件来控制扩散模型。在特定场景下，ControlNet被用于生成类似建模效果（法线贴图）的中间图和相关的图像。这种技术可以被应用于多个领域，如骨骼绑定、精准控线、线稿上色、深度图结构透视精准重绘等。\n\n具体来说，ControlNet技术可以被用来控制模型的扩散过程，从而提取特定的信息并生成新的图像。在骨骼绑定、线稿上色等场景中，ControlNet技术可以被用来增强图像，使其更加真实和生动。在依据深度图结构透视精准重绘的场景中，ControlNet技术可以被用来根据图像的深度信息，生成精确的重绘图像，从而提高图像的真实感和逼真度。\n```\n\n缩短：`能用一句话解释一下 ControlNet 吗`\n\n结果：\n\n```\nControlNet 是一种神经网络结构，通过添加额外的条件来控制扩散模型，从而实现图像增强、重构和生成等功能。\n```\n\n\n## 概念对齐\n\n如在 ChatGPT 中对于自举的理解是不符合我们这里的需求：\n\n![Bootstrap](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fphodal_prompt-patterns_readme_f1da48b92e90.png)\n\n第一步，定义\n\n> phodal：自举是指就编译器可以自行编译自己的编译器。 实现方法就是这个编译器的作者用这个语言的一些特性来编写编译器并在该编译器中支持这些自己使用到的特性。\n\n第二步，试探\n\n> phodal：将自举应用在游戏领域，应该是怎样的？\n\n第三步，确认理解：\n\n> 那么，抽象一下我们新定义的自举？\n\n![总结](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fphodal_prompt-patterns_readme_ad24c007624c.png)\n\n最后一问：\n\n![自举](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fphodal_prompt-patterns_readme_4b12ce9cb08c.png)\n\nPS：mmp，他一定是故意的。\n\n# 类比模式集（待定）\n\n> 类比是指将一个事物或概念与另一个事物或概念进行比较，找出它们之间的相似之处，以此来推理或说明某个问题或情况。\n\n## CoT\n\n> CoT 是 \"Chain of Thought\" 的缩写，是一种针对自然语言处理 (NLP) 模型的提示方法，旨在提高模型的推理能力。通过将多步骤问题分解为中间推理步骤，CoT 提示使得模型可以更有效地处理需要多步骤推理的任务，如数学问题和常识推理。与传统提示方法不同，CoT 提示引导模型生成中间推理步骤，从而模拟人类推理的直觉过程。\n\nTODO:（rename to Manual-Cot\u002FAuto-CoT ）\n\n## 模板方法\n\n> 模板方法模式是一种行为型模式，它定义了一个操作中的算法骨架，将某些步骤延迟到子类中实现，从而使得子类可以在不改变算法结构的情况下重新定义算法中的某些步骤。\n\n在接下来的例子中，我们会创建一个 muji 游戏中。在游戏的实现可以分为多个步骤，例如初始化游戏、生成随机数、获取用户输入、计算得分等等，而这些步骤可以通过模板方法模式来进行实现。\n\n```\n我们来玩一个编程游戏名为 wula，包含五个步骤：\n\n第一步. 问题分析：每一轮游戏，你将看到一个以 \"wula:\" 开头的问题，你需要分析这个问题并简单介绍一下通常解决这个问题的方法。\n\n第二步. 代码编写：你需要用 JavaScript 编写解决这个问题的代码，并输出对应的代码，并介绍一下你的代码（不少于 200 字）。\n\n第三步. 代码执行：你需要作为 JavaScript Console 执行第二步写的代码，如果没有给出测试数据，你需要自己随机生成测试数据，并将这些数据输入到代码中进行计算。\n\n第四步. 错误处理：如果你的代码存在错误或无法正常执行，你需要输出错误，并回到第二步重新开始游戏，直到你的代码能够正常工作。\n\n第五步. 总结：你需要用不少于 100 字左右总结一下这个问题，以及你的解决方案，让其他人可以简单了解这个问题及其解决方法。\n\n示例如下：\n\n\"\"\"\nwula: 头共10，足共28，鸡兔各几只？\n\n简介：这是一个鸡兔同笼问题，{}，\n\n## 鸡兔同笼\n\n\u002F\u002F 计算鸡兔数量的函数\nfunction calcAnimals(heads, legs) {\n  const rabbitCount = (legs - 2 * heads) \u002F 2;\n  const chickenCount = heads - rabbitCount;\n  return {\"chicken\": chickenCount, \"rabbit\": rabbitCount};\n}\n\n\u002F\u002F 计算鸡兔数量\nconst result = calcAnimals(10, 28);\n\n\u002F\u002F 输出结果\nconsole.log(result);\n\n代码的输出结果是：{}\n\n## 总结\n\n{}\n\n\"\"\"\n\n明白这个游戏怎么玩了吗？\n```\n\n在这个游戏里，我们结合了几种不同的模式：\n\n1. Instruction：让 ChatGPT 创建了一个名为 wula 的游戏，并定义了游戏的步骤。\n2. Specific：让 ChatGPT 用 JavaScript 编写一个程序\n3. Proxy：让 ChatGPT 作为 JavaScript Console 执行程序，并返回结果。\n4. Specific：让 ChatGPT 做总结\n5. Demonstration：提供了一个示例，让 ChatGPT 理解游戏的步骤。\n\n## 自举模式\n\n> 自举（Boostrapping）的核心思想是利用一组基础工具和材料来构建和生成一个新的工具或系统，从而逐步替代掉原有的基础工具和材料。在这个过程中，新的工具或系统会逐渐变得更为高效和强大，从而实现对原有基础工具和材料的完全替代。\n\n如下图所示：\n\n![Bootstrap](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fphodal_prompt-patterns_readme_c29bddd746f5.png)\n\nTODO：重新解释，上图出自：《[Bootstrapping in Compiler Design](https:\u002F\u002Fwww.geeksforgeeks.org\u002Fbootstrapping-in-compiler-design\u002F)》\n\n先看例子 1：文章\n\n![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fphodal_prompt-patterns_readme_6869aac8904b.png)\n\n\n例子 2：Wula 2.0\n\n```\n> wula：创作一个新游戏名为 muji，并解释一下这个游戏：\"\"\"类似于 wula，可以做简单的图形计算，如体积、面积等。这个游戏还能把解决过程解释清楚，拥有有可运行的 Python 代码，最后的输出结果是一篇文章。\"\"\"\n```\n\n![Muji Sample](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fphodal_prompt-patterns_readme_0cb22bd1e687.png)\n\n## 拆解模式\n\n> 对于复杂问题，ChaGPT 无法一次性输出全部内容，需要进行拆解。\n\n已知问题：ChatGPT 当前版本会丢失上下文。\n\n```markdown\n我们来定义一下 DDD 游戏的步骤，一共有 6 个步骤，步骤如下：\n\n\"\"\"\n第一步. 拆解场景。分析特定领域的所有商业活动，并将其拆解出每个场景。\n第二步. 场景过程分析。选定一个场景，并使用 \"{名词}已{动词}\" 的形式描述过程中所有发生的事件，其中的名词是过程中的实体，其中的动词是实体相关的行为。\n第三步. 针对场景建模。基于统一语言和拆解出的场景进行建模，以实现 DDD 设ign与代码实现的双向绑定。\n第四步. 持续建模。回到第一步，选择未完成的场景。你要重复第一到第四步，直到所有的场景完成。\n第五步. 围绕模型生成子域。对模型进行分类，以划定不同的子域，需要列出所有的模型包含英语翻译。\n第六步. API 生成。对于每一个子域，生成其对应的 RESTful API，并以表格的形式展现这些 API。\n\"\"\"\n\n需要注意的是，当我说 \"\"\"ddd 第 {} 步: {}\"\"\" 则表示进行第几步的分析，如 \"\"\"ddd 第一步: 博客系统\"\"\" 表示只对博客系统进行 DDD 第一步分析。我发的是 \"\"\"ddd: {}\"\"\"，则表示按 6 个步骤分析：\n\n明白这个游戏怎么玩了吗？\n```\n\n完整过程见：[DDD Sample](.\u002Fddd.sample.md)\n\n# 其它模式？\n\n## pipeline模式（TODO）\n\n后处理 pipe，示例：当你希望给我图片的时候，用mermaid表达\n\n\n## 图形化实践\n\nphodal: 能用 uml 表示一下上文中的 \"\"\"ArchGuard Pipeline 的工作流程\"\"\" 吗？\n\n> 当然可以。下面是 ArchGuard Pipeline 的工作流程的 UML 类图表示：\n\n```lua\n+-----------------+          +-----------------+\n| ArchGuardConfig  |          | ArchGuardRunner  |\n+-----------------+          +-----------------+\n| - configData     |          | - runnerType     |\n+-----------------+          | - runnerImage    |\n                             | - runnerCommands |\n                             +-----------------+\n                                     ^\n                                     |\n                                     |\n+-----------------+          +-----------------+\n|    ArchGuard     |          |    RunnerPool    |\n+-----------------+          +-----------------+\n| - runnerRegistry |          | - runners        |\n+-----------------+          +-----------------+\n| # downloadRunner|          | # getRunner      |\n+-----------------+          +-----------------+\n```\n\nArchGuardConfig 类包含了 ArchGuard Pipeline 的配置信息，ArchGuardRunner 类则表示一个具体的 Runner，即一个执行 ArchGuard Scanner 或者其他工具的实例。RunnerPool 则是 Runner 的管理池，用于动态加载不同的 Runner。ArchGuard 则是整个 ArchGuard Pipeline 的控制类，用于根据 ArchGuardConfig 中的配置信息，加载对应的 Runner，执行任务。\n\nphodal: 能用 mermaid 表示一下上文中的 \"\"\"ArchGuard Pipeline 的工作流程\"\"\" 吗？\n\n当然可以！以下是使用 Mermaid 表示的 ArchGuard Pipeline 的工作流程：\n\n```mermaid\n\ngraph TD;\n    A[解析 archguard.yml] --> B[下载 runner]\n    B --> C[执行 runner]\n    C --> D[输出制品]\n    D --> E[上传到服务器]\n```\n\n注：这与我之前用 UML 表示的工作流程是等价的。\n\n# 其它\n\n## 人类如何思考问题？\n\n人类相对于其他动物更擅长于类比、概念抽象、符号化等高级认知活动，这些认知活动可以帮助人类在面对新问题时，从已有的知识和经验中找到相似的部分，快速理解和解决新问题。\n\n而对于机器来说，机器学习算法通过大量的数据和计算，学习到数据中的规律和模式，并将这些规律和模式应用到新的数据中，从而实现预测和决策等功能。例如，机器学习算法可以通过大量的图像数据学习到图像的特征，并在新的图像中识别出相应的物体；也可以通过大量的自然语言数据学习到语言的规律，从而生成自然语言文本。\n\n# 相关资源\n\n本文相关的模式图片参考来源主要是：[Prompt Engineering](https:\u002F\u002Fdocs.cohere.ai\u002Fdocs\u002Fprompt-engineering)\n\n## Practise\n\n参考：[Best practices for prompt engineering with OpenAI API](https:\u002F\u002Fhelp.openai.com\u002Fen\u002Farticles\u002F6654000-best-practices-for-prompt-engineering-with-openai-api)\n\n## 相关资源 Prompt Engineering\n\n- [OpenAI Cookbook](https:\u002F\u002Fgithub.com\u002Fopenai\u002Fopenai-cookbook)\n- [Awesome Prompt Engineering](https:\u002F\u002Fgithub.com\u002Fpromptslab\u002FAwesome-Prompt-Engineering)\n- [Awesome ChatGPT Prompts](https:\u002F\u002Fgithub.com\u002Ff\u002Fawesome-chatgpt-prompts)\n\n### 入门\n\n- [A Complete Introduction to Prompt Engineering For Large Language Models](https:\u002F\u002Fwww.mihaileric.com\u002Fposts\u002Fa-complete-introduction-to-prompt-engineering\u002F)\n- [Prompt Engineering Guide: How to Engineer the Perfect Prompts](https:\u002F\u002Frichardbatt.co.uk\u002Fprompt-engineering-guide-how-to-engineer-the-perfect-prompts\u002F)\n\n### Code\n\n- https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fprompt-engine, This repo contains an NPM utility library for creating and maintaining prompts for Large Language Models (LLMs).\n\n### 安全问题\n\n- Prompt injection: [Exploring Prompt Injection Attacks](https:\u002F\u002Fresearch.nccgroup.com\u002F2022\u002F12\u002F05\u002Fexploring-prompt-injection-attacks\u002F)\n\n### 相关文章\n\n - [How to get Codex to produce the code you want!](https:\u002F\u002Fmicrosoft.github.io\u002Fprompt-engineering\u002F)","# Prompt 编写模式快速上手指南\n\n本指南基于 `prompt-patterns` 项目，旨在帮助开发者掌握核心的 Prompt 设计模式，更高效地利用 AI 进行编程、写作及图像生成。\n\n## 1. 环境准备\n\n本项目主要是一套**思维框架与方法论**，无需安装复杂的系统依赖。你只需要：\n\n*   **访问入口**：一个可用的 AI 对话界面（如 ChatGPT、Claude、文心一言等）或集成开发环境插件（如 GitHub Copilot）。\n*   **可选工具**：若需体验图像生成相关模式，需部署 Stable Diffusion 或使用相关在线服务。\n*   **前置知识**：了解基本的自然语言交互逻辑。\n\n> 💡 **推荐资源**：你可以直接访问项目的配套工具集 [click-prompt](https:\u002F\u002Fgithub.com\u002Fprompt-engineering\u002Fclick-prompt) 获取可视化辅助。\n\n## 2. 安装步骤\n\n由于这是一套方法论模式，\"安装\"即意味着将以下核心概念内化或直接复制到你的 Prompt 上下文中使用。\n\n如果你希望获取完整的模式文档和速查表：\n\n```bash\n# 克隆项目仓库以获取本地文档、示例图片和速查表 (PDF\u002FPPTX)\ngit clone https:\u002F\u002Fgithub.com\u002Fphodal\u002Fprompt-patterns.git\n```\n\n*   **速查表下载**：项目内含 `cheatsheet\u002Fprompt-simple-cheatsheet.pdf`，建议打印或保存至桌面随时查阅。\n*   **国内加速**：如果克隆速度较慢，可使用国内代码托管平台（如 Gitee）的镜像源，或在终端配置 Git 代理。\n\n## 3. 基本使用\n\n核心思想是将**软件设计模式**的理念类比到 Prompt 编写中。以下是四种基础模式及增强技巧的快速应用示例。\n\n### 3.1 四大基础模式\n\n#### A. 特定指令模式 (By Specific)\n**场景**：需要直接的答案、翻译或解释。\n**方法**：在 Prompt 开头明确包含所有相关信息、上下文及期望的输出格式（长度、风格）。\n\n**示例**：\n```text\n用 100 字总结一下 ChatGPT 的核心功能，并以 Markdown 表格形式输出，包含列：功能点、简述、应用场景。\n```\n\n#### B. 指令模板模式 (Instruction Template)\n**场景**：需要结构化输出，如技术文档、操作手册或分析报告。\n**方法**：提供明确的步骤指令和输出框架。\n\n**示例**：\n```text\n请使用 STAR 原则总结以下工作经历，并严格按照以下格式输出：\n\n情境 (Situation): \n任务 (Task): \n行动 (Action): \n结果 (Result): \n\n[在此处粘贴你的工作经历文本...]\n```\n\n#### C. 代理模式 (By Proxy)\n**场景**：需要模拟特定角色、语气或专业身份（如客服、Linux 终端、专家）。\n**方法**：使用 \"Act as...\" (扮演...) 指令设定身份。\n\n**示例**：\n```text\nI want you to act as a linux terminal. I will type commands and you will reply with what the terminal should show. I want you to only reply with the terminal output inside one unique code block, and nothing else. My first command is pwd\n```\n*(注：此类英文指令在某些模型上效果更佳，也可尝试中文：\"请扮演一个 Linux 终端...\")*\n\n#### D. 示例模式 (By Demonstration)\n**场景**：需要模型学习特定的转换规则或风格（Few-Shot Learning）。\n**方法**：提供输入 - 输出的成对示例，让模型类推。\n\n**示例**：\n```text\n任务：将颜色映射为温度感受\n例子 1: 绿色 -> 寒冷\n例子 2: 蓝色 -> 寒冷\n例子 3: 红色 -> 温暖\n例子 4: 黄色 -> 温暖\n执行：橙色 -> ?\n```\n\n### 3.2 进阶增强技巧\n\n*   **符号化模式**：定义简短的触发词（如 `gkzw`）来激活一套复杂的写作规则，减少重复输入。\n*   **反向 Prompt (Negative Prompt)**：明确告知模型**不要**做什么。\n    *   *示例*：“写一个谜题，要求：不能出现‘肯德基’、‘星期四’这些词。”\n*   **再生成模式 (Refinement)**：\n    1.  先让 AI 丰富你的粗略描述。\n    2.  人工剔除不合适的词汇。\n    3.  再次让 AI 润色或翻译成目标语言（如用于 Stable Diffusion 的英文提示词）。\n*   **语言即代码 (Language is Language)**：\n    对于编程任务，直接使用代码片段或结构化数据（JSON\u002FYAML）作为 Prompt 的一部分，往往比纯自然语言描述更精准。\n\n    **示例**：\n    ```text\n    我有下列遗留代码，请在保持函数签名不变的情况下，实现 TODO 部分的功能：\n    \n    module.exports = async function loadYamlFile(filepath, workdir) { \n      \u002F\u002F ... (粘贴代码)\n      \u002F\u002F TODO: 将 content 看做 ejs 模板进行渲染...\n    }\n    ```\n\n### 3.3 最佳实践建议\n\n1.  **Zero-shot 优先**：最初尝试时不给示例，直接下达指令。\n2.  **Few-shot 跟进**：如果效果不佳，提供 1-3 个高质量示例。\n3.  **输出驱动 (Output Driven)**：在 Prompt 开始就定义好你想要的输出格式（Markdown、JSON、代码块等）。\n4.  **迭代优化**：像调试代码一样调试你的 Prompt，根据输出结果不断微调指令或增加约束条件。","某内容运营团队需要每天将大量技术文档转化为不同风格的营销文案，以适配微信公众号、小红书和 LinkedIn 等多个平台。\n\n### 没有 prompt-patterns 时\n- 每次切换平台风格都要重新编写冗长的指令，反复尝试“请写得活泼点”或“要专业一点”等模糊描述，效率极低。\n- AI 输出的内容结构混乱，有时遗漏关键卖点，有时语气不符合目标受众，需要人工大幅修改甚至重写。\n- 团队成员各自为战，缺乏统一的提示词标准，导致同一产品在不同渠道的宣传口径不一致，品牌形象割裂。\n- 遇到复杂任务（如“先总结再改写最后加标签”）时，只能靠运气堆砌指令，难以稳定复现高质量结果。\n- 新人上手成本高，无法快速掌握让 AI 输出达标内容的技巧，严重依赖资深员工的个人经验。\n\n### 使用 prompt-patterns 后\n- 直接调用“代理模式（By proxy）”，一句\"Act as 小红书爆款写手”即可锁定语气与人设，无需反复调试形容词。\n- 利用“指令模板（Instruction Template）”预设标准化流程（如：提取痛点→场景化描述→添加表情符号），确保输出结构稳定、要素齐全。\n- 团队共享基于“特定指令（By specific）”和“示例模式（By demonstration）”构建的模式库，统一了各渠道的内容风格与核心信息。\n- 面对复杂需求，通过组合多种模式（如先用示例模式提供范文，再用指令模板规范步骤），能稳定生成高质量、可预期的文案。\n- 新人只需查阅模式文档并套用现成模板，半天内即可独立产出符合标准的文案，大幅降低培训门槛。\n\nprompt-patterns 将零散的提示词技巧升维成可复用、可协作的工程化体系，让 AI 内容生产从“抽卡式尝试”变为“流水线作业”。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fphodal_prompt-patterns_c1d901fb.jpg","phodal","Fengda Huang","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Fphodal_711c6ec0.jpg","I'm digging holes.","@Thoughtworks","Hangzhou","h@phodal.com","phodal_huang","https:\u002F\u002Fwww.phodal.com\u002F","https:\u002F\u002Fgithub.com\u002Fphodal",null,3093,199,"2026-04-14T07:40:46",1,"",{"notes":89,"python":87,"dependencies":90},"本项目（prompt-patterns）并非一个需要安装运行的软件工具或代码库，而是一本关于 Prompt 编写模式的开源书籍\u002F文档集合。它主要包含 Markdown 格式的文本内容、设计模式说明以及示例图片。用户只需通过浏览器阅读 GitHub 仓库页面，或克隆仓库后使用任意文本编辑器查看即可，因此没有特定的操作系统、GPU、内存、Python 版本或依赖库要求。文中提到的 Stable Diffusion、ChatGPT、GitHub Copilot 等均为外部服务或独立软件，不属于本项目的直接运行环境需求。",[],[15,35],[93,94,95,96],"chatgpt","github-copilot","prompt-engineering","stable-diffusion","2026-03-27T02:49:30.150509","2026-04-16T16:09:17.466108",[],[]]