在大模型应用开发中,Prompt 工程是核心环节之一,而 LangChain 作为主流的大模型开发框架,为 Prompt 的灵活构建与调用提供了强大支撑。本文将结合实际代码案例,带你从基础 Prompt 模板到少样本(Few-Shot)提示模板,一步步掌握 LangChain 在多场景下的 AI 交互实战技巧。
一、LangChain 核心:Prompt 模板的基础认知
LangChain 的langchain_core.prompts模块提供了丰富的 Prompt 模板类,能够精准定义系统消息、人类消息、AI 消息的格式,让 Prompt 构建更结构化、可复用。核心优势在于:
- 支持动态变量注入,适配不同输入场景;
- 分离 Prompt 结构与业务数据,降低维护成本;
- 兼容多类型消息格式,贴合大模型交互逻辑。
二、实战场景 1:多语言风格化翻译
翻译场景中,我们常需要适配不同源语言、目标语言和文本风格,基于 LangChain 的 Prompt 模板可高效实现这一需求。
核心代码实现
python
from langchain_core.prompts import SystemMessagePromptTemplate, HumanMessagePromptTemplate
from langchain_openai import ChatOpenAI
# 1. 定义系统提示模板(翻译角色与规则)
system_template_text = "你是一位专业的翻译,能够将{input_language}翻译成{output_language},并且输出文本会根据用户要求的任何语言风格进行调整。请只输出翻译后的文本,不要有任何其它内容。"
system_prompt_template = SystemMessagePromptTemplate.from_template(system_template_text)
# 2. 定义人类提示模板(待翻译文本+风格要求)
human_template_text = "文本:{text}\n语言风格:{style}"
human_prompt_template = HumanMessagePromptTemplate.from_template(human_template_text)
# 3. 初始化大模型(以通义千问为例)
model = ChatOpenAI(
model="qwen-plus",
openai_api_key="sk-8639d557594c4fee9d34d27e76cff948",
openai_api_base="https://dashscope.aliyuncs.com/compatible-mode/v1"
)
# 4. 多组输入批量翻译
input_variables = [
{
"input_language": "汉语",
"output_language": "汉语",
"text": "勿以善小而不为,勿以恶小而为之。",
"style": "白话文"
},
{
"input_language": "法语",
"output_language": "英语",
"text": "Je suis désolé pour ce que tu as fait",
"style": "古英语"
},
{
"input_language": "俄语",
"output_language": "意大利语",
"text": "Сегодня отличная погода",
"style": "网络用语"
},
{
"input_language": "韩语",
"output_language": "日语",
"text": "너 정말 짜증나",
"style": "口语"
}
]
# 执行翻译并输出结果
for input in input_variables:
system_prompt = system_prompt_template.format(
input_language=input["input_language"],
output_language=input["output_language"]
)
human_prompt = human_prompt_template.format(
text=input["text"],
style=input["style"]
)
response = model.invoke([system_prompt, human_prompt])
print(f"【输入】{input['text']}")
print(f"【输出】{response.content}\n")

