您现在的位置是:首页 > 手游情报

LangChain 输出解析器、文档加载器与文本分割器 demo

掌游情报站 2025-02-27【手游情报】203人已围观

简介目录输出解析器(OutputParsers)什么是输出解析器输出解析器的主要方法常见的输出解析器类型及使用示例文档加载器(DocumentLoaders)什么是文档加载器文档加载器的类型文档加载器开发示例文本分割器(TextSplitters)什么是文本分割器文本分割器的类型文本分割器开发示例输出解...

目录

输出解析器(OutputParsers)什么是输出解析器输出解析器的主要方法常见的输出解析器类型及使用示例

文档加载器(DocumentLoaders)什么是文档加载器文档加载器的类型文档加载器开发示例

文本分割器(TextSplitters)什么是文本分割器文本分割器的类型文本分割器开发示例

输出解析器(OutputParsers)什么是输出解析器

在LangChain中,输出解析器(OutputParsers)是用于将语言模型的原始文本输出解析为结构化信息的组件。它们的主要作用是将生成的文本转换为更易于处理和理解的数据结构,便于后续的处理与分析。

输出解析器的主要方法

输出解析器需要实现以下两个主要方法:

获取格式指令(get_format_instructions):返回包含如何格式化语言模型输出的指令字符串。

解析(parse):接收来自语言模型的响应字符串,并将其解析为特定的结构化数据。

此外,还有一个可选的方法:

带提示的解析(parse_with_prompt):接收响应字符串和生成该响应的提示,解析并返回结构化数据。这在需要重试或修正输出时非常有用。

常见的输出解析器类型及使用示例

LangChain提供了多种输出解析器的实现,包括JSON解析器、Pydantic解析器、正则表达式解析器等。以下将介绍两种常用的解析器及其使用示例。

1.CommaSeparatedListOutputParser使用示例

CommaSeparatedListOutputParser用于解析以逗号分隔的文本,将其转换为列表。

_parsersimportCommaSeparatedListOutputParser定义模型输出的示例文本output_text="apple,banana,orange,mango"打印解析后的输出print(parsed_output)

输出:

['apple','banana','orange','mango']
2.PydanticOutputParser使用示例示例:解析3C产品信息1.定义Pydantic模型

首先,我们定义一个Product模型,该模型包含以下字段:

name(名称):产品名称。

category(类别):产品所属的3C类别(如“手机”、“笔记本电脑”、“耳机”等)。

price(价格):产品价格,以美元为单位。

specifications(规格):产品的详细规格,使用嵌套的Specifications模型。

_parsersimportPydanticOutputParserfrompydanticimportBaseModel,FieldfromtypingimportDict定义产品的Pydantic模型classProduct(BaseModel):name:str=Field(description="产品名称")category:str=Field(description="产品类别")price:float=Field(description="产品价格(美元)")specifications:Specifications=Field(description="产品规格")
2.创建PydanticOutputParser实例

接下来,创建一个PydanticOutputParser实例,并将定义的Product模型传递给它。

定义模型输出的示例文本output_text='''{"name":"GalaxyS21","category":"手机","price":799.99,"specifications":{"brand":"Samsung","model":"S21","features":{"屏幕":"6.2英寸AMOLED","处理器":"Exynos2100","存储":"128GB","相机":"64MP主摄+12MP超广角+12MP长焦"}}}'''
4.使用PydanticOutputParser解析输出文本

使用PydanticOutputParser将上述JSON文本解析为结构化的Product对象。

打印解析后的输出print(parsed_output)
5.完整示例代码

将以上步骤整合在一起,形成一个完整的示例代码:

_parsersimportPydanticOutputParserfrompydanticimportBaseModel,FieldfromtypingimportDict定义产品的Pydantic模型classProduct(BaseModel):name:str=Field(description="产品名称")category:str=Field(description="产品类别")price:float=Field(description="产品价格(美元)")specifications:Specifications=Field(description="产品规格")定义模型输出的示例文本output_text='''{"name":"GalaxyS21","category":"手机","price":799.99,"specifications":{"brand":"Samsung","model":"S21","features":{"屏幕":"6.2英寸AMOLED","处理器":"Exynos2100","存储":"128GB","相机":"64MP主摄+12MP超广角+12MP长焦"}}}'''打印解析后的输出print(parsed_output)输出:GalaxyS21输出:手机输出:799.99输出:Samsung输出:6.2英寸AMOLED
使用输出解析器的优势

使用输出解析器可以实现以下目标:

结构化输出:将文本转换为如JSON对象、Pydantic模型等结构化数据,便于后续处理与分析。

数据验证:确保解析后的数据符合预期的格式和约束条件,提高数据的准确性和一致性。

数据转换:将数据转换为特定格式或类型,满足业务需求或接口要求。

错误处理:在解析过程中处理可能出现的错误,提供容错机制,确保系统稳定性和可靠性。

通过灵活且可定制的输出解析器,LangChain使得对语言模型输出的进一步利用变得简单高效。

文档加载器(DocumentLoaders)什么是文档加载器

