前置知识

阅读本文前,建议先了解:


一、什么是 Prompt?

Prompt(提示词) 是你与 LLM 对话时输入的文字。你可以把它理解为:

  • 对 LLM 说话的方式
  • 给 LLM 的”指令”
  • 与 LLM 沟通的”桥梁”
你(输入):"请帮我总结这篇文章的主要内容"
              ↓
             Prompt
              ↓
LLM:返回一篇摘要

[!比喻] Prompt 像什么? Prompt 就像是”魔法师的咒语”。同样的 LLM(就像同一个魔法师),用不同的咒语(Prompt),会召唤出不同的结果。


二、完整提示词的组成要素(核心概念)

广义 Prompt vs 狭义 Prompt

  • 狭义 Prompt:仅指用户当前输入的那句话
  • 广义 Prompt(完整提示词/Full Prompt):系统提示词 + 历史信息 + 用户输入的总和

在实际工程中,**发送给模型的完整 Prompt(Full Prompt)**是由多个部分组成的,而不仅仅是用户当前输入的那句话:

完整 Prompt = 系统提示词 + 历史信息 + 用户输入

2.1 核心概念关系图

这几个概念经常混用,但它们在技术实现和实际应用中有着明确的层级功能区别。我们可以用**“剧本与舞台”**的关系来理解。

┌─────────────────────────────────────────────────────────────────────────┐
│                        上下文窗口 (Context Window)                       │
│                     (LLM 能记住的最大容量/容器)                           │
│                                                                         │
│  ┌───────────────────────────────────────────────────────────────────┐  │
│  │                    完整提示词 (Full Prompt)                       │  │
│  │               (实际发送给模型的所有文本内容)                        │  │
│  │                                                                   │  │
│  │  ┌─────────────────┐  ┌─────────────────┐  ┌─────────────────┐   │  │
│  │  │   系统提示词     │  │     历史信息     │  │     用户输入     │   │  │
│  │  │ (System Prompt) │  │  (History)      │  │  (User Input)   │   │  │
│  │  │                 │  │                 │  │                 │   │  │
│  │  │ ★ 设定角色/规则  │  │ ★ 之前的对话     │  │ ★ 当前的问题     │   │  │
│  │  │ ★ 优先级最高     │  │ ★ 记忆上下文     │  │ ★ 触发新回复     │   │  │
│  │  │ ★ 通常固定不变   │  │ ★ 随对话增长     │  │ ★ 每次变化     │   │  │
│  │  └─────────────────┘  └─────────────────┘  └─────────────────┘   │  │
│  │         │                   │                   │                │  │
│  │         └──────────────────┬──────────────────┘                │  │
│  │                            │                                   │  │
│  │                     合并为 Token 流                              │  │
│  └───────────────────────────────────────────────────────────────────┘  │
│                                                                         │
│  ⚠️ 注意:完整提示词的大小 ≤ 上下文窗口容量                                │
└─────────────────────────────────────────────────────────────────────────┘

2.2 详细定义与区别

概念英文定义作用可变性优先级
上下文窗口Context Window模型一次能处理的最大令牌数 (Token Limit)决定模型能”记住”多少内容固定 (由模型决定,如 8K, 128K)N/A (是限制条件)
系统提示词System Prompt开发者预设的底层指令定义 AI 的身份、底线、风格会话中通常不变最高 (覆盖用户指令)
历史信息History当前会话中过去的对话记录提供记忆,保持对话连贯性随对话轮数增加中 (提供背景)
用户输入User Input用户当前发送的具体消息提出新任务或新问题每条消息都变高 (直接触发任务)
提示词Prompt广义:上述所有内容总和
狭义:仅指用户输入
驱动模型生成输出的燃料取决于指代范围取决于内容

2.3 它们如何协同工作?(动态流程)

┌─────────────────────────────────────────────────────────────────────┐
│                       对话进行中的动态变化                            │
└─────────────────────────────────────────────────────────────────────┘

【第 1 轮对话】
┌───────────────────────────────────────────────┐
│ 上下文窗口 [====================......] 20%   │
│ [System] + [User: 你好]                       │
└───────────────────────────────────────────────┘
         ↓ 生成回复

