字节跳动青训营 | LangChain实战课学习笔记--核心组件--模型

154 阅读4分钟

一、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: 搜索思维树解决复杂问题,结合生成能力、搜索算法和强化学习。