OpenAI 的 o1 和 o3“推理模型”文档包含一些关于如何最好地提示它们的有趣提示:
- 开发人员消息是新的系统消息:从
o1-2024-12-17
开始,推理模型支持developer
消息而不是system
消息,以与模型规范中描述的命令行为链保持一致。
这似乎是纯粹为了与他们的教学层次概念保持一致而进行的美学改变。据我所知,旧的system
提示继续像以前一样工作 – 我们鼓励您使用新的developer
消息类型,但这对实际发生的情况没有影响。
由于我的 LLM 工具已经内置了llm --system "system prompt"
选项,该选项适用于来自不同提供商的多个不同模型,因此我不会急于采用这种新语言!
- 使用分隔符以保持清晰:使用 Markdown、XML 标签和部分标题等分隔符来清楚地指示输入的不同部分,帮助模型正确解释不同的部分。
Anthropic 一段时间以来一直鼓励使用XML 式分隔符(我说 -ish 是因为不要求生成的提示是有效的 XML)。我的files-to-prompt工具有一个-c
选项,可以输出 Claude 风格的 XML,在我的实验中,这个选项也适用于 o1 和 o3:
git 克隆 https://github.com/tursodatabase/limbo cdlimbo /绑定/python 要提示的文件。 -c | llm -m o3-mini \ -o Reasoning_effort 高 \ --system '编写带有大量使用示例的详细自述文件'
- 限制检索增强生成 (RAG) 中的附加上下文:提供附加上下文或文档时,仅包含最相关的信息,以防止模型的响应过于复杂。
这让我觉得 o1/o3 根本不是实现 RAG 的好模型 – 通过 RAG,我希望能够将尽可能多的额外上下文转储到提示中,并将其留给模型来找出相关的内容。
- 首先尝试零样本,然后根据需要尝试少量样本:推理模型通常不需要少量样本来产生良好的结果,因此请尝试先编写没有示例的提示。如果您对所需的输出有更复杂的要求,那么在提示中包含一些输入和所需输出的示例可能会有所帮助。只需确保示例与您的提示说明非常一致,因为两者之间的差异可能会产生不良结果。
提供示例仍然是我所知道的最有力的提示技巧,因此很有趣的是,在这里看到建议仅在零样本不起作用时才切换到示例。
- 对于您的最终目标要非常具体:在您的说明中,尝试给出非常具体的参数以实现成功的响应,并鼓励模型继续推理和迭代,直到它符合您的成功标准。
这是有道理的:推理模型会“思考”直到得出结论,因此使目标尽可能明确会带来更好的结果。
- Markdown 格式:从
o1-2024-12-17
开始,API 中的推理模型将避免生成具有 Markdown 格式的响应。当您确实希望在响应中进行 Markdown 格式设置时,要向模型发出信号,请在developer
消息的第一行中包含字符串Formatting re-enabled
。
这对我来说真是一个震惊!我注意到 o3-mini 输出的是•
字符而不是 Markdown *
项目符号,最初认为这是一个错误。
我第一次看到这个是在使用files-to-prompt对limbo/bindings/python运行这个提示时:
git 克隆 https://github.com/tursodatabase/limbo cdlimbo /绑定/python 要提示的文件。 -c | llm -m o3-mini \ -o Reasoning_effort 高 \ --system '编写带有大量使用示例的详细自述文件'
这是完整的结果,其中包括这样的文本(注意奇怪的项目符号):
Features -------- • High‑performance, in‑process database engine written in Rust • SQLite‑compatible SQL interface • Standard Python DB‑API 2.0–style connection and cursor objects
我用修改后的提示再次运行它:
Formatting re-enabled. Write a detailed README with extensive usage examples.
这次又回到了正确的 Markdown,在这个 Gist 中呈现。这做得非常好,并且包含使用有效 Markdown 语法的项目符号列表:
- ** ` make test ` ** :使用 pytest 运行测试。 - ** ` make lint ` ** :运行 linters (通过[ ruff ] ( https://github.com/astral-sh/ruff ) )。 - ** ` make check-requirements ` ** :验证` requirements.txt`文件与` pyproject.toml`同步。 - ** ` makecompile-requirements ` ** :使用 pip-tools 编译` requirements.txt`文件。
(使用像这样的法学硕士让我开始使用文档不足的库是我每周使用几次的技巧。)
标签: o1 、 openai 、 o3 、 markdown 、 ai 、 llms 、提示工程、生成人工智能、推理缩放、 rag 、人工智能辅助编程、文档
原文: https://simonwillison.net/2025/Feb/2/openai-reasoning-models-advice-on-prompting/#atom-everything