【第 10 轮对话】
┌───────────────────────────────────────────────┐
│ 上下文窗口 [================================] 80% │
│ [System] + [历史 1-9 轮] + [User: 继续]        │
└───────────────────────────────────────────────┘
         ↓ 生成回复

【第 100 轮对话 (超出窗口)】
┌───────────────────────────────────────────────┐
│ 上下文窗口 [================================] 100%│
│ [System] + [历史 90-99 轮] + [User: 继续]      │
│            ↑                                  │
│      最早的历史被"遗忘"(截断)                    │
└───────────────────────────────────────────────┘

关键点说明:

  1. 包含关系System Prompt + History + User Input 共同组成了发送给模型的 Full Prompt
  2. 容量限制:这个 Full Prompt 的长度不能超过 Context Window
  3. 遗忘机制:当对话过长,History 会被截断(通常是最早的对话先被丢弃),但 System Prompt 通常会被强制保留在窗口最前端。

2.4 通俗类比:剧场演出

为了更好理解,我们可以把它们比作一场话剧演出

概念剧场类比说明
上下文窗口舞台的大小舞台只有这么大,能站的人和道具有限。如果人太多,最早上台的得下去
系统提示词剧本大纲与导演要求”这是一场喜剧,演员不能骂人,必须穿古装”。这是演出前定好的,整场演出不能变
历史信息已经演过的剧情观众和演员需要记得前面发生了什么,剧情才能连贯
用户输入观众此刻的互动/下一句台词观众说:“主角现在该做什么?” 演员根据剧本和之前的剧情来回应
提示词整场演出的所有信息包演员在开口前,脑海里综合了剧本、之前的剧情和观众的互动,这些总和就是 Prompt

2.5 常见误区澄清

┌─────────────────────────────────────────────────────────────────┐
│                        误区 vs 真相                              │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  ❌ 误区 1: "Prompt 就是用户输入的那句话"                         │
│  ✅ 真相:工程上,Prompt 是 System+History+Input 的总和           │
│                                                                 │
│  ❌ 误区 2: "上下文窗口越大,模型越聪明"                          │
│  ✅ 真相:窗口大代表"记忆力好",不代表"智商高"(推理能力)           │
│                                                                 │
│  ❌ 误区 3: "System Prompt 可以被用户输入覆盖"                    │
│  ✅ 真相:通常 System 优先级更高,但复杂的用户输入可能诱导越狱     │
│                                                                 │
│  ❌ 误区 4: "历史信息会永远保存"                                  │
│  ✅ 真相:超过上下文窗口后,旧历史会被丢弃 (除非使用外部向量数据库)  │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

三、为什么 Prompt 如此重要?

同样的 LLM,不同的 Prompt,效果可能天差地别:

❌ 差 Prompt:
"写一首诗"

✅ 好 Prompt:
"请写一首关于春天的七言绝句,要求:
1. 描绘花朵盛开的景象
2. 表达对生机勃勃的喜爱
3. 押 ang 韵"
Prompt 质量效果
模糊、简单LLM”猜测”你的意图,可能答非所问
清晰、具体LLM 精准理解,给出你想要的结果

这就是所谓的 “Prompt Engineering”(提示词工程) ——通过优化 Prompt 来获得更好的结果。


四、LLM 是如何处理 Prompt 的?(关键原理)

这部分很重要!理解原理,才能更好地编写 Prompt。

4.1 完整流程回顾

回顾 第一章 的内容,LLM 处理 Prompt 的流程是:

你输入的 Prompt
    ↓
分词器 → Token 序列
    ↓
嵌入层 → 向量表示
    ↓
Transformer 处理(注意力机制)
    ↓
预测下一个词的概率
    ↓
自回归生成 → 输出回答

4.2 LLM 如何”理解”Prompt?

LLM 并不像人类一样”理解”Prompt,它做的事情是:根据训练时学到的语言规律,预测最可能的下一个词。

