大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10 CS研究生,MBA。我坚信AI是普通人变强的“外挂”,所以创建了“AI信息Gap”这个公众号,专注于分享AI全维度知识,包括但不限于AI科普,AI工具测评,AI效率提升,AI行业洞察。关注我,AI之路不迷路,2024我们一起变强。
基于当下的大语言模型(LLM)根据注意力机制随机生成的特点,AI幻觉是一个无法绕开的话题。而要想使AI模型输出的内容更加稳定,更符合我们的要求,我在《『深度长文』4种有效提高LLM输出质量的方法!》一文中详细介绍了4种提高AI模型输出质量的方法,其中提示工程(prompt engineering)是针对个人用户最易上手的方法,没有之一。
我在之前关于提示词的文章里,介绍过很多种提示工程技术,比如零样本提示(Zero-Shot Prompting),少样本提示(Few-Shot Prompting),以及思维链提示(Chain-of-Thought Prompting)。
在OpenAI推出新一代推理模型o1
系列后,官方针对如何更有效地使用这些模型给出了四条提示词建议以及三个提示词示例。然而,根据OpenAI官方的描述,这些传统的提示工程技术对于o1
模型可能已经失效,过度依赖甚至可能会造成适得其反的效果,降低o1
模型的表现。
四条o1
提示词建议
1. 保持提示词简单直接
o1
系列模型具有强大的理解和推理能力,它们能够通过简短、清晰的提示词准确地抓住核心问题并做出回应。相比于传统模型,o1
模型并不需要过多的引导或复杂的上下文提示。举例来说,如果你想让模型解答一个数学问题,你可以直接提出问题,如“计算5的平方是多少?”而不需要额外的描述或指导。这意味着复杂的多步提示或引导式对话,反而可能会使模型的表现变得不如预期。
因此,在撰写提示词时,应该回归问题的本质,优先简化问题,保持问题本身的直接性。这样可以让o1
模型充分发挥其强大的推理能力。
2. 避免使用链式推理提示
链式推理(chain-of-thought)技术在传统的提示工程中常被用于鼓励模型一步步展开思考并解释其推理过程。然而,o1
系列模型在其内部已经具备了自主展开复杂推理的能力,因此不再需要通过提示词要求模型“逐步解释”或“详细展开思路”。
例如,在传统模型中,你可能会提示“请逐步解释如何求解这个问题”,但在o1
模型中,这样的提示可能会适得其反,导致模型的回答变得冗长而不必要。o1
模型已经经过强化学习,可以自行生成内部的推理链条并直接提供答案,因此无需显性引导。
3. 使用分隔符增强提示词清晰度
为了帮助模型更好地理解提示词中的不同部分,建议使用明确的分隔符。分隔符如三重引号、XML标签或章节标题可以让模型更好地识别提示词中的结构,特别是在涉及多个问题、长段文本或需要额外信息的情况下。
举例来说,假设你想要模型先解释一段理论背景,然后再回答一个具体问题,你可以使用如下提示词格式:
"""理论背景:狭义相对论的核心思想是..."""
问题:基于以上理论,相对论中的时间膨胀效应是如何发生的?
这种清晰的结构有助于模型区分不同信息块,确保它能够准确理解和处理每一部分内容。
4. 在RAG(检索增强生成)中限制额外上下文
RAG(Retrieval-Augmented Generation,检索增强生成)是一种将外部文档或信息作为提示的一部分传递给模型的方法(我在之前的文章中详细介绍过RAG,感兴趣的小伙伴可以查找翻看)。然而,o1
模型在处理这类任务时,建议只提供最相关的信息。提供过多的上下文或冗余信息,可能会导致模型过度复杂化其回答。
例如,当你向模型提供一段与问题相关的参考文档时,只需包括核心内容,删除不相关的背景信息或细节。过量的额外上下文不仅会增加模型处理负担,反而可能导致它忽视关键信息或在回答时“走偏”。
三个o1
提示词示例
在介绍了如何提高o1
模型的输出质量后,OpenAI还给出了一些实际提示词示例,以帮助用户更好地理解如何在不同场景下使用这个全新的推理模型。这些案例涵盖了代码重构、项目规划以及科学研究,展示了o1
模型在这些领域的应用能力。
1. 让o1模型重构代码
在这个示例中,用户要求o1
模型对一段React代码进行重构,要求将“非虚构类”书籍的文字颜色变为红色。这一提示展示了o1
模型在代码编写和重构方面的能力,尤其适用于开发者希望快速进行代码优化和修改的场景。
具体提示词如下:
Instructions:
- Given the React component below, change it so that nonfiction books have red
text.
- Return only the code in your reply.
- Do not include any additional formatting, such as markdown code blocks.
- For formatting, use four space tabs, and do not allow any lines of code to
exceed 80 columns.
const books = [
{ title: 'Dune', category: 'fiction', id: 1 },
{ title: 'Frankenstein', category: 'fiction', id: 2 },
{ title: 'Moneyball', category: 'nonfiction', id: 3 },
];
export default function BookList() {
const listItems = books.map(book =>
<li>
{book.title}
</li>
);
return (
<ul>{listItems}</ul>
);
}
这个提示词示例中,最核心的一点就是简洁明确的指令,完全符合之前提到的“保持提示词简单直接”的原则。它清晰地列出了任务要求,明确指出了要实现的功能(非小说类书籍的红色文本显示),并且指示模型只返回代码,而不需要包含额外的格式化信息,如代码块或解释。这样的设计有效避免了无关信息对模型的干扰,使模型能够聚焦于任务本身。
2. 让o1模型规划和创建Python项目
在第二个示例中,用户希望构建一个Python应用程序,该应用可以处理用户提问,并通过数据库查找匹配的答案。如果没有找到合适的答案,它将提示用户添加新答案并存储这个问题/答案对。这个示例展示了o1
模型在项目规划和代码生成方面的能力,非常适合需要从头搭建项目结构的场景。
具体提示词如下:
I want to build a Python app that takes user questions and looks them up in a
database where they are mapped to answers. If there is close match, it retrieves
the matched answer. If there isn't, it asks the user to provide an answer and
stores the question/answer pair in the database. Make a plan for the directory
structure you'll need, then return each file in full. Only supply your reasoning
at the beginning and end, not throughout the code.
这个示例很明显是一个多步骤的复杂任务,要求o1
模型不仅要规划项目的文件结构,还需要完整地实现代码。o1
模型没有被要求详细解释每一步推理过程,而是只需在开头和结尾提供简单的说明,符合了避免使用链式推理提示的建议。通过这种方式,模型能够专注于生成代码和设计项目结构,而不是过度展开推理。
3. 让o1模型回答科研问题
最后一个示例展示了o1
模型在科学研究领域的表现。用户询问模型关于抗生素研究中需要重点关注的三种化合物,并要求模型解释选择这些化合物的原因。这类提示适合科研人员和学者,希望模型能够提供深入的研究建议或支持科学探讨。
具体提示词如下:
What are three compounds we should consider investigating to advance research
into new antibiotics? Why should we consider them?
在这个提示词设计上,用户只需提出简明扼要的问题,并未提供额外的上下文或长篇解释,这与前面讨论的保持提示词简单直接的建议一致。o1
模型能够基于其内部知识推理出相关的化合物,并给出清晰的理由。
结语
通过OpenAI官方给出的针对o1
模型的提示词建议和样例可以看出,o1
模型的提示词设计与以往的LLM存在显著差异。不再需要像之前那样通过复杂的提示工程来引导模型推理,相反,简洁、清晰的提示词将能让o1
发挥其强大的自主推理能力。
精选推荐
免费的新模型o1 mini即将到来:OpenAI正在逐步开放! 【深度分析】OpenAI o1是最强的推理模型,却不是最强模型! 重磅!OpenAI正式发布博士水平的推理模型o1!附详细说明 ChatGPT Pro都来了,ChatGPT Pro Max还会远吗?
都读到这里了,点个赞鼓励一下吧,小手一赞,年薪百万!😊👍👍👍。关注我,AI之路不迷路,原创技术文章第一时间推送🤖。