ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Generative AI for Beginners:提示工程(Prompt Engineering)核心原理与实战指南

Generative AI for Beginners:提示工程(Prompt Engineering)核心原理与实战指南 Generative AI for Beginners提示工程Prompt Engineering核心原理与实战指南【免费下载链接】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 的第 4 课04-prompt-engineering-fundamentals为骨架系统讲解什么是提示Prompt、什么是提示工程Prompt Engineering以及在大语言模型LLM应用中如何设计、优化提示以获得一致且高质量的输出。通过本文你将掌握 Tokenization、基础模型与指令调优模型的区别、基础/复杂/指令三类提示的构建方法、主要内容与次要内容两大设计模式、零样本/单样本/少样本提示与提示线索Cue等核心技术并能在课程配套的 Jupyter Notebook 沙箱中亲手验证每一项技术。什么是提示工程从“艺术”到“科学”课程对提示工程Prompt Engineering给出了明确的定义它是针对给定的应用目标与模型对文本输入提示进行设计Design与优化Optimization从而获得一致且高质量响应Completion的过程。本质上它是一个两步流程设计为给定模型与目标编写初始提示精炼通过迭代修正提示持续提升响应质量。这正是课程强调的“提示工程目前更像艺术而非科学”的含义——它必然是一个依赖直觉与试错trial-and-error的过程。但之所以值得投入精力是因为我们需要先理解三个底层概念Tokenization令牌化、基础模型Base/Foundation LLM与指令调优模型Instruction-Tuned LLM。理解了模型“如何看提示”“如何处理提示”“如何识别任务”才能有的放矢地设计提示。令牌化模型眼中的提示大语言模型并不直接阅读原始文本而是把提示视为一串令牌Token。不同模型或同一模型的不同版本对同一提示的切分方式可能完全不同。由于 LLM 是在令牌而非原始文本上训练的提示被切分的方式会直接影响生成响应的质量。课程建议通过在线 Tokenizer 工具例如 OpenAI Tokenizer直观感受这一过程把提示复制进去观察它如何被转换为令牌特别留意空格字符与标点符号的处理方式。需要说明的是示例工具基于较老的 GPT-3 模型用更新模型尝试可能得到不同结果。你还可以直接在仓库中运行 Python 版的令牌化实验——04-prompt-engineering-fundamentals/python/oai-assignment.ipynb的 Exercise 1 使用 OpenAI 开源的分词库tiktoken对“木星”段落进行编码与解码import tiktoken text f Jupiter is the fifth planet from the Sun and the largest in the Solar System. ...课程示例文本 # 为指定模型获取编码器 encoding tiktoken.encoding_for_model(gpt-4o) # 编码得到令牌的整数形式 tokens encoding.encode(text) print(tokens) # 解码查看每个令牌对应的文本片段 [encoding.decode_single_token_bytes(token) for token in tokens]通过对比encoding.encode前后的结果你可以亲眼看到整段英文如何被拆分为一个个令牌从而建立对“提示长度令牌数”的直觉——这也直接关系到后文将提到的成本与上下文窗口限制。基础模型预测下一个令牌当提示完成令牌化后基础模型Foundation Model的核心职能就是预测序列中的下一个令牌。由于 LLM 在海量文本语料上训练它掌握了令牌之间的统计关系能带着一定的置信度做出预测。需要特别强调的是模型并不“理解”提示中词汇的含义它只是识别出一种可以“补全”的模式并持续预测下去直到用户干预或满足预设的终止条件。课程演示了在 Playground 中提交“Oh say can you see”美国国歌歌词开头这类提示时模型会基于补全行为自动续写出后续歌词——这正是基础预测行为的典型体现。在仓库配套 Notebook 的 Exercise 2 中同样用oh say can you see验证 API 链路正确配置后响应应大致补全为by the dawns early light..之类的歌词内容。指令调优模型从“补全”到“执行任务”指令调优模型Instruction-Tuned LLM以基础模型为起点通过大量输入/输出对例如多轮“消息”进行微调其中包含明确的指令模型的回答会努力遵循这些指令。这一过程常采用RLHF基于人类反馈的强化学习使模型学会遵循指令并从反馈中学习从而产出更贴近实际应用、更契合用户目标的响应。课程的对比实验极具说服力对同一段内容如果系统消息不设置任何约束模型给出的是一段泛泛的总结而把系统消息改为把提供给你的内容总结给一名二年级学生。结果保持在一段话内包含 3-5 个要点。响应立刻变成了目标明确、格式受控的版本——教育工作者可以直接把这段结果放进课堂幻灯片。这种“改系统消息即改输出质量”的体验正是提示工程价值的直观证明。为什么需要提示工程三大挑战知道了模型如何处理提示之后课程进一步回答了“为什么需要提示工程”模型响应是随机的随机性同一个提示在不同模型、不同模型版本之间会得到不同响应即便同一个模型在不同时刻也可能给出不同结果。提示工程技术如更完善的护栏、明确的格式约束可以帮助最小化这种波动。模型可能编造内容Fabrication模型在庞大但有限的训练数据集上预训练对训练范围之外的概念缺乏知识可能产出不准确、凭空想象甚至与已知事实矛盾的“补全”。提示工程技术例如要求给出引用或推理过程能帮助用户识别并缓解这类编造。模型能力参差不齐新一代模型功能更强但也会带来独有的怪癖、成本与复杂度的权衡。提示工程可以帮助沉淀最佳实践与工作流以可扩展、平滑的方式屏蔽差异、适配具体模型的特殊要求。课程的配套练习还鼓励你把同一提示分别投向不同部署如 OpenAI、Azure OpenAI、Hugging Face观察差异或在同一部署上反复提交同一提示观察波动——这两组对照实验能让你切身体会随机性对一致性的影响。编造Fabrication示例课程刻意使用“编造Fabrication”而非流行的“幻觉Hallucination”一词理由是不应把类人的行为特征错误地归因于机器驱动的结果这同时也符合负责任 AI 在术语层面的指引。示例提示是提示为 2076 年火星战争生成一份教案。网页搜索显示确实存在关于火星战争的虚构作品如剧集、书籍但没有 2076 年这一时间点常识也告诉我们 2076 年在未来不可能对应真实事件。那么不同提供商会发生什么OpenAI PlaygroundGPT-35给出了某种回应Azure OpenAI PlaygroundGPT-35给出了另一种回应Hugging Face Chat PlaygroundLLaMA-2又是一种回应。正如课程指出的每个模型或模型版本因随机行为与能力差异产出了略有不同的回答——例如一个模型面向八年级学生另一个则假设用户是高中生——但三者都可能让不知情的用户误以为该事件真实存在。这正是“编造”的危害所在。缓解手段包括元提示Metaprompting、温度temperature配置以及把新工具与技术无缝融入提示流的提示工程架构。案例研究GitHub Copilot 的提示工程演进课程以 GitHub Copilot 作为现实案例收尾这一节Copilot 是“AI 结对程序员”把文本提示转换为代码补全并集成进开发环境如 VS Code。最初版本基于 OpenAI Codex 模型工程师们很快意识到需要微调模型、发展更好的提示工程技术来提升代码质量2023 年 7 月Copilot 换用了超越 Codex 的改进模型以获得更快的建议。GitHub 工程博客记录了这段学习旅程展示了提示工程在真实产品中的持续演进。提示的构建从基础到指令理解了“为什么”接下来是“怎么构建”。课程把提示构建拆解为递进的三层。基础提示Basic Prompt基础提示是没有任何额外上下文的纯文本输入。例如向 Completion API 发送美国国歌开头的几个词模型立即“补全”出后续歌词提示输入补全输出Oh say can you see听起来你在输入“The Star-Spangled Banner”美国国歌的歌词完整歌词是……这演示了模型最基础的预测行为。仓库中 06-text-generation-apps 的示例代码python/oai-app.py同样演示了这一行为from openai import OpenAI from dotenv import load_dotenv load_dotenv() # 从 .env 加载环境变量 client OpenAI() deployment gpt-4o-mini prompt Complete the following: Once upon a time there was a response client.responses.create(modeldeployment, inputprompt, storeFalse) print(response.output_text)复杂提示Complex Prompt复杂提示通过 Chat Completion API 把提示构建为一组消息输入/输出对反映用户的输入与助手的响应系统消息System Message设定助手的行为或人格上下文。此时请求呈现为多轮会话的形式令牌化能够有效捕获上下文与会话中的相关信息。课程示例在英文原版中如下response openai.chat.completions.create( modelgpt-3.5-turbo, messages[ {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?} ] )仓库中与此对应的现代实现见04-prompt-engineering-fundamentals/python/oai-assignment.ipynb的 Exercise 5它改用 Responses API 并设置了“sarcastic刻薄”风格的助手人格你完全可以替换成其他人格或换一组输入/输出消息继续实验response client.responses.create( modeldeployment, input[ {role: system, content: You are a sarcastic assistant.}, {role: user, content: Who won the world series in 2020?}, {role: assistant, content: Who do you think won? The Los Angeles Dodgers of course.}, {role: user, content: Where was it played?} ], storeFalse, ) print(response.output_text)修改系统上下文与修改用户输入一样都可能对补全质量产生显著影响。指令提示Instruction Prompt前面示例中的用户提示是可被理解为“信息请求”的简单问句而指令提示用文本把任务描述得更具体给 AI 提供更好的引导。课程用“描述美国内战”做了三档对比提示输入补全输出指令类型写一段对美国内战的描述返回一段简单段落简单写一段对美国内战的描述。给出关键日期与事件并说明其意义返回一段落随后是带描述的关键事件日期列表复杂用 1 段写一段对美国内战的描述。给出 3 个带关键日期及其意义的要点。再给出 3 个带关键历史人物及其贡献的要点。以 JSON 文件格式返回输出返回更详细的内容按 JSON 排版可直接复制到文件中按需校验复杂、格式化可以看到指令越具体明确长度、要点数量、格式输出的结构与可用性就越强。主要内容Primary Content指令与内容分离在上面的例子中提示仍然相当开放模型可以自行决定其预训练数据中的哪部分相关。而主要内容设计模式把输入文本拆成两部分指令Instruction要执行的动作相关内容Relevant Content影响该动作的内容。例如课程给出“用两句话总结下面这段”的木星文本示例模型按照指令把整段木星介绍压缩为两句精炼的总结。主要内容可以多种方式驱动更有效的指令示例Examples不用显式指令告诉模型做什么而是给出示例让它自行推断模式线索Cues在指令后附加一个“线索”来预热补全引导模型给出更相关的响应模板Templates可重复使用的“配方”用占位符变量承载数据适配特定用例。使用示例零样本、单样本与少样本这是利用主要内容“喂给模型”期望输出的若干示例让模型推断输出模式的思路。根据示例数量分为 zero-shot、one-shot、few-shot 提示学习类型提示输入补全输出Zero-shot“太阳在照耀。”翻译成西班牙语“El Sol está brillando”。One-shot“太阳在照耀” ⇒ “El Sol está brillando”。“这是一个寒冷多风的日子” ⇒“Es un día frío y ventoso”。Few-shot球员跑垒 ⇒ 棒球球员打出 ace ⇒ 网球球员打出六分 ⇒ 板球球员完成扣篮 ⇒篮球注意zero-shot 需要显式给出指令“翻译成西班牙语”而 one-shot 中该指令被自动推断few-shot 例子则说明增加示例数量可以让模型在没有额外指令的情况下做出更准确的推断。在配套 Notebook 的“探索直觉”练习中你可以基于这些模式自行设计新的简单/复杂/指令提示。提示线索Prompt Cues另一种使用主要内容的技术是提供线索而非示例给模型一段能反映期望响应格式的开头模型就会“接过话头”继续下去。课程用同一段木星文本做了 0/1/2 个线索的对比线索数提示输入补全输出0…木星文本总结这段话木星是太阳系中最大的行星……1…木星文本总结这段话我们学到的是木星是离太阳第五近、太阳系最大的行星……2…木星文本总结这段话我们学到的 3 个要点1. 木星是……2. 它是一颗气态巨行星……3. 木星自古以来……线索数量从 0 到 2输出从普通段落逐渐变成带编号的要点列表——一个简单的开头短语就能把模型“推”向期望的输出结构。提示模板Prompt Templates提示模板是预先定义好、可存储并反复使用的“提示配方”用于规模化地驱动一致的用户体验。最简单的形式是一组提示示例集合例如 OpenAI 提供的提示指南它同时提供交互式提示组件用户/系统消息与 API 驱动的请求格式以支持复用。更复杂的形式如 LangChain 的提示模板则包含占位符可被来自各种来源的数据用户输入、系统上下文、外部数据源等替换从而动态生成提示——这让你能够以编程方式规模化地创建可复用提示库。模板的真正价值在于为垂直应用领域创建并发布提示库Prompt Libraries模板针对应用特定的上下文或示例做了优化使响应更贴合目标受众。课程重点提及的 Prompts For Education 就是这一思路的典型实践——它由教育专家策展聚焦教案规划、课程设计、学生辅导等核心目标。次要内容Secondary Content影响输出的附加上下文如果把提示构建看作“指令任务主要内容核心素材”那么次要内容就是为以某种方式影响输出而提供的额外上下文可以是调优参数、格式说明、主题分类法taxonomy等帮助模型定制响应以契合用户目标或期望。课程举了一个课程目录的例子给定一份带丰富元数据名称、描述、级别、元标签、讲师等的课程目录定义指令“总结 2023 年秋季课程目录”用主要内容提供几个期望输出的示例用次要内容指明最关心的 5 个“标签”。于是模型可以按示例展示的格式给出总结——而当某条结果有多个标签时它会优先呈现次要内容中指定的 5 个标签。这是一个“指令主要内容次要内容”三者协同的典型结构。提示最佳实践心态与技巧提示工程心态提示工程是试错过程课程建议把握三个宏观指导因素领域理解很重要响应的准确性与相关性是应用/用户所处领域的函数。应运用领域直觉与专业知识进一步定制技术——例如在系统提示中定义领域专属人格、在用户提示中使用领域专属模板、提供反映领域上下文的次要内容或用领域专属线索与示例引导模型走向熟悉的用法模式。模型理解很重要模型本质上具有随机性且不同实现之间还可能在训练数据集预训练知识、提供的能力API/SDK、优化的内容类型代码 vs 图像 vs 文本上存在差异。理解所用模型的强项与局限据此排定任务优先级或构建定制模板。迭代与验证很重要模型与提示工程技术都在快速演进。作为领域专家你的应用可能有独特的上下文或标准。先用工具与技术“启动”提示构建再用自己的直觉与领域知识迭代验证记录洞见、沉淀知识库例如提示库为他人提供新基线、加速后续迭代。OpenAI / Azure OpenAI 推荐的最佳实践清单做法为什么评估最新模型新一代模型通常功能与质量更好但也可能成本更高。评估影响后再决定是否迁移。区分指令与上下文检查模型/提供商是否定义了分隔符来更清晰地区分指令、主要内容与次要内容这有助于模型更准确地为令牌分配权重。具体且清晰给出关于期望上下文、结果、长度、格式、风格等的更多细节既能提升质量也能提升一致性把配方沉淀到可复用模板中。描述性使用示例模型对“展示与讲述”式方法响应更好。先从zero-shot给指令但无示例开始再用few-shot精化提供几个期望输出的示例。善用类比。用线索启动补全用几个引导词或短语“推”模型一把作为响应的起点。双重强化Double Down有时需要向模型重复指令在主要内容前后都给出指令、指令与线索并用等。迭代验证找出有效组合。顺序很重要信息呈现顺序可能影响输出甚至在学习示例中也会因近因偏差recency bias而起作用。多试几种顺序。给模型一条“退路”提供一条回退补全响应供模型在无法完成任务时使用以降低产生虚假或编造响应的概率。与任何最佳实践一样结果会因模型、任务与领域而异把这些当作起点迭代出最适合自己的方案并在新模型与新工具出现时定期重新评估始终关注流程可扩展性与响应质量。动手实践在 Jupyter Notebook 沙箱中验证技术学习沙箱环境提示工程目前仍是“艺术多于科学”提升直觉的最好方式是多练习采用结合领域专长、推荐技术与模型特定优化的试错方法。课程配套的 Jupyter Notebook04-prompt-engineering-fundamentals/python/oai-assignment.ipynb提供了这样的沙箱环境涵盖令牌化Exercise 1、API 链路验证Exercise 2、编造现象Exercise 3、指令式提示Exercise 4、复杂提示/人格设定Exercise 5等循序渐进的练习。运行需要Azure OpenAI API Key已部署 LLM 的服务端点Python 运行环境可执行 Notebook 的环境本地环境变量按 本地环境安装指南 完成配置。Notebook 自带入门级练习但课程强烈建议你自行添加Markdown描述与Code提示请求单元格尝试更多示例与想法逐步建立提示设计的直觉。配置环境变量仓库共享模块 shared/python/env_utils.py 提供了标准化的环境变量读取与校验工具get_required_env在变量缺失或为空时抛出带提示信息的ValueErrorvalidate_env_vars可批量校验多个变量get_env_with_default则为可选变量提供默认值。配套测试 tests/test_env_utils.py 覆盖了缺失、空值、批量校验与默认值等场景可作为你配置脚本的参考。共享模块 shared/python/api_utils.py 中的create_azure_openai_client会从AZURE_OPENAI_ENDPOINT与AZURE_OPENAI_API_KEY读取凭据并自动拼接endpoint/openai/v1/端点来创建客户端。作业环节Assignment的操作路径如下Fork 仓库然后推荐启动 GitHub Codespaces或克隆到本地配合 Docker Desktop 使用或直接用你偏好的 Notebook 运行环境打开。配置环境变量复制仓库根目录的.env.copy为.env填入AZURE_OPENAI_API_KEY、AZURE_OPENAI_ENDPOINT与AZURE_OPENAI_DEPLOYMENT的值Azure 路线或按 本地环境安装指南 中的.env创建步骤配置AZURE_INFERENCE_ENDPOINT与AZURE_INFERENCE_CREDENTIALMicrosoft Foundry 路线并安装python-dotenv以便在脚本中加载。打开 Jupyter Notebook选择运行内核——若使用前两种方式直接选择开发容器提供的默认 Python 3.10.x 内核即可。准备好后即可运行练习。课程特别提醒这里没有标准答案只有通过试错探索“什么对给定模型与应用领域有效”的过程因此本课不提供“代码解答”段落Notebook 会以标题为 “My Solution:” 的 Markdown 单元格展示一个示例输出供参考。知识检验与挑战知识检验以下哪个提示遵循了合理的最佳实践给我看一张红色汽车图片给我看一张沃尔沃 XC90 红色汽车停在海边悬崖、夕阳西下的图片给我看一张沃尔沃 XC90 红色汽车图片答案选项 2。它在“是什么”之外提供了具体细节不止任何汽车而是特定品牌与型号还描述了整体环境选项 3 次之因为它的描述也很丰富。挑战试试用“线索”技术完成这个提示——补全句子“给我看一张红色沃尔沃汽车的图片”。观察模型如何回应以及你会如何改进它进一步学习本课内容是第 5 课高级提示技术的铺垫继续学习可前往 05-advanced-prompts那里将探讨更进阶的提示工程技术。整套课程沿 21 课从提示工程、文本生成应用、聊天应用一直延伸到函数调用、RAG 与 AI Agent 等主题可在 README 总览中规划学习路线。【免费下载链接】generative-ai-for-beginners21 Lessons, Get Started Building with Generative AI项目地址: https://gitcode.com/GitHub_Trending/ge/generative-ai-for-beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表