这意味着:

  1. LLM 没有”意图”:它不知道你真正想要什么,只是根据概率猜测
  2. LLM 很”听话”:你说什么,它就往那个方向猜
  3. LLM 受限于训练数据:它会继承训练数据中的偏见和知识

重要提醒

LLM 不是”智能生命体”,它只是一个超级强大的”概率预测机器”。理解这一点,是写好 Prompt 的第一步。

4.3 Prompt 中的信息是如何被”利用”的?

LLM 处理 Prompt 时,会做以下几件事:

Prompt: "你是一个专业的数学老师,请解答这道数学题:1+1=?"
              ↓
         LLM 内部处理
              ↓
┌─────────────────────────────────────────────────────┐
│ 1. 识别角色                                         │
│    "数学老师" → 激活相关的语言模式                   │
│                                                     │
│ 2. 理解任务                                         │
│    "解答数学题" → 这是一个问答任务                   │
│                                                     │
│ 3. 提取关键信息                                     │
│    "1+1=?" → 这是需要计算的表达式                   │
│                                                     │
│ 4. 结合上下文                                       │
│    之前的对话历史(如果有的话)                        │
└─────────────────────────────────────────────────────┘
              ↓
        生成回答:"1+1=2"

五、Prompt 的组成要素(用户视角)

从用户构建 Prompt 的角度,一个完整的 Prompt 通常包含以下要素:

5.1 指令(Instruction)

告诉 LLM 要做什么:

"请总结..."
"翻译以下..."
"写一篇关于..."

5.2 背景(Context)

提供必要的背景信息:

"假设你是一个物理学家..."
"基于以下文档..."

5.3 输入数据(Input)

具体要处理的内容:

"请翻译这句话:Hello World"

5.4 输出格式(Output Format)

指定期望的输出形式:

"用 JSON 格式返回"
"用列表形式列出"
"不超过 100 字"

5.5 示例

【完整 Prompt 示例】

角色:你是一位专业的美食评论家(背景)
任务:请点评以下餐厅(指令)
餐厅:鼎泰丰,主打小笼包(输入)
要求:用 200 字以内的评论,突出口味和服务(输出格式)

六、Prompt 的局限性

虽然 Prompt 很强大,但它也有局限:

6.1 无法突破知识边界

LLM 的知识局限于训练数据,不知道训练之后的新信息。

❌ "2024 年最新的 iPhone 型号是什么?"
   → LLM 可能不知道(如果训练数据截止到 2023 年)

6.2 可能产生”幻觉”

LLM 可能生成看似合理但实际错误的内容。

❌ "请提供北京到上海的距离"
   → LLM 可能给出一个编造的数字

6.3 对措辞很敏感

细微的措辞变化可能导致完全不同的结果。

"分析这篇文章的优点" vs "批评这篇文章的缺点"
→ 可能给出完全不同的回答

6.4 无法真正”思考”

LLM 只是预测下一个词,没有真正的推理能力(虽然可以伪装)。

应对局限性的方法

  • 使用 上下文 提供准确信息
  • 使用 Function Call 获取实时信息
  • 通过好的 Prompt 技巧引导更准确的回答

七、总结:关系公式

┌─────────────────────────────────────────────────────────────────┐
│                                                                 │
│   发送给 LLM 的实际数据 (Full Prompt)                             │
│         =                                                       │
│   System Prompt (角色)                                          │
│   +                                                             │
│   Conversation History (记忆)                                   │
│   +                                                             │
│   Current User Input (任务)                                     │
│                                                                 │
│   ⚠️ 约束条件:                                                  │
│   Length(Full Prompt) ≤ Context Window Size                     │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

核心要点:

  • Prompt 是与 LLM 沟通的桥梁(广义包含 System+History+Input)
  • LLM 处理 Prompt 的方式是:根据概率预测下一个词
  • 好的 Prompt 需要:清晰的指令 + 充分的背景 + 明确的输出格式
  • 理解 LLM 的局限性,才能更好地使用它

[!比喻] 一句话总结 上下文窗口是容器,系统提示词是容器的底色,历史信息是容器里已装的水,用户输入是刚倒入的新水,而提示词是容器里所有水的总和。


八、延伸阅读