AIGC工程系列-LLM编程框架LangChain初探

本文涉及的产品
阿里云百炼推荐规格 ADB PostgreSQL,4核16GB 100GB 1个月
NLP自然语言处理_高级版,每接口累计50万次
NLP自然语言处理_基础版,每接口每天50万次
简介: 前话:最近基于LLM的AIGC应用涌现,大家都在探索如何快速利用LLM去构建自己业务领域的应用。我们早前做了LLM应用框架这方面的一些调研,发现有一款LLM开发框架Langchain在开源社区异常火爆,短短5个月的时间已经达2w+star。于是我们针对该框架做了系统性的调研梳理,并沉淀到了语雀文档,当时只是为了方便团队成员理解和快速做业务Demo。最近有很多同学搜到了这篇调研文档,频繁要求帮忙开下

前话:

最近基于LLM的AIGC应用涌现,大家都在探索如何快速利用LLM去构建自己业务领域的应用。我们早前做了LLM应用框架这方面的一些调研,发现有一款LLM开发框架Langchain在开源社区异常火爆,短短5个月的时间已经达2w+star。于是我们针对该框架做了系统性的调研梳理,并沉淀到了语雀文档,当时只是为了方便团队成员理解和快速做业务Demo。最近有很多同学搜到了这篇调研文档,频繁要求帮忙开下文档权限,于是我就将该调研文档发在ATA,方便大家查阅。(注:些文章基于个人和团队成员对LLM的精浅理解,如果有误还望指出)

1. 什么是LangChain

LangChain是一个基于大型语言模型(LLMs)构建应用的框架。它可以帮助你实现聊天机器人、生成式问答、文本摘要等功能。它的核心思想是可以将不同的组件“链接”起来,创建更高级的LLMs应用. 

核心关键词: LLM 编程框架(也叫模型编排工具:Tooling Orchestration)

1.1 现有的NLP的技术栈

NLP 开发人员都一直依赖于传统优化 NLP 任务的技术栈,如

  • 文本分类 (text classification)
  • 命名实体识别 (Named Entity Recognition)
  • 命名实体消歧 (Named Entity Disambiguation)

这种技术栈通常由数据预处理管道(data preprocessing pipeline)、机器学习管道(machine learning pipeline)和各种存储嵌入和结构化数据的数据库组成。

 

.2 新兴的大语言(LLM)技术栈

与之前的技术栈相比,该技术栈着重于实现文本生成——与早期的机器学习模型相比,现代 LLM 最擅长这项任务。宏观来说,新的技术栈由四个主要部分组成:

  • 数据预处理管道(data preprocessing pipeline)
  • 嵌入终端(embeddings endpoint )+向量存储(vector store)
  • LLM 终端(LLM endpoints)
  • LLM 编程框架(LLM programming framework)  

1.3 旧的技术栈和新的技术栈之间有几个很大的不同之处:

  • 首先,新的技术栈 不那么强依赖存储结构化数据的知识图谱 (如三元组),因为诸如 ChatGPT、Claude 和 Flan T-5 等 LLM 比早期的 GPT 2 等模型编码了更多的信息。
  • 第二,较新的技术栈 使用现成的 LLM 终端(LLM endpoint)作为模型,而不是定制的 ML 管道(ML pipeline)(至少在刚开始时)。  这意味着今天的开发人员花费更少的时间来训练专门的信息提取模型(例如命名实体识别、关系提取和情感分析),并且可以在比较少的时间(和成本)内启动解决方案。

2. LangChain的主要功能及模块

Langchain提供的主要功能

 

LangChain提供的主要模块:

  • Prompts: 这包括提示管理、提示优化和提示序列化。
  • LLMs: 这包括所有LLMs的通用接口,以及常用的LLMs工具。
  • Document Loaders: 这包括加载文档的标准接口,以及与各种文本数据源的集成。
  • Utils: 语言模型在与其他知识或计算源交互时往往更强大。这可以包括Python REPLs、嵌入、搜索引擎等。LangChain提供了一大批常用的工具。
  • Indexes: 语言模型在与自己的文本数据结合时往往更强大 - 这个模块涵盖了这样做的最佳实践。
  • Agents: Agents涉及到一个LLM在选择要执行的动作、执行该动作、看到观察结果,并重复这个过程直到完成。LangChain提供了代理的标准接口,可供选择的代理,以及端到端代理的示例。
  • Chat: Chat模型是一种与语言模型不同的API - 它们不是处理原始文本,而是处理消息。LangChain提供了一个标准接口来使用它们,并做所有上面提到的事情。

