提示模板通过 PromptTemplate 创建,支持字符串模板占位符,通过 format 生成查询文本。
LangChain 提供如下提示模板封装:
提示工程:Prompt Engineering,如何构造大语言模型的提示词
- 给予模型清晰明确的知识
- 让模型慢慢地思考
(吴恩达)
提示工程
gpt 提示策略
- 写清晰的指示
- 给模型提供参考(也就是示例)
- 将复杂任务拆分成子任务
- 给 GPT 时间思考
- 使用外部工具
- 反复迭代问题
提示框架
一个提示词自上而下通常包含如下几个部分:
- 指令 Instruction,描述任务大概是什么,怎么做。如定义角色(你是一个 xxx),如何查询,如何使用外部信息等
- 上下文 Context,模型额外的知识来源,通常来自于矢量数据库,详见嵌入
- 提示输入 Prompt Input,描述问题具体是什么,也可以与指令部分合并
- 输出指示器 Output Indicator,标记要生成文本的开头,引导大模型输出给定类型的文本(可选)
Few-Shot 示例
FewShotPromptTemplate 可以添加几个示例,为模型提供生成答案的思路和样本
示例通常位于指令部分之后
One-Shot是最常见的一种Few-ShotZero-Shot指在没有任何示例的情况下,只根据任务描述生成响应
先准备示例列表,这里使用字典存储示例,方便后面按模板生成示例 PromptTemplate
示例模板也是一个 PromptTemplate,这里字符串模板中的变量与前面示例列表一一对应。
最后,将示例列表和示例模板传递给 FewShotPromptTemplate 即可
示例选择器
示例选择器用于在多个示例中选择合适的示例样本。该功能也是基于向量相似度实现,可在有大量示例时节省请求 Token
samples:示例样本OpenAIEmbeddings:用于将示例样本转化为向量存储Chroma:指定向量数据库类型
思维链
思维链是对 Few-Shot 的扩展,用于提高示例引导的有效性
思维链:CoT(Chain of Thought),在示例中提供中间推导过程以提高大语言的复杂推导能力
Zero-Shot CoT:直接提示think step by step也能显著提升准确性
使用 CoT 提示,需要在示例中描述足够详细的中间步骤
思维树
思维树(ToT,Tree of Thoughts)是对思维链的扩展,引导语言将每个步骤划分为多个候选方案,根据要求选出最佳选择。
输出解析
输出解析 StructuredOutputParser 可以产生结构化的回应,原理是在提示词末尾追加描述输出样式的文本,由 AI 按格式生成