LLM大模型应用开发框架:LangChain和LangGrap
LangChain概述
LangChain 是一种通过在链中执行一系列功能来构建利用 LLM 的应用程序的方法。处理是按顺序执行的,类似于单向道路。
链(Chain)的理解
例如,构建如下的一个应用程序:
- 检索数据(Retrieve)
- 解释(总结)数据(Summarize)
- 用户提问的解答(Answer)
LangChain工作流程详情
数据检索组件(Retrieve Component)
- 文档加载器(Document loader)
从数据源获取并导入内容
- 文本分割器(Text splitter)
将文本分割成有意义的块
总结组件(Summarize Component)
- 链(Chain):解释过程的控制
- 提示词准备(Prompt Preparation):准备向LLM下达指令
- LLM交互(LLM/SLM Interaction):执行与模型的交互
回答组件(Answer Component)
- 链(Chain):答案生成过程的控制
- 记忆(Memory):参考并保存对话历史记录和上下文
- 提示词准备(Prompt Preparation):准备生成答案
- LLM对话(LLM/SLM Interaction):与模型执行交互(可以选择不同的模型)
LangChain Agent
LangChain有“Agent”的概念,即:
从一组定义的工具中选择并使用适当的工具
- 创建任务执行计划
- 在一系列处理流程中做出决策
- 基本上不保留状态(如有必要,使用内存组件)
LangGraph概述
LangGraph 是一个独立的库,作为 LangChain 的扩展而开发。它旨在构建一个系统,多个具有独立角色的AI进程(代理)可以通过共享状态进行协作,并根据情况灵活响应。
主要特点
状态保持功能:
- 维护整个系统的状态
- 对话历史记录保留
- 跟踪任务进度
- 记住用户选择历史
多代理系统:
- 多个独立的AI流程协作
- 每个都有特定的角色
- 通过共享状态交换信息
- 动态处理分布
非线性工作流程:
- 根据情况灵活选择加工方式
- 如有必要,返回上一步
- 执行并行处理
LangGraph的构成要素
节点(Node):
- 代表各个处理代理
- 具有独立的功能
- 示例:输入处理、任务添加、任务完成、状态确认等。
边缘(Edge):
- 节点之间的连接
- 定义数据和控制流
- 表示处理方向
状态管理(State):
- 维护整个系统的状态
- 代理之间的信息共享
- 维护上下文
LangChain和LangGraph的比较
目的:
- LangChain:通过链接LLM操作进行抽象
- LangGraph:实现执行复杂协作操作的多智能体系统
结构:
- LangChain:使用DAG(有向无环图)的单向处理
- LangGraph:共享状态并允许双向处理的图结构
状态管理:
- LangChain:有限(由内存组件管理)
- LangGraph:强大的系统范围状态管理
使用案例:
LangChain:
- 文档摘要系统
- 简单的问题回答
- 数据转换管道
LangGraph:
- 任务管理助理
- 复杂的对话系统
- 项目管理系统
哪些场景需要选择LangChain:
- 工艺流程清晰有序
- 简单的输入到输出转换
- 对状态管理的需求不高
哪些场景需要选择LangGraph:
- 需要复杂的交互和状态管理
- 需根据情况灵活处理
- 需要协调多个人工智能流程
实施视角:
- LangChain:简单实现即可上手
- LangGraph:更复杂但更灵活
理想情况下,可以根据项目要求适当地将两者结合起来,创建一个高效、灵活的系统。
THE END