【LangChain】(六)如何利用LangChain构建强大的LLM应用:从入门到精通的全方位指南
大语言模型(LLM)正逐渐成为开发者和企业的宠儿。LangChain作为一个开源框架,旨在帮助开发者更轻松地构建基于LLM的应用程序。本文将深入探讨LangChain的核心概念、主要功能以及如何使用它来构建强大的应用程序。无论你是初学者还是经验丰富的开发者,这篇文章都将为你提供实用的教程和示例代码,让你能够快速上手LangChain并应用于实际项目中。
文章目录
什么是LangChain?
LangChain是一个开源框架,旨在增强大语言模型(LLM)的能力。它提供了一系列组件,帮助开发者构建复杂的应用程序。LangChain的核心理念是通过“链”的概念,将不同的子任务连接起来,从而实现更复杂的功能。无论是管理和优化提示(prompt),还是与外部数据源交互,LangChain都能提供标准化的解决方案。
LangChain的起源
LangChain的创始人Harrison Chase于2022年10月首次开源该项目,迅速获得了广泛关注,并在短时间内转变为一家初创公司。随着人工智能技术的不断发展,LangChain也获得了红杉资本的投资,估值达到2亿美元。
LangChain的六大主要领域
- 管理和优化提示:不同任务需要不同的提示,LangChain提供了管理和优化这些提示的功能。
- 链:将不同子任务之间的调用进行连接。
- 数据增强生成:通过与外部数据源交互,获取数据用于生成步骤。
- 代理:根据不同指令采取不同的行动,直到整个流程完成。
- 评估:使用语言模型本身来评估生成式模型的输出。
- 内存:在整个流程中管理中间状态。
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文件用法
使用UnstructuredHTMLLoader
和BSHTMLLoader
加载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)
【无限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)!