关键要点
SystemMessagePromptTemplate定义 AI 的角色与核心规则,确保翻译行为的一致性;HumanMessagePromptTemplate接收用户的动态输入(文本、风格),灵活适配不同翻译需求;- 批量处理输入变量时,只需循环注入参数,无需重复定义 Prompt 结构,提升开发效率。
三、实战场景 2:少样本(Few-Shot)客户信息格式化
当需要 AI 按照固定格式处理数据时,Few-Shot 提示模板能通过示例让 AI 快速理解格式要求,无需复杂的规则定义。
核心代码实现
python
from langchain_core.messages import HumanMessage
from langchain_core.prompts import FewShotChatMessagePromptTemplate, ChatPromptTemplate
from langchain_openai import ChatOpenAI
# 1. 定义单条示例的Prompt模板
example_prompt = ChatPromptTemplate.from_messages(
[
("human", "格式化以下客户信息:\n姓名 -> {customer_name}\n年龄 -> {customer_age}\n 城市 -> {customer_city}"),
("ai", "##客户信息\n- 客户姓名:{formatted_name}\n- 客户年龄:{formatted_age}\n- 客户所在地:{formatted_city}")
]
)
# 2. 准备示例数据(让AI学习格式)
examples = [
{
"customer_name": "张三",
"customer_age": "27",
"customer_city": "长沙",
"formatted_name": "张三",
"formatted_age": "27岁",
"formatted_city": "湖南省长沙市"
},
{
"customer_name": "李四",
"customer_age": "42",
"customer_city": "广州",
"formatted_age": "42岁",
"formatted_city": "广东省广州市"
},
]
# 3. 构建Few-Shot提示模板
few_shot_template = FewShotChatMessagePromptTemplate(
example_prompt=example_prompt,
examples=examples,
)
# 4. 组合最终Prompt(示例+新输入)
final_prompt_template = ChatPromptTemplate.from_messages(
[
few_shot_template,
("human", "{input}"),
]
)
# 5. 注入新的客户信息并调用模型
final_prompt = final_prompt_template.invoke({
"input": "格式化以下客户信息:\n姓名 -> 王五\n年龄 -> 31\n 城市 -> 郑州"
})
model = ChatOpenAI(
model="qwen-plus",
openai_api_key="sk-8639d557594c4fee9d34d27e76cff948",
openai_api_base="https://dashscope.aliyuncs.com/compatible-mode/v1"
)
response = model.invoke(final_prompt)
print(response.content)

关键要点
FewShotChatMessagePromptTemplate封装示例数据和示例模板,让 AI 通过示例学习格式规则;- 示例数据只需贴合目标格式,无需额外说明,符合大模型的学习特性;
- 新输入只需按统一格式传入,AI 会自动沿用示例的格式化逻辑。
四、实战场景 3:定制化角色交互(数学课助教)
除了结构化 Prompt,LangChain 也支持直接通过消息列表定义 AI 角色,实现轻量化的定制化交互。
核心代码实现
python
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage, SystemMessage
# 初始化模型
model = ChatOpenAI(
model="qwen-plus",
openai_api_key="sk-8639d557594c4fee9d34d27e76cff948",
openai_api_base="https://dashscope.aliyuncs.com/compatible-mode/v1",
temperature=1.2, # 调整随机性,值越高回答越灵活
max_tokens=300 # 限制回答长度
)
# 定义角色与问题
messages = [
SystemMessage(content="请你作为我的数学课助教,用通俗易懂且直接的语言帮我解释数学原理。"),
HumanMessage(content="什么是傅里叶级数?"),
]
# 调用模型并输出
response = model.invoke(messages)
print(response.content)

关键要点
SystemMessage直接定义 AI 的角色定位(数学课助教)和回答风格(通俗易懂、直接);temperature参数控制回答的随机性,知识性场景可适当降低,创意场景可提高;max_tokens限制输出长度,避免回答过于冗长。
五、总结与拓展
LangChain 的 Prompt 模板体系覆盖了从简单角色定义到复杂少样本提示的全场景需求,核心价值在于:
- 结构化:分离 Prompt 结构与业务数据,降低耦合度;
- 复用性:模板可多次调用,适配批量处理场景;
- 灵活性:支持动态变量、多语言风格、少样本学习,适配不同业务需求。
在实际开发中,可结合场景进一步优化:
- 针对复杂场景,可组合多种 Prompt 模板(如 System+Few-Shot+Human);
- 调整模型参数(temperature、max_tokens)适配不同交互需求;
- 结合 LangChain 的其他模块(如记忆、工具调用),构建更复杂的 AI 应用。
掌握 LangChain 的 Prompt 模板技巧,能让大模型交互从 "零散的文本指令" 升级为 "结构化的工程化方案",大幅提升开发效率与交互效果。