一、Model I/O(Input/Output)
Model I/O指模型使用过程,整个过程包括输入提示(Format)、调用模型(Predict)和输出解析(Parse)。
1.1提示模板(Prompt Template)
定义: 用于输入提示信息到模型中,根据需求动态选择不同输入。
构建: 通过PromptTemplate.from_template方法创建,包含输入变量、输出解析器等。
from langchain.prompts import PromptTemplate
# 创建原始模板
template = """您是一位专业的鲜花店文案撰写员。\n
对于售价为 {price} 元的 {flower_name} ,您能提供一个吸引人的简短描述吗?
"""
# 根据原始模板创建LangChain提示模板
prompt = PromptTemplate.from_template(template)
# 打印LangChain提示模板的内容
print(prompt)
1.2语言模型(Language Model)
大语言模型(LLM) : 如OpenAI的text-davinci-003,返回文本输出。
聊天模型(Chat Model) : 如OpenAI的ChatGPT,结构化API,返回聊天消息。
文本嵌入模型(Embedding Model) : 如OpenAI的text-embedding-ada-002,返回文本的Embedding。
1.3输出解析(Output Parsing)
目的: 从模型输出中提取结构化数据,便于程序处理。
实现: 使用StructuredOutputParser和ResponseSchema定义输出格式,解析模型输出。
过程:
① 设置OpenAI API Key。
② 使用PromptTemplate创建模板并生成提示。
③ 调用OpenAI模型实例,输入提示,获取输出。
④ 使用StructuredOutputParser解析输出,存入CSV文档。
1.4使用LangChain的优势
模板管理: 有效管理多个提示模板,保持代码整洁。
变量处理: 自动提取和检查模板中的变量。
模型切换: 便于尝试不同模型,只需更改模型名称。
输出解析: 提示模板嵌入输出格式定义,方便后续处理。
二、提示工程
2.1提示模板与结构化输出
目的: 通过在提示模板中加入partial_variables,指定输出解析器的format_instructions,引导模型生成结构化输出,如JSON格式。
实现: LangChain输出解析器在提示中添加说明,指示模型遵循特定格式生成输出。
2.2提示工程原则
① 给出清晰具体指示,给模型思考时间。
② 写清晰指示,提供参考,拆分任务,给思考时间,使用外部工具,反复迭代问题。
2.3提示结构
指令: 告诉模型任务和执行方式。
上下文: 提供额外知识来源。
提示输入: 具体问题或需求。
输出指示器: 标记文本开始,如Python代码的“import”。
2.4LangChain提示模板类型
StringPromptTemplate: 基础字符串模板。
ChatPromptTemplate: 针对聊天模型的模板,包含不同角色(系统、用户、助理)。
2.4.1使用PromptTemplate
功能: 生成适用于不同场景的提示。
示例: 生成公司命名建议。
2.4.2使用ChatPromptTemplate
角色: 系统、用户、助理。
示例: 构建聊天模型提示,生成公司命名。
2.4.3FewShotPromptTemplate
概念: 少样本学习,提供示例供模型参考。
起源: 机器学习研究,如Vinyals (2016)的匹配网络和Palatucci (2009)的零样本学习。
应用: 通过示例提高模型回答质量。
2.4.4使用FewShotPromptTemplate
创建示例样本: 包含输入变量和值的字典列表。
创建提示模板: 格式化示例为字符串。
创建FewShotPromptTemplate对象: 结合示例和提示模板生成复杂提示。
调用大模型: 传递提示生成所需文案。
2.5示例选择器
目的: 选择最相关示例,节省Token用量。
实现: 使用语义相似度比较,如Chroma或Qdrant向量数据库。
三、CoT和ToT的概念及使用
3.1Chain of Thought (CoT)
来源: 由谷歌大脑的Jason Wei等人在2022年提出。
目的: 通过生成中间推理步骤提高大型语言模型的复杂推理能力。
Few-Shot CoT: 在提示中提供链式思考示例以增强模型推理。
Zero-Shot CoT: 直接告诉模型逐步思考,进行推理。
3.2Tree of Thoughts (ToT)
来源: Yao和Long等人基于CoT思想提出。
目的: 引导语言模型探索思维作为中间步骤解决通用问题。
方法: 生成和评估思维的能力,结合搜索算法进行系统性探索和验证。
3.3总结
CoT: 通过中间推理步骤增强模型推理能力。
Few-Shot CoT: 提供示例引导模型。
Zero-Shot CoT: 直接告诉模型逐步推理。
ToT: 搜索思维树解决复杂问题,结合生成能力、搜索算法和强化学习。