一、概述
LangChain 是一个为大型语言模型(LLMs)提供工具支持的框架,提示工程是其核心能力之一。通过优化提示,可以有效提升模型的任务完成效果和生成质量。本学习笔记简单介绍了LangChain的提示工程,重点在于 FewShotPromptTemplate、Chain of Thought(CoT) 和 Tree of Thought(ToT) 的应用方法与原理。
二、FewShotPromptTemplate 与示例选择
FewShotPromptTemplate 是提示工程的基础,通过提供示例,模型可以从中学习并生成更加准确的输出。
1. FewShotPromptTemplate 的结构
FewShotPromptTemplate 包括:
- 示例样本(Examples):用于指导模型学习任务的输入输出对。
- 示例模板(Example Prompt):定义示例的格式。
- 输入变量与后缀(Input Variables & Suffix):动态传入的具体变量及补充的输出格式。
2. 使用步骤
-
构建示例样本: 每个示例是一个字典,定义了输入与输出的预期结构。
samples = [ {"flower_type": "玫瑰", "occasion": "爱情", "ad_copy": "玫瑰,浪漫的象征。"}, {"flower_type": "康乃馨", "occasion": "母亲节", "ad_copy": "康乃馨象征母爱。"} ] -
创建提示模板: 使用
PromptTemplate定义示例格式。template = "鲜花类型: {flower_type}\n场合: {occasion}\n文案: {ad_copy}" example_prompt = PromptTemplate(input_variables=["flower_type", "occasion", "ad_copy"], template=template) -
生成 FewShotPromptTemplate: 结合样本、模板以及用户输入生成完整的 FewShotPrompt。
prompt = FewShotPromptTemplate( examples=samples, example_prompt=example_prompt, suffix="鲜花类型: {flower_type}\n场合: {occasion}", input_variables=["flower_type", "occasion"] ) print(prompt.format(flower_type="百合", occasion="庆祝")) -
结合示例选择器: 利用
SemanticSimilarityExampleSelector按需选择最相关的样本,避免高成本的 Token 消耗。example_selector = SemanticSimilarityExampleSelector.from_examples(samples, OpenAIEmbeddings(), Chroma, k=1)
三、思维链(Chain of Thought, CoT)
CoT 是提示工程中的一种增强推理方法,通过生成清晰的中间推理步骤,提高模型复杂任务的表现。
1. CoT 的两种形式
-
Few-Shot CoT: 在提示中加入示例,展示推理过程。
示例: 人类:2个苹果加上3个苹果等于多少? AI:首先,2个苹果加上3个苹果等于5个苹果。因此答案是5。 -
Zero-Shot CoT: 仅通过指令提示模型进行逐步推理,例如加入
Let's think step by step。Prompt: Question: What is the sum of 2 and 3? Let's think step by step.
2. CoT 的应用
CoT 可引导模型分步骤完成复杂任务。例如,针对鲜花推荐场景:
role_template = "你是一个花店助手。"
cot_template = """
作为助手,我会按以下步骤进行推荐:
1. 理解用户需求。
2. 分析需求并关联适合的花卉。
3. 说明推荐理由。
示例 1:
人类:我想找一种象征爱情的花。
AI:红玫瑰是爱情的象征,推荐红玫瑰。
示例 2:
人类:我想找一种独特的花。
AI:兰花以独特和美丽著称,推荐兰花。
"""
chat_prompt = ChatPromptTemplate.from_messages([
SystemMessagePromptTemplate.from_template(role_template),
SystemMessagePromptTemplate.from_template(cot_template)
])
通过Few-Shot 示例与逐步推理,模型能更准确地满足用户需求。
四、思维树(Tree of Thought, ToT)
ToT 是 CoT 的扩展,通过系统性探索解决复杂问题。它引入了树状搜索的概念,用语言序列表示推理路径。
1. ToT 的关键特点
- 生成候选路径:模型在每一步生成多个候选解。
- 引入搜索算法:如广度优先搜索(BFS)或深度优先搜索(DFS)评估路径。
- 动态验证和强化:选择最佳推理路径。
2. ToT 的应用示例
假设顾客咨询:“我想为妻子购买一束花,她喜欢淡雅的颜色和花香。”
思维步骤:
1. 理解需求:
- 妻子喜欢淡雅的颜色和花香。
2. 候选选项:
- 百合:颜色淡雅,香气宜人。
- 紫罗兰:柔和色调,芬芳扑鼻。
- 桔梗:颜色淡雅,但香气不足。
3. 筛选最佳选择:
- 百合和紫罗兰最符合需求。
4. 推荐:
“建议选择百合或紫罗兰,它们既符合颜色偏好,又拥有花香。”
通过多步骤分解和路径筛选,ToT 框架能更全面地考虑用户需求并优化推荐。
五、总结与反思
1. FewShotPromptTemplate
通过示例与结构化模板,提高模型对特定任务的理解与表现。
- 优势:适合明确的任务需求。
- 局限:对少样本依赖较大。
2. Chain of Thought
引导模型按部就班地推理,适合复杂任务的逐步拆解。
- Few-Shot CoT:用示例指导推理。
- Zero-Shot CoT:直接提示逐步推理,成本较低。
3. Tree of Thought
结合搜索算法扩展推理深度与广度,为复杂问题提供高效解决路径。
- 优势:适合复杂、多路径决策任务。
- 局限:计算资源需求较高。
4. 提示工程的核心思想
无论是 FewShotPromptTemplate 还是 CoT/ToT,其核心目标是:
- 通过结构化示例与分步推理,明确需求,降低生成误差。
- 提高模型理解能力,使其更符合用户意图。
未来方向: 结合强化学习或动态示例选择器,可以进一步优化 ToT 框架,使其在更广泛的应用场景中表现更佳。
通过对提示工程的深入学习,我们可以有效提升 LangChain 框架的使用效率,为复杂任务开发提供强有力的支持。