自学内容网 自学内容网

【LangChain】(六)如何利用LangChain构建强大的LLM应用:从入门到精通的全方位指南

大语言模型(LLM)正逐渐成为开发者和企业的宠儿。LangChain作为一个开源框架,旨在帮助开发者更轻松地构建基于LLM的应用程序。本文将深入探讨LangChain的核心概念、主要功能以及如何使用它来构建强大的应用程序。无论你是初学者还是经验丰富的开发者,这篇文章都将为你提供实用的教程和示例代码,让你能够快速上手LangChain并应用于实际项目中。

什么是LangChain?

LangChain是一个开源框架,旨在增强大语言模型(LLM)的能力。它提供了一系列组件,帮助开发者构建复杂的应用程序。LangChain的核心理念是通过“链”的概念,将不同的子任务连接起来,从而实现更复杂的功能。无论是管理和优化提示(prompt),还是与外部数据源交互,LangChain都能提供标准化的解决方案。

LangChain的起源

LangChain的创始人Harrison Chase于2022年10月首次开源该项目,迅速获得了广泛关注,并在短时间内转变为一家初创公司。随着人工智能技术的不断发展,LangChain也获得了红杉资本的投资,估值达到2亿美元。
在这里插入图片描述

LangChain的六大主要领域

  1. 管理和优化提示:不同任务需要不同的提示,LangChain提供了管理和优化这些提示的功能。
  2. :将不同子任务之间的调用进行连接。
  3. 数据增强生成:通过与外部数据源交互,获取数据用于生成步骤。
  4. 代理:根据不同指令采取不同的行动,直到整个流程完成。
  5. 评估:使用语言模型本身来评估生成式模型的输出。
  6. 内存:在整个流程中管理中间状态。

LangChain的主要价值组件

LangChain的组件设计模块化,易于使用,主要包括:

  • 模型I/O:处理语言模型的接口。
  • 数据连接:与特定任务的数据接口。
  • :构建调用序列。
  • 代理:根据高级指令选择使用的工具。
  • 内存:在链的运行之间保持应用状态。
  • 回调:记录并流式传输链的中间步骤。
  • 索引:结构化文件的方法,以便LLM能够与其进行最佳交互。

使用LangChain加载数据

安装LangChain

首先,你需要安装LangChain及其依赖项。可以使用以下命令:

pip install langchain
pip install unstructured
pip install jq

CSV文件的基本用法

以下是如何使用LangChain加载CSV文件的示例代码:

import os
from pathlib import Path
from langchain.document_loaders import UnstructuredCSVLoader, CSVLoader

EXAMPLE_DIRECTORY = Path(__file__).parent.parent / "examples"

def test_unstructured_csv_loader() -> None:
    """测试非结构化CSV加载器。"""
    file_path = os.path.join(EXAMPLE_DIRECTORY, "stanley-cups.csv")
    loader = UnstructuredCSVLoader(str(file_path))
    docs = loader.load()
    print(docs)
    assert len(docs) == 1

def test_csv_loader():
    """测试CSV加载器。"""
    file_path = os.path.join(EXAMPLE_DIRECTORY, "stanley-cups.csv")
    loader = CSVLoader(file_path)
    docs = loader.load()
    print(docs)

test_unstructured_csv_loader()
test_csv_loader()

文件目录用法

使用DirectoryLoader加载目录中的文本文件:

from langchain.document_loaders import DirectoryLoader, TextLoader

text_loader_kwargs = {'autodetect_encoding': True}
loader = DirectoryLoader('../examples/', 
              glob="**/*.txt",  # 遍历txt文件
              show_progress=True,  # 显示进度
              use_multithreading=True,  # 使用多线程
              loader_cls=TextLoader,  # 使用加载数据的方式
              silent_errors=True,  # 遇到错误继续
              loader_kwargs=text_loader_kwargs)  # 可以使用字典传入参数

docs = loader.load()
print("\n")
print(docs[0])

