AI个人学习
和实操指南

OPENAI o1(推理模型)使用指南,提示词编写建议

OpenAI o1 系列模型是通过强化学习训练的新型大语言模型,旨在执行复杂的推理。o1 模型在回答之前进行思考,并且在回应用户之前能够产生长时间的内部思考链。o1 模型在科学推理方面表现出色,在竞争编程问题(Codeforces)中排名第 89 百分位,在美国数学奥林匹克(AIME)预选赛中位列美国前 500 名学生,并在物理、生物和化学问题的基准测试(GPQA)中超过人类博士生水平的准确性。

 

API 中提供了两种推理模型:

1. o1-preview:我们 o1 模型的早期预览,旨在使用广泛的世界常识来推理困难问题。
2. o1-mini:o1 的一个更快且更便宜的版本,特别擅长编码、数学和科学任务,而不需要广泛的常识。

 

o1 模型在推理方面提供了显著的 进展,但它们 并不打算替代所有用例中的 GPT-4o

对于需要图像输入、函数调用或持续快速响应时间的应用,GPT-4o 和 GPT-4o mini 模型仍然是正确的选择。然而,如果您希望开发需要深度推理且能够容纳较长响应时间的应用,o1 模型可能是一个优秀的选择。我们很期待您用它们创造的成果!

 

🧪 o1 模型目前处于测试阶段

o1 模型目前处于 测试阶段,功能有限。访问仅限于 第 5 级 开发者在 这里 检查您的使用级别,并且速率限制较低。我们正在努力添加更多功能,增加 速率限制,并在接下来的几周内扩大对更多开发者的访问!

 

快速开始

o1-previewo1-mini 都可以通过 chat completions 端点使用。

from openai import OpenAI
client = OpenAI()

response = client.chat.completions.create(
model="o1-preview",
messages=[
{
"role": "user", 
"content": "编写一个 Bash 脚本,将矩阵表示为格式 '[1,2],[3,4],[5,6]' 的字符串,并以相同的格式打印转置矩阵。"
}
]
)

print(response.choices[0].message.content)

根据模型解决问题所需的推理量,这些请求可能需要几秒到几分钟的时间。

 

Beta 限制

在 Beta 阶段,许多 chat completion API 参数尚不可用。最显著的有:

  • 模态:仅支持文本,不支持图像。
  • 消息类型:仅支持用户消息和助手消息,不支持系统消息。
  • 流式传输:不支持。
  • 工具:不支持工具、函数调用以及响应格式参数。
  • Logprobs:不支持。
  • 其他:`temperature`、`top_p` 和 `n` 固定为 `1`,而 `presence_penalty` 和 `frequency_penalty` 固定为 `0`。
  • Assistants 和 Batch:这些模型不支持 Assistants API 或 Batch API。

随着我们逐步退出 Beta 阶段,将会添加对其中一些参数的支持。o1 系列的未来模型将包含多模态和工具使用等功能。

 

 

推理工作原理

o1 模型引入了 推理 tokens。这些模型使用推理 tokens 进行“思考”,分解对提示的理解,并考虑多种生成响应的方式。在生成推理 tokens 后,模型会生成答案作为可见的 completion tokens,且将推理 tokens 从其上下文中丢弃。

下面是用户与助手之间的多步对话示例。每个步骤的输入和输出 tokens 被保留,而推理 tokens 则被丢弃。

o1(推理模型)提示词使用指南-1

推理 tokens 不保存在上下文中

 

虽然推理 tokens 不能通过 API 显示,但它们仍然占据模型的上下文窗口空间,并作为 output tokens 收费。

 

管理上下文窗口

o1-preview 和 o1-mini 模型提供了 128,000 个 tokens 的上下文窗口。每次生成内容时都有一个最大输出 tokens 的上限——这包括不可见的推理 tokens 和可见的生成 tokens。最大输出 tokens 限制如下:

  • o1-preview: 最多 32,768 个 tokens
  • o1-mini: 最多 65,536 个 tokens

 

在生成内容时,确保在上下文窗口中为推理 tokens 留出足够的空间非常重要。根据问题的复杂程度,模型可能会生成从几百到几万不等的推理 tokens。使用的具体推理 tokens 数量可以在 聊天生成响应对象的 usage 对象 中的 completion_tokens_details 查看:

usage: {
total_tokens: 1000,
prompt_tokens: 400,
completion_tokens: 600,
completion_tokens_details: {
reasoning_tokens: 500
}
}

 

控制成本

要管理 o1 系列模型的成本,您可以使用 max_completion_tokens 参数限制模型生成的总 tokens 数量(包括推理和生成 tokens)。

在之前的模型中,`max_tokens` 参数控制生成的 tokens 数量和用户可见的 tokens 数量,这两者始终相等。然而,在 o1 系列中,生成的总 tokens 数量可以超过可见的 tokens 数量,因为内部推理 tokens 的存在。

