编程AI深度实战:自己的AI,必会LangChain

系列文章:

编程AI深度实战:私有模型deep seek r1,必会ollama-CSDN博客

编程AI深度实战:自己的AI,必会LangChain-CSDN博客

编程AI深度实战:给vim装上AI-CSDN博客

编程AI深度实战:火的编程AI,都在用语法树(AST)-CSDN博客

编程AI深度实战:让verilog不再是 AI 的小众语言-CSDN博客

您听说过 LangChain 这个术语,但不确定它到底是什么?那么这是您了解它的机会:本文在 5 分钟内概述了最重要的概念,解释了继续使用 LangChain 所需了解的一切。

为什么选择 LangChain?
随着大型语言模型 (LLM) 的最新发展,许多工具和库也围绕它们而出现,以简化 LLM 应用程序的开发。LangChain 是一个用于构建 LLM 应用程序的开源开发框架。它捆绑了开发更复杂的 LLM 项目所需的通用功能。

“通过可组合性使用 LLM 构建应用程序。”

它通过提供模块化组件来实现这一点,这些组件可以组合成常见用例来构建端到端 LLM 应用程序,并使开始使用这些用例变得更容易。您可以将其视为将所有这些围绕 LLM 的常见功能组合在一起所需的“粘合代码”。

在本文中,我将说明 LangChain 背后最重要的概念,并探索一些实际示例,以展示如何利用 LangChain 创建应用程序来回答有关您自己的文档的问题。

释放 LLM 的力量
如何利用 LLM 创建真正强大的应用程序?与单独使用 LLM 相比,这正是 LangChain 所要解决的问题。尽管 LLM 本身已经可以实现许多令人惊叹的事情,但通常需要进一步的步骤才能在应用程序中有效地使用 LLM。这些步骤包括快速工程、将多个操作链接在一起、使用代理进行决策等。LangChain 提供了实现此目的的通用接口和功能:可以将其视为一个工具箱,您可以在其中获取构建特定 LLM 应用程序所需的工具和材料。这里的关键是库的可组合性设计,允许您根据需要将不同的组件组合在一起,从而使复杂应用程序的实现更加模块化,从而更易于调试、维护和改进它们。

你能用它做什么?
您可以使用 LangChain 开发的一些示例应用程序包括:

构建您自己的聊天机器人 - 使用 LangChain 的 LLM 接口、提示模板和内存选项来构建具有对话历史记录的聊天机器人。
特定文档的问答 - 通过在您自己的文档上创建索引,您可以筛选文档并使用它们来增强您的提示,检索特定领域的答案。
总结文本、文档或网站 - 在将要总结的文本发送到您选择的 LLM 之前使用文档加载器和转换器,然后根据需要解析输出以供下游进一步使用。
... 还有更多:您可以在 LangChain 文档中找到带有 Python 指南的可能用例概述。

接下来,让我们深入了解使您能够创建此类用例的组件。

LangChain 结构
LangChain 提供了几个模块,每个模块都允许您管理 LLM 交互的特定方面。在撰写本文时(v.0.0.209),这些模块包括以下模块:

编程AI深度实战:自己的AI,必会LangChain_第1张图片

