LangChain 04 - Message 与提示词模板学习导航与实战
LangChain 04 - Message 与提示词模板学习导航与实战
目标:这一章不是学“怎么多写几句提示词”,而是学“怎么把模型输入组织成稳定、可复用、可维护的结构”。
你这一章到底要学什么
如果把 04-Message 与提示词模板 学完,真正应该带走的是下面 4 件事:
- 知道为什么 LangChain 不推荐长期手写大段字符串 Prompt
- 理解
SystemMessage、HumanMessage、AIMessage分别扮演什么角色 - 会用
ChatPromptTemplate构造结构化输入 - 知道 Prompt 模板为什么会成为后面 Tools、Agent、RAG 的基础
一句话总结:
第 4 章学的不是“写提示词”,而是“管理提示词”。
模块 1:你只需要记住这些
1. 为什么 Message 很重要
在第 2 章里,我们已经能直接这样调用模型:
- 传一个字符串
- 或传一个 messages 列表
但一旦应用开始复杂,你会很快遇到几个问题:
- 规则、角色、变量混在一起
- 变量靠字符串拼接,容易乱
- 同一个 Prompt 到处复制,不好维护
- 后面接入历史消息、工具结果时,格式容易出错
所以第 4 章的重点,是把“输入”从随手写,升级成结构化表达。
如何组织输入,模型更稳定、可控、易维护。本章学的不是写文案技巧,而是把输入从随手写,升级成结构化、工程化表达。
2. Message 本质上是什么
Message 可以理解成:“聊天上下文里的一个标准化消息对象”。
最常见的 3 类:
SystemMessage:定义角色、风格、规则、边界HumanMessage:用户输入的问题或任务AIMessage:存模型输出的回答
理解口诀:
System 管规则,Human 管需求,AI 管结果。
3. PromptTemplate 和 ChatPromptTemplate 是干什么的
它们解决的不是“模型更聪明”,而是“你的输入更稳定”。
模板价值:工程化
- 复用:换主题不用重写整段
- 维护:固定规则和变量分开,不容易乱
- 排查:能先看模板,再看变量注入后长什么样
- 协作:团队成员更容易理解 Prompt 的结构
- 扩展:后面接工具、接 Agent、接多轮上下文更自然
模块 2:带教式理解
1. 什么时候直接传字符串就够了
适合这些场景:
- 一次性小测试
- 很短的单轮问答
- 你只是想先确认模型能不能跑通
这时你可以直接:
model.invoke("请解释什么是 RAG")
2. 什么时候要升级成 Message
一旦你开始出现这些需求,就该切换到 Message:
- 想给模型一个稳定身份
- 想区分系统规则和用户问题
- 想保留多轮上下文
- 想把工具结果也放进上下文
因为这时“谁说的话”会影响结果,不只是“说了什么”。
3. 什么时候要升级成 Prompt 模板
当你开始有变量时,就应该考虑模板:
{topic}{style}{word_limit}
如果还在靠 f-string 或字符串拼接,后面会越来越难维护。
Prompt 模板最重要的价值不是省几行代码,而是:
让输入结构可复用、可检查、可扩展。
这一章结束后,你应该能自己回答
1、为什么 LangChain 里要区分 Message,而不是都写成一个长字符串?
因为 AI 应用里不同角色的信息作用不同。SystemMessage 负责规则,HumanMessage 负责任务,分开后结构更清晰,也更方便多轮对话、工具接入和链式编排。
2、ChatPromptTemplate 解决的核心问题是什么?
它解决的是 Prompt 的工程化问题,也就是把原本临时拼接的输入,变成可复用、可填参、可维护的模板。
3、为什么说第 4 章是后续章节的基础?
因为 Tools、结构化输出、Agent、RAG 这些能力,本质上都离不开“怎么把输入上下文正确组织给模型”。
4、如果 Prompt 写得很长,最先应该优化什么?
不是先追求更花哨的写法,而是先把角色、任务、变量和输出要求拆清楚,再决定哪些放 system,哪些做模板变量。
小测试
1. SystemMessage 最核心的作用是什么?
给模型设定角色、规则、语气和边界。
2. 如果一个问题既包含固定规则,又包含用户动态输入,更适合用什么?
更适合用 ChatPromptTemplate,因为固定规则可以写进模板,动态部分可以用变量注入。
3. 为什么不建议长期依赖字符串拼接 Prompt?
因为变量一多就容易混乱,也不利于复用、排查和团队协作。