2.1 LLMs 和 Prompts

2.1.1 名词解释

  • LLMs: 这包括所有LLMs的通用接口,以及常用的LLMs工具。
  • Prompts:Prompts是一种用于生成文本的模板,可以在训练LLMs时使用。Prompts可以是单个句子或多个句子的组合,它们可以包含变量和条件语句。Prompts是训练LLMs的重要组成部分,因为它们可以帮助模型学习特定领域的语言和知识。

2.1.2 功能

通过管理 Prompt、优化 Prompt与LLM交互,可以以各种方式自定义prompt。

其他用法:

  • Dyanamic Prompts 可以检查 Prompt 的长度,然后调整 few-shots 给出的示例数量
  • Example Generation 可以检查 Prompt 里 token 数量还有剩余的话就再多生成些示例

2.2 Chain

2.2.1 名词解释

Chains:Chains是一种将多个代理连接在一起的工具,以实现复杂的任务。Chains可以包含多个代理,每个代理都执行一个特定的任务,并将结果传递给下一个代理。Chains还可以与Prompts、Indexes和Memory一起使用,以实现更复杂的任务。

2.2.2 功能

chain将 LLM 与其他信息源或者 LLM 给连接起来,比如调用搜索 API 或者是外部的数据库等。LangChain 在这一层提供了与大量常用工具的集成(比如上文的 Pincone)、常见的端到端的 Chain。 

LangChain 封装的各种 Chain 已经非常强劲,一开始 300 页 PDF 的案例中用到的是它的 QA Chain.

举例:SelfAskWithSearchChain

2.3 Agent

2.3.1 名词解释:

Agents是一种使用LLMs做出决策的工具,它们可以执行特定的任务并生成文本输出。Agents通常由三个部分组成:Action、Observation和Decision。Action是代理执行的操作,Observation是代理接收到的信息,Decision是代理基于Action和Observation做出的决策。Agents还可以与Prompts、Indexes、Memory和Chains一起使用,以实现更复杂的任务。

2.3.2 功能

作为 Agent 的 LLM 深度体现了思维链的能力,充当了交通指挥员或者路由者的角色。Agent 封装的逻辑和赋予 LLM 的“使命”比 Chain 要更复杂。在 Chain 里,数据的来源和流动方式相对固定。而在Agent 里,LLM 可以自己决定采用什么样的行动、使用哪些工具,这些工具可以是搜索引擎、各类数据库、任意的输入或输出的字符串,甚至是另一个 LLM、Chain 和 Agent。

2.4 Memory

2.4.1 名词解释

Memory是一种用于存储数据的工具,它可以帮助代理在多次调用之间保持状态。Memory可以存储任何类型的数据,并且可以与Prompts、Indexes、Chains和Agents一起使用。

2.4.2 功能

类chatgpt的session功能,用于存储每个session问题的上下文信息。

LangChain 是目前 LLM 领域最热门的开源项目之一,从下面可以看出今年以来的曲线和绝对 Star 数跟最热门的开源模型 LLama 相比也不遑多让,发布不到 5 个月已经拥有了超过 1 万个 Github Star。

2.1 LangChain的相关文档

3. LangChain应用场景

LangChain可以用来实现以下几种应用:

  • 特定文档的问答。例如,从Notion数据库中提取信息并回答用户的问题。
  • 聊天机器人。例如,使用Chat-LangChain模块创建一个与用户交流的机器人。
  • 代理。例如,使用GPT和WolframAlpha结合,创建一个能够执行数学计算和其他任务的代理。
  • 文本摘要。例如,使用外部数据源来生成特定文档的摘要。