LLM、提示和解析器:与 LLM 的交互是 LangChain 的核心组件。LLM 模块提供通用接口来调用 LLM,并提供与开源和专有 LLM 模型的集成。接下来,使用 LLM 实现一致和良好结果的关键是提示:因此,提示类提供了创建和重复使用提示模板的选项。最后,输出解析器模块简化了模型输出的解析,以便有效地处理模型输出以供下游进一步使用(例如,将输出转换为所需的格式)。
数据连接:您可以将它们视为加载、转换、查询和存储文档到向量存储中的构建块。LangChain 提供了几个方便的内置数据加载器(例如,Wikipedia、Arxiv、Youtube Transcripts)和预处理实用程序,例如文本分割器和文本嵌入模型。
链:更复杂的应用程序需要链接多个组件。例如,您可以创建一个链,该链接受用户输入,使用 PromptTemplate 对其进行格式化,将其传递给 LLM,并汇总结果。LangChain 将 Chain 定义为“对组件的调用序列,其中可以包含其他链”。
内存:内存模块保留用户在模型调用之间的交互,允许将对话的选定先前部分作为对话流输入到 LLM 中。默认情况下,链和代理是无状态的 - 这意味着如果没有给出其他行为的指令,它们将独立处理每个查询。内存类提供了用于管理和集成以前聊天记录的辅助实用程序。
代理:某些应用程序需要对 LLM 的灵活调用链。LangChain 提供了两种类型的代理来帮助实现这一点:动作代理做出决策、采取行动并观察该行动的结果,重复此循环,直到完成给定的任务。代理可以访问一套工具,并确定下一步使用哪一个。计划和执行代理预先决定完整的操作序列,然后在不更新计划的情况下执行所有操作。
回调:LangChain 中的回调允许您连接到 LLM 应用程序的各个阶段。例如,您可以将其用于日志记录、监控、流式传输和其他任务。
LangChain 提供的其他便捷功能包括索引、集成、评估等。

使用 LangChain 进行文档问答
让我们通过一个实际示例深入了解 LangChain 提供的一些功能!在本例中,我将使用 LangChain 构建一个用于检索增强生成的应用程序。使用此应用程序,您将能够通过索引文档并将相关内容作为提示的一部分发送到 LLM 来回答有关您自己的文档的问题。由于 LLM 尚未接受过这些文档的训练,这将有助于回答特定于这些文档的问题。

安装依赖项
创建环境并安装所需的依赖项。除了 LangChain,我们还需要 chroma-db 作为嵌入数据库,以及 tiktoken 作为 OpenAI 模型的标记器。

pip install langchain
pip install chromadb
pip install tiktoken

设置环境变量
此步骤取决于您希望使用的 LLM API。在本例中,我将使用 OpenAI API,但您也可以使用其他 LLM 和 API。

pip install openai
export OPENAI_API_KEY="..."

LangChain 提供许多方便的实用程序,例如文档加载器、文本分割器、嵌入和像 Chroma 这样的矢量存储。

from langchain.document_loaders import TextLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.embeddings import OpenAIEmbeddings
from langchain.llms import OpenAI
from langchain.chains import RetrievalQA

加载文档
加载您想要进行问答的文档。LangChain 提供不同类型的加载器,例如用于 PDF 或文本文件的加载器。在本例中,我将使用 State of the Union 文本文档,您可以在此处找到它。

# Load documents
loader = TextLoader('state_of_the_union.txt')
documents = loader.load()

拆分文档
LangChain 提供不同类型的文本拆分器,将您的文档拆分成块。这确保只有文档中最相关的部分才会作为提示的一部分发送到 LLM。我使用递归字符文本拆分器,这是推荐的通用文本拆分器。

# Split documents
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
texts = text_splitter.split_documents(documents)

创建嵌入并初始化向量存储

# Create embeddings 
embeddings = OpenAIEmbeddings()
docsearch = Chroma.from_documents(texts, embeddings)

创建链

# Create chain 
qa = RetrievalQA.from_chain_type(llm=OpenAI(), chain_type="stuff", retriever=docsearch.as_retriever())

提出问题

# Run query 
query = "What did the president say about Ketanji Brown Jackson"
qa.run(query)

展望
随着 LLM 成为一项变革性技术,LangChain 的出现正是时候 —

虽然本文重点介绍 Python 实现,但 LangChain 库也有一个非常流行的 JavaScript 实现。

LangChain 库目前已经包含许多功能,并且还在不断扩展。由于提供了许多功能和模块,您可能很难理解 LangChain 提供的所有内容 — 但幸运的是,有很多很棒的文章和教程,可以指导您从使用 LangChain 的第一步到高级项目。

实时利用语法树和AI在vim内检视代码。可以见付费文章:

编程AI深度实战:让verilog不再是 AI 的小众语言-CSDN博客

编程AI深度实战:火的编程AI,都在用语法树(AST)-CSDN博客

你可能感兴趣的:(编程AI:企业级开发深度实战,python,langchain,rag,知识库,芯片设计,ai,大模型)