LangChain 实战课-提示工程 | 豆包MarsCode AI 刷题

56 阅读4分钟

提示工程原则

  • 吴恩达公开课中
    1. 第一条原则是写出清晰而具体的指示。
    2. 第二条原则是给模型思考的时间。
  • Open AI的官方文档
    1. 写清晰的指示
    2. 给模型提供参考(也就是示例)
    3. 将复杂任务拆分成子任务
    4. 给GPT时间思考
    5. 使用外部工具
    6. 反复迭代问题

提示的结构

  • 指令(Instuction)告诉模型这个任务大概要做什么、怎么做,比如如何使用提供的外部信息、如何处理查询以及如何构造输出。这通常是一个提示模板中比较固定的部分。一个常见用例是告诉模型“你是一个有用的XX助手”,这会让他更认真地对待自己的角色。
  • 上下文(Context)则充当模型的额外知识来源。这些信息可以手动插入到提示中,通过矢量数据库检索得来,或通过其他方式(如调用API、计算器等工具)拉入。一个常见的用例时是把从向量数据库查询到的知识作为上下文传递给模型。
  • 提示输入(Prompt Input)通常就是具体的问题或者需要大模型做的具体事情,这个部分和“指令”部分其实也可以合二为一。但是拆分出来成为一个独立的组件,就更加结构化,便于复用模板。这通常是作为变量,在调用模型之前传递给提示模板,以形成具体的提示。
  • 输出指示器(Output Indicator)标记​​要生成的文本的开始。这就像我们小时候的数学考卷,先写一个“解”,就代表你要开始答题了。如果生成 Python 代码,可以使用 “import” 向模型表明它必须开始编写 Python 代码(因为大多数 Python 脚本以import开头)。这部分在我们和ChatGPT对话时往往是可有可无的,当然LangChain中的代理在构建提示模板时,经常性的会用一个“Thought:”(思考)作为引导词,指示模型开始输出自己的推理(Reasoning)。

LangChain 提示模板的类型

  • String(StringPromptTemplate)
  • Chat(BaseChatPromptTemplate)
  • FewShotPromptTemplate
    • 在Few-Shot学习设置中,模型会被给予几个示例,以帮助模型理解任务,并生成正确的响应。
    • 在Zero-Shot学习设置中,模型只根据任务的描述生成响应,不需要任何示例。
  • PipelinePromptTemplate

Chain of Thought(CoT)

如果生成一系列的中间推理步骤,就能够显著提高大型语言模型进行复杂推理的能力

  • Few-Shot CoT ,简单的在提示中提供了一些链式思考示例(Chain-of-Thought Prompting),足够大的语言模型的推理能力就能够被增强。简单说,就是给出一两个示例,然后在示例中写清楚推导的过程。
  • 在Zero-Shot CoT中,你只要简单地告诉模型“让我们一步步的思考(Let's think step by step) ”,模型就能够给出更好的答案。
  • Tree of Thoughts(ToT),ToT是一种解决复杂问题的框架,它在需要多步骤推理的任务中,引导语言模型搜索一棵由连贯的语言序列(解决问题的中间步骤)组成的思维树,而不是简单地生成一个答案。ToT框架的核心思想是:让模型生成和评估其思维的能力,并将其与搜索算法(如广度优先搜索和深度优先搜索)结合起来,进行系统性地探索和验证。
  • ToT 框架为每个任务定义具体的思维步骤和每个步骤的候选项数量。例如,要解决一个数学推理任务,先把它分解为3个思维步骤,并为每个步骤提出多个方案,并保留最优的5个候选方案。然后在多条思维路径中搜寻最优的解决方案。这种方法的优势在于,模型可以通过观察和评估其自身的思维过程,更好地解决问题,而不仅仅是基于输入生成输出。这对于需要深度推理的复杂任务非常有用。