学习笔记4《提示工程(上):用少样本FewShotTemplate和ExampleSelector创建应景文案》

92 阅读3分钟

提示工程与LangChain模板学习笔记

1. 提示工程的重要性

提示工程是与大型语言模型交互的关键技术,它通过精心设计的提示来引导模型生成所需的输出。在提示模板的构建过程中,加入partial_variables可以让模型生成结构化的输出,这是因为模型被明确指示了输出的格式和内容。

2. 提示模板的构建

通过在提示中加入{format_instructions},模型能够理解我们希望得到的回答格式。例如,通过指示输出应遵循JSON格式,模型就能生成符合该格式的数据结构。

3. 提示工程的原则

  • 清晰而具体的指示
  • 给模型提供参考(示例)
  • 将复杂任务拆分成子任务
  • 给模型时间思考
  • 使用外部工具
  • 反复迭代问题

这些原则不仅适用于大语言模型,也适用于人类的思维过程。

4. 提示的结构

一个实用的提示框架包括:

  • 指令(Instruction):告诉模型任务的大致内容和执行方式。
  • 上下文(Context):提供额外的知识来源。
  • 提示输入(Prompt Input):具体的问题或需要模型执行的任务。
  • 输出指示器(Output Indicator):标记文本生成的开始。

5. LangChain 提示模板的类型

LangChain提供了多种提示模板,包括StringPromptTemplateChatPromptTemplate,以及基于它们的不同变体。

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. 思考题

探索PromptTemplatetemplate_formatvalidate_template参数,并尝试使用PipelinePromptTemplate和自定义模板。构想一个关于鲜花店运营场景中的客户服务对话的少样本学习任务。