3.1 文本摘要功能

相关文本摘要的资料

3.2 特定文档问答

3.2.1 Pdf文本阅读问答:

3.2.2 PDF读取问答流程

3.2.3 Pdf相关读取问答相关库

4. LangChain竞品

这些框架的目的是为 LLM 交互创建一个底层编排引擎,并通过 API 进行呈现

名称

语言

时间

文档

优缺点

LangChain

Python

Js/Ts

2022.11

https://github.com/hwchase17/langchain

优点:提供了标准的内存接口和内存实现,支持自定义大模型的封装。

缺点:评估生成模型的性能比较困难。

Dust.tt

Dust

https://github.com/dust-tt/dust

文档

优点:提供了简单易用的API,可以让开发者快速构建自己的LLM应用程序。

缺点:文档不够完善。

Semantic-kernel

TypeScript

2023.3

https://github.com/microsoft/semantic-kernel

https://learn.microsoft.com/en-us/semantic-kernel/

优点:轻量级SDK,可将AI大型语言模型(LLMs)与传统编程语言集成在一起。

缺点:文档不够完善。

Fixie.ai

Python

https://www.fixie.ai/

代码库

demo

优点:开放、免费、简单多模型(images, audio, video, binary, JSON,)

缺点:paas平台,需要在平台部署

Cognosis

TypeScript

https://github.com/cognosisai/platform

优点 缺点:没啥资料

GPT-Index

Python

https://github.com/jerryjliu/llama_index

https://pypi.org/project/gpt-index/

专注数据层。处理外部数据跟LLM连接的接口。

4.1 Dust.tt

Dust 是一个围绕大型语言模型(LLMs)构建的框架,它提供了一个基于 Web 的 GUI,用于配置块并将这些块串联或并联。与 LangChain 类似,Dust 的目的是为 LLM 交互创建一个底层编排引擎,并通过 API 进行呈现。

LangChain 和 Dust 都可以用于聊天机器人、生成式问答(GQA)、摘要等等。这两个框架的核心思想都是我们可以将不同的组件“链接”在一起,围绕 LLMs 创建更高级的用例。

Dust.tt 是最早的开源人工智能框架之一。 它是用 Rust 编写的,允许开发人员使用其他工具链接调用 LLM,以提取所需的输出。 Dust.tt 使用 OpenAI、AI21 和 Cohere 等语言模型,并具有用于 Google 搜索、curl 和网络抓取(包装 browserless.io)的集成块。

关键概念:Dust.tt 应用程序包含一系列按顺序执行的块。 每个块都会产生输出,并且可以引用先前执行的块的输出。 Dust.tt 应用程序开发人员定义每个块的规范和配置参数。

4.2 Semantic Kernel

Semantic Kernel 是一个轻量级的 SDK,它可以让您轻松地将传统编程语言与最新的大型语言模型(LLM)AI“提示”混合使用,具有模板、链接和计划功能。它提供了一种灵活地将 LLM AI 集成到现有应用程序中的方法。

4.3 GPTIndex

GPTIndex是一款基于GPT模型的文本索引工具,可以实现快速高效的文本搜索和匹配。使用GPTIndex,您需要首先准备好需要索引的文本数据,并将其导入到GPTIndex中进行处理和索引。接着,您可以使用GPTIndex提供的API接口,对索引进行查询和搜索,以实现各种文本处理和分析任务。GPTIndex具有高效的搜索速度和准确度,适用于各种文本数据处理和分析场景,如文本分类、关键词提取、实体识别等。

4.4 Fixie.ai

Build natural language agents that connect to your data, talk to APIs, and solve complex problems。We're a cloud-based platform-as-a-service that allows developers to build smart agents that couple LLMs with back-end logic to interface to data, systems, and tools.

一个LLM的自动化平台。Fixie.ai是一个用于构建、托管和扩展智能代理的平台,可以通过连接到个人数据源、系统和工具来扩展llm的功能。首先他是一个PAAS平台,在这个平台上你可以构建了自己的人工智能代理,并将它们与不同的api或数据流集成。

