一、核心概念
1. 什么是 LangChain Model IO?
Model IO 是 LangChain 控制大模型输入输出的核心模块,包含三大能力:
- 提示词模板(动态生成标准化提示词)
- 模型调用(对接所有大模型)
- 输出解析(把 AI 返回的文本转成结构化数据)
2. 什么是提示词模板?
将固定文案 + 动态变量 (用户问题、知识库、参数)分离,自动生成规范提示词的工具。✅ 告别字符串拼接✅ 统一提示词规范✅ 支持多角色、少样本、结构化输出✅ 是 RAG/Agent 的地基
二、环境准备
安装最新版 LangChain 核心依赖:
# 核心库
pip install langchain langchain-core
# 大模型(以OpenAI为例,兼容通义千问/文心一言/Ollama本地模型)
pip install langchain-openai
三、4 大核心提示词模板(企业级全覆盖)
LangChain 提示词模板全部基于 langchain_core.prompts,这是官方标准写法。
模板 1:基础字符串模板 PromptTemplate
适用场景
简单文本生成、无角色区分的基础任务,动态替换变量。
代码示例
python
from langchain_core.prompts import PromptTemplate
# 1. 定义模板:{question} 是动态占位符
template = PromptTemplate.from_template(
"你是一个Java高级开发助手,请专业回答问题:{question}"
)
# 2. 传入参数,生成最终提示词
prompt = template.format(question="什么是Java虚拟机JVM?")
print(prompt)
输出
你是一个Java高级开发助手,请专业回答问题:什么是Java虚拟机JVM?
模板 2:对话模板 ChatPromptTemplate ✅【最常用、必学】
适用场景
所有聊天大模型(GPT、通义千问、Qwen、Ollama)支持标准三角色:
system:系统提示(设定 AI 身份、规则)user:用户提问assistant:AI 历史回复(多轮对话)
代码示例(单轮对话)
python
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
# 1. 定义对话模板(多角色组合)
prompt = ChatPromptTemplate.from_messages([
# 系统角色:设定AI身份
("system", "你是一名Java高级工程师,只回答Java技术问题,简洁专业"),
# 用户角色:动态参数
("user", "问题:{question}")
])
# 2. 对接大模型
llm = ChatOpenAI(model="gpt-3.5-turbo", api_key="你的key", base_url="代理地址")
# 3. 组合:模板 → 模型(LangChain 链式调用)
chain = prompt | llm
# 4. 执行调用
response = chain.invoke({"question": "Java泛型的作用是什么?"})
print(response.content)
核心优势
✅ 标准化对话格式✅ 无缝适配所有聊天模型✅ 直接支持多轮对话
模板 3:少样本模板 FewShotPromptTemplate ✅【提升准确率】
适用场景
复杂任务:分类、信息提取、格式转换给 AI 提供示例,大幅减少幻觉,强制 AI 模仿输出格式。
代码示例
python
from langchain_core.prompts import FewShotPromptTemplate, PromptTemplate
# 1. 定义示例(业务分类案例)
examples = [
{"text": "SpringBoot", "category": "Java框架"},
{"text": "MySQL", "category": "数据库"},
{"text": "Redis", "category": "缓存中间件"}
]
# 2. 示例的格式化模板
example_prompt = PromptTemplate.from_template("文本:{text},分类:{category}")
# 3. 构建少样本模板
few_shot_prompt = FewShotPromptTemplate(
examples=examples, # 传入示例
example_prompt=example_prompt, # 示例格式
suffix="请分类:{input}", # 后缀:用户真实问题
input_variables=["input"] # 输入变量
)
# 生成提示词
prompt = few_shot_prompt.format(input="MyBatis")
print(prompt)
输出
文本:SpringBoot,分类:Java框架
文本:MySQL,分类:数据库
文本:Redis,分类:缓存中间件
请分类:MyBatis
模板 4:结构化输出模板 ✅【Java/Python 后端必备】
核心痛点
后端需要 AI 返回固定 JSON / 结构体 ,但大模型容易乱输出。LangChain 提供解析器 + 模板,强制 AI 返回标准格式。
代码示例(自动转 JSON / 对象)
python
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import JsonOutputParser
from pydantic import BaseModel, Field
# 1. 定义输出结构(后端实体类)
class UserInfo(BaseModel):
name: str = Field(description="姓名")
age: int = Field(description="年龄")
job: str = Field(description="职业")
# 2. 解析器
parser = JsonOutputParser(pydantic_object=UserInfo)
# 3. 模板(自动注入格式要求)
prompt = ChatPromptTemplate.from_messages([
("user", "从文本提取信息,按要求输出:{text}\n{format_instructions}")
]).partial(format_instructions=parser.get_format_instructions())
# 4. 组合链
llm = ChatOpenAI(api_key="xxx")
chain = prompt | llm | parser
# 5. 执行(直接返回Python对象)
result = chain.invoke({
"text": "张三,28岁,Java高级开发工程师"
})
print(result)
# 输出:{'name': '张三', 'age': 28, 'job': 'Java高级开发工程师'}
四、高级实战:RAG 专用提示词模板
这是你学习 RAG 的核心模板!将检索到的知识库内容作为变量传入,让 AI 基于知识库回答。
python
from langchain_core.prompts import ChatPromptTemplate
# RAG 标准提示词模板(行业通用)
rag_prompt = ChatPromptTemplate.from_template("""
请根据以下知识库内容,回答用户的问题。
如果知识库中没有答案,请回答:未找到相关信息,不要编造。
知识库内容:
{context}
用户问题:{question}
""")
# 使用方式
prompt = rag_prompt.format(
context="JVM是Java虚拟机,负责运行Java字节码...",
question="什么是JVM?"
)
print(prompt)
五、LangChain 链式调用(终极用法)
Model IO 的终极形态:模板 → 模型 → 解析器 一键串联
python
# 标准链式写法(企业开发标配)
chain = prompt | llm | parser
一行代码完成:生成提示词 → 调用大模型 → 解析结构化结果
六、最佳实践(RAG/Agent 开发必看)
- **优先用
ChatPromptTemplate**所有现代大模型都是聊天模型,99% 场景用它。 - 结构化输出必加解析器后端开发杜绝手动解析 JSON,避免报错。
- 少样本模板优化复杂任务分类、提取、格式化必用。
- RAG 必须用上下文模板 把检索的
context传入模板,解决大模型幻觉。 - 提示词不硬编码放在配置文件,统一管理。
七、总结
核心模板速记
PromptTemplate:基础字符串替换ChatPromptTemplate:✅ 企业首选,对话场景标配FewShotPromptTemplate:✅ 少样本示例,提升准确率Structured Output:✅ 后端必备,自动转结构化数据
核心作用
提示词模板 = 大模型的标准化接口