LangChain v1.0提供了丰富的提示词模板工具,包括基础的PromptTemplate、面向聊天模型的ChatPromptTemplate、动态消息占位符MessagesPlaceholder,以及高级的PipelinePromptTemplate和FewShotPromptTemplate等。这些工具支持变量管理、消息序列构建和少样本学习,极大简化了大模型应用开发。文章还介绍了LangChain Hub社区平台,开发者可以复用预构建模板,助力构建更智能的AI系统。
- 引言
LangChain 是一个开源框架,简化大型语言模型 (LLM) 的应用开发,帮助开发者构建复杂的 AI 系统,如检索增强生成 (RAG)、代理 (Agent) 和链式工作流。进入 v1.0 版本后,LangChain 进一步优化了核心组件的稳定性和可扩展性,特别是通过 Runnable 接口支持异步操作、流式处理和更好的模块化设计。这使得框架更适合生产环境部署。
在 LangChain 中,prompts(提示词)是连接开发者意图与 LLM 的桥梁。prompts 模板模块允许我们创建可复用的、参数化的指令结构,避免每次手动拼凑提示词,从而提高效率和一致性。LangChain v1.0 的 prompts 模块(位于 langchain_core.prompts)提供了从基础字符串模板到高级聊天序列的多种工具,支持变量注入、部分填充和动态消息管理。
本文将逐步介绍 LangChain v1.0 prompts 模板的核心组件,帮助读者从基础到高级应用掌握其用法。内容基于官方文档,并结合实际示例代码(Python)。通过这些工具,你可以轻松构建高效的 AI 交互系统。
- PromptTemplate:基础字符串提示模板
PromptTemplate 是 LangChain 中最基本的提示模板工具,用于创建可参数化的字符串提示。它允许开发者定义一个包含占位符的模板字符串,然后通过变量替换生成最终的提示词。这特别适合非聊天模型的简单场景,如生成式任务或基本查询。
关键特征
- input_variables:用户必须提供的动态变量,通常在格式化时传入。
- partial_variables:固定或预填的变量,可以在模板定义时设置,或通过 .partial() 方法覆盖。这使得模板更简洁,尤其适用于锁定系统设定、角色或不变的提示词。
- 支持覆盖操作:即使预填了变量,用户仍可在格式化时覆盖它们。
- 支持动态函数变量:partial_variables 可以是函数,实现实时计算(如当前日期)。
- 适用场景:RAG 或 Agent 中的系统指令管理,避免重复填写固定部分。如果所有变量都在 .format() 中传入,会显得啰嗦且易出错。
以下表格比较 input_variables 和 partial_variables:
| 项目 | input_variables | partial_variables |
|---|---|---|
| 是不是用户必须提供? | 是 | 否 |
| 何时填入? | .format() 时 | Template 定义时 / .partial() 覆盖 |
| 是否可覆盖? | 是 | 是 |
| 是否支持函数? | 否 | 支持(动态变量) |
| 适合场景 | 用户输入内容 | prompt 预设、系统指令 |
代码示例
以下是一个简单示例,展示如何创建 PromptTemplate、使用 partial_variables 预填固定角色,并格式化输出。
from langchain_core.prompts import PromptTemplate# 定义模板,包含 input_variables 和 partial_variablestemplate = PromptTemplate( input_variables=["user_query"], partial_variables={"role": "helpful assistant"}, template="You are a {role}. Answer the following question: {user_query}")# 使用 .partial() 覆盖或添加动态变量(这里用函数获取当前日期)from datetime import datetimetemplate_with_date = template.partial(current_date=lambda: datetime.now().strftime("%Y-%m-%d"))# 格式化提示词prompt = template_with_date.format(user_query="What is the capital of France?")print(prompt)# 输出示例: "You are a helpful assistant. Answer the following question: What is the capital of France? (Date: 2025-11-21)"这个示例中,role 被预填为固定值,而 current_date 是动态函数,确保提示词始终包含最新信息。在 RAG 系统中,你可以用 partial_variables 锁定检索上下文的格式。
- ChatPromptTemplate:针对聊天模型的提示模板
ChatPromptTemplate 是 PromptTemplate 的扩展,专为聊天模型设计。它支持构建多消息序列,包括系统消息、用户消息和 AI 消息,便于模拟对话流。这使得模板更适合交互式应用,如聊天机器人或多轮对话代理。
关键特征
- 支持多种消息类型:SystemMessage(系统指令)、HumanMessage(用户输入)、AIMessage(AI 响应)、ToolMessage(工具调用结果)等。
- 单变量自动注入:如果模板只有一个变量,可以直接传入字符串。
- partial 填充:类似于 PromptTemplate,支持预填固定消息或变量。
- append/extend 方法:动态添加消息序列。
- Runnable 接口集成:支持链式调用(如与模型或输出解析器组合)。
- 格式化输出:生成 BaseMessage 列表,便于直接传递给聊天模型。
代码示例
以下示例展示如何使用 from_messages 创建聊天模板,包含系统角色、用户输入和 few-shot 示例,然后格式化消息并模拟模型调用。
from langchain_core.prompts import ChatPromptTemplatefrom langchain_core.messages import SystemMessage, HumanMessage, AIMessage# 使用消息列表创建模板chat_template = ChatPromptTemplate.from_messages([ ("system", "You are a professional Python code reviewer. Check for style, bugs, and performance."), ("human", "Review this code: \n\n{code_snippet}"), ("ai", "Issues found: 1. No type hints. 2. Global variable usage."), # Few-shot 示例 ("human", "{follow_up}")])# 格式化消息messages = chat_template.format_messages( code_snippet="def add(x, y):\n return x + y", follow_up="Suggest optimizations.")print("Generated messages:")for idx, msg in enumerate(messages): print(f"Message {idx + 1}: Type={type(msg).__name__}, Content={msg.content}")# 模拟传递给模型(假设 model 是 LLM 实例)# response = model.invoke(messages)# print(response.content)这个模板通过 few-shot 示例引导模型输出结构化审查结果。在实际应用中,你可以将其与 LangChain 的 Chain 结合,实现自动化代码审计。
- MessagesPlaceholder:动态消息占位符
MessagesPlaceholder 是 ChatPromptTemplate 的辅助工具,用于在模板中预留位置,动态注入消息列表(如对话历史)。这使得模板能处理不确定长度的序列,非常适合构建对话代理或支持上下文的 AI 系统。
关键特征
- 支持 optional 参数:如果未提供消息,默认跳过(optional=True)。
- 常用于注入历史对话、工具结果或 few-shot 示例。
- 与 ChatPromptTemplate 无缝集成:通过占位符名称引用。
- 适用场景:多轮聊天、RAG 中的上下文注入,或代理的内存管理。
代码示例
以下示例在 ChatPromptTemplate 中嵌入 MessagesPlaceholder,注入模拟对话历史。
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholderfrom langchain_core.messages import HumanMessage, AIMessage# 创建包含占位符的模板template = ChatPromptTemplate.from_messages([ ("system", "You are a friendly chatbot."), MessagesPlaceholder(variable_name="history", optional=True), ("human", "{user_input}")])# 注入历史消息history = [ HumanMessage(content="What's your name?"), AIMessage(content="I'm Grok!")]messages = template.format_messages(history=history, user_input="Tell me a joke.")print("Generated messages:")for msg in messages: print(f"Type={type(msg).__name__}, Content={msg.content}")这个占位符允许模板灵活扩展历史,而不需每次重定义整个序列。在代理系统中,它常用于内存组件的集成。
- 其他高级 Prompts 模板
LangChain v1.0 提供了更多高级模板,用于复杂 prompt 工程。下面介绍两个关键子模块。
1:PipelinePromptTemplate(管道式模板组合)
PipelinePromptTemplate 允许将多个子模板组合成一个复杂的管道式提示,支持嵌套和顺序执行。这适合构建模块化的 prompt,如系统 + 示例 + 用户输入的组合。
关键特征
- 支持多个 PromptTemplate 或 ChatPromptTemplate 的嵌套。
- 顺序执行:每个子模板的输出成为下一个的输入。
- 适用场景:复杂任务分解,如报告生成或多步推理。
代码示例
from langchain_core.prompts import PipelinePromptTemplate, PromptTemplate# 定义子模板intro_template = PromptTemplate.from_template("Introduce the topic: {topic}")body_template = PromptTemplate.from_template("Explain in detail: {details}")# 组合成管道pipeline = PipelinePromptTemplate( final_template=PromptTemplate.from_template("{intro}\n{body}"), pipeline_prompts=[ ("intro", intro_template), ("body", body_template) ])prompt = pipeline.format(topic="AI ethics", details="Discuss privacy concerns.")print(prompt)这个管道确保提示词的结构化构建,便于维护大型模板。
2:FewShotPromptTemplate 和 FewShotChatMessagePromptTemplate(少样本学习模板)
FewShotPromptTemplate 用于字符串模板的少样本学习,通过注入示例引导模型行为。FewShotChatMessagePromptTemplate 是其聊天版,支持消息对示例。
关键特征
- examples 列表:提供输入-输出对作为上下文。
- 支持动态格式化:示例前缀/后缀自定义。
- 适用场景:in-context learning,提升模型在特定任务的表现。
代码示例(FewShotPromptTemplate)
from langchain_core.prompts import FewShotPromptTemplate, PromptTemplateexamples = [ {"input": "happy", "output": "sad"}, {"input": "tall", "output": "short"}]example_template = PromptTemplate.from_template("Input: {input}\nOutput: {output}")few_shot = FewShotPromptTemplate( examples=examples, example_prompt=example_template, prefix="Give antonyms:", suffix="Input: {word}\nOutput:", input_variables=["word"])prompt = few_shot.format(word="big")print(prompt)代码示例(FewShotChatMessagePromptTemplate)
from langchain_core.prompts import FewShotChatMessagePromptTemplate, ChatPromptTemplateexamples = [ {"input": "France", "output": "Paris"}, {"input": "Japan", "output": "Tokyo"}]example_prompt = ChatPromptTemplate.from_messages([ ("human", "{input}"), ("ai", "{output}")])few_shot_chat = FewShotChatMessagePromptTemplate( examples=examples, example_prompt=example_prompt)template = ChatPromptTemplate.from_messages([ ("system", "You are a geography expert."), few_shot_chat, ("human", "{country}")])messages = template.format_messages(country="Italy")这些模板通过示例实现零样本到少样本的过渡,提升 LLM 的泛化能力。
- LangChain Hub:提示词模板库
LangChain Hub 是一个社区驱动的提示词模板共享平台,允许开发者上传、下载和复用预构建模板。使用前需在 LangSmith 官网(https://smith.langchain.com/)申请 API Key,然后通过 hub.pull() 加载模板。Hub 地址:https://smith.langchain.com/hub/。
关键特征
- 社区模板:覆盖各种场景,如总结、翻译或代码生成。
- 版本控制:支持指定版本加载。
- 集成简单:加载后可直接格式化或 partial。
代码示例
from langchain import hub# 假设已设置 LANGCHAIN_API_KEY 环境变量prompt = hub.pull("hwchase17/openai-functions-agent") # 示例模板名messages = prompt.format_messages(user_input="Hello!")# 继续传递给模型Hub 加速了开发,避免从零构建常见模板。
- 实际应用与最佳实践
在实际项目中,这些模板常用于:
- RAG:用 PromptTemplate 格式化检索上下文,ChatPromptTemplate 处理用户查询。
- Agent:MessagesPlaceholder 注入工具结果,FewShot 引导决策。
- Chain:通过 Runnable 接口链式组合模板 + 模型 + 输出解析器。
常见问题:
- 变量管理:确保所有 input_variables 被提供,避免 KeyError。
- Prompt 长度:监控 token 消耗,使用 partial 简化。
- 模型兼容:聊天模板适合 OpenAI/Claude,字符串模板更通用。
优化建议:优先用 partial 预填固定部分;测试异步方法 (aformat) 以提升性能;在生产中结合 LangSmith 追踪 prompt 效果。
- 结论
LangChain v1.0 的 prompts 模板提供了从基础到高级的工具链,极大提升了 prompt 工程的效率和灵活性。通过变量管理、消息序列和少样本学习,你可以构建更智能的 AI 系统。实践是关键——建议从简单模板入手,逐步集成到你的项目中。
最后
我在一线科技企业深耕十二载,见证过太多因技术卡位而跃迁的案例。那些率先拥抱 AI 的同事,早已在效率与薪资上形成代际优势,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在大模型的学习中的很多困惑。
我整理出这套 AI 大模型突围资料包:
- ✅AI大模型学习路线图
- ✅Agent行业报告
- ✅100集大模型视频教程
- ✅大模型书籍PDF
- ✅DeepSeek教程
- ✅AI产品经理入门资料
完整的大模型学习和面试资料已经上传带到CSDN的官方了,有需要的朋友可以扫描下方二维码免费领取【保证100%免费】👇👇
为什么说现在普通人就业/升职加薪的首选是AI大模型?
人工智能技术的爆发式增长,正以不可逆转之势重塑就业市场版图。从DeepSeek等国产大模型引发的科技圈热议,到全国两会关于AI产业发展的政策聚焦,再到招聘会上排起的长队,AI的热度已从技术领域渗透到就业市场的每一个角落。
智联招聘的最新数据给出了最直观的印证:2025年2月,AI领域求职人数同比增幅突破200%,远超其他行业平均水平;整个人工智能行业的求职增速达到33.4%,位居各行业榜首,其中人工智能工程师岗位的求职热度更是飙升69.6%。
AI产业的快速扩张,也让人才供需矛盾愈发突出。麦肯锡报告明确预测,到2030年中国AI专业人才需求将达600万人,人才缺口可能高达400万人,这一缺口不仅存在于核心技术领域,更蔓延至产业应用的各个环节。
资料包有什么?
①从入门到精通的全套视频教程⑤⑥
包含提示词工程、RAG、Agent等技术点
② AI大模型学习路线图(还有视频解说)
全过程AI大模型学习路线
③学习电子书籍和技术文档
市面上的大模型书籍确实太多了,这些是我精选出来的
④各大厂大模型面试题目详解
⑤ 这些资料真的有用吗?
这份资料由我和鲁为民博士共同整理,鲁为民博士先后获得了北京清华大学学士和美国加州理工学院博士学位,在包括IEEE Transactions等学术期刊和诸多国际会议上发表了超过50篇学术论文、取得了多项美国和中国发明专利,同时还斩获了吴文俊人工智能科学技术奖。目前我正在和鲁博士共同进行人工智能的研究。
所有的视频教程由智泊AI老师录制,且资料与智泊AI共享,相互补充。这份学习大礼包应该算是现在最全面的大模型学习资料了。
资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。
智泊AI始终秉持着“让每个人平等享受到优质教育资源”的育人理念,通过动态追踪大模型开发、数据标注伦理等前沿技术趋势,构建起"前沿课程+智能实训+精准就业"的高效培养体系。
课堂上不光教理论,还带着学员做了十多个真实项目。学员要亲自上手搞数据清洗、模型调优这些硬核操作,把课本知识变成真本事!
如果说你是以下人群中的其中一类,都可以来智泊AI学习人工智能,找到高薪工作,一次小小的“投资”换来的是终身受益!
应届毕业生:无工作经验但想要系统学习AI大模型技术,期待通过实战项目掌握核心技术。
零基础转型:非技术背景但关注AI应用场景,计划通过低代码工具实现“AI+行业”跨界。
业务赋能 突破瓶颈:传统开发者(Java/前端等)学习Transformer架构与LangChain框架,向AI全栈工程师转型。
👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓**