一、大语言模型(LLM)
1.1 大语言模型概述
定义:大语言模型(LLM)是基于大量数据训练的模型,能够理解和生成自然语言。
发展:始于2018年Google的论文《Attention is all you need》,引入Transformer架构,成为预训练模型的核心。
基础模型:基于Transformer的大规模语言模型,如BERT,通过学习文本的双向上下文信息,实现对句子结构的深入理解。
1.2 预训练与微调
预训练:在大规模无标注文本数据上训练模型,学习自然语言的基础表达、上下文信息和语义知识。
微调:在预训练模型基础上,根据特定下游任务对模型进行微调,适应特定任务的需求。
1.3 使用开源模型
HuggingFace:一个支持多种开源模型的平台,提供模型下载和使用。
Llama2:Meta(Facebook)推出的模型,可以通过HuggingFace下载和使用。
1.4 调用和使用模型
安装:通过pip install transformers安装HuggingFace Library。
登录:在HuggingFace网站注册并获取API Token。
调用:使用HuggingFace的Transformers库调用Llama2模型,进行文本生成。
1.5 LangChain集成
HuggingFace Hub:通过HuggingFace Hub集成模型,简化下载和使用流程。
Pipeline:使用HuggingFace Pipeline简化NLP任务的使用流程。
1.6 自定义语言模型
本地模型:如果需要在本地从头训练模型或使用自定义模型,可以通过LangChain的LLM基类创建自定义LLM类。
量化:模型量化技术,减少模型大小和计算需求,使大模型能在CPU上运行。
1.7 工具和库
PyTorch:深度学习框架,用于模型训练和微调。
HuggingFace:提供预训练模型和微调工具。
LangChain:利用大语言模型的推理功能,开发新工具或应用。
二、LangChain 输出解析器
2.1 输出解析器简介
目的:将语言模型的文本输出转换为程序可处理的结构化信息。
核心方法:
- get_format_instructions:返回格式化模型输出的指导字符串。
- parse:将模型输出解析为特定数据结构。
- parse_with_prompt(可选):基于提示和模型输出解析为特定数据结构。
示例:
class OutputParser:
def __init__(self):
pass
def get_format_instructions(self):
# 返回一个字符串,指导如何格式化模型的输出
pass
def parse(self, model_output):
# 解析模型的输出,转换为某种数据结构或格式
pass
def parse_with_prompt(self, model_output, prompt):
# 基于原始提示解析模型的输出,转换为某种数据结构或格式
pass
2.1 输出解析器种类
列表解析器:处理模型输出为列表的情况。
日期时间解析器:确保输出为正确日期或时间格式。
枚举解析器:处理预定义值集合中的输出。
结构化输出解析器:处理复杂结构化输出。
Pydantic(JSON)解析器:处理符合特定格式的JSON对象。
自动修复解析器:自动修复常见输出错误。
重试解析器:在输出不符合预期时尝试修复或重新生成输出。
2.3 Pydantic(JSON)解析器实战
步骤1:设置OpenAI API密钥并创建模型实例。
步骤2:定义输出数据格式,使用Pydantic创建FlowerDescription类。
步骤3:创建输出解析器,获取输出格式指示。
步骤4:定义提示模板,包含输入变量和输出格式指示。
步骤5:生成提示,传入模型并解析输出,将结果添加到DataFrame。
2.4 自动修复解析器(OutputFixingParser)实战
应用场景:纠正小的格式错误。
示例:解析格式错误的JSON字符串,自动修正并解析成功。
2.5 重试解析器(RetryWithErrorOutputParser)实战
应用场景:处理格式错误和内容缺失,通过重新与模型交互获取完整输出。
示例:解析不完整输出,根据原始提示还原正确的action_input字段内容。
三、总结
通过这两章的学习,我大概了解了大语言模型的基本概念、发展历程、预训练与微调的重要性,以及如何使用和集成开源模型。也通过对输出解析器的学习掌握了如何使用Pydantic解析器来处理结构化输出,并探索了自动修复解析器和重试解析器在错误处理中的作用。