初探LangChain

347 阅读3分钟

简介

随着训练数据和参数量的提升,LLM所呈现出的涌现能力使得其与用户的交互不单单停留在聊天交互的层面。大语言模型所呈现出的指令跟随能力和上下文理解能力,使得其不仅可以作为一个“可以聊天的玩具”,而是在进行一系列“组装”后,能够变成“可以解决特定业务问题的工具”,在本人粗浅的认知里,完成这一转换过程,就是LLM应用开发者的任务。
Langchain是一个LLM Application开发框架,可以快速的搭建、验证LLM应用开发者的一些想法。其应用大致如下所示:

Agents

Agents我们简单定义为能够调用工具的智能体。在程序员与电脑进行交互时,电脑之所以能够理解程序员的意图,是因为输入的是约定好的形式语言而非自然语言。所以,若要让 LLM与程序进行交互,就需要让 LLM 按照约定的格式输出固定的形式语言(json),以调用工具。
其工作流程如下图所示:

graph LR
    A(Prompt) --> B(LLM)
    B --> C(Output Parser)
    C --> D(Tools)
    style A fill:#f9f,stroke:#333,stroke-width:2px
    style B fill:#bbf,stroke:#333,stroke-width:2px
    style C fill:#bfb,stroke:#333,stroke-width:2px
    style D fill:#fbb,stroke:#333,stroke-width:2px

Retrieval Augmented Generation

检索增强生成(Retrieval Augumented Generation,RAG),简单理解为将知识库接入大模型。将用户的输入进行一定的转化,从向量知识库中进行检索,将知识库中与输入相关的知识,作为Prompt输入给大模型,得到最终输出。
其工作流程如下图所示:

graph LR
    A(Retriever) --> B(Prompt)
    B --> C(LLM)
    style A fill:#f9f,stroke:#333,stroke-width:2px
    style B fill:#bbf,stroke:#333,stroke-width:2px
    style C fill:#bfb,stroke:#333,stroke-width:2px

Storage && Indexing

存储和索引,用于构建RAG系统中所使用的数据库。数据库的质量与Retriever的效果密切相关。其通过将文本分块,并嵌入成向量的方式,进行检索向量库的构建。
其具体工作流程如下图所示:

graph LR
    A(Document Loader) --> B(Text Splitter)
    B --> C(Embeddings)
    C --> D(Vector Store)
    style A fill:#f9f,stroke:#333,stroke-width:2px
    style B fill:#bbf,stroke:#333,stroke-width:2px
    style C fill:#bfb,stroke:#333,stroke-width:2px
    style D fill:#fbb,stroke:#333,stroke-width:2px

Extraction

文本提取。通过特定的Prompt设计,使得LLM从给定文本中提取特定的信息。其具体工作流程如下图所示:

graph LR
    A(Prompt) --> B(LLM)
    B --> C(Output Parser)
    style A fill:#f9f,stroke:#333,stroke-width:2px
    style B fill:#bbf,stroke:#333,stroke-width:2px
    style C fill:#bfb,stroke:#333,stroke-width:2px

LangChain中也存在一系列基本组建(或许从现在或未来的视角来看已经过时),但仍不失为LLM应用开发的一种借鉴,具体整理如下

模型(Models)

完成各个平台不同种方式的大语言模型调用,实现不同平台的请求方式与输出解析机制。

提示模板(Prompts)

设计/提供一系列提示词模板,避免模型开发过程中的重复作业

数据检索(Index)

搭建本地知识库使用的方法

记忆(Memory)

在对话过程中存储和检索数据

链(Chain)

一轮对话,多次操作,将前一个操作的输出作为后一个操作的输入,将复杂任务拆解为一个一个简单任务执行。

智能体(Agents)

LLM + Tools + Prompt

希望通过对LangChain的学习,可以增强对LLM应用开发与落地的认识与思考,如何将Idea落地成产品,这是在学习和使用Langchain过程中需要思考的。

参考:

[1] Langchain官网
[2] Langchain实战课