十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

generative-ai-for-beginners 第4课:提示工程基础——从分词原理到最佳实践的完整实战指南

generative-ai-for-beginners 第4课:提示工程基础——从分词原理到最佳实践的完整实战指南 generative-ai-for-beginners 第4课提示工程基础——从分词原理到最佳实践的完整实战指南【免费下载链接】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系统讲解生成式 AI 应用开发中最核心的编程接口——提示Prompt及其工程化方法。本文以该课程的日文版文档translations/ja/04-prompt-engineering-fundamentals/README.md为主体骨架并结合仓库内真实可运行的 Jupyter Notebook 练习与共享工具源码深入剖析提示的构建、优化与最佳实践。读完本文你将能解释提示工程的定义与价值理解分词Tokenization、基础 LLM、指令调优 LLM 三大底层概念掌握从基础提示到复杂提示、从示例到模板的完整构建技法并能在自己的 OpenAI / Azure OpenAI 端点上动手复现全部练习。一、什么是提示工程定义、关键术语与学习目标生成式 AI能够根据用户请求创造新内容文本、图像、音频、代码等其背后是像 OpenAI GPTGenerative Pre-trained Transformer系列这样以自然语言和代码训练的大语言模型LLM。用户无需技术背景就可以用类似聊天的交互方式向模型发送文本输入提示 / Prompt并收到 AI 响应补全 / Completion再通过多轮对话迭代打磨提示直到响应符合预期。提示由此成为生成式 AI 应用的首要编程接口——它告诉模型做什么并直接决定响应质量。而提示工程Prompt Engineering正是围绕提示的设计与优化、以规模化方式交付一致且高质量响应的新兴研究领域。关键术语速览术语含义提示工程设计并精炼输入引导 AI 模型产出期望输出的实践分词Tokenization将文本转换为模型能够理解与处理的小单元token的过程指令调优 LLM使用特定指令进行微调、以提升响应准确性与相关性的大语言模型本课学习目标解释什么是提示工程以及它为何重要描述提示的组成部分及其用法学习提示工程的实践技术与最佳实践使用 OpenAI 端点把所学技术应用到真实示例中。应用场景为个性化学习初创项目设计提示本课程始终围绕把 AI 创新带入教育的初创使命展开。不同角色的用户会以截然不同的方式设计提示管理员让 AI分析课程数据、识别覆盖缺口AI 可以总结结果或用代码可视化教育者让 AI为目标受众和主题生成教案AI 按指定格式产出个性化方案学生让 AI担任某个难点科目的家教AI 以契合其水平的方式提供课程、提示与示例。这只是冰山一角——仓库文档提到的教育领域开源提示库如 Prompts For Edu便是提示模板垂直化沉淀的典型代表。二、学习沙盒动手前的环境准备提示工程目前更像艺术而非科学培养直觉最好的方式就是多练习采用试错法把应用领域知识与推荐技术、模型专属优化结合起来。本课配套的 Jupyter Notebook 提供了沙盒环境可边学边练也可用于结尾的代码挑战。运行练习需要三样东西Azure OpenAI API Key——已部署 LLM 的服务端点Python 运行时——执行 Notebook 的环境本地环境变量——按 本地环境设置指南 完成配置。环境变量的完整解读仓库根目录的 .env.copy 文件给出了所有需要的变量名及注释其中与本课直接相关的是# 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配置步骤是将.env.copy复制为.env填入上述三个 Azure OpenAI 变量值。安装python-dotenv后在代码中调用load_dotenv()即可安全加载这些密钥。注意.env已被.gitignore忽略切勿将其提交到仓库。仓库的 共享工具模块 展示了这些环境变量在源码层是如何被消费的。例如create_azure_openai_client从AZURE_OPENAI_ENDPOINT与AZURE_OPENAI_API_KEY读取配置并自动拼接f{_endpoint.rstrip(/)}/openai/v1/作为base_url这正是 Notebook 中手工构建客户端所依据的底层逻辑而 env_utils.py 中的get_required_env、validate_env_vars则提供了变量缺失即抛错的安全校验范式方便在真实应用里复用。运行环境Notebook 与内核作业部分推荐三条路径GitHub Codespaces推荐零安装、依赖预装、本地克隆 Docker Desktop 开发容器、或自选 Notebook 运行时。使用前两种方式时直接选择开发容器预置的Python 3.10.x内核即可Notebook 元数据中声明language_info.version为 3.10.13。本地原生环境则按 本地环境设置指南 的 Option A 创建虚拟环境并执行pip install -r requirements.txt。三、三大核心概念模型如何看待你的提示提示工程之所以重要根源在于 LLM 处理提示的方式与我们不同。要理解这一点需要先掌握三个概念分词Tokenization 模型如何看到提示基础 LLM 基础模型如何处理提示指令调优 LLM 模型如何把提示看成任务。3.1 分词模型眼中的提示LLM 把提示看作一串 token词元不同的模型或同一模型的不同版本对相同提示的分词方式可能不同。由于 LLM 是在 token 上训练而非原始文本提示的分词方式会直接影响生成响应的质量。想直观感受分词可以用 tiktoken 等工具把提示粘贴进去观察它如何被切分特别留意空白字符和标点符号的处理方式。需要注意不同模型的分词器如 GPT-3 与更新的模型结果会有差异。仓库配套的 aoai-assignment.ipynb 中Exercise 1给出了可直接运行的分词练习import tiktoken text fJupiter is the fifth planet from the Sun and the largest in the Solar System. ... # 选择模型对应的编码器 encoding tiktoken.encoding_for_model(gpt-4o) # 编码得到整数形式的 token tokens encoding.encode(text) print(tokens) # 解码查看整数对应的文本片段 [encoding.decode_single_token_bytes(token) for token in tokens]练习建议先原样运行再把text换成任意你想用的提示重新运行观察 token 数量与切分方式的变化——这是培养分词直觉最直接的方式。3.2 基础模型Base / Foundation LLM提示完成分词后基础 LLM的核心职能是预测序列中的下一个 token。由于 LLM 在海量文本数据集上训练它对 token 之间的统计关系有良好把握能带着一定置信度做出预测。但请注意它并不理解提示或 token 的含义只是看到了一个可以用下一个预测去补全的模式并一直预测下去直到被用户干预或某个预设条件终止。你可以把上面的提示输入到 Playground默认设置下系统把提示当作信息请求处理即可看到一次典型的基于提示的补全。但如果我们想要的不是一段笼统的信息而是满足特定条件或任务目标的内容呢这就需要指令调优 LLM 登场了。3.3 指令调优 LLMInstruction-Tuned LLM指令调优 LLM以基础模型为起点用包含明确指令的示例或输入/输出对例如多轮消息进行微调AI 的响应会尽力遵循这些指令。其背后常用**基于人类反馈的强化学习RLHF**等技术教会模型遵循指令和从反馈中学习从而生成更贴合实际应用与用户目标的响应。试试这个实验回到上面的提示把**系统消息system message**改成这样一段指令上下文将提供给你的内容总结给一名小学二年级学生。结果限制在一个段落内包含 3–5 个要点。可以看到结果被精准地调校到了期望的目标与格式上——教育者几乎可以直接把这段响应用于课堂课件。这就是系统上下文对补全质量产生的影响其重要性不亚于用户输入本身。四、为什么需要提示工程随机性、虚构与能力差异理解了提示在 LLM 中的处理路径后再来回答为什么需要提示工程。答案在于当前的 LLM 存在一系列挑战若不投入精力构造与优化提示就难以获得可靠且一致的补全模型响应是随机随机性的。同一个提示在不同模型或模型版本下很可能产出不同响应即使在同一模型下不同时刻结果也可能不同。提示工程技术通过提供更好的护栏帮助我们最小化这些波动。模型可能虚构Fabrication响应。模型在庞大但有限的数据集上预训练对训练范围之外的概念一无所知因而可能产出不准确、凭空想象甚至与已知事实直接矛盾的补全。提示工程技术例如要求 AI 给出引用或推理过程能帮助用户识别并缓解这类虚构。模型能力各不相同。新一代模型能力更强但也带来独特的怪癖与成本/复杂度的权衡。提示工程能帮助我们沉淀最佳实践与工作流以可扩展、无缝的方式抽象掉差异并适配模型专属需求。动手验证在 OpenAI 或 Azure OpenAI Playground 中——用同一个提示分别发给不同 LLM 部署如 OpenAI、Azure OpenAI、Hugging Face观察差异再对同一个LLM 部署反复使用同一提示观察波动如何体现。虚构Fabrication示例2076 年的火星战争本课程统一使用虚构fabrication一词来描述 LLM 因训练局限等原因生成与事实不符信息的现象业界常称幻觉/hallucination。之所以强调这一措辞是为了避免把人类特性错误地投射到机器输出上这也与负责任 AI 指南的术语取向一致。想体会虚构如何发生可以构造一个确保不在训练数据中的题目。课程文档使用了这个提示提示为 2076 年的火星战争生成一份教案。常识告诉我们2076 年在未来不可能关联真实事件。但把同一提示交给不同 LLM 提供商时响应 1OpenAI PlaygroundGPT-35——生成了貌似可信的教案响应 2Azure OpenAI PlaygroundGPT-35——内容略有不同例如面向初二学生响应 3Hugging Face Chat PlaygroundLLama-2——又换了一种受众假设。正如预期每个模型或版本因随机行为与能力差异产出略微不同的响应但三个模型都生成了足以让不知情用户误以为事件真实存在的回答。缓解手段包括元提示metaprompting、温度temperature配置等提示工程技术新一代提示工程架构还会把新工具、新技术无缝接入提示流程以减轻这些效应。在配套 Notebook 的Exercise 3中可以直接运行下面这段代码复现虚构现象并尝试更换提示或模型观察变化## 设置要测试的文本 text fgenerate a lesson plan on the Martian War of 2076. prompt f{text} response get_completion(prompt) print(response)案例研究GitHub Copilot 的提示工程实践现实世界中提示工程最著名的应用之一就是GitHub Copilot——一个把文本提示转换为代码补全、并集成进 VS Code 等开发环境的AI 结对程序员。早期版本基于 OpenAI Codex 模型工程团队迅速意识到需要微调模型并发展更好的提示工程技术来提升代码质量到 2023 年 7 月Copilot 推出了超越 Codex 的改进版 AI 模型提供更快的建议。其公开博客按时间线记录了这条学习路径从提升代码理解、与 LLM 协作到如何编写更好的提示、再到企业级 LLM 应用的构建经验——每一步都印证了模型微调 提示工程双轮驱动的重要性。五、提示的构建从基础提示到复杂提示理解了提示工程为何重要接下来要弄明白提示是如何被构造的才能评估不同技术对高效提示设计的作用。5.1 基础提示Basic Prompt基础提示就是不加任何上下文、直接发送给模型的文本输入。例如向 OpenAI Completion API 发送美国国歌的开头几个词模型会立即补全出接下来的几行——这正是基础预测行为的体现提示输入补全输出Oh say can you see听起来你在输入美国国歌《The Star-Spangled Banner》的歌词完整歌词是……5.2 复杂提示Complex Prompt在基础提示之上加入上下文与指令就构成了复杂提示。Chat Completion / Responses API允许我们把复杂提示构造为多条消息的集合反映用户输入与助手响应的输入/输出对设定助手行为或人格上下文的系统消息system message。请求形如下面这样——此时分词会从上下文与会话中有效捕捉相关信息而改变系统上下文对补全质量的影响不亚于提供的用户输入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.后助手会以讽刺口吻回答练习鼓励尝试不同人格或不同输入/输出序列观察系统上下文的影响力。oai-assignment.ipynb与aoai-assignment.ipynb中还封装了统一入口get_completion(prompt)内部调用client.responses.create(model..., inputprompt, temperature0, max_output_tokens1024, storeFalse)其中temperature0用于把随机性压到最低便于稳定观察提示本身的效果。5.3 指令提示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 格式输出可直接复制粘贴为文件校验复杂 指定格式从简单到复杂 格式化响应结构随之从自由段落演变为结构化数据——这正是指令粒度直接塑造输出形态的证明。六、主要内容Primary Content设计模式上面的例子中提示仍相当开放LLM 可以自行决定预训练数据中哪部分相关。而主要内容设计模式把输入文本一分为二指令action相关内容influence action。例如指令设为用两句话总结这段内容提示输入补全输出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. ...Summarize this in 2 short sentencesJupiter, the fifth planet from the Sun, is the largest in the Solar System and is known for being one of the brightest objects in the night sky. Named after the Roman god Jupiter, its a gas giant whose mass is two-and-a-half times that of all other planets in the Solar System combined.主要内容片段可以通过三种方式驱动更有效的指令示例Examples——不直接告诉模型该做什么而是给出期望输出的例子让模型自行推断模式线索Cues——用一段反映期望响应格式的开头提示模型引导它朝更相关的方向补全模板Templates——带占位符变量的可复用提示配方针对特定用例注入数据定制。6.1 使用示例零样本 / 单样本 / 少样本这是喂给模型期望输出示例、让它推断模式的做法。按示例数量可分为零样本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 Baseball / The player hit an ace Tennis / The player hit a six Cricket / The player made a slam-dunk Basketball注意零样本必须给出显式指令Translate to Spanish而单样本中该指令被自动推断少样本进一步证明——增加示例数量可以让模型在不加任何指令的情况下做出更准确的推断。6.2 提示线索Prompt Cues另一种使用主要内容的技术是给出线索用一段反映期望响应格式的片段给模型起个头模型会顺着这条线索继续。看线索数量0/1/2对输出的影响线索数提示输入补全输出0木星文本Summarize This一段自由总结1木星文本Summarize This What we learned is that Jupiter顺着is the fifth planet from the Sun...句式继续2木星文本Summarize This Top 3 Facts We Learned:以 1. / 2. / 3. 编号列表形式输出 挑战用线索技术处理提示Show me an image of red car of make Volvo and 给我看一辆沃尔沃品牌的红色汽车图片以及……——模型会补全什么你又会如何改进它6.3 提示模板Prompt Templates提示模板是预定义的提示配方可按需存储与复用以规模化推动一致的用户体验。简单形态下它就是一组同时提供交互式提示组件用户/系统消息与 API 驱动请求格式的提示示例集合便于复用。更复杂的形态如 LangChain 的 prompt templates 概念则包含占位符可被来自各种来源的数据用户输入、系统上下文、外部数据源等动态替换从而程序化地生成提示——这让我们能建立可复用提示库以规模化方式驱动一致的用户体验。模板的真正价值还在于能为垂直应用领域创建并发布提示库让模板针对应用专属上下文或示例优化使响应对该目标用户群更相关、更准确。教育领域的开源提示库如 Prompts For Edu正是这一思路的典范——围绕教案规划、课程设计、学生辅导等关键目标沉淀提示资产。七、辅助内容Supporting Content用附加上下文塑造输出如果把提示构造理解为指令任务 目标主要内容那么辅助内容就是额外提供的、以某种方式影响输出的上下文——可能是调优参数、格式指令、主题分类taxonomy等帮助模型把响应定制得契合用户目标与预期。课程文档给出的示例场景假设有一份包含所有课程丰富元数据名称、描述、级别、元数据标签、讲师等的课程目录定义指令总结 2023 年秋季学期的课程目录用主要内容提供几个期望输出示例用辅助内容指定感兴趣的Top 5 标签。于是模型能按示例所示格式给出总结而当某个结果包含多个标签时它会优先处理辅助内容中指定的 5 个标签——辅助内容就这样暗中改写了输出的排序与取舍。八、提示的最佳实践思维模式与实操准则知道提示如何构造之后下一步是思考如何设计——这包含两个层面正确的思维模式与正确的技术。8.1 提示工程的思维模式提示工程本质是试错过程牢记三条总纲领域理解至关重要。响应的准确性与相关性取决于应用/用户所处的领域。要运用直觉与领域专长进一步定制技术在系统提示中定义领域专属人格在用户提示中使用领域专属模板提供反映领域上下文的辅助内容或用领域专属线索与示例把模型引向熟悉的用法模式。模型理解至关重要。模型天然随机且实现上各有差异训练数据集预训练知识、提供的能力API/SDK、擅长优化的内容类型代码 vs 图像 vs 文本各不相同。理解所用模型的强项与限制据此任务排序或构建定制模板使其适配模型能力。迭代与验证至关重要。模型与提示工程技术都在快速演进。作为领域专家你的应用可能有社区通用准则覆盖不到的特殊上下文或标准。用提示工程工具与技术跳板式地启动提示构造再以自己的直觉与专长迭代验证把洞察记录下来沉淀为知识库如提示库为他人提供更快迭代的新基线。8.2 推荐最佳实践清单以下最佳实践来自 OpenAI 与 Azure OpenAI 的实践者推荐可结合 第3课负责任地使用生成式 AI 的责任边界一起阅读做法原因评估最新模型新一代模型功能与质量大概率更好但成本也可能更高先评估影响再做迁移决策。分隔指令与上下文确认模型/提供商是否定义了分隔符delimiters以更清晰地区分指令、主要内容与辅助内容帮助模型更精确地为 token 分配权重。具体而清晰给出关于期望上下文、结果、长度、格式、风格等更多细节既能提升响应质量与一致性也便于把配方固化为可复用模板。描述性 使用示例模型对展示并讲述方式响应更佳。先用只给指令无示例的零样本起步再用提供少量期望输出示例的少样本精化善用类比。用线索启动补全给模型一些可以作为响应起点的引导词或短语把它推向期望结果。重复Double Down有时需要向模型重复自己在主要内容前后都放指令或指令 线索组合使用通过迭代与验证找出有效方案。顺序很重要信息呈现顺序可能影响输出即使在学习示例中也是如此受近因偏差影响多尝试不同顺序。给模型一条退路为模型提供无法完成任务时可用的*兜底fallback*响应以减少生成错误或虚构响应的概率。当然任何最佳实践都因模型、任务、领域而异your mileage may vary。把它们当作起点迭代找出最适合你的组合随着新模型、新工具出现持续重新评估提示工程流程聚焦流程的可扩展性与响应质量。九、实战作业环境变量配置与 Notebook 练习课程结尾的作业把前面所有概念落到可交互的 Jupyter Notebook 中。作业没有标准答案——目的就是通过试错探索建立什么提示对什么模型、什么领域有效的直觉。因此本课不提供代码解答段落Notebook 中仅以 My Solution: 命名的 Markdown 单元格展示一个示例输出供参考。步骤 1Fork 仓库并准备环境推荐启动 GitHub Codespaces备选将仓库克隆到本地配合 Docker Desktop 使用备选用你偏好的 Notebook 运行时打开 Notebook。步骤 2配置环境变量把仓库根目录的.env.copy复制为.env填入AZURE_OPENAI_API_KEY、AZURE_OPENAI_ENDPOINT、AZURE_OPENAI_DEPLOYMENT的值详见上文学习沙盒一节。步骤 3打开 Notebook 并选择内核选择运行时内核。使用 Codespaces 或开发容器时直接选预置的默认Python 3.10.x内核即可。步骤 4依次完成练习以 aoai-assignment.ipynb 为例Exercise 1分词用tiktoken.encoding_for_model(gpt-4o)对木星介绍文本编码/解码替换文本观察 token 变化Exercise 2验证 API 配置构造 OpenAI 客户端api_keyos.environ[AZURE_OPENAI_API_KEY]base_urlf{os.environ[AZURE_OPENAI_ENDPOINT].rstrip(/)}/openai/v1/以deploymentos.environ[AZURE_OPENAI_DEPLOYMENT]为模型向输入oh say can you see请求补全验证端点连通性Exercise 3虚构运行 generate a lesson plan on the Martian War of 2076.观察模型如何一本正经地虚构不存在的历史Exercise 4指令式把木星文本作为主要内容指令设为Summarize content you are provided with for a second-grade student.为二年级学生总结体会指令对输出形态的重塑Exercise 5复杂提示构造 system / user / assistant 多消息会话把系统人格设为 sarcastic assistant并尝试更换人格或消息序列扩展练习Explore Your Intuition基于上述模式自建简单、复杂、指令式提示继续探索示例examples、线索cues等技术。上述练习可在 OpenAI 端点oai-assignment.ipynb模型gpt-4o-mini与 Azure OpenAI 端点aoai-assignment.ipynb两个版本之间自由切换二者共享同一套提示构造逻辑正好用来验证同一提示在不同提供商/模型下的差异。知识检查下列哪个提示更符合合理的提示工程最佳实践Show me an image of red car给我看红色汽车的图片Show me an image of red car of make Volvo and model XC90 parked by a cliff with the sun setting给我看一辆沃尔沃 XC90 红色汽车停在悬崖边、夕阳西下的图片Show me an image of red car of make Volvo and model XC90给我看一辆沃尔沃 XC90 红色汽车的图片答案2。它具体说明了要什么——不是随便一辆车而是明确的品牌与型号还描述了整体场景3 次之因为它也包含了大量描述信息。十、小结与延伸本课建立了提示工程的完整知识框架从提示的定义与三大底层概念分词、基础 LLM、指令调优 LLM到为什么要提示工程随机性、虚构、能力差异再到提示的构建技法基础/复杂/指令提示、主要内容设计模式中的示例/线索/模板、辅助内容最后以思维模式 八条最佳实践收束并用可运行的 Notebook 练习完成从理论到实战的闭环。提示工程是生成式 AI 应用开发的第一门必修课。接下来课程第5课将进入高级提示技术见 05-advanced-prompts在本文基础上进一步深化复杂场景的提示设计——例如把提示工程与 第6课文本生成应用 的 API 客户端封装可对照 shared/python/api_utils.py 中的create_openai_client/create_azure_openai_client复用模式结合起来构建真正可上线的 AI 应用。【免费下载链接】generative-ai-for-beginners21 Lessons, Get Started Building with Generative AI项目地址: https://gitcode.com/GitHub_Trending/ge/generative-ai-for-beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表