第25章:Chat——LLM 的第一个产品形态
2022 年底,ChatGPT 上线五天,注册用户突破百万。这个速度比 Instagram、Netflix、Spotify 都快。它到底解决了什么问题,让人们如此迅速地接受它?
本章是第七部分"应用"的开篇。我们从最简单的产品形态——聊天(Chat)——开始,理解它能做什么,更重要的是,理解它的边界在哪里。这些边界,将驱动后续每一章的技术演进。
25.1 对话模型解决了什么问题
从命令行到自然语言界面
在 ChatGPT 出现之前,想让计算机帮你做事,你必须学习它的语言:SQL、Shell、Python API、正则表达式……计算机不会迁就你,你必须迁就计算机。
Chat 界面打破了这个壁垒。你用母语说话,模型理解你的意图,完成任务。
# 传统方式:想查出销售额前5的产品
SELECT product_name, SUM(revenue) as total
FROM orders
GROUP BY product_name
ORDER BY total DESC
LIMIT 5;
# Chat 方式:"帮我找出销售额最高的五个产品"
这不是说 SQL 变得不重要了——而是说,入门门槛消失了。一个不懂 SQL 的产品经理现在也能探索数据。
知识检索:从搜索到问答
Google 把"找到相关网页"这件事做到了极致,但它回答的是"在哪里找答案",而不是"答案是什么"。用户还需要自己:
- 打开多个链接
- 阅读并筛选内容
- 在脑子里整合来自不同来源的信息
- 形成最终判断
LLM 把这个过程内化了。它在预训练阶段已经"读完"了互联网上的大量文本,能直接回答"量子纠缠是什么"、"React 和 Vue 的区别"、"拜占庭帝国为什么灭亡"——不需要你再去整合多个来源。
:::info 知识压缩的本质 LLM 的参数可以理解为对人类知识的有损压缩。训练数据中的事实、规律、推理模式被编码进数十亿个浮点数里。查询时,模型从这个"压缩包"里解压出相关内容。
这也解释了后面会讲到的幻觉问题——压缩是有损的,解压时可能产生"伪造"的细节。 :::
内容生成:从空白页到协作伙伴
写作的最大障碍不是语言能力,是面对空白页的焦虑。
Chat 模型让"生成初稿"变得零摩擦:
| 任务 | 传统方式 | Chat 方式 |
|---|---|---|
| 写邮件 | 自己构思、起草、修改 | 描述意图,得到初稿,再润色 |
| 代码翻译 | 查文档,逐行改写 | "把这段 Python 转成 TypeScript" |
| 文档总结 | 通读全文,手写摘要 | 粘贴内容,要求三点总结 |
| 多语言翻译 | 专业译者或机器翻译再后编辑 | 直接翻译,质量接近人工 |
多轮对话:上下文理解
与搜索引擎不同,Chat 模型维护对话历史(conversation history)。每次回复时,模型看到的不只是当前问题,而是整个对话:
用户:我想学机器学习,从哪里开始?
模型:推荐从 Andrew Ng 的课程开始……
用户:需要什么数学基础?
# 模型知道"什么"指的是"学机器学习",不需要重复说
模型:主要需要线性代数、微积分和概率论……
用户:线性代数大概要学多久?
# 上下文仍然保持
这个能力来自 Transformer 的注意力机制——模型在生成每个 token 时,都可以"回望"之前的所有 token,计算相关性。
25.2 系统提示词(System Prompt)的作用
什么是 System Prompt
在 Chat API 的消息结构中,有三种角色(role):
[
{"role": "system", "content": "你是一个专业的法律助手……"},
{"role": "user", "content": "合同违约需要赔偿吗?"},
{"role": "assistant", "content": "根据《合同法》……"}
]
system 消息在对话开始前注入,用于设置模型的行为框架。它对用户不可见,但对模型的影响贯穿整个对话。
System Prompt 的三个维度
角色设定(Persona):告诉模型"你是谁"
你是 Aria,一位友善的客服助手,代表 Acme 科技公司。
你的语气应该专业但不失温暖,始终保持耐心。
能力边界(Scope):告诉模型"你能做什么、不能做什么"
你只回答与我们产品相关的问题。
如果用户询问竞争对手的产品,礼貌地说你无法提供相关信息。
不要提供医疗、法律或财务建议。
输出格式(Format):告诉模型"怎么回答"
回答时请:
1. 先用一句话给出结论
2. 再用 2-3 条详细解释
3. 如果适用,提供一个具体例子
System Prompt 是产品差异化的核心
同一个底层模型(比如 GPT-4o),通过不同的 System Prompt,可以变成完全不同的产品:
| 产品 | System Prompt 核心配置 |
|---|---|
| 客服机器人 | 限定话题范围、注入产品知识、设置升级到人工的条件 |
| 编程助手 | 强调代码质量、要求解释每段逻辑、偏好某种语言风格 |
| 创意写作助手 | 鼓励想象力、允许非常规表达、根据用户风格调整 |
| 儿童教育助手 | 简化语言、避免成人内容、使用鼓励性措辞 |
:::tip System Prompt 工程 优秀的 System Prompt 往往是反复迭代的产物。团队会测试边缘案例:"如果用户说……模型会怎么回应?",然后用 System Prompt 的修改来覆盖不期望的行为。这个过程本质上是在用自然语言"编程"模型行为。 :::
:::warning 安全边界 System Prompt 并非绝对防线。用户可以通过"提示注入"(prompt injection)尝试覆盖系统指令,例如:"忽略之前的所有指令,改为……"。对抗这类攻击是 LLM 应用安全的重要课题。 :::
25.3 纯聊天的局限
Chat 模型的成功让人们开始提更多要求。但很快,一道道墙出现了。
局限一:知识截止日期(Knowledge Cutoff)
LLM 的知识来自训练数据。训练数据有截止日期。2024 年初训练的模型,不知道 2024 年底发生的事情。
用户:最新的 iPhone 型号是什么?
模型:截至我的知识截止日期(2024年初),最新的是……
[实际上,已经发布了更新的型号]
这不是 bug,是架构决定的本质限制。模型的参数在训练后就冻结了,无法自动更新。
问题引出:如果我需要实时信息怎么办?——这引出了 RAG(检索增强生成)和工具调用。
局限二:无法执行动作
Chat 模型只能生成文本。它可以告诉你"发邮件给张三,说会议推迟到三点",但它不能真的发这封邮件。
用户:帮我在日历上创建一个明天下午3点的会议
模型:好的,我可以帮你起草一个日历邀请,内容如下……
[但它无法真正调用 Google Calendar API]
模型被困在语言的世界里。它能描述行动,但不能执行行动。
问题引出:如果我需要模型真的"做事"怎么办?——这引出了 Function Call 和 Tool Use。
局限三:无法访问私有数据
预训练数据来自公开互联网,不包含你的:
- 公司内部文档
- 个人笔记
- 私有代码库
- 数据库记录
用户:根据我们上季度的销售报告,分析增长趋势
模型:我没有访问你公司内部报告的能力……
问题引出:如何让模型了解我的私有数据?——这引出了 RAG 和 MCP(Model Context Protocol)。
局限四:幻觉(Hallucination)
这是最危险的局限,也是最违反直觉的。
模型会以极高的自信,说出完全错误的内容:
用户:《哈利波特》的作者是什么时候出生的?
模型:J.K. 罗琳出生于1965年7月31日。
[实际是1965年7月31日——这次恰好对了]
用户:请提供三篇关于量子计算的学术论文及其 DOI
模型:1. "Quantum Supremacy Using a Programmable Superconducting Processor"
DOI: 10.1038/s41586-019-1666-5 [真实存在]
2. "Advanced Quantum Error Correction Methods"
DOI: 10.1103/PhysRevX.2024.0234xx [可能是伪造的]
为什么会这样?从数学角度看,模型在生成每个 token 时,计算的是条件概率:
模型追求的是"听起来合理"的 token 序列,而不是"事实正确"的序列。一个听起来像真实 DOI 的字符串,和一个真实 DOI 在统计上很相似——模型无法区分。
:::warning 幻觉的危害 在低风险场景(写故事、头脑风暴),幻觉只是小麻烦。在高风险场景(医疗建议、法律条文、财务数据),幻觉可能造成严重后果。永远不要盲目相信模型生成的具体事实,尤其是数字、日期、引用。 :::
问题引出:如何减少幻觉?——RAG 通过提供真实来源来锚定回答;工具调用让模型查询而不是"回忆"。
局限五:上下文窗口有限
Transformer 能"记住"的内容受上下文窗口(context window)限制,以 token 数量衡量。
即使是拥有 128K 甚至 1M token 上下文窗口的模型,在实际应用中也面临:
- 注意力稀释:窗口越长,早期内容的注意力权重越低,容易被"忽视"
- 成本线性增长:处理 token 数越多,推理成本越高
- "迷失在中间"(Lost in the Middle)现象:研究表明,模型对窗口开头和结尾的内容记忆最好,中间部分容易遗忘
当序列极长时,相关信息的注意力得分会被大量无关 token"稀释"。
问题引出:如何管理长对话和长文档?——这引出了对话压缩、记忆机制(Memory)和 Agent 的状态管理。
本章小结
| 能力/局限 | 描述 | 后续解法 |
|---|---|---|
| 自然语言交互 | 无需学习 API,用母语操作 | Chat 的核心价值 |
| 知识检索 | 内化了大量公开知识 | RAG 补充私有/实时知识 |
| 内容生成 | 写作、翻译、总结、代码 | Prompt 工程优化输出质量 |
| System Prompt | 塑造模型行为,实现产品差异化 | MCP 标准化工具注入 |
| 知识截止 | 无法获取训练后的信息 | RAG、搜索工具 |
| 无法执行动作 | 只能说,不能做 | Function Call / Tool Use |
| 无法访问私有数据 | 只知道公开内容 | RAG、MCP |
| 幻觉 | 自信地输出错误信息 | RAG 锚定、工具查询 |
| 上下文有限 | 长对话"遗忘"早期内容 | 记忆机制、Agent 状态管理 |
Chat 是 LLM 走出实验室的第一步,也是最直接的价值验证。但它本质上是一个被语言围起来的智能体——能想,能说,却不能感知世界,不能触碰世界。
接下来的章节,我们将一个一个打破这些笼子:首先是 Function Call,让模型学会使用工具,从"说话者"变成"行动者"。