返回博客

AI 入门指南

系统提示词与温度:它们的作用以及如何设置

系统消息和温度在 OpenAI 兼容请求中的作用,附带可发送到 CheapTokens 模型的 Python 和 curl 示例。

作者:CheapTokens Team发布于 更新于 5 分钟阅读

聊天请求示意图:包含规则的系统消息、包含任务的用户消息,以及一个温度旋钮
本页内容
  1. 什么是系统提示词?
  2. 如何编写有用的系统提示词
  3. 温度有什么作用?
  4. 同时发送两者的请求
  5. 观察温度的作用
  6. 在哪个模型上尝试
  7. 如果不起作用
  8. 下一步

系统提示词是一条角色为 system 的消息,它告诉模型在每次回答中应如何表现:它是谁、使用什么格式、应避免什么。温度是一个数字,通常在 0 到 2 之间(具体范围取决于模型),用于设定措辞可以有多大变化:低值给出聚焦、可重复的回答,高值给出更多变化的回答。两者都放入同一个 Chat Completions 请求中,你将该请求发送到 https://api.cheaptokens.dev/v1。

下面介绍:各自是什么、从哪些值开始,以及一个可以在 Python 或 curl 中运行的请求。如果你还没有发送过请求,请先看使用 CheapTokens 发送你的第一个 API 请求。

什么是系统提示词?#

聊天请求是一个消息列表,每条消息都有一个角色。Chat Completions 参考文档列出了四种:system、user、assistant 和 tool(DeepSeek API 参考文档,查阅于 2026 年 10 月 22 日)。对于第一个请求,你需要三种:

  • system —— 来自你(开发者)的常驻指令。模型将它们视为对话的规则。
  • user —— 用户在本轮中提出的问题或提供的内容。
  • assistant —— 模型先前的回答。当你继续一段对话时,由你自己添加它们。

系统消息需要将 role 设为 system,并将 content 设为字符串。name 字段是可选的。

json
"messages": [
  {"role": "system", "content": "You are an editor. Rewrite the user's text to be shorter and friendlier. Return only the rewritten text."},
  {"role": "user", "content": "Send me the report by tonight or I will be upset."}
]

系统消息放在最前面。用户消息是实际任务。

如何编写有用的系统提示词#

  • 用一句话说明模型在做什么:“你是一名编辑”,“你对支持工单进行分类”。
  • 说明输出格式:“只返回改写后的文本”,“用两句话回答”,“以有效的 JSON 回复”。
  • 用简短、直接的句子给出规则。几行清晰的规则比一大段长文字效果更好。
  • 保持简短。系统提示词会随每个请求发送并计入输入 token,因此较长的提示词每次都要付费。输入和输出如何计费见输入 token 与输出 token。

温度有什么作用?#

模型从一组可能的候选中选择每个下一个 token。温度控制它多严格地坚持最可能的那个。根据 DeepSeek API 参考文档(查阅于 2026 年 10 月 22 日),temperature 接受 0 到 2 的值,默认值为 1:较高的值给出更随机的输出,较低的值给出更聚焦、更确定的输出。不同模型的范围不同:DeepSeek 记录为 0 到 2,Z.ai 记录 GLM-5.3 为 0 到 1(均查阅于 2026 年 10 月 22 日),因此 0 到 1 的值在两者上都安全。请在文档中查看你的模型的范围。

适用于大多数任务的起始值。它们是经验法则,不是保证:

任务 起始值
提取、分类、代码、严格格式 0 到 0.3
问答、摘要、改写 0.3 到 0.7
头脑风暴、命名、创意文本 0.8 到 1

需要知道三件事:

  1. 低温度更可重复,但不是完全相同。 不要依赖逐字节相等的回答。
  2. 更改温度或 top_p,不要同时改两者。 这是 DeepSeek 的建议;top_p 是第二个采样参数,默认值为 1。在你学习期间先不要动它。
  3. 某些模式会忽略温度。 DeepSeek 参考文档说温度在思考模式下没有效果,并且在非思考模式下 top_p 固定为 1.0。如果你更改了某个值却没有看到差异,请先检查模型的模式。

同时发送两者的请求#

将密钥设置为环境变量,这样它永远不会出现在代码中(见什么是 API 密钥以及如何安全存储它)。从 CheapTokens 文档中获取准确的模型 id:不同提供商对同一模型的命名不同。此示例使用 MiniMax-M2.7。

