
generative-ai-for-beginners 实战指南提示工程基础全解——从分词、提示构建到最佳实践【免费下载链接】generative-ai-for-beginners21 Lessons, Get Started Building with Generative AI项目地址: https://gitcode.com/GitHub_Trending/ge/generative-ai-for-beginners本文基于 generative-ai-for-beginners 课程第 04 课《Prompt Engineering Fundamentals》本仓库中同时提供英文版 04-prompt-engineering-fundamentals/README.md 与孟加拉语版 translations/bn/04-prompt-engineering-fundamentals/README.md展开。你将系统掌握提示工程的完整知识链分词tokenization、基础模型与指令微调模型的工作机制、复杂提示system/user/assistant 消息的构造、少样本示例/提示线索/提示模板三类设计模式以及一套可落地的最佳实践清单同时结合仓库内配套的 Jupyter Notebook 与.env配置直接动手在真实 LLM 端点上验证每一个概念。学习目标与核心术语本课程的定位是教你如何为一个给定的模型和应用目标写出更有效的提示prompt。完成本课后你应当能够解释什么是提示工程以及它为什么重要描述一个提示的各个组成部分及其用法掌握提示工程的最佳实践与常用技巧借助 OpenAI 端点将所学技巧应用到真实示例中。三个关键术语本课程的权威定义提示工程Prompt Engineering为引导 AI 模型产出期望的输出而对输入进行设计与反复打磨的过程。分词Tokenization把文本切分成模型能够理解与处理的小单元称为 token的过程。指令微调 LLMInstruction-Tuned LLMs通过特定指令数据微调过的大语言模型其回答的准确性与相关性更高。背景认知生成式 AI 能够根据用户请求创建新内容文本、图像、音频、代码等其底层是如 OpenAI GPTGenerative Pre-trained Transformer系列这样的大型语言模型。如今用户无需任何技术背景就可以像聊天一样与这些模型交互——发送一条文本提示得到一个 AI 回应补全然后在多轮对话中不断打磨提示直到回应符合预期。提示因此成为生成式 AI 应用最主要的编程接口而提示工程则是一个快速成长的领域专注于提示的设计与优化以便规模化地交付稳定、高质量的回应。学习沙盒环境准备与配套 Notebook课程强调提示工程目前更像艺术而非科学。提升直觉的最佳方式是多练习采用试错法把领域专业知识、推荐的技巧与模型特有的优化结合起来。配套的 Jupyter Notebook 提供了一个沙盒环境你可以在学习过程中随时尝试也可以把练习作为课程末尾的代码挑战完成。运行练习需要准备三样东西一个 Azure OpenAI API 密钥—— 一个已部署 LLM 的服务端点一个 Python 运行时—— 能执行 Notebook 的环境本地环境变量—— 先完成 本地环境搭建指南 中列出的步骤。仓库中的实际环境配置查看仓库根目录的 .env.copy 文件可以看到本课程的统一凭据模板复制为.env后填充真实值# OpenAI Provider OPENAI_API_KEYadd your OpenAI API key here # Azure OpenAI in Microsoft Foundry AZURE_OPENAI_API_VERSION2024-10-21 # Default is set! (current stable GA API version) AZURE_OPENAI_API_KEYadd your Foundry resource key here AZURE_OPENAI_ENDPOINTadd your Foundry resource endpoint here, e.g. https://resource-name.openai.azure.com AZURE_OPENAI_DEPLOYMENTadd your chat completion model deployment name here, e.g. gpt-4o-mini AZURE_OPENAI_EMBEDDINGS_DEPLOYMENTadd your embeddings model deployment name here, e.g. text-embedding-3-small # Microsoft Foundry Models AZURE_INFERENCE_ENDPOINTadd your Microsoft Foundry project endpoint here AZURE_INFERENCE_CREDENTIALadd your Microsoft Foundry Models API key here # Hugging Face HUGGING_FACE_API_KEYadd your HuggingFace API or token here注意几个关键点AZURE_OPENAI_API_VERSION默认已设置为2024-10-21当前稳定的 GA API 版本Azure OpenAI 服务现已并入 Microsoft Foundry环境变量名保持不变课程文档要求在.env中至少填好AZURE_OPENAI_API_KEY、AZURE_OPENAI_ENDPOINT、AZURE_OPENAI_DEPLOYMENT三个值安全提示见 02-setup-local.md永远不要把 API 密钥写进代码或提交到仓库.env应始终留在.gitignore中。三个可用的练习 Notebook本仓库在 04-prompt-engineering-fundamentals/python/ 目录下提供了三份按服务商区分的练习 Notebookoai-assignment.ipynb —— 直连 OpenAIaoai-assignment.ipynb —— 面向 Azure OpenAIMicrosoft Foundry端点githubmodels-assignment.ipynb —— 面向 Foundry 多供应商模型目录。从源码结构看OpenAI 版的客户端初始化如下来自oai-assignment.ipynb的 Exercise 2 代码单元# Uses the OpenAI client with the Responses API. import os from openai import OpenAI from dotenv import load_dotenv load_dotenv() client OpenAI() deployment gpt-4o-mini def get_completion(prompt): response client.responses.create( modeldeployment, inputprompt, temperature0, # this is the degree of randomness of the models output max_output_tokens1024, storeFalse, ) return response.output_text而 Azure OpenAI 版aoai-assignment.ipynb同名代码单元则通过环境变量构造端点# Uses the OpenAI client against the Azure OpenAI (Microsoft Foundry) v1 endpoint # with the Responses API. import os from openai import OpenAI from dotenv import load_dotenv load_dotenv() client OpenAI( api_keyos.environ[AZURE_OPENAI_API_KEY], base_urlf{os.environ[AZURE_OPENAI_ENDPOINT].rstrip(/)}/openai/v1/, ) deployment os.environ[AZURE_OPENAI_DEPLOYMENT]可以确认当前仓库代码统一使用Responses APIclient.responses.create而非旧版 Completions/Chat 接口且依赖openai1.12.0、tiktoken、python-dotenv1.2.2等依赖见 requirements.txt。注意temperature0这一参数——它控制模型输出的随机程度正是后文降低模型编造时提到的温度配置技巧的落点。Notebook 自带入门练习但课程鼓励你自行添加Markdown描述性与Code提示请求单元尝试更多例子、建立自己的提示设计直觉。什么是提示工程课程给出的定义是提示工程是设计与优化文本输入提示的过程目的是为给定的应用目标和模型交付稳定且高质量的回应补全。可以把它理解为一个两步过程为给定模型和目标设计初始提示通过迭代打磨提示来不断提升回应质量。这必然是一个试错过程需要用户的直觉与投入。要理解它为什么重要先要掌握三个概念分词 模型如何看到提示基础 LLM 基础模型如何处理提示指令微调 LLM 模型如何开始理解任务。分词模型看到的不是文字而是 tokenLLM 把提示视为token 序列不同的模型甚至同一模型的不同版本对同一提示的分词结果可能不同。由于 LLM 是在 token而非原始文本上训练的提示的分词方式会直接影响生成回应质量。本仓库 Notebook 的 Exercise 1 直接教你用tiktokenOpenAI 的开源快速分词器在本地复现这个过程import tiktoken # 定义要分词的提示 text f Jupiter is the fifth planet from the Sun and the \ largest in the Solar System. It is a gas giant with \ a mass one-thousandth that of the Sun, but two-and-a-half \ times that of all the other planets in the Solar System combined. \ Jupiter is one of the brightest objects visible to the naked eye \ in the night sky, and has been known to ancient civilizations since \ before recorded history. It is named after the Roman god Jupiter.[19] \ When viewed from Earth, Jupiter can be bright enough for its reflected \ light to cast visible shadows,[20] and is on average the third-brightest \ natural object in the night sky after the Moon and Venus. # 设置要编码的目标模型 encoding tiktoken.encoding_for_model(gpt-4o) # 编码文本 —— 得到整数形式的 token tokens encoding.encode(text) print(tokens) # 解码整数查看文本形式 [encoding.decode_single_token_bytes(token) for token in tokens]课程建议把提示粘贴进 OpenAI 官方 Tokenizer 工具观察切分结果特别注意空白字符与标点符号是如何被处理的如上图所示的示例。注意该工具示例基于较旧的 LLMGPT-3在新模型上尝试可能得到不同结果——这本身就印证了不同模型分词方式不同这一论断。概念基础模型Base LLM提示完成分词后[Base LLM基础模型的首要职能是预测序列中的下一个 token。由于 LLM 在海量文本语料上训练它对 token 之间的统计关系有很好的感觉能够以一定置信度做出预测。但要注意它并不理解提示或 token 中词语的语义只是看到一个可以补全的模式。它会持续预测直到用户干预或某个预设条件终止。在 Microsoft Foundry Playground 用默认设置输入上述 Jupiter 提示即可观察到系统会把提示当作信息请求处理于是你得到一段满足该上下文的补全。概念指令微调 LLMInstruction-Tuned LLM如果用户想要满足特定条件或任务目标的输出呢这就轮到指令微调 LLM登场。指令微调 LLM 以基础模型为起点用带有明确指令的示例或输入/输出对例如多轮消息进行微调AI 的回应会尝试遵循这些指令。这类模型使用 RLHF基于人类反馈的强化学习等技术训练使其学会遵循指令并从反馈中学习从而产出更适合实际应用、更贴合用户目标的回应。动手验证复用上面的 Jupiter 提示但把系统消息改为如下指令作为上下文Summarize content you are provided with for a second-grade student. Keep the result to one paragraph with 3-5 bullet points.把提供的内容改写给小学二年级学生看。结果保持一段含 3–5 个要点。回应的风格与格式会立即对齐指令要求——教师可以直接把这段输出放进课堂幻灯片。Notebook 中对应练习Exercise 4的代码正是这个思路## Example text text f Jupiter is the fifth planet from the Sun and the \ largest in the Solar System. ... ## Set the prompt prompt f Summarize content you are provided with for a second-grade student. {text} ## Run the prompt response get_completion(prompt) print(response)为什么需要提示工程了解了 LLM 如何处理提示后答案在于当前 LLM 存在若干挑战如果不投入精力构造与优化提示就难以获得可靠且一致的补全模型回应具有随机性stochastic。同一提示在不同模型或不同模型版本上会产生不同回应甚至同一模型在不同时间也可能产生不同结果。提示工程技巧提供更好的护栏帮助缩小这些差异。模型可能编造fabricate回应。模型在大但有界的语料上预训练对训练范围之外的概念缺乏知识可能产出不准确、虚构甚至与已知事实相矛盾的内容。提示工程帮助用户发现并缓解这类编造例如要求 AI 给出引用或推理过程。模型能力存在差异。更新的模型能力更强但也带来各自独特的怪癖以及成本与复杂度的取舍。提示工程有助于建立最佳实践与工作流抽象掉这些差异以可扩展、无缝的方式适配模型特有需求。在 OpenAI 或 Azure OpenAI Playground 中可以亲测用同一提示请求不同的 LLM 部署例如 OpenAI、Azure OpenAI、Hugging Face——差异有多大用同一LLM 部署反复请求同一提示——这些差异又是怎样的编造Fabrications实验课程刻意使用fabrication编造而非业界常说的 hallucination幻觉避免把机器行为拟人化同时从术语层面呼应负责任的 AI 指南剔除在部分语境中可能显得冒犯或不包容的用词。想直观感受编造如何发生构造一个要求 AI 为不存在主题生成内容的提示确保其不在训练数据集中。课程使用的提示是提示generate a lesson plan on the Martian War of 2076.为2076 年火星战争生成一份教案。网络搜索只能找到虚构作品中的火星战争2076 年没有任何真实事件——常识也告诉我们 2076 是未来。把这个提示丢给不同 LLM 供应商Notebook 的 Exercise 3 完整复现了该实验text f generate a lesson plan on the Martian War of 2076. prompt f {text} response get_completion(prompt) print(response)结果符合预期每个模型或版本都因随机性与能力差异产生略微不同的回应——有的面向八年级读者有的默认高中生——但三个模型都生成了足以让不了解背景的读者相信该事件真实存在的内容。缓解手段包括元提示metaprompting与温度配置temperature configuration即上文 Notebook 代码中的temperature参数新的提示工程架构也会把新工具与技巧无缝接入提示流程以减轻或消除这些效应。案例研究GitHub Copilot课程以 GitHub Copilot 作为真实世界案例展示提示工程如何被用于产品级方案。Copilot 是你的AI 结对程序员——把文本提示转化为代码补全并深度集成进开发环境如 Visual Studio Code。据其工程博客记录最早版本基于 OpenAI Codex 模型工程师很快意识到必须微调模型并开发更好的提示工程技术才能提升代码质量2023 年 7 月他们又发布了超越 Codex 的改进模型以获得更快的建议。建议按时间顺序阅读其 2023 年 5 月至 9 月的一系列工程博客主题依次为更好地理解你的代码、深入 Copilot 背后的 LLM、如何为 Copilot 写出更好的提示、超越 Codex 的新模型、开发者的提示工程与 LLM 指南、从 Copilot 经验看企业级 LLM 应用构建跟踪他们的学习路径——这是提示工程设计 迭代两步法在工业场景中的完整缩影。提示的构造方式知道了为什么重要之后接下来理解提示是如何构造的这样才能评估不同设计技巧的优劣。基础提示Basic Prompt最基础的提示就是发给模型的一条不带任何上下文的文本输入。例如把美国国歌的前几个词发给 OpenAI Completion API它会立即用接下来的几句歌词补全回应展示最原始的预测行为提示输入补全输出Oh say can you seeIt sounds like youre starting the lyrics to The Star-Spangled Banner, the national anthem of the United States. The full lyrics are ...Notebook 的 Exercise 2 正是用oh say can you see作为最小验证用例期望补全方向是by the dawns early light..同时借此验证你的 API 端点配置正确。复杂提示Complex Prompt消息集合在基础提示之上叠加上下文与指令。Chat Completion API 允许你把复杂提示构造为一组消息messages包含反映用户输入与助手回应的输入/输出对用于设定助手行为或人格上下文的系统消息。这样请求就变成如下形态分词会有效地从上下文与对话中捕捉相关信息。此时改变系统上下文对补全质量的影响可能与用户输入本身一样大response client.responses.create( modelgpt-4o-mini, input[ {role: system, content: You are a helpful assistant.}, {role: user, content: Who won the world series in 2020?}, {role: assistant, content: The Los Angeles Dodgers won the World Series in 2020.}, {role: user, content: Where was it played?} ] )Notebook 的 Exercise 5 把系统消息换成了You are a sarcastic assistant.一个刻薄的助手并保留了完整的 user/assistant 多轮上下文——课程建议你尝试不同的人格设定或不同的输入/输出消息序列直观体会系统上下文即行为开关。指令提示Instruction Prompt上面的用户提示都只是可被解释为信息请求的简单文本查询。用指令提示可以把文本变成更详尽的任务规格说明给 AI 更好的引导提示输入补全输出指令类型Write a description of the Civil War返回一段简单的段落简单Write a description of the Civil War. Provide key dates and events and describe their significance返回一段文字随后列出关键事件日期及其意义的描述复杂Write a description of the Civil War in 1 paragraph. Provide 3 bullet points with key dates and their significance. Provide 3 more bullet points with key historical figures and their contributions. Return the output as a JSON file在文本框中返回更详尽的细节格式为 JSON可复制粘贴到文件并按需校验复杂。带格式。可以观察到的规律每增加一层对长度、结构、格式如 JSON的约束输出就越可预期、越可被下游程序消费。主要内容Primary Content示例、线索与模板前述示例中提示仍相当开放允许 LLM 自行决定预训练数据中哪部分相关。在主要内容设计模式中输入文本被划分为两部分一条指令要做的事相关的内容影响这件事如何执行。课程示例指令是用两句话总结内容是一段关于木星的天文介绍模型即产出限定在两句话内的摘要。用示例驱动零样本 / 单样本 / 少样本这一做法是用主要内容喂给模型若干期望输出的示例让它自行归纳出模式。按示例数量不同可分为零样本zero-shot、单样本one-shot、少样本few-shot提示。此时提示由三个部分组成任务描述若干期望输出的示例一个新示例的开头它隐式地成为任务描述。学习类型提示输入补全输出零样本The Sun is Shining. Translate to SpanishEl Sol está brillando.单样本The Sun is Shining El Sol está brillando.Its a Cold and Windy Day Es un día frío y ventoso.少样本The player ran the bases BaseballThe player hit an ace TennisThe player hit a six CricketThe player made a slam-dunk Basketball注意零样本提示中必须给出显式指令Translate to Spanish而单样本中任务已被示例隐式推断出来少样本则进一步证明——示例越多模型无需任何额外指令就能做出越准确的推断。提示线索Cues使用主要内容的另一个技巧是提供线索而非完整示例用一个体现期望输出格式的片段给模型开头把它往正确方向推一把。模型会顺着线索继续下去。课程用总结木星做了 0/1/2 条线索的对照实验线索数量提示输入补全输出0木星介绍全文Summarize ThisJupiter is the largest planet in our Solar System and the fifth one from the Sun. It is a gas giant with a mass 1/1000th of the Suns, but it is heavier than all the other planets combined. ...1木星介绍全文Summarize ThisWhat we learned is that Jupiteris the fifth planet from the Sun and the largest in the Solar System. It is a gas giant with a mass one-thousandth that of the Sun, but two-and-a-half times that of all the other planets combined. ...2木星介绍全文Summarize ThisTop 3 Facts We Learned:1. Jupiter is the fifth planet from the Sun and the largest in the Solar System.2. It is a gas giant with a mass one-thousandth that of the Sun...3. Jupiter has been visible to the naked eye since ancient times...线索数量的变化直接改变了输出的组织形式自由段落 → 续写式摘要 → 编号要点列表。提示模板Prompt Templates提示模板是为提示预定义的配方可保存并随需复用以在规模化场景下交付一致的用户体验最简形式一组提示示例的集合同时给出交互式提示组件user/system 消息与 API 驱动的请求格式支持复用更复杂的形式包含占位符如 LangChain 风格的模板可被来自多种来源的数据用户输入、系统上下文、外部数据源等动态替换从而生成提示。这让我们能构建可复用的提示库在规模化下以编程方式驱动一致的用户体验真正的价值在于构建并发布面向垂直应用领域的提示库——模板针对特定领域上下文与示例做了优化使回应更贴合目标受众。课程的开源示例是 Prompts For Education一个由教育专家策展的提示库覆盖教案规划、课程设计与学生辅导等关键目标建议把这些提示拿到沙盒或 Playground 里跑一跑看效果。辅助内容Secondary Content如果把提示构造理解为一条指令任务 一个目标主要内容那么辅助内容就是我们额外提供的、用于在某个维度上影响输出的上下文调优参数、格式指令、主题分类法等帮助模型调整其回应以贴合用户目标或预期。课程示例给定一个带完整元数据课程名、描述、难度层级、元数据标签、讲师等的课程目录定义指令总结 2023 年秋季课程目录用主要内容给出几个期望输出格式的示例用辅助内容指定 5 个感兴趣的标签。此时模型会按示例格式产出摘要如果某课程命中多个标签它还会优先辅助内容中指定的那 5 个标签——辅助内容在这里充当了排序偏好的角色。提示工程的心态Mindset提示工程是试错过程课程给出三条总纲领域理解至关重要。回应的准确性与相关性是应用或用户所在领域的函数。用你的直觉与领域专长去定制技巧在系统提示中定义领域专属人格在用户提示中使用领域专属模板提供反映领域上下文的辅助内容或用领域专属线索与示例引导模型走向熟悉的用法模式。模型理解至关重要。模型天生是随机的而且不同实现在训练数据预训练知识、提供的能力API/SDK与优化的内容类型代码 vs 图像 vs 文本上都各不相同。理解所用模型的强项与局限用它来给任务排序或构建为模型能力定制的模板。迭代与验证至关重要。模型与提示工程技术都在快速演进。作为领域专家你可能拥有大社区不具备的上下文与评判标准。用工具与技巧冷启动提示构造再用自己的直觉与领域专长迭代验证把洞察记录下来沉淀为知识库如提示库成为他人未来快速迭代的基线。最佳实践清单综合 OpenAI 与 Azure OpenAI 社区实践者的建议课程整理了如下清单做什么为什么有效评估最新的模型新一代模型往往有更强的特性与质量但成本也可能更高。先评估影响再做迁移决策。分隔指令与上下文检查你的模型/供应商是否定义了分隔符delimiters以便更清晰地区分指令、主要内容与辅助内容。这能帮模型更准确地给 token 加权。具体而明确给出更多细节期望的上下文、结果、长度、格式、风格等。这会同时提升回应质量与一致性。把配方沉淀为可复用模板。描述充分、善用示例模型对show and tell示范加说明响应更好。先用zero-shot只给指令不给示例再用few-shot精化附上少量期望输出示例善用类比。用线索启动补全给模型一些引导性的词或短语作为回应的起点把它推向期望的方向。重复强调Double Down有时需要向模型重复表达在主要内容前后都给出指令、同时使用指令与线索等。迭代验证什么有效。顺序很重要你向模型呈现信息的顺序可能影响输出——包括学习示例在内新近信息往往被更高地加权recency bias。尝试不同排列找出最优解。给模型一个台阶为模型准备一个兜底补全当它因任何原因无法完成任务时可以采用。这能降低模型给出错误或编造回应的概率。如同一切最佳实践效果因模型、任务与领域而异。把它们当作起点持续迭代每当新模型与新工具出现就重新评估你的提示工程流程关注流程的可扩展性与回应质量。动手实验运行本课程的 Assignment课程末尾的实验以 Jupyter Notebook 形式提供交互完成即可。步骤以仓库实际结构为准复制仓库fork 或 clone 到你本地三选一运行环境推荐启动 GitHub Codespaces或克隆到本地设备并使用 Docker Desktop开发容器配置见 02-setup-local.md 的 Option B或在你偏好的 Notebook 运行时环境中直接打开。配置环境变量把仓库根目录的.env.copy复制为.env填好AZURE_OPENAI_API_KEY、AZURE_OPENAI_ENDPOINT、AZURE_OPENAI_DEPLOYMENT三个值OpenAI 直连则填OPENAI_API_KEY。依赖安装pip install -r requirements.txt。打开 Notebook 并选择内核若使用 Codespaces 或 Dev Container直接选择容器提供的默认 Python 3.10.x 内核即可。实验单元依次覆盖Exercise 1 用tiktoken观察分词 → Exercise 2 验证端点oh say can you see→ Exercise 3 复现 2076 火星战争编造实验 → Exercise 4 指令式总结面向二年级学生→ Exercise 5 含 system/user/assistant 的复杂多轮提示 → 最后留白让你自由发挥examples、cues 等技巧的自主实验。注意这里没有标准答案——目的就是通过试错建立什么对什么模型、什么领域有效的直觉。因此本课不设代码答案段落Notebook 中以 My Solution: 为标题的 Markdown 单元展示了一个参考输出示例。知识检查以下哪一条是遵循合理最佳实践的好提示Show me an image of red carShow me an image of red car of make Volvo and model XC90 parked by a cliff with the sun settingShow me an image of red car of make Volvo and model XC90答案2。它是对要什么描述最详尽的提示不仅给出具体品牌与型号而不是一辆泛泛的车还描述了整体场景悬崖边、日落。第 3 条次之因为它同样包含大量描述第 1 条过于笼统。 挑战题用提示线索cue技巧完成这个句子Show me an image of red car of make Volvo and 观察模型续写了什么并思考你会如何改进这条提示例如把品牌、型号、场景前置或补充格式与细节约束把结果记录下来作为你自己提示库的第一条。小结本课程的完整脉络可以概括为先理解模型视角分词 → 基础模型的下一 token 预测 → 指令微调后的任务遵循再据此理解为什么需要提示工程随机性、编造、模型差异然后掌握构造手段基础/复杂/指令提示主要内容 示例 线索 模板辅助内容 输出塑形最后以领域、模型、迭代三重心态与八条最佳实践持续打磨。配套材料一览概念图解指南与分词示例图见文首两张配图源文件位于 translated_images/bn/练习 Notebookoai-assignment.ipynb、aoai-assignment.ipynb、githubmodels-assignment.ipynb环境配置模板.env.copy、依赖清单 requirements.txt本地运行指南00-course-setup/02-setup-local.md。学完本篇后可以继续第 5 课 Advanced Prompts进阶提示技巧那里将覆盖元提示、温度调参等更深入的优化手段。【免费下载链接】generative-ai-for-beginners21 Lessons, Get Started Building with Generative AI项目地址: https://gitcode.com/GitHub_Trending/ge/generative-ai-for-beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考