2024.09.12 OpenAI 发布OpenAI o1 Preview和OpenAI o1-mini
相关资料:
-
OpenAI官宣:openai.com/index/intro…
-
OpenAI o1模型API文档:platform.openai.com/docs/guides…
性能基准和服务能力:
1.1. 性能基准:
| 模型 | 额度 |
|---|---|
| o1 Preview | 30 message/week |
| o1-mini | 50 message/week |
- 即使是购买了最高级订阅(Tier 5)的用户,o1-preview的限流值也仅为20RPM。 |
|---|
1.2. 基础能力:
| 能力 | 支持情况 |
|---|---|
| 多模态 | 不支持(预览版本结束后可能支持) |
| 消息类型 | 不支持system message |
| 流式输出 | 不支持 |
| 工具调用 | Tool/Function Calling和响应格式参数都不支持 (预览版本结束后可能支持) |
| Logprobs(输出Token的似然概率值) | 不支持 |
| 配置参数(如temperature、top_p等) | 不支持(目前全部参数固定为0) |
1.2. 成本:
| 模型 | 输入token价格(以美元计价) | 输出token价格(以美元计价) |
|---|---|---|
| OpenAI o1 | $15.00(¥105) / 100万token | $60.00(¥420) / 100万token |
| OpenAI o1-mini | $3.00 / 100万token | $12.00 / 100万token |
| GPT-4o (08-06) | $2.5 / 100万token | $10.00 / 100万token |
| GPT-4o mini | $0.150 / 100万token | $0.600 / 100万token |
| Claude 3.5 Sonnet | $3.00 / 100万token | $15 / 100万token |
为了防止对钱没有概念,qwen-max的token价格为:
-
输入token:¥40 / 100万token
-
输出token:¥120 / 100万token
模型的工作流程
- 用户给定一个问题后,开始反复自问自答的CoT(Chain of Thought)流程。
- 中间思考过程的output也会以输出token计价。
- 上一步的输入、推理过程和输出,会作为下一步的输入,如此反复迭代。
CoT的核心是使用Prompt来引导大模型在最后给出回答之前进行反复思考/推理。判断是否应该给出回答的标准,来自System Message里设定的相关prompt。System Message在Agent中起到决定性作用。
因此, 从形式上看,GPT o1-preview是将以往CoT形式的Agent模式内置了,一个CoT Agent通常需要System message来告诉大模型如何思考、如何判断回答是否有帮助、如何判断思考过程是否应该结束(直到给用户好的结果)。
2.1. 从结果看问题:为什么o1会不支持System Message?
CoT/ToT/ReAct Agent的核心都是需要一个好的Sytem Message:告诉告诉大模型如何推理、如何判断回答的好坏、如何进行下一步动作。下面是一个ReAct Agent的System Message示例,用来提示大模型如何一轮轮的自我反思、提升,最终给出问题答案:
Respond to the human as helpfully and accurately as possible.
{{instruction}}
You have access to the following tools:
{{tools}}
Use a json blob to specify a tool by providing an action key (tool name) and an action_input key (tool input).
Valid "action" values: "Final Answer" or {{tool_names}}
Provide only ONE action per $JSON_BLOB, as shown:
```
{
"action": $TOOL_NAME,
"action_input": $ACTION_INPUT
}
```
Follow this format:
Question: input question to answer
Thought: consider previous and subsequent steps
Action:
```
$JSON_BLOB
```
Observation: action result
... (repeat Thought/Action/Observation N times)
Thought: I know what to respond
Action:
```
{
"action": "Final Answer",
"action_input": "Final response to human"
}
```
Begin! Reminder to ALWAYS respond with a valid json blob of a single action. Use tools if necessary. Respond directly if appropriate. Format is Action:```$JSON_BLOB```then Observation:.
{{historic_messages}}
Question: {{query}}
{{agent_scratchpad}}
Thought:
ReAct模式包含三个环节:Reasoning、Acting、Observing。对应的Prompt部分内容为:
Action:
Provide only ONE action per $JSON_BLOB, as shown: ``` { "action": $TOOL_NAME, "action_input": $ACTION_INPUT } ```
Observing:
Observation: action result ... (repeat Thought/Action/Observation N times)
Reasoning:
Question: input question to answer Thought: consider previous and subsequent steps Action: ``` $JSON_BLOB ``` Observation: action result ... (repeat Thought/Action/Observation N times) Thought: I know what to respond Action: ``` { "action": "Final Answer", "action_input": "Final response to human" } ```
GPT o1-preview是把GPT编排为一个CoT Agent开放给用户的,也不难理解为什么GPT o1-preview会不支持System Message这种最基础的对话功能:因为一个大语言模型,只能接受一个system message,而OpenAI内部已经给大模型配置了system message,让其作为一个CoT Agent向用户提供服务。除非OpenAI进行不兼容变更,推出能接受两个System Message的大语言模型,否则GPT o1可能永远都不会支持System Message了。
2.2. o1与传统LLM的训练的区别:
关于o1的训练方式,官方只给出这一段内容,下面是翻译:
通过强化学习,o1学会了如何干预链式思考过程并且修正它使用策略。它学着如何辨别并改正犯的错误,能够试着将复杂的任务拆解为简单的步骤,并且当现有策略效果不好使会尝试着更换一个新的思考推理策略。
过往的LLM是通过生成一系列候选Token以及每个Token对应的概率(LogProbs),并从中选取概率最高的Token作为实际输出的Token。这些LLM的训练是从足够大的数据集中学习一个模式:如何从给定输入,映射生成一系列的词作为回答结果。
Jerry Tworek透露o1的训练过程使用了全新的算法和数据集1。o1具体的训练流程、思路,OpenAI没有透出,但是Sam Witteveen发表了视频从专业的视角分析推测相关细节。
我们可以猜测一下,GPT o1系列模型的训练的核心环节分为两步:
- 第一步,通过设定合适的评分方式(具体未知,或许是通过Prompt让大模型自己评分、让专家反馈或者程序定义的评分标准),在强化学习每一轮迭代中,GPT o1系列模型都会进行反复思考、推理,随后给出回答结果,并根据最后评分调整自身的推理方式和拆解问题的策略。(这里先标注一下,可以从工程角度来类比推理这件事,方便理解)
- 第二步,当GPT o1针对一个问题反复思考、推理足够多轮次后,可以认为o1的回答是接近人类专家的答案了。这样就可以把GPT o1的输入和输出组合为新的大模型训练语料库,去训练出推理能力更强的大模型,装配进GPT o1系列模型的Agent框架中后,再回到第一步用强化学习去训练Agent框架。
Reddit论坛上有人宣称用逆向工程解析出了OpenAI o1模型的架构图2:
但这每个环节拆出来看,似乎只是一个放诸四海皆准的通用架构图,特别是其中强化学习部分基本套用了DLRL(深度强化学习)的流程框架。然而框架中的思想和Sam Witteveen的视频中部分想法一样:训练出Agent后,构建CoT数据集反过来再训练大模型本身,然后再用微调后的大模型构建新的Agent去训练推理逻辑,如此形成一个闭环。
2.3. 为什么强化学习能训练模型的推理方式和拆解问题的策略?
这里用一个多Agent的框架来模拟大模型拆解问题并进行推理的过程:
大模型拆解问题并且推理的过程,有点像人格分裂的过程。大模型会将一个问题拆分并分配到不同角色身上,每个角色解决子问题时,大模型会作为特定的专业角色专门解决对应子问题。
因此,在多Agent框架中,解决问题和推理的过程,实际是路由的艺术。遇到一个问题时,大模型需要知道把这个问题拆解成哪几部分,各个子问题路由到谁来处理。如果把GPT o1比作一个Agent框架,强化学习训练的内容,正是这个任务拆解策略,以及将任务分配给哪个角色来解决。但是GPT o1中可能不会有这种显式的角色划分,具体细节还要看OpenAI公不公布(名字带Open的反而最不Open)。
小结:
- 从成本视角:GPT-o1中CoT Agent的多轮交互模式下,token消耗难以控制,成本可能将远远不止明面上的6倍。
- 从用户体验视角:CoT Agent形态的GPT-o1的多轮思考方式,导致First Token时延比普通大模型要高得多,不适合实时对话场景的业务中;而o1系列模型的token限流条件又不适合大范围的离线任务使用。
- 从产品视角:GPT o1系列开启了新的赛道,不再仅提供模型服务,而是在模型服务之上提供训练调优好的Agent来帮助用户解决更复杂的任务。虽然OpenAI将o1定义为Reasoning Model,但实际形态上o1似乎可以叫做Agent。