4.4.1 demo

  • step(1) Installing the Fixie CLI
  • step(2) Building agents locally
  • step(3) Deploying agents

Deploying agents will automatically upload your agent to the Fixie cloud and start serving it immediately on the platform.

4.6 LlamaIndex

LlamaIndex是外部数据和 LLM 之间的一个简单、灵活的接口。可以实现为您现有的数据源和数据格式(API、PDF、文档、SQL 等)提供数据连接器。为您的非结构化和结构化数据提供索引,以便与 LLM 一起使用。

  • 以易于访问的格式存储上下文以便快速插入。
  • 当上下文太大时处理提示限制。
  • 处理文本拆分。
  • 为用户提供查询索引(输入提示)并获得 知识增强输出的界面。
  • 为您提供全面的工具集,权衡成本和性能。

使用LlamaIndex可以根据自己的数据建立自己的问答聊天机器人。LlamaIndex做的其实就是使用一种算法来搜索文档并挑选出相关的摘录,然后只将这些相关的语境与我的问题一起传递给GPT模型。

4.6.1 原理

LlamaIndex所做的是将你的原始文档数据转换成一个矢量的索引,这对查询来说是非常有效的。它将使用这个索引,根据查询和数据的相似性,找到最相关的部分。然后,它将把检索到的内容插入到它将发送给GPT的prompt中,这样GPT就有了回答你问题的背景。

4.6. 2 工作工程

  1. 用LlamaIndex为你的文档数据建立一个索引;
  2. 用自然语言查询该索引;
  3. LlamaIndex将检索相关部分并将其传递给GPT prompt;
  4. 向GPT询问相关的上下文并构建一个回应;

简单说就是,LlamaIndex将接受你的prompt,在索引中搜索相关的块,并将你的prompt和相关块传递给GPT

5. 其他

5.1 LLM应用模式对比

LLM使用模式

方法

优点

缺点

直接使用

框架+LLM+自有数据

应用快

效果差

微调或重训练

LLM用自有数据fine Tuning

效果好

成本高

  • 模式一:通过LLM 编程框架,将自有数据与预训练的 LLM 相结合;
  • 从好的方面来说,即开即用,应用落地速度非常快,落地时间小时级;
  • 坏的方面来说,效果较差,难以在要求比较高的垂直场景使用
  • 模式二:在自有数据上对 LLM 进行微调;
  • 从好的方面来说,它减少了对这种编排的逻辑,直接调用即可;
  • 坏的方面来说,它的成本和时间花费都比较高,而且需要定期进行调整以保持更新;

5.2 未来的看法

5.2.1  未来公司的三种走向:

  • Level1:大模型模型底座的基础设施公司 --- 类比一个拥有比较强通用能力的人
  • Level2:基于大模型底座结合场景进行商业化应用的公司(以应用为主,没有微调) --- 类比通用能力的人去一些场景打工挣钱
  • Level3:基于大模型底座+领域场景数据微调形成更强领域能力的产品商业化并持续形成数据闭环 --- 类比一个领域专家

5.2.2 未来的工作状态:

  • Level1的公司:大厂负责预训练模型底座的公司,首先肯定是积极的拥抱新范式,复现ChatGPT工作。其次,显然这个通用的模型离最后的AGI还有距离,未来还有很多问题:
  • 效果上:大模型的持续更新,大模型生成时能否引入fact reference实现更好的事实性回答等等。
  • 成本上:训练和推理的成本都非常高,尤其是推理上,降低推理成本等等。
  • Level2的公司:如果你是原本在负责自己公司上的一些NLP任务的研发。
  • 首先大概率一时半儿会不用那么担心失业,OpenAI的API很贵,大概500汉字要0.14元(prompt+answer),所以你的场景全部的任务都用可能不一定划算,但是建议还是要积极拥抱,看看是否在高价值的场景可以引入,积极创造价值。其次,多关注下外部开源的大模型上的finetune,10B的模型的训练、推理等技术和1B及以内的技术差别很大(单卡放不下的模型),开源的国内的清华唐杰老师的GLM模型效果不错,其他开源的也可以关注,虽然都还在GPT-3那代。
  • Level3的公司:积极拥抱统一大模型,现在开始调研至少1.5B以上的模型底座,在自己场景下结合高质量的数据进行finetune的路。不要再在过多单任务上的研究投入太多。
