一、提示工程的原理
在提示模板的构建过程中加入了partial_variables,也就是输出解析器指定的format_instructions之后,为什么能够让模型生成结构化的输出?
针对大模型的提示工程的两大原则:
1、写出清晰而具体的指示
2、给模型思考的时间
很多大语言模型如:OPENAI、CHATGPT、DeepSeek等在实践中,给出了与这大原则想一脉相承的6大策略。分别是:
1、写清晰的指示
2、给模型提供参考(也就是示例)
3、将复杂任务拆分成子任务
4、给时间思考
5、使用外部工具
6、反复迭代问题
以上原则与策略其实不仅仅能够指导大语言模型,也完全能够指导你的思维过程,让你处理问题时的思路更为清晰。当在使用大模型应用时,我们完全可以将它看作另外一个与你完全一样的你。
1.1.提示的结构
在这个提示框架中:
- 指令(instuction):是一个模型中比较固定的部分,就是告诉模型这个任务大概要做什么、怎么做,比如如何使用提供的外部信息、如何处理查询以及如何构造输出。其中一个常见用例就是告诉模型“你是一个有的XX助手”,这会让它更认真地对待自己的角色。
- 上下文(Context):则充当模型的额外知识来源,这些信息可以手动插入到提示中,通过矢量数据库检索得来或通过其他方式(如调用API、计算器等工具)拉入。其中一个常见的用例就是把从向量数据库查询到的知识作为上下文传递给模型。
- 输出指示器(Output Indicator):是标记要生成的文本的开始,这就像我们小时候的数学考卷,先写一个“解”,就是代表你要开始答题了。如果生成python代码,可以使用"import"向量模型表明它必须开始编写python代码(因为大多数python脚本以import开头)。这部分在我们和大语言模型如:ChatGPT对话时往往是可有可无的,当然LangChain中的代理在构建提示模板时,经常性的会用一个“Thought:“(思考)作为引导词,指示模型开始输出自己的推理(Reasoning)。
二、提示工程模型使用
2.1. LangChain提示模板的类型
LangChain中提供String(StringPromptTemplate) 和Chat (BaseChatPromptTemplate)两种基本类型的模板,并基于它们构建了不同类型的提示模板:
模板导入方式:
from langchain.prompts.prompt import PromptTemplate
from langchain.prompts import FewShotPromptTemplate
from langchain.prompts.pipeline import PipelinePromptTemplate
from langchain.prompts import ChatPromptTemplate
from langchain.prompts import (
ChatMessagePromptTemplate,
SystemMessagePromptTemplate,
AIMessa