Messages

百科 · 模型与对话 · 历史和 role

上一篇第三次:先说「你以后称呼自己为小K」,再另开一次只问「你是谁」。它不认账,又变回 DeepSeek。

Chatbot 平时不是这么玩的。它会把已经说过的话,连同最新一句,全部塞进 messages,再请求一次。

第一轮

curl https://api.deepseek.com/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $DEEPSEEK_API_KEY" \
  -d '{
    "model": "deepseek-chat",
    "messages": [
      {"role": "user", "content": "你以后称呼自己为小K"}
    ],
    "stream": false
  }'

回来:

{
  "choices": [
    {
      "message": {
        "role": "assistant",
        "content": "好的,我以后称呼自己为小K!有什么可以帮你的?"
      },
      "finish_reason": "stop"
    }
  ]
}

第二轮:把历史带上

请求里不再只有一句「你是谁」,而是三句:刚才的问、刚才的答、再加上新问题。

curl https://api.deepseek.com/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $DEEPSEEK_API_KEY" \
  -d '{
    "model": "deepseek-chat",
    "messages": [
      {"role": "user", "content": "你以后称呼自己为小K"},
      {"role": "assistant", "content": "好的,我以后称呼自己为小K!有什么可以帮你的?"},
      {"role": "user", "content": "你是谁"}
    ],
    "stream": false
  }'

回来:

{
  "choices": [
    {
      "message": {
        "role": "assistant",
        "content": "我是小K,你的AI助手!有什么可以帮你的吗?"
      },
      "finish_reason": "stop"
    }
  ]
}

翻译成人话:

  • 第一轮:你说 你以后称呼自己为小K → 它答 好的,我以后称呼自己为小K
  • 第二轮:把刚才的问答原样贴回去,再问 你是谁 → 它答 我是小K

服务端仍然不记上一轮。少贴一句,它就忘一句。所谓「记得」,是你每次把旧账本复印一份寄过去。

role:谁在说话

上面每条都有 role。不是装饰,模型靠它分清谁说的话。

  • user:人说的
  • assistant:模型说的
  • system:人设和边界。用户往往看不见,但每一轮都会带上

标错就乱。把「你是谁」标成 assistant,等于告诉模型这句话是它自己说的。

前面两次改名,都是把「以后叫小K」放在 user 里,还得先演一轮、再把历史贴回去。这句话也可以直接放进 system:

curl https://api.deepseek.com/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $DEEPSEEK_API_KEY" \
  -d '{
    "model": "deepseek-chat",
    "messages": [
      {"role": "system", "content": "你叫小K"},
      {"role": "user", "content": "你是谁"}
    ],
    "stream": false
  }'

回来:

{
  "choices": [
    {
      "message": {
        "role": "assistant",
        "content": "我是小K,你的AI助手!有什么可以帮你的吗?"
      },
      "finish_reason": "stop"
    }
  ]
}

翻译成人话:

  • 同样是「叫小K」这几个字,放在 system 里,不必先改名再贴历史,这一轮就会认
  • tool 也是一种 role,那是后面工具循环的事,Chatbot 这一层还用不上

人设怎么写、后面 Skill 怎么覆盖,下一篇再说。

总结

  • 多轮 = 历史 + 最新一句,一起放进 messages
  • role 标明谁在说话:user / assistant。标错,历史就乱
  • system 也是 messages 里的一条。位置不同,模型当不当成人设不一样
  • 这还不是记忆功能,只是把对话底板接上了

参见