字节跳动青训营 | LangChain实战课学习笔记--调用模型与输出解析

107 阅读4分钟

一、大语言模型(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解析器来处理结构化输出,并探索了自动修复解析器和重试解析器在错误处理中的作用。