提示工程与LangChain模板学习笔记
1. 提示工程的重要性
提示工程是与大型语言模型交互的关键技术,它通过精心设计的提示来引导模型生成所需的输出。在提示模板的构建过程中,加入partial_variables可以让模型生成结构化的输出,这是因为模型被明确指示了输出的格式和内容。
2. 提示模板的构建
通过在提示中加入{format_instructions},模型能够理解我们希望得到的回答格式。例如,通过指示输出应遵循JSON格式,模型就能生成符合该格式的数据结构。
3. 提示工程的原则
- 清晰而具体的指示
- 给模型提供参考(示例)
- 将复杂任务拆分成子任务
- 给模型时间思考
- 使用外部工具
- 反复迭代问题
这些原则不仅适用于大语言模型,也适用于人类的思维过程。
4. 提示的结构
一个实用的提示框架包括:
- 指令(Instruction):告诉模型任务的大致内容和执行方式。
- 上下文(Context):提供额外的知识来源。
- 提示输入(Prompt Input):具体的问题或需要模型执行的任务。
- 输出指示器(Output Indicator):标记文本生成的开始。
5. LangChain 提示模板的类型
LangChain提供了多种提示模板,包括StringPromptTemplate和ChatPromptTemplate,以及基于它们的不同变体。
6. 使用 PromptTemplate
PromptTemplate是最基本的提示模板,可以通过from_template方法创建,也可以通过构造函数指定input_variables。
7. 使用 ChatPromptTemplate
对于聊天模型,ChatPromptTemplate提供了不同的消息角色,如系统消息、用户消息和助理消息,以构建更自然的对话流程。
8. FewShotPromptTemplate
FewShotPromptTemplate是提示工程中非常重要的部分,它通过提供少量示例来帮助模型理解任务并生成正确的响应。
示例代码
from langchain import PromptTemplate
template = """\
你是业务咨询顾问。
你给一个销售{product}的电商公司,起一个好的名字?
"""
prompt = PromptTemplate.from_template(template)
print(prompt.format(product="鲜花"))
9. FewShot学习的概念
- Zero-Shot:无需示例,模型根据任务描述生成响应。
- One-Shot:提供一个示例,模型学习并生成响应。
- Few-Shot:提供多个示例,模型学习并生成响应。
示例代码
from langchain.prompts.few_shot import FewShotPromptTemplate
from langchain.prompts.prompt import PromptTemplate
# 创建示例样本
samples = [
{
"flower_type": "玫瑰",
"occasion": "爱情",
"ad_copy": "玫瑰,浪漫的象征,是你向心爱的人表达爱意的最佳选择。"
},
# 其他示例...
]
# 创建提示模板
template="鲜花类型: {flower_type}\n场合: {occasion}\n文案: {ad_copy}"
prompt_sample = PromptTemplate(input_variables=["flower_type", "occasion", "ad_copy"], template=template)
# 创建FewShotPromptTemplate对象
prompt = FewShotPromptTemplate(
examples=samples,
example_prompt=prompt_sample,
suffix="鲜花类型: {flower_type}\n场合: {occasion}",
input_variables=["flower_type", "occasion"]
)
print(prompt.format(flower_type="野玫瑰", occasion="爱情"))
10. 使用示例选择器
当示例数量较多时,可以使用示例选择器来选择最相关的示例,以节省Token用量。
11. 总结
提供示例对于解决某些任务至关重要,FewShot的方式能够显著提高模型回答的质量。如果效果不佳,可能需要对模型进行微调或尝试更高级的提示技术。
12. 思考题
探索PromptTemplate的template_format和validate_template参数,并尝试使用PipelinePromptTemplate和自定义模板。构想一个关于鲜花店运营场景中的客户服务对话的少样本学习任务。