相关实践学习
阿里云百炼xAnalyticDB PostgreSQL构建AIGC应用
通过该实验体验在阿里云百炼中构建企业专属知识库构建及应用全流程。同时体验使用ADB-PG向量检索引擎提供专属安全存储,保障企业数据隐私安全。
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
目录
相关文章
|
机器学习/深度学习 存储 机器人
LLM系列 | 19: ChatGPT应用框架LangChain实践速成
本文以实践的方式将OpenAI接口、ChatOpenAI接口、Prompt模板、Chain、Agent、Memory这几个LangChain核心模块串起来,从而希望能够让小伙伴们快速地了解LangChain的使用。
|
3月前
|
机器学习/深度学习 算法 PyTorch
PyTorch Lightning:简化深度学习研究与开发
【8月更文第27天】PyTorch Lightning 是一个用于简化 PyTorch 开发流程的轻量级封装库。它的目标是让研究人员和开发者能够更加专注于算法和模型的设计,而不是被训练循环和各种低级细节所困扰。通过使用 PyTorch Lightning,开发者可以更容易地进行实验、调试和复现结果,从而加速研究与开发的过程。
131 1
|
3月前
|
存储 人工智能 缓存
langchain 入门指南 - 让 AI 记住你说过的话
langchain 入门指南 - 让 AI 记住你说过的话
116 1
|
3月前
|
人工智能 自然语言处理 前端开发
|
3月前
|
机器学习/深度学习 PyTorch TensorFlow
深度学习框架之争:全面解析TensorFlow与PyTorch在功能、易用性和适用场景上的比较,帮助你选择最适合项目的框架
【8月更文挑战第31天】在深度学习领域,选择合适的框架至关重要。本文通过开发图像识别系统的案例,对比了TensorFlow和PyTorch两大主流框架。TensorFlow由Google开发,功能强大,支持多种设备,适合大型项目和工业部署;PyTorch则由Facebook推出,强调灵活性和速度,尤其适用于研究和快速原型开发。通过具体示例代码展示各自特点,并分析其适用场景,帮助读者根据项目需求和个人偏好做出明智选择。
65 0
|
5月前
|
存储 自然语言处理 C++
LLM应用实战:当KBQA集成LLM(二)
本文主要是针对KBQA方案基于LLM实现存在的问题进行优化,主要涉及到图谱存储至Es,且支持Es的向量检索,还有解决了一部分基于属性值倒查实体的场景,且效果相对提升。
207 1
|
5月前
|
缓存 自然语言处理 知识图谱
LLM应用实战:当KBQA集成LLM
项目是关于一个博物馆知识图谱,上层做KBQA应用。实现要求是将传统KBQA中的部分模块,如NLU、指代消解、实体对齐等任务,完全由LLM实现,本qiang~针对该任务还是灰常感兴趣的,遂开展了项目研发工作
129 0
|
6月前
|
人工智能 JavaScript 前端开发
【AI大模型应用开发】【LangChain系列】0. LangChain框架介绍,实现LangChain的Hello World
【AI大模型应用开发】【LangChain系列】0. LangChain框架介绍,实现LangChain的Hello World
136 0
|
6月前
|
人工智能 API 网络架构
【AI大模型应用开发】【LangChain系列】7. LangServe:轻松将你的LangChain程序部署成服务
【AI大模型应用开发】【LangChain系列】7. LangServe:轻松将你的LangChain程序部署成服务
150 0
|
6月前
|
人工智能
【AI大模型应用开发】【LangChain系列】实战案例5:用LangChain实现灵活的Agents+RAG,该查时查,不该查时就别查
【AI大模型应用开发】【LangChain系列】实战案例5:用LangChain实现灵活的Agents+RAG,该查时查,不该查时就别查
364 0
下一篇
无影云桌面