文档加载器(DocumentLoaders)是LangChain中用于从各种数据源加载和转换文本为文档的工具。文档通常包含两部分:

page_content(字符串):文档的原始文本内容。

文档加载器的类型

LangChain提供了多种文档加载器,适用于不同的数据源和格式,主要包括:

转换加载器(TransformLoaders):处理不同输入格式并转换为文档格式。

公共数据集或服务加载器(PublicDatasetorServiceLoaders):从公共资源快速检索并创建文档。

专有数据集或服务加载器(ProprietaryDatasetorServiceLoaders):处理需要额外认证或设置的专有数据源。

常见的文档加载器类

TextLoader:加载文本文件。

HTMLLoader:加载HTML文件。

MarkdownLoader:加载Markdown文件。

PDFLoader:加载PDF文件。

CSVLoader:加载CSV文件。

JSONLoader:加载JSON文件。

ExcelLoader:加载Excel文件。

ImageLoader:加载图像文件。

ArxivLoader:加载Arxiv的查询结果。

文档加载器开发示例

以下示例展示了如何使用TextLoader加载文本文件并创建文档对象。

_loadersimportTextLoader打印加载后的文档print(document)

输出:

[Document(page_content='WelcometoLangChain!ThisisanexampledocumentforunderstandingDocumentLoaders.',metadata={'source':'./data/'})]
文档加载器类型详解1.转换加载器(TransformLoaders)

这些加载器处理不同的输入格式并将其转换为标准化的文档格式。例如,使用CSVLoader加载CSV文件:

_loadersimportCSVLoader访问每个文档的内容和元数据fordocumentindocuments:content=_contentmetadata=(content,metadata)

输出示例:

nameage:Tom15{'source':'./data/','row':0}nameage:Jack16{'source':'./data/','row':1}nameage:Jeff17{'source':'./data/','row':2}
2.公共数据集或服务加载器(PublicDatasetorServiceLoaders)

这些加载器允许快速从公共资源中检索数据并创建文档。例如,使用WikipediaLoader从维基百科加载内容:

_loadersimportWikipediaLoader打印加载的文档数量和内容print(len(documents))fordocindocuments:print(_content,)

注意:运行上述代码前,需要安装wikipediaPython包:

pipinstallwikipedia
3.专有数据集或服务加载器(ProprietaryDatasetorServiceLoaders)

这些加载器用于处理需要额外认证或特定设置的专有数据源。例如,从内部数据库或具有专有访问权限的API加载数据。

文本分割器(TextSplitters)什么是文本分割器

文本分割器(TextSplitters)是LangChain的重要组成部分,负责将较大的文本文档分割成更小、更易管理的段落。这一功能对于大型语言模型(LLM)的高效处理至关重要,能够提升模型处理输入的能力,并确保信息的语义完整性。

文本分割器的类型

LangChain提供了多种文本分割器,适用于不同的分割需求:

CharacterTextSplitter:根据字符数将文本拆分成块。

RecursiveCharacterTextSplitter:递归地根据字符数拆分文本,保持语义相关性。

TokenTextSplitter:基于标记数(tokens)将文本拆分成块。

SpacyTextSplitter:利用spaCy库的NLP功能进行文本分割。

文本分割器开发示例

以下将展示如何使用不同类型的文本分割器对文本进行分割。

1.使用CharacterTextSplitter分割文本

CharacterTextSplitter根据指定的字符数将文本拆分成块。

_splitterimportCharacterTextSplitter创建CharacterTextSplitter实例text_splitter=CharacterTextSplitter(separator="\\n\\n",指定块的大小(字符数)chunk_overlap=200,指定衡量块大小的函数is_separator_regex=False拆分文本texts=text__documents([state_of_the_union])创建TokenTextSplitter实例text_splitter=TokenTextSplitter(chunk_size=100,chunk_overlap=0)打印第一个分块的内容print(texts[0]

注意:使用TokenTextSplitter需要安装tiktoken库:

pipinstalltiktoken

或者,使用递归分割以确保块大小不超过限制:

_splitterimportRecursiveCharacterTextSplitter拆分文本texts=text__text(state_of_the_union)#打印第一个分块的内容print(texts[0])
文本分割器的应用场景

语言模型输入处理:将长文本分割成模型可处理的块,避免超出token限制。

文本分析:按逻辑段落或句子分割文本,便于进行语义分析。

信息检索:将文档拆分为更小的部分,提高检索效率和相关性。

通过合理选择和配置文本分割器,可以显著提升LangChain在处理大型文档和复杂任务时的性能和效率。

通过本文的介绍,相信您已经对LangChain中的输出解析器、文档加载器以及文本分割器有了更深入的了解。这些组件在构建高效、可靠的语言应用中扮演着至关重要的角色。接下来的章节将继续探讨LangChain的其他高级功能,敬请期待!

代码及更好的阅读体验:

Notion–Theall-in-oneworkspaceforyournotes,tasks,wikis,anddatabases.

部分参考原创作者:

软件架构

很赞哦!(173)