核心目标:简化的将 LLM 、知识库、外部工具 和计算资源连接起来,构建基于大语言模型(LLM)的更强大、更灵活的应用。
你可以把它想象成一个"胶水"和"工具箱"。
通过链 串联步骤、用代理 实现决策、靠记忆 维持对话、借外部工具 扩展能力、以标准化的接口兼容多平台。让开发者快速构建复杂应用。
一、核心功能
1、连接知识库:将非结构化数据(如文档、网页)转换为向量索引,实现语义搜索(如 FAISS、Chroma 向量数据库)。
2、模型连接:支持 OpenAI、Hugging Face、Azure 等多厂商 LLM,统一调用接口。
3、检索+生成:检索文档内容+调用LLM生成回答,实现智能问答。
4、历史对话管理:能基于历史对话上下文生成连贯回复。
5、工具调用:如查询天气、发送邮件(调用外部 API)。
6、链(Chains):将多个 LLM 调用、组件或工具调用串联,流程编排,多个任务步骤链式调用,形成工作流(如 "检索→摘要→问答")。
7、代理(Agents):允许 LLM 根据输入自主决定调用哪些工具(如搜索引擎、计算器)和执行任务。
二、核心概念
1、链 Chains (串联 LLM 与任务步骤)
-
核心抽象:将多个组件(模型调用、数据检索、代码执行、其他工具调用)按特定顺序组合起来完成一个复杂任务。
-
提供预构建链(如常见的
QA问答链),也支持自定义链。 -
例如:用户提问 -> 检索相关文档 -> 将文档和问题组合成提示词 -> 发送给 LLM -> 返回答案。
2、代理 Agents (让 LLM 自主决策与工具调用)
-
更高级的抽象,让 LLM 能够主动决定使用哪些工具(如搜索引擎、计算器、数据库、API)以及按什么顺序使用,来解决问题。
-
LLM 充当"大脑",根据用户输入和当前状态推理需要执行的动作(Action),调用工具(Tool),观察结果(Observation),并循环直至得出最终答案。
-
实现动态决策能力(如"帮我查一下最近的新闻,然后总结一下")。
3、记忆 Memory (管理对话上下文与历史)
-
存储历史会话:为链或代理提供短期或长期的"记忆"能力,使其能在对话或多次交互中记住上下文(如之前的对话历史、中间结果)。
-
支持简单的内存(记住最近几条消息)和更复杂的持久化内存。
4、工具集成 Tools (连接外部系统与能力)
-
核心功能之一:使 LLM 能够访问外部数据源(如你自己的文档、数据库、API)。
-
包含文档加载器、文本分割器、向量数据库集成(如 Chroma, Pinecone, FAISS, Milvus)和检索器。
-
实现"基于你提供的文档回答问题"的功能。
5、标准化组件 (统一接口与跨平台兼容)
-
提供与各种 LLM 供应商(OpenAI, Anthropic, Hugging Face 等)交互的统一接口。
-
简化了提示词(Prompt)的模板化、管理和优化。
-
处理模型的输入输出。
适用于:
需要整合外部数据、工具或 实现多步骤逻辑 的场景(如 RAG 系统、智能工作流);复杂应用(需记忆、检索、工具调用)等场景使用。
劣势:
学习门槛高;由于组件间的层层封装,复杂的链或 Agent 可能引入额外的性能开销(如多次 LLM 调用、冗余的数据处理),在高并发场景下需要额外优化,否则可能出现响应延迟;简单场景可能得不偿失,简单应用可直接调用 LLM API。
和LlamaIndex对比:
- LangChain :通用的 LLM 应用开发框架,目标是提供一套 "乐高积木",帮助开发者快速拼接出复杂的 LLM 应用工作流。它不局限于某一特定场景(如 RAG),而是覆盖从 "数据输入→模型调用→逻辑处理→输出交互" 的全流程。
- LlamaIndex :专注于 "数据与 LLM 连接" 的工具,核心目标是解决 "LLM 如何高效理解和使用私有数据(如文档、数据库)" 的问题,本质是为 RAG 场景提供 "数据处理→索引构建→智能查询" 的完整解决方案。
1、优先选 LlamaIndex 的场景
- 核心需求是 RAG:如果你的应用本质是 "让 LLM 基于私有文档回答问题"(如企业知识库、文档问答机器人),且需要处理复杂文档(如长文档、多格式文档、嵌套结构),LlamaIndex 是更优选择。它的索引优化和查询策略能显著提升回答的准确性(如减少 "幻觉"、提高相关性)。
- 追求 "开箱即用":如果你希望快速搭建 RAG 原型,不想手动设计数据处理流程(如文档分割、索引构建),LlamaIndex 的默认流程能节省大量时间(几行代码即可完成从文档到查询的全流程)。
- 优先选 LangChain 的场景
- 需要构建复杂多步骤应用:如果你的应用涉及多轮逻辑(如 "用户提问→调用工具查询实时数据→结合私有文档→生成回答")、需要 Agent 自主决策(如自动判断是否需要调用工具),或需要记忆功能(如记住对话历史),LangChain 的 "链""代理""记忆" 组件能更高效地实现这些逻辑。
- 应用场景不限于 RAG:如果你的应用包含非 RAG 模块(如纯对话机器人、代码生成工具、多模态处理),LangChain 的通用性可以避免你为不同模块引入多个工具。
- 需要高度自定义:如果你的场景需要深度定制流程(如自定义提示词模板、修改工具调用逻辑),LangChain 的模块化设计更适合灵活调整。
3、混合使用
复杂 LLM 应用会同时使用两者:
先通过 LlamaIndex 处理企业文档的数据索引和查询(发挥其 RAG 优势),
再用 LangChain 编排整体流程 ,构建一个 Agent**(如将 LlamaIndex 的查询结果接入 LangChain 的链或 Agent 中,结合工具调用、记忆等功能)**,使其既能调用 LlamaIndex 的查询接口获取文档信息,又能调用外部 API 获取实时数据,最终整合结果生成回答。
| 维度 | LangChain | LlamaIndex |
|---|---|---|
| 核心能力 | 提供 "链(Chains)""代理(Agents)""记忆(Memory)" 等组件,支持多步骤逻辑编排(如 "调用工具→处理结果→生成回答")。 | 提供 "数据加载→文档解析→索引构建→查询优化" 的全链路数据处理能力,专注于让 LLM 高效访问私有数据。 |
| 数据处理 | 提供基础的数据加载器(Loaders)和分割器(Splitters),但不深入优化索引结构,更多是 "能用" 而非 "最优"。 | 深耕数据索引技术,提供多种索引类型(向量索引、树索引、列表索引等),支持复杂文档结构(如嵌套文档、表格)的解析,且内置查询优化策略(如子问题分解、多步推理)。 |
| 应用场景覆盖 | 覆盖 RAG、聊天机器人、智能代理(如 AutoGPT 类应用)、工具调用(如调用 API、数据库)等几乎所有 LLM 应用场景。 | 主要聚焦 RAG 场景,是处理 "LLM + 私有数据" 的专用工具,对非 RAG 场景(如纯对话、工具调用)支持较弱。 |
为什么用 LlamaIndex?
- 支持多种索引结构(如向量索引、关键词索引、树状索引、知识图谱索引)
- 多种检索策略(混合检索、子查询、多步检索、路由检索)
- 生成链路优化,减少手动拼接
使用LangChain的场景 :
需要组合多种工具(如调用 API、数据库查询)、有其他非检索类步骤(如数据清洗、格式转换);
三、常见的几种AgentType
1、ZERO_SHOT_REACT_DESCRIPTION
简单工具调用(1-2 步) ,通过 "思考 - 行动 - 观察" 循环来处理任务。依赖 "工具描述", 直接选择工具(零样本)。适用于需要多步推理和动态工具调用的通用场景,如智能助理。
2、CONVERSATIONAL_REACT_DESCRIPTION
增加了「对话记忆(Memory)」能力,支持多轮对话的。适合需要长期交互和上下文跟踪的对话任务,如客服机器人或持续性助手
3、SELF_ASK_WITH_SEARCH
复杂问题 逐步拆解多个 "中间子问题",分步解决 的场景,并通过搜索工具获取答案。用于需要外部知识验证的问答系统、复杂的 "多步推理" 任务。