由于一些应用可能依赖 `max_tokens` 与从 API 接收的 tokens 数量一致,o1 系列引入了 `max_completion_tokens` 来明确控制模型生成的总 tokens 数量,包括推理和可见的生成 tokens。这种显式的选择确保在使用新模型时不会破坏现有的应用程序。对于之前的所有模型,`max_tokens` 参数仍保持原有功能。

 

为推理预留空间

如果生成的 tokens 达到上下文窗口的限制或您设置的 `max_completion_tokens` 值,您将收到 `finish_reason` 设置为 `length` 的聊天生成响应。这可能会在任何可见的生成 tokens 生成之前发生,意味着您可能会为输入和推理 tokens 付费,而没有收到可见的响应。

为了防止这种情况,请确保在上下文窗口中留出足够的空间,或将 `max_completion_tokens` 值调整为更高的数字。OpenAI 建议在开始使用这些模型时,预留至少 25,000 个 tokens 用于推理和输出。当您熟悉提示所需的推理 tokens 数量后,可以相应调整这个缓冲区。

 

 

关于提示词的建议

 

这些模型在使用简洁明确的提示词时表现最佳。一些提示词工程技巧(如 few-shot 提示或让模型“逐步思考”)可能无法提升表现,有时甚至会起到反效果。以下是一些最佳实践:

  • 保持提示简洁明了: 这些模型擅长理解并回应简短、清晰的指令,无需提供过多指导。
  • 避免链式思维提示: 由于这些模型在内部进行推理,引导它们“逐步思考”或“解释你的推理”并非必要。
  • 使用分隔符提高清晰度: 使用三重引号、XML 标签或章节标题等分隔符来清晰标示输入的不同部分,有助于模型正确理解各个部分。
  • 在检索增强生成 (RAG) 中限制额外上下文:** 提供额外上下文或文档时,只包含最相关的信息,避免模型的回复过于复杂化。

o1(推理模型)使用指南,提示词编写建议-1

 

o1(推理模型)使用指南,提示词编写建议-2

 

提示词示例

编码(重构)

OpenAI o1 系列模型能够实现复杂算法并生成代码。以下提示要求 o1 基于一些特定标准重构一个 React 组件。

from openai import OpenAI

client = OpenAI()

prompt = """
指令:
- 对下面的 React 组件进行修改,使得非小说类书籍的文字变为红色。
- 回复中只返回代码,不要包含任何额外的格式,如 markdown 代码块。
- 在格式上,使用四个空格缩进,且代码行不超过 80 列。

const books = [
{ title: '沙丘', category: 'fiction', id: 1 },
{ title: '科学怪人', category: 'fiction', id: 2 },
{ title: '魔球', category: 'nonfiction', id: 3 },
];

export default function BookList() {
const listItems = books.map(book =>
<li>
{book.title}
</li>
);

return (
<ul>{listItems}</ul>
);
}
"""

response = client.chat.completions.create(
model="o1-mini",
messages=[
{
"role": "user",
"content": [
{
"type": "text",
"text": prompt
},
],
}
]
)

print(response.choices[0].message.content)

 

编码(规划)

OpenAI o1 系列模型也擅长创建多步骤的计划。此示例提示要求 o1 创建一个完整解决方案的文件系统结构,并提供实现所需用例的 Python 代码。

from openai import OpenAI

client = OpenAI()

prompt = """
我想构建一个 Python 应用程序,接收用户问题并在数据库中查找对应答案。如果找到相近匹配,就返回匹配的答案。如果没有匹配,要求用户提供答案,并将问题/答案对存储到数据库中。为此创建一个目录结构的计划,然后返回每个文件的完整内容。仅在代码开始和结束时提供你的推理,而不是在代码中间。
"""

response = client.chat.completions.create(
model="o1-preview",
messages=[
{
"role": "user",
"content": [
{
"type": "text",
"text": prompt
},
],
}
]
)

print(response.choices[0].message.content)

 

STEM 研究

OpenAI o1 系列模型在 STEM 研究中表现出色。用于支持基础研究任务的提示通常会显示出强劲的结果。

from openai import OpenAI
client = OpenAI()

prompt = """
我们应该考虑研究哪三种化合物以推进新抗生素的研究?为什么要考虑它们?
"""

response = client.chat.completions.create(
model="o1-preview",
messages=[
{
"role": "user", 
"content": prompt
}
]
)

print(response.choices[0].message.content)

 

 

用例示例

一些使用 o1 进行现实世界用例的示例可以在 the cookbook 中找到。

AI轻松学

普通人的AI入门指南

帮助你以低成本、零基础学会如何利用AI工具。AI就像办公软件一样,是每个人的必备技能。 掌握AI会让你在求职中占据优势,在未来的工作和学习中事半功倍。

查看详情>
未经允许不得转载:首席AI分享圈 » OPENAI o1(推理模型)使用指南,提示词编写建议
分享到

首席AI分享圈

首席AI分享圈专注于人工智能学习,提供全面的AI学习内容、AI工具和实操指导。我们的目标是通过高质量的内容和实践经验分享,帮助用户掌握AI技术,一起挖掘AI的无限潜能。无论您是AI初学者还是资深专家,这里都是您获取知识、提升技能、实现创新的理想之地。

联系我们