PromptTemplate和解析器总结 | 豆包MarsCode AI刷题

122 阅读5分钟

PromptTemplate

这节课主要还是讲解了几个模板,重点讲FewShotPromptTemplate,通过给模型少量示例,使模型输出贴合我们想法。课后题谈到PipelinePromptTemplate。下面说说普通 PromptTemplate和FewShotPromptTemplate,主要区别在于它们的设计目的和使用方式:

PromptTemplate和FewShotPromptTemplate

1. 目的与功能

  • PromptTemplate:
    • 主要用于创建单一的提示,通常是针对特定任务或问题的直接请求。
    • 它可以包含占位符(如{product}),在生成提示时通过具体的输入值进行替换。
    • 适合简单的任务,不需要额外的上下文或示例。
  • FewShotPromptTemplate:
    • 旨在通过提供多个示例来帮助模型理解任务,适用于需要模型学习模式或风格的情况。
    • 允许用户提供一组示例(如输入和期望输出的对照),模型可以根据这些示例生成新的输出。
    • 适合更复杂的任务,尤其是当用户希望模型模仿特定风格或格式时。

2. 示例的使用

  • PromptTemplate:
    • 通常不包含示例,直接生成一个提示,模型只需根据提示内容进行响应。
  • FewShotPromptTemplate:
    • 包含多个示例,这些示例在生成提示时会被插入到最终的提示中。模型会参考这些示例来生成与之相似的新输出。

3. 结构

  • PromptTemplate:
    • 结构相对简单,通常只包含指令和占位符。
  • FewShotPromptTemplate:
    • 结构更复杂,包含示例提示、输入变量和后缀等。它会将示例格式化为字符串,并在生成最终提示时将这些示例与新的输入结合起来。

4. 适用场景

  • PromptTemplate:
    • 适用于简单的问答、指令或任务。
  • FewShotPromptTemplate:
    • 适用于需要模型理解上下文、风格或特定格式的任务,例如生成广告文案、写作风格模仿等。

示例对比

  • PromptTemplate 示例:

    template = "你是一位业务咨询顾问。你给一个销售{product}的电商公司,起一个好的名字?"
    
  • FewShotPromptTemplate 示例:

    samples = [
        {"flower_type": "玫瑰", "occasion": "爱情", "ad_copy": "玫瑰,浪漫的象征。"},
        {"flower_type": "康乃馨", "occasion": "母亲节", "ad_copy": "康乃馨代表着母爱的纯洁。"}
    ]
    prompt = FewShotPromptTemplate(
        examples=samples,
        example_prompt=prompt_sample,
        suffix="鲜花类型: {flower_type}\n场合: {occasion}",
        input_variables=["flower_type", "occasion"]
    )
    

PipelinePromptTemplate和FewShotPromptTemplate

PipelinePromptTemplate用于将多个提示模板组合在一起,当想要重用部分提示时非常有用。 它由两部分组成:final_prompt(最终提示)和pipeline_prompts(管道提示),后者是一个由字符串名称和提示模板组成的元组列表。 每个pipeline_prompts中的提示模板会被格式化,然后作为具有相同名称的变量传递到后续的提示模板中。 PipelinePromptTemplate适用于构建复杂的提示流程,其中不同的提示模板需要按顺序执行,并且可能需要将一个提示的输出作为另一个提示的输入。

FewShotPromptTemplate更侧重于通过提供示例来引导模型学习特定的任务,而PipelinePromptTemplate则更侧重于构建一个提示处理的流程,其中可以包含多个步骤或阶段,每个步骤可能使用不同的提示模板。

LangChain 中的输出解析器

输出解析器是一种专用于处理和构建语言模型响应的类

结构化解析器

结构化解析器是一种专为简单文本响应设计的解析工具。它能够快速地从模型输出中提取出结构化数据,使得数据更加易于处理和分析。这种解析器的优势在于其简单性和高效性,特别适合那些对输出格式要求不高的应用场景。

适用场景

  • 快速文本提取
  • 简单的数据结构
  • 无需复杂数据处理的应用

Pydantic解析器

与结构化解析器相比,Pydantic解析器提供了对复杂数据结构和类型的支持。它能够处理更复杂的数据类型,如嵌套对象和数组,使得开发者能够从模型中提取出更加丰富和详细的信息。Pydantic解析器的灵活性和强大的数据处理能力使其成为处理复杂数据结构的首选。

适用场景

  • 需要处理复杂数据结构的应用
  • 对数据类型有严格要求的场景
  • 需要从模型中提取详细信息的情况

自动修复解析器

自动修复解析器的主要作用是纠正模型输出中的小格式错误。它是一种更加“被动”的解析器,仅在检测到原始输出存在问题时才会介入进行修复。这种解析器的优势在于其能够自动纠正错误,减少人工干预,提高数据处理的效率。

适用场景

  • 需要自动纠正格式错误的应用
  • 对输出格式有一定要求,但不需要复杂数据处理的场景

重试解析器

重试解析器是一种更为主动的解析器,它不仅能够处理格式错误,还能够解决内容缺失的问题。通过重新与模型进行交互,重试解析器能够确保输出的完整性和准确性,这对于输出结果的质量和可靠性至关重要。

适用场景

  • 输出完整性和准确性至关重要的应用
  • 需要确保数据完整性的场景
  • 面对复杂问题,需要多次交互以获得最佳输出的情况

后两种解析器,都是通过大模型来实现格式的修复。