欢迎光临
我们一直在努力

LangChain中的提示词模板

字符串拼接的prompt,在工程化应用中有诸多不便,故而引入提示词模板,提示词模板的价值在于:参数化,可维护,标准化

1.ChatPromptTemplate:多角色对话模板

from_messages静态工厂方法

format_messages拼接历史对话,返回调用大模型需要的消息列表

from langchain_core.prompts import ChatPromptTemplate

# 定义一个带变量的对话模板
# {name} 和 {question} 是占位符,运行时会被替换
chat_template = ChatPromptTemplate.from_messages([
("system", "你是一个叫 {name} 的 AI 助手,说话风格简洁专业"),
("human", "{question}")
])

# 填充变量,生成最终的消息列表
#拼接历史对话、系统提示、用户提问,返回适配不同 Chat 对话模型的消息对象列表
messages = chat_template.format_messages(name="小助手", question="什么是机器学习?")
print(messages)

# 直接和模型组合使用
from langchain_openai import ChatOpenAI

response = llm.invoke(messages)
print(response.content)

2.PromptTemplate:纯文本模板,不需要区分角色时使用

from_template静态工厂方法

format拼接历史对话,返回调用大模型需要的消息列表

#写法一:
#from_template静态工厂方法,这是静态工厂方法;它会自动扫描 字符串里所有 {xxx} 占位符;
rewrite_prompt = PromptTemplate.from_template("""你是一个查询优化助手。请将用户的口语化问题改写为更适合信息检索的精确查询。

改写要求:
1. 补充隐含的上下文信息
2. 将口语化表达转为专业表述
3. 消除歧义,明确查询意图
4. 保持原意不变,不要添加原问题未提及的内容
5. 直接输出改写后的查询,不要解释

用户问题: {query}
改写后的查询:""")

#写法二:
#此处的提示词是显示写法,手动input_variables
rewrite_prompt = PromptTemplate(
input_variables=["query"],#input_variables=["query"]:声明模板中占位符 {query} 是外部传入变量
template="""你是一个查询优化助手。请将用户的口语化问题改写为更适合信息检索的精确查询。

改写要求:
1. 补充隐含的上下文信息
2. 将口语化表达转为专业表述
3. 消除歧义,明确查询意图
4. 保持原意不变,不要添加原问题未提及的内容
5. 直接输出改写后的查询,不要解释

用户问题: {query}

改写后的查询:"""
)

##纯文本模板单变量/多变量示例

from langchain_core.prompts import PromptTemplate

# 单变量模板
prompt = PromptTemplate.from_template("给我讲一个关于{topic}的笑话")
print(prompt.format(topic="程序员"))
# → "给我讲一个关于程序员的笑话"
# 多变量模板
prompt = PromptTemplate(
template="请用{style}的风格,写一篇关于{topic}的短文,字数不超过{limit}字",
input_variables=["style", "topic", "limit"]
)
print(prompt.format(style="幽默", topic="加班", limit=100))

3.部分填充:预设部分变量

from langchain_core.prompts import PromptTemplate
from datetime import datetime

# 一个需要三个变量的模板
prompt = PromptTemplate(
template="请分析{city}在{year}年{date}的天气趋势",
input_variables=["city", "year", "date"]
)

def get_datetime():
now = datetime.now()
return now.strftime("%m/%d/%Y, %H:%M:%S")

# partial() 可以预填部分变量
# 注意:date 传的是函数引用而非调用结果,每次 format 时会重新执行
partial_prompt = prompt.partial(
city="成都",
year="2026",
date=get_datetime) # 动态获取当前日期

# 只需填剩余的变量(这里已经全部填完了)
print(partial_prompt.format())

4.Few-shot:用例题教会模型做题

##Few-Shot Prompt(少样本提示)

# 本方框定义格式化,下个方框调用大模型回答问题
from langchain_core.prompts import FewShotPromptTemplate, PromptTemplate

# 第一步:准备示例数据
examples = [
{"input": "YYDS", "output": "永远的神(极度赞美)"},
{"input": "绝绝子", "output": "太棒了(强烈赞叹)"},
{"input": "躺平", "output": "心态平和、不再内卷(不争不抢的生活态度)"},
]

# 第二步:定义每个示例的展示格式
example_prompt = PromptTemplate(
input_variables=["input", "output"],
template="黑话: {input}\\n翻译: {output}"
)

# 第三步:组装完整的 Few-Shot Prompt
prompt = FewShotPromptTemplate(
examples=examples, # 示例列表
example_prompt=example_prompt, # 每个示例的格式
prefix="你是一个精通网络流行语的翻译官。请把黑话翻译成正式的职场语言。\\n", # 前缀(指令)
suffix="黑话: {input}\\n翻译:", # 后缀(用户问题)
input_variables=["input"]
)
# 第四步:生成最终 prompt
final_prompt = prompt.format(input="下头")
print(final_prompt)
# 输出效果:
# 你是一个精通网络流行语的翻译官。请把黑话翻译成正式的职场语言。
#
# 黑话: YYDS
# 翻译: 永远的神(极度赞美)
#
# 黑话: 绝绝子
# 翻译: 太棒了(强烈赞叹)
#
# 黑话: 躺平
# 翻译: 心态平和、不再内卷(不争不抢的生活态度)
#
# 黑话: 下头
# 翻译:

response = llm.invoke(final_prompt)
print(response.content)
# → "扫兴、令人不适(形容某事破坏了好心情)"

赞(0)
未经允许不得转载:171主机测评 » LangChain中的提示词模板
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址