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推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
目录
相关文章
|
30天前
|
前端开发 机器人 API
前端大模型入门(一):用 js+langchain 构建基于 LLM 的应用
本文介绍了大语言模型(LLM)的HTTP API流式调用机制及其在前端的实现方法。通过流式调用,服务器可以逐步发送生成的文本内容,前端则实时处理并展示这些数据块,从而提升用户体验和实时性。文章详细讲解了如何使用`fetch`发起流式请求、处理响应流数据、逐步更新界面、处理中断和错误,以及优化用户交互。流式调用特别适用于聊天机器人、搜索建议等应用场景,能够显著减少用户的等待时间,增强交互性。
232 2
|
15天前
|
JSON 数据可视化 NoSQL
基于LLM Graph Transformer的知识图谱构建技术研究:LangChain框架下转换机制实践
本文介绍了LangChain的LLM Graph Transformer框架,探讨了文本到图谱转换的双模式实现机制。基于工具的模式利用结构化输出和函数调用,简化了提示工程并支持属性提取;基于提示的模式则为不支持工具调用的模型提供了备选方案。通过精确定义图谱模式(包括节点类型、关系类型及其约束),显著提升了提取结果的一致性和可靠性。LLM Graph Transformer为非结构化数据的结构化表示提供了可靠的技术方案,支持RAG应用和复杂查询处理。
61 2
基于LLM Graph Transformer的知识图谱构建技术研究:LangChain框架下转换机制实践
|
18天前
|
敏捷开发 机器学习/深度学习 数据采集
端到端优化所有能力,字节跳动提出强化学习LLM Agent框架AGILE
【10月更文挑战第23天】字节跳动研究团队提出AGILE框架,通过强化学习优化大型语言模型(LLM)在复杂对话任务中的表现。该框架将LLM作为核心决策模块,结合记忆、工具和专家咨询模块,实现智能体的自我进化。实验结果显示,AGILE智能体在ProductQA和MedMCQA数据集上优于GPT-4。
77 4
|
29天前
|
计算机视觉
Deepseek开源多模态LLM模型框架Janus,魔搭社区最佳实践
deepseek近期推出了简单、统一且灵活的多模态框架Janus,它能够统一处理多模态理解和生成任务。让我们一起来了解一下吧。
|
4月前
|
人工智能 前端开发 API
RAG+AI工作流+Agent:LLM框架该如何选择,全面对比MaxKB、Dify、FastGPT、RagFlow、Anything-LLM,以及更多推荐
【7月更文挑战第9天】RAG+AI工作流+Agent:LLM框架该如何选择,全面对比MaxKB、Dify、FastGPT、RagFlow、Anything-LLM,以及更多推荐
RAG+AI工作流+Agent:LLM框架该如何选择,全面对比MaxKB、Dify、FastGPT、RagFlow、Anything-LLM,以及更多推荐
|
3月前
|
存储 机器学习/深度学习 物联网
基于重要性加权的LLM自我改进:考虑分布偏移的新框架
本文提出一种新的大型语言模型(LLM)自我改进框架——基于重要性加权的自我改进(IWSI),旨在优化自动生成数据的质量。通过引入DS权重指标衡量数据的分布偏移程度(DSE),该方法不仅能确保答案正确性,还能过滤掉那些虽正确但分布上偏离较大的样本,以提升自我训练的效果。IWSI使用一个小的有效数据集来估算每个自生成样本的DS权重,并据此进行筛选。实验结果显示,相比于仅依赖答案正确性的传统方法,IWSI能更有效地提高LLM在多种任务上的表现。特别是在数学问题解答任务上,相较于基线方法,IWSI带来了显著的性能提升,证实了过滤高DSE样本的重要性及该方法的有效性。
62 0
基于重要性加权的LLM自我改进:考虑分布偏移的新框架
|
4月前
|
自然语言处理 API 开发工具
初识langchain:LLM大模型+Langchain实战[qwen2.1、GLM-4]+Prompt工程
【7月更文挑战第6天】初识langchain:LLM大模型+Langchain实战[qwen2.1、GLM-4]+Prompt工程
初识langchain:LLM大模型+Langchain实战[qwen2.1、GLM-4]+Prompt工程
|
4月前
|
机器学习/深度学习 人工智能 自然语言处理
AIGC的伦理考量与法律框架
【7月更文第27天】随着人工智能技术的发展,AI生成的内容(AIGC)已经广泛应用于各种领域,包括但不限于新闻写作、图像生成、视频制作等。这些技术的进步带来了巨大的经济效益和社会价值,但同时也引发了一系列伦理和法律问题。本文将探讨AIGC技术的关键组成部分,分析其伦理考量,并提出相应的法律框架建议。
92 7
|
3月前
|
JSON Go 数据格式
langchain 入门指南 - 让 LLM 自动选择不同的 Prompt
langchain 入门指南 - 让 LLM 自动选择不同的 Prompt
92 0
|
3月前
|
机器学习/深度学习 自然语言处理 索引
AIGC:LLM大型语言模型是怎么交流的? ———分词
AIGC:LLM大型语言模型是怎么交流的? ———分词