python
import os
from openai import OpenAI

client = OpenAI(
    base_url="https://api.cheaptokens.dev/v1",
    api_key=os.environ["CHEAPTOKENS_API_KEY"],
)

response = client.chat.completions.create(
    model="MiniMaxAI/MiniMax-M2.7",
    messages=[
        {"role": "system", "content": "You are an editor. Rewrite the user's text to be shorter and friendlier. Return only the rewritten text."},
        {"role": "user", "content": "Send me the report by tonight or I will be upset."},
    ],
    temperature=0.3,
    max_tokens=1000,
)

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

使用 curl 的同一请求:

bash
curl https://api.cheaptokens.dev/v1/chat/completions \
  -H "Authorization: Bearer $CHEAPTOKENS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "MiniMaxAI/MiniMax-M2.7",
    "messages": [
      {"role": "system", "content": "You are an editor. Rewrite the user'\''s text to be shorter and friendlier. Return only the rewritten text."},
      {"role": "user", "content": "Send me the report by tonight or I will be upset."}
    ],
    "temperature": 0.3,
    "max_tokens": 1000
  }'

你应该看到: 该句子更简短、更友好的版本,以及作为 finish_reason 的 stop。如果 finish_reason 是 length,则回答达到了 max_tokens 限制;见为什么 AI 回答会在句子中间停止。

观察温度的作用#

理解温度的最好方法是多次提出同一个问题。这个循环使用上面示例中的 client,在 0 和 1 下各发送三次一个简短请求:

python
for temp in (0, 1):
    print("temperature", temp)
    for _ in range(3):
        r = client.chat.completions.create(
            model="MiniMaxAI/MiniMax-M2.7",
            messages=[
                {"role": "system", "content": "Answer with one word."},
                {"role": "user", "content": "Name a fruit."},
            ],
            temperature=temp,
            max_tokens=500,
        )
        print(" ", r.choices[0].message.content)

在 0 时,三行通常是同一个词;在 1 时,你通常会看到更多不同的词。在回答前进行推理的模型可能会将部分 max_tokens 花在该推理上,因此即使是一个词的回答,也要保持限制宽松。然后只更改系统提示词(例如,“用一个词回答,用法语”)并再次运行:系统消息中的规则在每个温度下都适用。

这类实验规模很小。粗略估计,这里是 100 个请求的成本,每个请求约 120 个输入 token 和 80 个输出 token(示例工作负载;token 数量取决于你的提示词):

模型 每次请求 100 次请求 OpenRouter,100 次请求
GLM-5.3-Flash $0.0000056 $0.00056 $0.0011
DeepSeek-V4-Flash $0.0000098 $0.00098 $0.0018
MiniMax-M2.7 $0.000018 $0.0018 $0.0132

每次请求 120 个输入 token 和 80 个输出 token。每 100 万 token 的价格为当前价格,会随我们的资费一同变动;OpenRouter 列显示相同工作负载的参考价格。

在哪个模型上尝试#

  • MiniMax-M2.7 是许多简短测试请求的良好首选,你可以复用它上面的同一系统提示词来比较回答:180K 上下文,最多 8,192 个输出 token,输入和输出两侧都比 OpenRouter 的参考价格便宜。当前价格:输入 $0.05,输出 $0.15 每 1M token。

一个余额覆盖所有模型,因此切换模型只需更改一行 model。所有当前价格都在定价页面上。

如果不起作用#

  • 401 或身份验证错误: 密钥缺失、输入错误,或此终端中未设置环境变量。检查 echo $CHEAPTOKENS_API_KEY。
  • 找不到模型: 从文档中准确复制模型 id,包括前缀。
  • 关于无效参数的错误: 将 temperature 保持在你的模型支持的范围内(0 到 1 是安全的),并传入数字,而不是字符串。
  • 模型忽略你的规则: 将其改为一个简短、直接的句子,移到系统消息的顶部,并重复你想要的确切格式。
  • 更改温度没有任何变化: 你可能正在使用忽略它的模式(见上文),或者回答受到很大限制(“一个词”、“有效 JSON”),以至于几乎没有变化。
  • 回答被截断: 提高 max_tokens;max_tokens 指南解释了如何操作。

下一步#

在系统消息中放入一条清晰的规则,从表格中选择一个温度,并在你自己的任务上运行上面的循环。当结果符合你的要求时,保持系统提示词简短并复用它。在文档中获取密钥并查看当前价格。