模块1:AI 对话的底层逻辑
难度:⭐ 入门 | 建议时长:2-3小时
目标:理解 AI 的工作方式、关键参数、模型差异,建立正确的心智模型
1.1 AI 是怎么”说话”的
AI 不是”理解”你,而是”接话”
想象一个人读过全世界所有的书、文章、对话记录,但从来没有真正”生活”过。你说”床前明月”,他立刻接”光”——不是因为他懂李白的思乡之情,而是因为他见过一万次这个组合,知道”光”出现在这后面的概率最高。
这就是 AI 的本质:超级模式匹配器。
你输入的文字 → AI 把文字拆成碎片 → 根据训练数据预测最可能的下一个碎片 → 一个接一个生成回复
关键认知:四个”不是”
| 你以为的 AI | 实际的 AI |
|---|---|
| 像人一样”理解”含义 | 基于概率进行模式匹配 |
| 有自己的想法和观点 | 根据输入生成最可能的输出 |
| 说一次就记住了 | 每次对话有长度限制,超出就”忘了” |
| 会自动推断你的意思 | 你说什么它就处理什么,不说就不管 |
这意味着什么?
- 你说得越清楚,AI 表现越好 — 你提供的线索越多,AI 匹配到的模式越准确
- AI 不会”猜”你的意思 — 模糊的输入 = 模糊的输出
- AI 没有”常识判断” — 你认为理所当然的事情,需要明确说出来
- 同样的提示可能给出不同结果 — 因为生成过程有随机性(后面会讲到这就是 Temperature)
1.2 Token:AI 的”计量单位”
AI 不认字,认”碎片”
你和朋友聊天按”字”算,但 AI 不读”字”,它读的是 Token — 一种把文字切碎后的碎片。
类比:拼图碎片。
"我喜欢吃苹果" → 对你来说是 6 个字
→ 对 AI 来说是 ["我", "喜欢", "吃", "苹果"] 4 个 Token
"I love apples" → 对你来说是 3 个单词
→ 对 AI 来说是 ["I", " love", " apples"] 3 个 Token
中英文 Token 效率差异
同样的意思,中文通常比英文消耗更多 Token。
这是因为大部分模型的训练数据以英文为主,英文的切分更高效。
实际测试(近似值):
"人工智能正在改变世界" → 约 7-9 个 Token
"AI is changing the world" → 约 6 个 Token
同样的意思,中文多花了约 30%-50% 的 Token。
这意味着什么? 如果你处理很长的中文文档,会比同等长度的英文文档更快”撞墙”(触达上下文限制)。
上下文窗口:AI 的”书桌”
上下文窗口就是 AI 一次能处理的 Token 总量上限,包括你的输入和 AI 的输出。
类比:书桌大小。
4K Token ≈ 小课桌 → 能放一篇短文(约 3000 字中文)
8K Token ≈ 办公桌 → 能放几页文档
32K Token ≈ 大书桌 → 能放一本小册子
128K Token ≈ 会议桌 → 能放一本书
1M Token ≈ 图书馆桌 → 能放好几本书
内容超出"桌面大小" → 最早放上去的内容会"掉到地上"(被遗忘)
实操建议
1. 长文档分段处理:不要一次性把 10 万字塞给 AI,
分成几段分别处理,最后汇总
2. 精简你的提示词:废话越少,留给 AI 回答的空间越大
3. 了解你用的模型的窗口大小:
GPT-4o:128K Claude:200K(Opus 可达 1M)
Gemini:1M Qwen:128K
4. 注意对话累积:多轮对话中,之前所有的对话都占用窗口,
聊太久 AI 会"忘记"前面的内容
1.3 影响 AI 输出的”隐形开关”
Temperature(温度):AI 的”冒险度”
Temperature 是最重要的参数,控制 AI 输出的随机程度。
类比:去餐厅点菜。
Temperature = 0(保守)
→ "老样子,来碗牛肉面"
→ 每次去都点一样的,稳定可靠,但永远不会有惊喜
Temperature = 0.7(适中)
→ "今天想试试新菜,但别太离谱"
→ 有一些变化和创意,偶尔给你惊喜
Temperature = 1.0(冒险)
→ "随便来,越新奇越好"
→ 可能吃到惊艳的新菜,也可能踩雷
实操对比:
提示词:"用一句话形容春天"
Temperature = 0(跑3次结果一样):
→ "春天是大地苏醒的季节,万物复苏,生机盎然。"
→ "春天是大地苏醒的季节,万物复苏,生机盎然。"
→ "春天是大地苏醒的季节,万物复苏,生机盎然。"
Temperature = 1.0(跑3次结果不同):
→ "春天像一个赖床后终于起来的人,伸着懒腰把花都抖落了一地。"
→ "冰河炸裂的那声脆响,就是春天的敲门声。"
→ "春天是调色盘打翻在大地上的那场意外。"
Top-P(核采样):AI 的”选择范围”
Top-P 控制 AI 从多大范围的候选词中选择。又叫”核采样”。
类比:自助餐取餐。
Top-P = 0.1 → 只从最热门的几道菜里选(安全但单调)
Top-P = 0.5 → 从热门菜中挑(保守,结果可控)
Top-P = 0.9 → 几乎所有菜都考虑(丰富但可能选到怪菜)
Top-P = 1.0 → 所有候选词都考虑(默认值,最大灵活度)
和 Temperature 的区别(容易混淆):
| 维度 | Temperature | Top-P |
|---|---|---|
| 控制方式 | 调整概率分布的”尖锐度” | 截断候选词的”范围” |
| 类比 | 厨师”敢不敢冒险” | 菜单”摆出多少道菜” |
| 取值范围 | 0 - 2 | 0 - 1 |
经验法则:调一个就够,别同时调。大部分时候调 Temperature 就行,Top-P 保持默认 1.0。
Frequency Penalty(频率惩罚):AI 的”复读机检测器”
Frequency Penalty 控制 AI 重复使用同一个词的程度。值越大,越避免重复用词。
类比:写作老师批改作文。
Frequency Penalty = 0(不管)
→ 老师不在意重复
→ AI 可能反复用同一个词:"春天很美,春天很美,春天很美..."
Frequency Penalty = 0.5(适中)
→ 老师提醒:"换个说法吧"
→ AI 主动换近义词:"春天很美丽、春日宜人、春季迷人..."
Frequency Penalty = 1.5(严格)
→ 老师强制:"不准重复用词!"
→ AI 拼命找新词,可能开始用生僻字甚至语句不通
实操对比:
提示词:"写 3 句赞美春天的话"
Frequency Penalty = 0:
→ 春天很美。
→ 春天的花很美。
→ 春天的天空也很美。
("春天""美"反复出现)
Frequency Penalty = 1.0:
→ 春日的繁花点缀大地。
→ 暖风轻拂,万物复苏。
→ 桃李争艳,生机盎然。
(用词丰富,几乎不重复)
取值范围:通常 -2.0 到 2.0,默认 0。
- 正值:抑制重复(值越大越禁止重复词)
- 负值:鼓励重复(特殊场景才用,如歌词复歌、押韵诗)
Presence Penalty(存在惩罚):AI 的”话题切换器”
Presence Penalty 控制 AI 是否倾向于引入新话题。值越大,越鼓励讲新东西。
类比:饭桌上的话题转移。
Presence Penalty = 0(不管)
→ 大家就一个话题聊到底
→ AI 围绕一个主题反复展开:"工作,工作的难处,工作的压力..."
Presence Penalty = 0.5(适中)
→ 偶尔换个话题
→ AI 适度引入新角度:"工作 → 同事关系 → 兴趣爱好..."
Presence Penalty = 1.5(活跃)
→ 频繁切换话题
→ AI 不停引入新概念,可能跑题
和 Frequency Penalty 的区别(最容易搞混):
| 维度 | Frequency Penalty | Presence Penalty |
|---|---|---|
| 关注对象 | 同一个词用了多少次 | 某个词/主题是否已出现过 |
| 触发条件 | 词的出现频次累加(用越多惩罚越大) | 词只要出现过一次就触发(一锤子买卖) |
| 目的 | 让用词多样化 | 让话题多元化 |
| 类比 | 别一直用同一个字 | 别一直围绕同一件事 |
实操对比:
提示词:"给我讲讲学习编程"
Presence Penalty = 0:
→ 持续围绕"编程基础"展开:变量、循环、函数、数据结构...
(一直在编程这个话题里深挖)
Presence Penalty = 1.0:
→ 涉及更多周边话题:编程基础 → 学习方法 → 心态调整 → 职业发展...
(话题广度更大)
取值范围:通常 -2.0 到 2.0,默认 0。
⚠️ 新手忠告:四个参数不要一起调!越多参数同时变化越难判断哪个起的作用。 建议顺序:先只调 Temperature → 不够再调 Top-P → 想要多样化用词调 Frequency Penalty → 想要话题发散调 Presence Penalty。
什么时候调什么参数?
| 任务类型 | Temperature | Top-P | Frequency Penalty | Presence Penalty |
|---|---|---|---|---|
| 写代码 | 0 - 0.2 | 默认 1.0 | 0 | 0 |
| 数据分析 | 0 - 0.2 | 默认 1.0 | 0 | 0 |
| 翻译 | 0.2 - 0.4 | 默认 1.0 | 0 - 0.3 | 0 |
| 商务写作 | 0.4 - 0.7 | 默认 1.0 | 0.3 - 0.5 | 0 - 0.3 |
| 文案创意 | 0.7 - 1.0 | 默认 1.0 | 0.5 - 0.8 | 0.3 - 0.5 |
| 头脑风暴 | 0.8 - 1.0 | 默认 1.0 | 0.5 - 1.0 | 0.5 - 1.0 |
| 长文创作 | 0.7 - 0.9 | 默认 1.0 | 0.5 - 1.0 | 0.5 - 0.8 |
| 诗歌/故事 | 0.9 - 1.2 | 默认 1.0 | 0.5 - 1.0 | 0.3 - 0.6 |
“默认 1.0” 表示 Top-P 通常不需要调。 这只是经验起点值,实际还要根据效果微调。
在哪里调?
- ChatGPT:设置 → 自定义 → 高级设置(网页版功能有限)
- Claude:API 调用时设置(网页版暂不支持手动调节)
- API 调用:所有模型都支持在请求参数中设置
- 第三方 Playground(如 OpenAI Playground、CHY API 公益站):界面有滑块直接拖
Temperature 实战口诀(一句话记住)
💡 三档判断:
- 执行型任务用 0(代码、数据分析、JSON 提取、分类)—— 要稳定可复现
- 文本生成用 0.7 - 0.9(写作、文案、邮件、报告)—— 要自然但不离谱
- 无特殊需求不超过 1(超过 1 容易胡言乱语,2 是上限)
完整 API 参数速查表
前面只挑了最常调的 4 个参数。如果你直接调 OpenAI / Claude API,还会看到下面这些:
# OpenAI ChatCompletion 完整参数(中文注释版)
client.chat.completions.create(
model="gpt-4o", # 选哪个模型
messages=[...], # 对话历史(含 system / user / assistant)
# —— 随机性控制 ——
temperature=1, # 多样性 0~2,越大越随机;执行任务=0,写作=0.7~0.9
top_p=1, # 核采样:只考虑概率前 N% 的 token;不建议和 temperature 一起改
seed=None, # 随机种子;指定后 + temperature=0 → 几乎可复现同样输出
# —— 输出形态 ——
stream=False, # True = 流式输出(一字一字吐出来);False = 一次性返回
n=1, # 一次返回几条候选回复(n=3 → 拿 3 个版本对比)
max_tokens=100, # 单次回复最多吐多少 token,超过截断
# —— 反重复 / 反单调 ——
presence_penalty=0, # 出现过的 token 概率降权(鼓励引入新话题)
frequency_penalty=0, # 出现越多次降权越大(避免复读机)
logit_bias={}, # 手工对指定 token 加/减权(强制屏蔽某词、强推某词)
)新手最容易忽略的 3 个参数:
| 参数 | 经典坑 | 用法 |
|---|---|---|
seed | 同样 prompt 每次输出都不同,怀疑是模型抽风 | seed 固定 + temperature=0 → 接近可复现 |
max_tokens | 让 AI 写长文却被截断 | 估算输出长度时留足额度(中文 1 字 ≈ 2 token) |
logit_bias | 不知道能强制屏蔽某词 | 给违禁词的 token id 设 -100 → 模型几乎不输出它 |
⚠️ Claude API 参数名略有不同(如
max_tokens必填、没有presence_penalty),实际使用看官方文档。
1.4 不同模型的”性格”差异
同一道菜,不同厨师做出来不一样
你对川菜师傅说”做道鱼”,他做水煮鱼;对粤菜师傅说同样的话,他做清蒸鱼。AI 模型也一样——同样的提示词,不同模型给出的结果风格和质量可能差异很大。
主流模型特点速查
| 模型 | 擅长 | 特点 | 类比 |
|---|---|---|---|
| GPT-4o | 全能、指令跟随 | 听话、稳定,让做什么就做什么 | 靠谱的全能员工 |
| Claude | 长文本、写作、分析 | 细腻、谨慎,会主动说”我不确定” | 认真的分析师 |
| Gemini | 多模态、信息检索 | 与 Google 生态打通,搜索能力强 | 带搜索引擎的助手 |
| DeepSeek | 推理、编程 | 性价比高,中文理解好 | 高性价比的技术宅 |
| Qwen(通义千问) | 中文理解、工具调用 | 中文场景表现优秀 | 最懂中文的助手 |
实操建议
不要只用一个模型。同一个重要任务,至少在 2 个模型上跑一遍对比。
推荐组合:
- 日常使用:GPT-4o 或 Claude(选一个主力)
- 需要创意:Claude(写作质量高)
- 处理长文档:Claude(上下文窗口大)
- 中文场景:DeepSeek 或 Qwen
- 需要联网搜索:Gemini 或带搜索的 GPT
- 预算有限:DeepSeek(API 价格低)
1.5 中英文提示词的选择
一个反直觉的事实
大部分 AI 模型用英文训练数据远多于中文。这意味着:
英文提示词 → 模型更容易匹配到高质量的训练数据 → 某些任务效果更好
中文提示词 → 更自然,但模型可能匹配到的模式少一些
什么时候用英文提示词更好?
✅ 编程相关:代码生成、调试、技术文档
英文:"Write a Python function to parse JSON with error handling"
比中文效果更好,因为训练数据中的代码几乎都是英文上下文
✅ 学术/专业领域:论文解读、专业分析
英文术语更精确,不会因为翻译产生歧义
✅ 指令遵循:复杂的格式要求、多步骤任务
一些模型对英文指令的遵循度更高
什么时候用中文更好?
✅ 中文写作:文案、邮件、报告、公众号文章
AI 需要理解中文的语感和表达习惯
✅ 中国特色场景:法律法规、节日文化、本地商业
"帮我写一段中秋节的祝福语" 用中文更地道
✅ 面向中文读者:最终输出给中国人看的内容
用中文提示 → 中文输出更自然
混合策略(推荐)
对于重要任务,可以混合使用:
方式1:英文指令 + 中文内容
"Summarize the following Chinese article in 3 bullet points,
output in Chinese:
[粘贴中文文章]"
方式2:中文指令 + 英文关键术语
"请分析这段代码的 performance bottleneck,
给出 optimization 建议,用中文回答"
方式3:英文思考 + 中文输出
"Think through this problem in English,
then present your answer in Chinese:
[你的问题]"
1.6 提示词的基本组成
一个完整提示词的四大要素
类比:去餐厅点菜。
| 你说的话 | 服务员的反应 | 对应的提示词要素 |
|---|---|---|
| ”随便来点吃的” | 可能上一盘你不喜欢的菜 | 只有指令,其他全缺 |
| ”来一份宫保鸡丁,微辣” | 准确上菜 | 指令 + 输入 + 部分要求 |
| ”我花生过敏,想吃辣的鸡肉菜,50以内,用小碗装” | 推荐最合适的选择 | 四要素齐全 |
┌──────────────────────────────────────────┐
│ 完整的提示词 │
│ │
│ 1. 指令(Instruction)— 你要 AI 做什么 │
│ 例:翻译、总结、分析、创作... │
│ │
│ 2. 上下文(Context)— 背景信息是什么 │
│ 例:目标读者、使用场景、前提条件 │
│ │
│ 3. 输入数据(Input)— 需要处理什么内容 │
│ 例:一段文本、一个问题、一组数据 │
│ │
│ 4. 输出要求(Output)— 你想要什么样的结果 │
│ 例:格式、长度、语气、风格 │
│└──────────────────────────────────────────┘
实际例子
只有指令: “翻译这句话” → 翻译什么?翻译成什么语言?❌
四要素齐全:
【指令】请将以下中文翻译成英文
【上下文】这是一封商务邮件的开头,收件人是美国客户
【输入】"今天天气真好,希望你一切顺利"
【输出要求】使用正式的商务英语,语气友好专业
小贴士:不是每次都需要四个要素齐全。简单任务用”指令+输入”就够,复杂任务才需要完整的四要素。
1.7 大模型对”位置”的敏感:Lost in the Middle
一个反直觉的现象
把同样的关键信息放在 prompt 的不同位置,模型答对的概率竟然不一样——这不是玄学,是有论文证明的现象。
Stanford 2023 年论文 “Lost in the Middle: How Language Models Use Long Contexts”(arxiv.org/abs/2307.03172)做了一个实验:
任务:给模型 20 段文档 + 1 个问题,让它从文档中找答案
变量:把"含正确答案的那段文档"放在第 1、5、10、15、20 个位置
结果是一条明显的 U 型曲线:
准确率
75% ┤● ← 正确文档放在【开头】(第1位) 时最准
│ \
65% ┤ \ ● ← 放在【结尾】(第20位) 也很准
│ \ /
55% ┤ ●—————●—————●—————● ← 放在中间(第10~15位),准确率掉到接近 baseline
│ (closed-book baseline ≈ 56%,即不看文档瞎猜)
────┴────┴────┴────┴────┴────┴
1st 5th 10th 15th 20th
↑ 含答案的文档位置 ↑
💡 一句话总结:模型对 prompt 开头和结尾的内容更敏感,中间的内容容易被”看漏”。
工程上的 3 条启示
启示 1:重要信息放开头或结尾
❌ 不好:
"今天天气真好。请把下文翻译成英文。明天可能会下雨。
[长长的待翻译文本]
我喜欢吃火锅。"
→ 真正的指令"翻译"被淹没在闲聊中间
✅ 好的:
"请把下文翻译成英文:
[长长的待翻译文本]
要求:保持商务正式语气。"
→ 指令在开头,输出要求在结尾,待处理内容夹在中间
启示 2:先定义角色 = 在开头收窄问题域
03_用示例教会AI.md 的角色提示其实就是利用这个原理——把「你是谁、做什么」放在 prompt 最开头,模型从一开始就锁定问题域,减少二义性。
启示 3:长上下文时要”复述”关键约束
如果 prompt 很长(几千 token),核心约束在中间,模型很可能”看漏”。解决办法:
- 在 prompt 开头列一遍关键约束
- 中间正文照常写
- 结尾再复述一遍最重要的几条约束(这就是「三明治防御」也用到的思路)
与本知识库其他章节的关联
- 这个现象解释了 03_用示例教会AI.md § 3.2 角色提示 为什么”先定义角色”如此有效
- 在 RAG 场景中,这意味着检索到的文档要按相关性排序,最相关的放最前/最后(详见 10_AI应用架构.md § 10.3 RAG)
1.8 一个常被忽略的真相:提示词不会改变模型参数
你和 AI 的对话是”无状态”的
很多人误以为:「我跟 AI 聊得越久,它就越懂我了。」这是错的。
模型的真实工作方式:
你发 prompt → 模型读完 → 一次性生成回复 → 模型回到原样
❌ 不会因为你聊得多就"记住"你
❌ 不会因为你纠正它就"学会"
❌ 不会因为你夸它就"变聪明"
❌ 不会因为你骂它就"变笨"
模型的参数(也就是它的”大脑”)在训练完之后就冻结了。你的每一次对话都不会改变这些参数。
这条事实的 3 个工程后果
后果 1:多轮对话每次都要把历史全发回去
第 1 轮:你说"我叫小明" → AI 回复"你好小明"
第 2 轮:你说"我多大了?" → AI 不知道,因为它"忘了"你叫小明
要让 AI 记得,第 2 轮发出的实际 prompt 是:
[
{"role": "user", "content": "我叫小明"},
{"role": "assistant", "content": "你好小明"},
{"role": "user", "content": "我多大了?"}
]
这就是 token 钱包扁的根源——多轮对话每多一轮,前面所有对话都会作为上下文重新发回去,token 越用越多。
后果 2:你以为”调教好了”的 AI 其实没保留
下次开个新对话,AI 又是一张白纸。要让”调教”持久化,唯一办法是把那段 prompt 保存成模板或写进 system prompt,每次对话都带上。
后果 3:但你的对话历史可能被用去训练下一代模型
虽然当前模型不会因为你而变,但:
- ChatGPT 的对话默认会被 OpenAI 收集用于改进模型(除非你关闭)
- 国内某些模型也类似
- 敏感信息别直接发给在线模型(公司机密、客户数据、密码……)
与上下文窗口的关系
参见 § 1.2 Token 与上下文窗口:多轮对话累积是上下文窗口被吃满的最常见原因。
1.9 网页端调试 prompt 的 4 个建议
如果你是在网页(ChatGPT / Claude.ai / 通义千问)调试 prompt,而不是 API:
建议 1:System Prompt 和 User Prompt 一起写
网页端没有独立的 system prompt 输入框(除了开通付费的 ChatGPT Plus 自定义指令)。直接把系统设定和用户问题合并写在一条消息里:
【角色】你是资深 Python 工程师,擅长性能优化。
【风格】回答简洁,先给结论再给原因。
【任务】审查下面这段代码,找出性能瓶颈:
[粘贴代码]
建议 2:最近几轮的对话内容会被自动引用,不用反复粘贴
❌ 笨办法:每次都把整段需求重新粘贴一遍
✅ 聪明的:第 1 条把背景+约束写清楚,后面只发增量内容
"刚才那段代码再加一个错误处理" ← AI 知道"刚才那段"指什么
建议 3:找到好 prompt 后,开新 Chat 再测一次
历史对话会污染当前对话的”思路”。当你觉得调出来的 prompt 不错,一定要在干净的新 Chat 里再跑一次——
- 如果效果一致 → 这个 prompt 真的好
- 如果效果掉了 → 之前的好结果是被历史对话”喂”出来的,prompt 本身还不够强
建议 4:用 ChatALL 等工具同时跑多模型对比
ChatALL 这类聚合工具可以让你一个 prompt 同时发给 ChatGPT / Claude / Gemini / DeepSeek / 通义……一次性看几个模型的回复。
适用场景:
- 重要任务的多模型对比(哪个模型最适合这个任务)
- 验证 prompt 的鲁棒性(在所有模型上都好用 = 真的好 prompt)
- 找出某个模型的特定优势(比如 Claude 在长文上的优势)
💡 网页端调试是”快速试错”,API 调试是”参数精调”。两者结合:网页端先确定 prompt 框架 → API 上线时再精调参数。
1.10 动手练习
练习1:Token 感知体验
把同一段话(100字左右)分别用中文和英文发给 AI,要求 AI 估算 Token 数量,感受中英文的差异。
练习2:Temperature 对比实验
用同一个提示词(比如”用一句话形容秋天”),在不同 Temperature 下各跑 3 次,观察输出的变化。
练习3:模型对比
选一个你常用的任务(比如”总结一段新闻”),分别在 2-3 个不同模型上运行,记录各自的输出差异。
练习4:改写模糊提示词
将以下模糊提示词改写为包含四要素的完整版本:
- “帮我写个方案”
- “总结一下这篇文章”
- “写一首诗”
本章小结
✅ AI 是"超级接话王",基于模式匹配工作,不是真的"理解"
✅ Token 是 AI 的计量单位,中文比英文消耗更多 Token
✅ 上下文窗口是 AI 的"书桌",超出限制就会遗忘
✅ Temperature 控制随机性:写代码用低温,搞创意用高温
✅ API 完整参数还有 seed/top_p/n/max_tokens/penalty/logit_bias
✅ 不同模型有不同"性格",重要任务多模型对比
✅ 中英文提示词各有优势,可以混合使用
✅ 完整提示词 = 指令 + 上下文 + 输入数据 + 输出要求
✅ 模型对位置敏感(Lost in the Middle):重要信息放开头或结尾
✅ Prompt 不会改变模型参数:多轮对话靠重传历史,token 钱越聊越多
✅ 网页端调试 4 招:合并 system+user / 复用历史 / 新 Chat 验证 / ChatALL 对比
下一步 → 02_写好第一个提示词.md