大模型WebUI:Gradio全解12——LangChain原理、架构和组件(3)
- 前言
- 本篇摘要
- 12. LangChain原理及agents构建Gradio UI
- 12.3 LangChain架构
- 12.3.1 LangChain
- 12.3.2 Integration Packages
- 1. 概念
- 2. 示例
- 12.3.3 LangGraph
- 1. 概念
- 2. 示例
- 12.3.4 LangGraph Platform
- 1. 概览
- 2. 优势分析
- 12.3.5 LangSmith
- 1. 用途
- 2. 示例
- 参考文献
前言
本系列文章主要介绍WEB界面工具Gradio。Gradio是Hugging Face发布的简易WebUI开发框架,它基于FastAPI和svelte,可以使用机器学习模型、python函数或API开发多功能界面,并可部署人工智能模型,是当前热门的非常易于展示机器学习大语言模型LLM及扩散模型DM的WebUI框架。
本系列文章分为五部分:Gradio介绍、HuggingFace资源与工具库、Gradio基础功能实战、Gradio与大模型融合实战和Gradio高级功能实战。第一部分Gradio介绍,包括三章内容:第一章先介绍Gradio的概念,包括详细技术架构、历史、应用场景、与其他框架Gradio/NiceGui/StreamLit/Dash/PyWebIO的区别,然后详细介绍了Gradio的安装与运行,安装包括Linux/Win/Mac三类系统安装,运行包括普通方式和热重载方式;第二章介绍Gradio的4种部署方式,包括本地部署launch()、huggingface托管、FastAPI挂载和Gradio-Lite浏览器集成;第三章介绍Gradio的三种Client,包括python客户端、javascript客户端和curl客户端,方便读者对Gradio整体把握。第二部分介绍著名网站Hugging Face的各类资源和工具库,因为Gradio演示中经常用到Hugging Face的models及某些场景需要部署在spaces,包括两章内容:第四章详解三类资源models/datasets/spaces的使用,第五章实战六类工具库transformers/diffusers/datasets/PEFT/accelerate/optimum实战。第三部分是Gradio基础功能实战,进入本系列文章的核心,包括四章内容:第六章讲解Gradio库的模块架构和环境变量,第七章讲解Gradio高级抽象界面类Interface,第八章讲解Gradio底层区块类Blocks,第九章讲解补充特性Additional Features。第四部分是Gradio与大模型融合实战,包括二章内容:第十章讲解融合大模型的多模态聊天机器人组件Chatbot,第十一章讲述将LLM封装为工具的Gradio Tools。第五部分是使用Agent构建Gradio,包括三章内容:第十二章讲解使用使用transformers.agents构建Gradio,第十三章讲述LangChain原理、架构和组件,第十四章讲述使用langchain.agents和LangGraph构建Gradio。第六部分讲述Gradio其它高级功能,包括三章内容:第十五章讲述Discord Bot/Slack Bot/Website Widget部署,第十六章讲述数据科学与绘图Data Science And Plots,第十七章讲述数据流Streaming。
本系列文章讲解细致,涵盖Gradio及相关框架的大部分组件和功能,代码均可运行并附有大量运行截图,方便读者理解并应用到开发中,Gradio一定会成为每个技术人员实现各种奇思妙想的最称手工具。
本系列文章目录如下:
- 《Gradio全解13——LangChain原理、架构和组件(1)》
- 《Gradio全解13——LangChain原理、架构和组件(2)》
- 《Gradio全解13——LangChain原理、架构和组件(3)》
- 《Gradio全解13——LangChain原理、架构和组件(4)》
本篇摘要
本章先介绍LangChain概念、学习资料、架构和组件,为后续使用Agent创建Gradio做铺垫。
12. LangChain原理及agents构建Gradio UI
LangChain使用简单,并拥有庞大的用户和贡献者社区,由LangChain实现的agents也具有一定代表性。但LangChain本身集成了大量供应商和组件,资料庞杂,理解起来颇有难度,内容也非常多,所以拆分为两张。本章先介绍LangChain概念、学习资料、架构和组件,为后续使用Agent创建Gradio做铺垫。
12.3 LangChain架构
LangChain简化了大语言模型应用程序生命周期的各个阶段:
- 开发:使用LangChain的开源组件和第三方集成Intergration构建应用程序,使用LangGraph构建具有一流流式处理和人工干预支持的有状态代理Agent;
- 产品化:使用LangSmith开发者调试、测试、评估和监控基于任何LLM框架构建的处理链或应用程序,并与LangChain实现无缝集成,以便用户可以持续优化并自信部署;
- 部署:通过LangGraph Platform可以将LangGraph应用程序转化为面向生产落地的API和助手Assistant。
然而由于LangChain整合了很多供应商和各类工具,导致本身体制异常臃肿,架构和功能划分都不清晰,甚至存在诸多重复。作者尽可能以较简洁的方式介绍LangChain架构,以便读者尽快建立对LangChain的整体认知,也可参考官方Architecture。首先看官方的架构图:
从构成图可看出,LangChain主要分为五部分LangChain、Integration Packages、LangGraph、LangGraph Platform及,LangSmith下面一一讲述。
12.3.1 LangChain
核心框架LangChain是基础包,包含大量组件,并为许多AI应用程序中的核心组件提供了通用接口。LangChain由多个开源库组成,如下图所示:
详细描述如下:
- langchain-core:这个包包含了聊天模型和其它不同组件的基础抽象以及将它们组合在一起的方式。这里定义了核心组件(如聊天模型、向量存储、工具等)的接口,但不包含任何第三方集成,其依赖项非常轻量。
- langchain:langchain包的主体包含构成应用程序认知架构的链、代理和检索策略,这些不是第三方集成,且所有链、智能体和检索策略并非特定于某一个集成,而是通用于所有集成。
- langchain-community:这个包包含由LangChain社区维护的第三方集成,但关键的集成Integration包已被分离出来(见下文)。langchain-community包含了各种组件(聊天模型、向量存储、工具等)的集成,为了保持包的轻量化,此包中的所有依赖项都是可选的。
- langchain-experimental:顾名思义,这个包包含实验性的LangChain代码,旨在用于研究和实验性用途。如果没有在沙盒环境中正确部署,此包中的部分代码可能会存在危险,所以除非已经采取了适当的预防措施,否则请谨慎将实验性代码部署到生产环境中。
- langchain-text-splitters:LangChain文本分割器,包含用于将各种文本文档分割成块的实用工具。支持的功能有Language(编程语言)、TokenTextSplitter、TextSplitter、Tokenizer等;支持的文本类型有character、html、json、python、latex、markdown等;支持的文本分割工具包有konlpy、nltk、sentence_transformers、spacy等。
关于基础包LangChain的示例参考后面示例即可。
12.3.2 Integration Packages
1. 概念
一般流行的供应商有它们自己独立的集成包:langchain-{provider} ,例如langchain-openai、langchain-anthropic等,以便能够正确地进行版本控制、依赖管理和测试,并保持适当的轻量化,由LangChain团队和集成包开发者共同维护。更多信息请参阅:
- 集成包列表,这里包含所有供应商集成包及其功能列表;
- API参考,这里可以找到每个集成包的详细信息。
如果想编写自己的集成,请参阅“Extending LangChain”;如果想开源贡献自己的集成,请参阅“Contributing integrations”。Integration Packages的构成如下图:
此外还有anthropic、groq(应该是grok,或许是langchain的拼写错误)、google-genai及huggingface等,每个集成包中通常包含chat_models、embeddings、llms及utils等子包,每个子包还可能包括局部参数和成员函数,以便根据需求设置和调用。以langchain_openai.ChatOpenAI为例,简单摘举如下(两者无对应关系):
局部参数 | 成员函数 |
---|---|
seed | __call__() |
server_kwargs | abatch() |
tags | abatch_as_completed() |
cache | ainvoke() |
task | astream() |
teperature | astream_events() |
timeout | batch() |
top_k | batch_as_completed() |
top_p | bind() |
truncate | configurable_alternatives() |
typical_p | configurable_fields() |
verbose | get_num_tokes() |
watermark | invoke() |
2. 示例
下面通过一个示例展现集成包的使用方法,从langchain_anthropic导入聊天模型ChatAnthropic,然后通过其成员函数configurable_alternatives选择性调用ChatOpenAI,代码如下:
from langchain_anthropic import ChatAnthropic
from langchain_core.runnables.utils import ConfigurableField
from langchain_openai import ChatOpenAImodel = ChatAnthropic(model_name="claude-3-sonnet-20240229"
).configurable_alternatives(ConfigurableField(id="llm"),default_key