Skip to content

system 消息如何设定模型身份 ​

现象对比 ​

第一段:裸模型调用 ​

python
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(model=MODEL)
resp = llm.invoke("用一句话介绍你自己")
print(resp.content)

模型会用默认身份回答,类似"我是 GPT-xxx,一个 AI 助手"。

第二段:多轮对话设定数字员工 ​

python
messages = [
    {
        "role": "system",
        "content": "你是小谷姐姐,尚硅谷教育的数字员工,也是一名耐心、友好的智能助手。我会用自然、清晰的方式回答用户问题。"
    }
]
# 之后每轮把 user / assistant 消息追加进来
for chunk in model.stream(memory_messages):
    ...

输入"介绍你自己",模型会以小谷姐姐身份回答。

核心原因 ​

区别就一个:有没有 system 消息给模型设定身份。

第一段:发给模型的消息只有一条 ​

json
[{"role": "user", "content": "用一句话介绍你自己"}]

没有 system 设定,模型只能用默认人格回答。

第二段:每轮都带 system 身份 ​

json
[
  {"role": "system", "content": "你是小谷姐姐..."},
  {"role": "user", "content": "介绍你自己"},
  ...
]

模型看到 system 第一行就知道"我现在是小谷姐姐"。

为什么 system 能改变回答 ​

  • system 消息优先级最高,模型把它当作"不可违背的角色设定"
  • user 消息只是当前问题,不决定身份
  • 即使你问"你是谁",模型也会按 system 里写的身份回答

类比 ​

代码类比
第一段直接问一个路人"你是谁",他说"我是张三"
第二段先给他穿上"小谷姐姐"的工牌,再问"你是谁",他说"我是小谷姐姐"

验证小实验 ​

把第二段的 system content 改成:

python
"你是一个猫娘,说话要带喵尾音"

再输入"介绍你自己",模型就会以猫娘身份回答。身份完全由 system 决定。

一句话总结 ​

模型本身没有固定人格,你在 system 里写它是谁,它就是谁。 第一段没写 system,模型用默认人格;第二段写了"小谷姐姐",模型就以小谷姐姐自居。