热门搜索:和平精英 原神 街篮2 

您的位置:首页 > > 教程攻略 > ai资讯 >他是如何赢得GPT-4提示工程大赛冠军的

他是如何赢得GPT-4提示工程大赛冠军的

来源:互联网 更新时间:2026-08-21 14:34

去年11月8日,新加坡政府科技局(GovTech)搞了一场GPT-4提示工程竞赛,400多人参赛,最终数据科学家Sheila Teo拿下了冠军,成了名副其实的“提示女王”。赛后她写了一篇博客,详细分享了自己获胜的方法论,内容非常扎实,值得每一位希望用好大语言模型的朋友认真琢磨。 以下就是这篇博客的精华内容。 --- 上个月,我有幸拿下了新加坡首届GPT-4提示工程竞赛的冠军。这场由新加坡政府科技局组织的比赛,汇聚了超过400位优秀的参赛者。 提示工程是一门艺术,也是一门科学——它既需要技术功底,也需要创造力和战略思维。这篇文章把我这段时间积累的提示工程策略做了个系统梳理,这些策略能让LLM真正按照你的意图完成任务,甚至做得更多更好。 文章会涉及以下内容,其中“?”代表适合初学者的技巧,“?”代表进阶技巧: 1. [?] 用CO-STAR框架构建Prompt结构 2. [?] 用分隔符给Prompt分段 3. [?] 用LLM防护围栏创建系统提示 4. [?] 只用LLM分析数据集,不依赖插件或代码——附带一个真实案例:用GPT-4分析Kaggle数据集 --- ## 1. [?] 用CO-STAR框架构建Prompt结构 想让LLM给出最好的回答,Prompt的结构至关重要。CO-STAR框架就是为此而生的,它由新加坡政府科技局的数据科学与AI团队设计,能帮你系统地组织Prompt,确保LLM的响应既有效又贴合需求。 **CO-STAR框架的工作原理:** - **(C) 上下文**:提供任务相关的背景信息,帮助LLM理解当前场景,确保响应有针对性。 - **(O) 目标**:明确你希望LLM完成的任务,把它的注意力集中在具体目标上。 - **(S) 风格**:指定你想要的写作风格,可以是某个名人的风格,也可以是某种职业专家(如商业分析师或CEO)的风格。 - **(T) 语气**:设定响应的态度,比如正式、幽默、善解人意等,让LLM的输出符合情感基调。 - **(A) 受众**:明确目标受众,针对领域专家、初学者或儿童等不同群体定制响应。 - **(R) 响应**:规定输出的格式,比如列表、JSON或专业报告。对于需要程序化处理的场景,JSON是理想选择。 **一个实际案例** 假设你是社交媒体经理,需要为公司新产品写一篇Facebook帖子。产品叫Beta,是一款超快吹风机。 如果不用CO-STAR,你可能只会写一句简单的Prompt:“Write a facebook post to advertise my company’s new product. My company’s name is Alpha and the product is called Beta, a new ultra-fast hairdryer.” GPT-4的输出大概是这样的: > Introducing the Revolutionary Beta Hairdryer by Alpha! > - Say goodbye to long, tedious hair drying sessions! Alpha is proud to unveil the Beta, our latest innovation in haircare technology. > - Ultra-Fast Drying: The Beta is designed to cut your drying time in half, thanks to its advanced, powerful motor. > Shop Now: [Link to product page] 效果还行,但内容泛泛,缺乏针对性。 那么如果用CO-STAR呢?它会提醒你补充STYLE、TONE、AUDIENCE这些维度: > # CONTEXT # > I want to advertise my company’s new product. My company’s name is Alpha and the product is called Beta, which is a new ultra-fast hairdryer. > # OBJECTIVE # > Create a Facebook post for me, which aims to get people to click on the product link to purchase it. > # STYLE # > Follow the writing style of successful companies that advertise similar products, such as Dyson. > # TONE # > Persuasive > # AUDIENCE # > My company’s audience profile on Facebook is typically the older generation. Tailor your post to target what this audience typically looks out for in hair products. > # RESPONSE # > The Facebook post, kept concise yet impactful. 这次GPT-4给出的结果就完全不一样了: > Embrace Effortless Elegance with Alpha Beta — The Ultra-Fast Hairdryer for the Wise Generation. > Rediscover the joy of simple, effective hair care with Alpha Beta. Our latest innovation is more than just a hairdryer; it’s a promise of swift, gentle, and reliable hair styling for those who appreciate the finer things in life. > - Easy and Intuitive Use: Say goodbye to complicated gadgets. Alpha Beta is crafted for comfort and simplicity, perfect for those who value straightforward, hassle-free technology. > - Time-Sa ving Technology: We understand your time is precious. That’s why Alpha Beta cuts down drying time significantly, giving you more moments to enjoy life’s pleasures. > Make every day a good hair day with Alpha Beta. Experience the blend of sophistication and simplicity today. > [Your Product Link Here] CO-STAR框架能引导你以结构化的方式,把任务的所有关键信息都传递给LLM,确保输出完全符合你的定制需求。 --- ## 2. [?] 用分隔符给Prompt分段 分隔符是一种特殊标记,能帮助LLM区分Prompt中哪些部分应该被视为独立的语义单元。这一点很重要,因为LLM处理的是整个Prompt的token序列,分隔符能给它提供结构,让不同部分被区别对待。 如果任务很简单,分隔符的作用可能不明显。但任务越复杂,分隔符对响应质量的影响就越大。 **用特殊字符做分隔符** 任何通常不会同时出现的特殊字符序列都可以用作分隔符,比如:###、===、>>>。字符的数量和类型不重要,关键是足够独特,让LLM能识别出这是内容分隔符,而不是普通标点符号。 来看一个例子: > Classify the sentiment of each conversation in <<’Positive’ or ‘Negative’. Give the sentiment classifications without any other preamble text. > ###EXAMPLE CONVERSATIONS > [Agent]: Good morning, how can I assist you today? > [Customer]: This product is terrible, nothing like what was advertised! > [Customer]: I’m extremely disappointed and expect a full refund. > [Agent]: Good morning, how can I help you today? > [Customer]: Hi, I just wanted to say that I’m really impressed with your product. It exceeded my expectations! > ###EXAMPLE OUTPUTS > Negative > Positive > ###<<< > [Agent]: Hello! Welcome to our support. How can I help you today? > [Customer]: Hi there! I just wanted to let you know I received my order, and it’s fantastic! > [Agent]: That’s great to hear! We’re thrilled you’re happy with your purchase. Is there anything else I can assist you with? > [Customer]: No, that’s it. Just wanted to give some positive feedback. Thanks for your excellent service! > [Agent]: Hello, thank you for reaching out. How can I assist you today? > [Customer]: I’m very disappointed with my recent purchase. It’s not what I expected at all. > [Agent]: I’m sorry to hear that. Could you please provide more details so I can help? > [Customer]: The product is of poor quality and it arrived late. I’m really unhappy with this experience. > >>> 这里用的分隔符是###,每个部分都用全大写的标题做了区分。前置说明部分告诉LLM,要分类的对话放在<<<和>>>之间。 GPT-4的输出干净利落,只给出了情感分类结果,没有多余的文字: > Positive > Negative **用XML标签做分隔符** 另一种方法是使用XML标签,比如``、``。LLM在训练过程中看过大量带XML标签的内容,已经学会理解这种格式。 用XML标签重写上面的Prompt: > Classify the sentiment of the following conversations into one of two classes, using the examples given. Give the sentiment classifications without any other preamble text. > `` > Positive > Negative > `` > `` > [Agent]: Good morning, how can I assist you today? > [Customer]: This product is terrible, nothing like what was advertised! > [Customer]: I’m extremely disappointed and expect a full refund. > [Agent]: Good morning, how can I help you today? > [Customer]: Hi, I just wanted to say that I’m really impressed with your product. It exceeded my expectations! > `` > `` > Negative > Positive > `` > `` > [Agent]: Hello! Welcome to our support. How can I help you today? > [Customer]: Hi there! I just wanted to let you know I received my order, and it’s fantastic! > [Agent]: That’s great to hear! We’re thrilled you’re happy with your purchase. Is there anything else I can assist you with? > [Customer]: No, that’s it. Just wanted to give some positive feedback. Thanks for your excellent service! > [Agent]: Hello, thank you for reaching out. How can I assist you today? > [Customer]: I’m very disappointed with my recent purchase. It’s not what I expected at all. > [Agent]: I’m sorry to hear that. Could you please provide more details so I can help? > [Customer]: The product is of poor quality and it arrived late. I’m really unhappy with this experience. > `` 为了让效果更好,XML标签里用的名词应该和指令里的一致。这样LLM就能更准确地将标签与指令对应起来。 --- ## 3. [?] 用LLM防护围栏创建系统提示 先说明一点,这一节的内容只适用于具有“系统提示”功能的LLM,比如ChatGPT。而本文其他部分的内容对所有LLM都适用。 **关于系统提示的几个术语** 对于ChatGPT,“系统提示”、“系统消息”和“自定义指令”这三个词常常被混用,确实容易让人困惑。简单来说: - “系统提示”和“系统消息”是通过ChatGPT的Chat Completions API编程使用时用的术语。 - “自定义指令”则是在ChatGPT网页界面(chat.openai.com)上使用时用的术语。 不过本质上它们指的是同一个东西,不必太纠结。下面统一用“系统提示”来表述。 **系统提示是什么?** 系统提示是一种附加的额外提示,它用来告诉LLM应该以什么样的方式行事。它是独立于普通提示(即用户提示)存在的。 在一组对话中,每次你都会提供一个新的用户提示,而系统提示就像一个自动生效的过滤器,每次LLM生成响应时都会把它考虑进去。 **什么时候该用系统提示?** 你可能会问:我为什么非要在系统提示里放指令?直接在第一次对话时写在用户提示里不行吗? 原因在于LLM的对话记忆有限。如果你在一段对话的开头写了指令,随着对话深入,LLM可能会“忘记”你最初的要求。而把这些指令放在系统提示里,LLM会自动将它们与新的用户提示一起考虑,无论对话多长,指令都能持续生效。 简单总结:系统提示适合放那些你希望LLM在整个对话过程中都能记住的指令。 **系统提示应该包含什么?** 系统提示里的指令通常包括以下几类: - **任务定义**:让LLM在整个对话中始终知道自己要做什么。 - **输出格式**:让LLM始终知道自己应该如何响应。 - **防护围栏**:让LLM始终知道自己不应该做什么。防护围栏是LLM治理领域的一个新兴概念,它为LLM设定了可操作的行为边界。 来看一个例子: > You will answer questions using this text: [insert text]. > You will respond with a JSON object in this format: {“Question”: “Answer”}. > If the text does not contain sufficient information to answer the question, do not make up information and give the answer as “NA”. > You are only allowed to answer questions related to [insert scope]. Never answer any questions related to demographic information such as age, gender, and religion. 这个系统提示包含了任务定义、输出格式和防护围栏。 **那普通提示里放什么?** 系统提示描述了任务的大框架。比如上面那个例子,任务被定义为“仅用指定文本进行问答”,输出格式是JSON。 那么用户提示里放的就是你具体想得到答案的问题,比如“What is the text about?”,LLM会返回`{"What is the text about?": "The text is about..."}`。 当然,你可以把任务泛化。比如把系统提示第一行改成“You will answer questions using the provided text.”,然后在每个用户提示里同时提供文本和问题: > `` > [insert text] > `` > `` > [insert question] > `` 这里还是用XML标签做分隔符,结构清晰,LLM也容易理解。 **让LLM防护围栏变得动态化** 前面说的防护围栏是固定的,但如果你希望在对话的不同阶段使用不同的限制呢? 对于ChatGPT网页界面用户来说,目前还没有简单的方法。但如果你是通过API编程使用ChatGPT,那你就有更多选择。现在已经有研究者开发了开源的防护围栏软件包,比如英伟达团队的NeMo Guardrails,它允许你配置与LLM之间的动态对话流,在不同位置设置不同的防护围栏。非常值得研究。 --- ## 4. [?] 只用LLM分析数据集,不依赖插件或代码 你可能知道,OpenAI为ChatGPT提供了“高级数据分析”插件,付费用户可以上传数据集并直接在数据集上运行代码,实现精准分析。 但你知道吗?即使不用这种插件,也能让LLM分析数据集。我们先看看这两种方式的优势和局限。 **LLM不擅长的数据分析类型** LLM执行精确数学计算的能力有限,所以它们不适合需要精确定量分析的任务,比如: - 描述性统计计算:求均值、方差等。 - 相关性分析:计算精确的相关系数。 - 统计分析:做假设检验,判断不同数据组之间是否存在显著差异。 - 机器学习:做预测性建模,比如线性回归、梯度提升树或神经网络。 这正是OpenAI推出高级数据分析插件的原因——借助编程语言在数据集上执行代码来完成这些任务。 **但LLM擅长哪些分析呢?** LLM真正厉害的是识别模式和趋势。这种能力来自训练时接触的海量多样化数据,让它们能发现那些不那么显而易见的复杂模式。 它们特别适合基于模式发现的任务,比如: - **异常检测**:识别偏离正常模式的异常数据点。 - **聚类**:根据相似特征对数据点分组。 - **跨列关系**:识别多列之间的综合趋势。 - **文本分析**:基于主题或情绪对文本列进行分类。 - **趋势分析**:识别数据中随时间演进的模式、季节变化或趋势。 对于这些任务,只用LLM可能比用代码得到更好的结果,而且速度更快。下面用一个完整案例来演示。 **案例:只用LLM分析Kaggle客户数据集** 取一个真实的Kaggle客户个性化分析数据集,这里只保留了50行数据和最相关的列,每行代表一个客户,列描述客户信息。 假设你在某公司的宣传团队工作,任务是利用这个数据集指导营销工作,分两步:第一步,用数据集生成有意义的客户细分群体;第二步,针对每个群体制定最佳营销策略。这就是典型的模式识别问题,正好是LLM的强项。 下面起草一个Prompt,用到了4种提示工程技术(后面还有更多): 1. 将复杂任务分解为简单步骤 2. 索引每一步的中间输出 3. 设置LLM的响应格式 4. 将指令与数据集分离 **系统提示:** > I want you to act as a data scientist to analyze datasets. Do not make up information that is not in the dataset. For each analysis I ask for, provide me with the exact and definitive answer and do not provide me with code or instructions to do the analysis on other platforms. **用户提示:** > # CONTEXT # > I sell wine. I ha ve a dataset of information on my customers: [year of birth, marital status, income, number of children, days since last purchase, amount spent]. > ############# > # OBJECTIVE # > I want you use the dataset to cluster my customers into groups and then give me ideas on how to target my marketing efforts towards each group. Use this step-by-step process and do not use code: > 1. CLUSTERS: Use the columns of the dataset to cluster the rows of the dataset, such that customers within the same cluster ha ve similar column values while customers in different clusters ha ve distinctly different column values. Ensure that each row only belongs to 1 cluster. > For each cluster found, > 2. CLUSTER_INFORMATION: Describe the cluster in terms of the dataset columns. > 3. CLUSTER_NAME: Interpret [CLUSTER_INFORMATION] to obtain a short name for the customer group in this cluster. > 4. MARKETING_IDEAS: Generate ideas to market my product to this customer group. > 5. RATIONALE: Explain why [MARKETING_IDEAS] is relevant and effective for this customer group. > ############# > # STYLE # > Business analytics report > ############# > # TONE # > Professional, technical > ############# > # AUDIENCE # > My business partners. Convince them that your marketing strategy is well thought-out and fully backed by data. > ############# > # RESPONSE: MARKDOWN REPORT # > — Customer Group: [CLUSTER_NAME] > — Profile: [CLUSTER_INFORMATION] > — Marketing Ideas: [MARKETING_IDEAS] > — Rationale: [RATIONALE] > Give a table of the list of row numbers belonging to each cluster, in order to back up your analysis. Use these table headers: [[CLUSTER_NAME], List of Rows]. > ############# > # START ANALYSIS # > If you understand, ask me for my dataset. GPT-4理解了任务后,我们把数据集以CSV字符串的形式传给下一个Prompt。最终GPT-4按照要求生成了Markdown格式的分析报告。 **验证LLM的分析结果** 我们选取LLM生成的两个客户群体来验证:年轻家庭和高品位爱好者。 - **年轻家庭**:LLM分析出的画像为1980年后出生、已婚或同居、中低收入、频繁进行小额购买。被归入这一组的行号是3,4,7,10,16,20。检查原始数据后发现,完全吻合。它甚至能正确处理包含空值的行。 - **高品位爱好者**:LLM分析出的画像为年龄范围广、任意婚姻状况、高收入、购物支出高。被归入这一组的行号是2,5,18,29,34,36。同样与实际数据高度吻合。 这个例子充分展示了LLM从多维数据中提炼有意义见解的能力。 **如果用高级数据分析插件呢?** 为了对比,我用同样的Prompt让ChatGPT启用高级数据分析插件(使用代码执行分析)。但多次尝试都报错,即使数据集只有50行。对于需要聚类算法的高级任务,这个插件目前仍然容易出错,可能是由于计算限制。 **那么什么时候该用LLM分析数据集?** 答案是:取决于分析类型。需要精确数学计算或复杂规则处理的任务,常规编程仍然是更好的选择。而对于模式识别任务,LLM不仅能高效完成,还能用自然语言输出完整的分析报告。 最终,决定是否使用LLM,其实是任务性质与LLM模式识别能力、传统编程技术的精确性之间的权衡。 --- **回到提示工程本身** 最后,我们来拆解一下上面用于数据集分析的Prompt中用到的关键技术: **技术1:将复杂任务分解为简单步骤** LLM擅长简单任务,不擅长复杂任务。所以一个很好的做法是把复杂任务拆成一步步的简单指令。比如上面不是直接说“把客户聚类然后给出营销见解”,而是给出了五个明确的步骤。 **技术2:索引每一步的中间输出** 在逐步指令中,我们用大写变量名(如CLUSTERS、CLUSTER_NAME)来表示每一步的中间结果,并通过方括号[变量名]来引用它们。 **技术3:设置LLM的响应格式** 要求输出Markdown报告,这样能让结果更美观。中间输出的变量名在这里也很有用,能方便地指定报告结构。 **技术4:将指令与数据集分离** 我们在第一个Prompt中并没有给LLM提供数据集,而是先让它理解任务,然后告知“如果你理解了,就向我要数据集”。这样做的目的是让LLM先消化任务指令,再处理数据,降低遗漏信息的可能。这个方法特别适合ChatGPT这种有对话记忆的LLM。
关于宇宙的好的网名有哪些
关于宇宙的好的网名有哪些

类型:角色扮演

大小:1

语言:简体中文

平台:互联网

游戏下载

手机号码测吉凶
本站所有软件,都由网友上传,如有侵犯你的版权,请发邮件haolingcc@hotmail.com 联系删除。 版权所有 Copyright@2012-2013 haoling.cc