文章目录
-
- [1. LangChain 中的 Prompt 模块怎么使用](#1. LangChain 中的 Prompt 模块怎么使用)
-
- [1.1 最简单的模板](#1.1 最简单的模板)
- [1.2 聊天模板](#1.2 聊天模板)
- [1.3 示例模板(Few-Shot)](#1.3 示例模板(Few-Shot))
- [1.4 动态日期模板](#1.4 动态日期模板)
- [2. 如何在实际项目中设计 Prompt](#2. 如何在实际项目中设计 Prompt)
-
- [2.1 Prompt 设计的四大要素](#2.1 Prompt 设计的四大要素)
- [2.2 如何进行 Prompt 优化](#2.2 如何进行 Prompt 优化)
-
- [Prompt 优化的方法论](#Prompt 优化的方法论)
- 性能评估
- [3. 零样本与少样本学习](#3. 零样本与少样本学习)
1. LangChain 中的 Prompt 模块怎么使用
提示词模板就是把"问问题"这件事标准化,不用每次都手写完整的提示词。
1.1 最简单的模板
定义模板,用 {} 占位。
python
from langchain_core.prompts import PromptTemplate
# 定义模板,用 {} 占位
template = PromptTemplate.from_template(
"请用{language}语言介绍一下{topic},不超过100字。"
)
# 填充变量
prompt = template.format(language="中文", topic="人工智能")
print(prompt)
# 输出: 请用中文语言介绍一下人工智能,不超过100字。
1.2 聊天模板
可定义多轮对话模板。
python
from langchain_core.prompts import ChatPromptTemplate
from dotenv import load_dotenv
import os
from langchain_openai import ChatOpenAI
load_dotenv()
# 定义多轮对话模板
chat_template = ChatPromptTemplate.from_messages([
("system", "你是一位{role},擅长用简洁易懂的方式解释复杂概念。"),
("human", "请解释一下:{concept}"),
])
# 生成消息列表
messages = chat_template.format_messages(
role="物理学教授",
concept="量子纠缠"
)
# 创建模型
llm = ChatOpenAI(
model="deepseek-chat",
api_key=os.getenv("OPENAI_API_KEY"),
base_url="https://api.deepseek.com"
)
# 调用模型
response = llm.invoke(messages)
print(response.content)
1.3 示例模板(Few-Shot)
通过给几个例子,教 AI 按你想要的格式输出。
python
from langchain_core.prompts import ChatPromptTemplate
from dotenv import load_dotenv
import os
from langchain_openai import ChatOpenAI
load_dotenv()
# 创建模型
llm = ChatOpenAI(
model="deepseek-chat",
api_key=os.getenv("OPENAI_API_KEY"),
base_url="https://api.deepseek.com"
)
# 创建包含示例的模板
few_shot_template = ChatPromptTemplate.from_messages([
("system", "你是一个情绪表达助手。"),
("human", "示例:\n情绪: 开心\n表达: 我今天非常开心!\n\n情绪: 难过\n表达: 我感到有些难过..."),
("human", "现在请表达这个情绪: {emotion}")
])
messages = few_shot_template.format_messages(emotion="兴奋")
response = llm.invoke(messages)
print(response.content)
# 情绪: 兴奋
# 表达: 我兴奋得快要跳起来了!
1.4 动态日期模板
除了可以设置一些输入变量,也可以定义一些自动填充的变量。
python
from langchain_core.prompts import PromptTemplate
from dotenv import load_dotenv
import os
from langchain_openai import ChatOpenAI
from datetime import datetime
load_dotenv()
# 创建模型
llm = ChatOpenAI(
model="deepseek-chat",
api_key=os.getenv("OPENAI_API_KEY"),
base_url="https://api.deepseek.com"
)
template = PromptTemplate(
template="今天是{date},请告诉我关于{topic}的最新消息。",
input_variables=["topic"],
partial_variables={
"date": datetime.now().strftime("%Y年%m月%d日") # 自动填充
}
)
# 只需要传 topic
prompt = template.format(topic="AI发展")
response = llm.invoke(prompt)
print(response.content)
2. 如何在实际项目中设计 Prompt
2.1 Prompt 设计的四大要素
- 角色设定:限定模型回答视角
- 任务描述:使用 STAR 原则(场景、任务、行动、结果)
- 格式规范:如分点列表、表格呈现、代码格式等
- 约束条件:包括长度、风格、内容、要求引用来源等限制
2.2 如何进行 Prompt 优化
Prompt 优化的方法论
- 迭代优化:从简单到复杂,逐步完善
- A/B 测试:比较不同版本的效果
- 用户反馈:收集实际使用情况
- 性能指标:准确率、相关性、一致性等
性能评估
- 定量指标:响应时间、成功率
- 定性指标:输出质量、相关性
- 用户体验:易用性、满意度
- 成本效益:API 调用成本、资源使用
3. 零样本与少样本学习
- 零样本学习(Zero-Shot):无需示例,直接通过指令让大模型完成任务,依赖模型预训练知识,适合通用、简单任务(如翻译、分类、通用问答)。
- 少样本学习(Few-Shot):通过给出少量高质量示例,引导模型理解任务格式和规则,适合复杂、专业任务(如法律文档解析、医疗术语抽取)。
- 区别:零样本输出可控性较低,少样本通过示例提升输出可控性和准确率。