HTML文件用法

使用UnstructuredHTMLLoaderBSHTMLLoader加载HTML文件:

from langchain.document_loaders import UnstructuredHTMLLoader, BSHTMLLoader

# 使用非结构化HTML加载器
loader = UnstructuredHTMLLoader("../examples/example.html")
docs = loader.load()
print(docs[0])

# 使用BeautifulSoup HTML加载器
loader = BSHTMLLoader("../examples/example.html")
docs = loader.load()
print(docs[0])

JSON文件用法

加载JSON文件并解析内容:

import json
from pathlib import Path
from pprint import pprint

file_path = '../examples/facebook_chat.json'
data = json.loads(Path(file_path).read_text())
pprint(data)

PDF文件用法

使用不同的PDF加载器加载PDF文件:

from langchain.document_loaders import PyPDFLoader, MathpixPDFLoader, UnstructuredPDFLoader

# 第一种用法
loader = PyPDFLoader("../examples/layout-parser-paper.pdf")
pages = loader.load_and_split()
print(pages[0])

# 第二种用法
loader = MathpixPDFLoader("../examples/layout-parser-paper.pdf")
data = loader.load()
print(data[0])

# 第三种用法
loader = UnstructuredPDFLoader("../examples/layout-parser-paper.pdf")
data = loader.load()
print(data[0])

数据转换

在加载文件后,通常需要对其进行转换,以更好地适应应用。LangChain提供了多种内置的文档转换工具,可以轻松对文档进行分割、组合和过滤。

通过字符进行文本分割

以下是如何通过字符分割文本的示例:

from langchain.text_splitter import CharacterTextSplitter

state_of_the_union = """
斗之力,三段!”
望着测验魔石碑上面闪亮得甚至有些刺眼的五个大字,少年面无表情,唇角有着一抹自嘲,紧握的手掌,因为大力,而导致略微尖锐的指甲深深的刺进了掌心之中,带来一阵阵钻心的疼痛…
"""

text_splitter = CharacterTextSplitter(
    separator="\n\n",
    chunk_size=128,  # 分块长度
    chunk_overlap=10,  # 重合的文本长度
    length_function=len,
)

texts = text_splitter.create_documents([state_of_the_union])
print(texts[0])

通过tokens进行分割

使用tiktoken库进行文本分割:

pip install tiktoken
from langchain.text_splitter import TokenTextSplitter

text_splitter = TokenTextSplitter(chunk_size=128, chunk_overlap=0)
texts = text_splitter.split_text(state_of_the_union)
print(texts[0])

模型I/O组件

LangChain支持多种模型,包括LLM、聊天模型和文本嵌入模型。以下是如何使用LLM的示例:

from langchain.llms import OpenAI

llm = OpenAI(model_name='text-davinci-003', temperature=0.9)
response = llm("Tell me a joke.")
print(response)

🔥codemoss_能用AI

【无限GPT4.omini】
【拒绝爬梯】
【上百种AI工作流落地场景】
【主流大模型集聚地:GPT-4o-Mini、GPT-3.5 Turbo、GPT-4 Turbo、GPT-4o、GPT-o1、Claude-3.5-Sonnet、Gemini Pro、月之暗面、文心一言 4.0、通易千问 Plus等众多模型】

🔥传送门:https://www.nyai.chat/chat?invite=nyai_1141439&fromChannel=csdn

在这里插入图片描述


总结

LangChain为开发者提供了一个强大的工具,帮助他们构建基于LLM的应用程序。通过理解LangChain的核心组件和功能,你可以快速上手并创建适合特定需求的自定义解决方案。无论是个人助理、文档问答还是聊天机器人,LangChain都能帮助你释放语言模型的全部潜力。

如果你对LangChain感兴趣,欢迎关注我的CSDN博客,获取更多关于人工智能和编程的精彩内容!✨


原文地址:https://blog.csdn.net/zhouzongxin94/article/details/142939987

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!