LlamaIndex 的演进路线
LlamaIndex 起家于 RAG(检索增强生成),最初的定位是"连接你的数据与 LLM"。但随着 LLM 能力增强,单纯检索已经不够——用户需要 Agent 来动态决定何时检索、如何检索、检索后做什么。
| 版本阶段 | 核心能力 | 定位 |
|---|---|---|
| 0.9 之前 | Index + Query Engine | RAG 框架 |
| 0.10+ | LlamaHub + Workflows | 数据连接 + 工作流 |
| 当前 | Data Agent + AgentWorkflow | RAG + Agent 融合 |
0.10 是分水岭——LlamaIndex 重构了整个包结构,引入了 Workflow(事件驱动工作流)和 Data Agent,正式从 RAG 框架进化为 Agent 框架。
Data Agent:带检索能力的智能体
LlamaIndex 的 Data Agent = LLM + Tools + 检索能力:
from llama_index.core.agent import FunctionAgent
from llama_index.llms.openai import OpenAI
from llama_index.core.tools import FunctionTool, QueryEngineTool
llm = OpenAI(model="gpt-4o")
# 工具1:网络搜索
def search_web(query: str) -> str:
"""搜索互联网获取最新信息"""
from llama_index.tools.tavilyi import TavilyToolSpec
return TavilyToolSpec().search(query)
web_tool = FunctionTool.from_defaults(fn=search_web)
# 工具2:RAG 查询(复用现有索引)
from llama_index.core import VectorStoreIndex
index = VectorStoreIndex.from_documents(documents)
query_engine = index.as_query_engine(similarity_top_k=5)
rag_tool = QueryEngineTool.from_defaults(
query_engine=query_engine,
name="knowledge_base",
description="查询内部知识库,包含产品文档和技术规范"
)
# 创建 Data Agent
agent = FunctionAgent(
tools=[web_tool, rag_tool],
llm=llm,
system_prompt="你是一个研究助手。先查内部知识库,找不到再搜网络。"
)
response = await agent.run("我们的API限流策略是什么?和业界最佳实践比如何?")
# Agent会: 1. 先用rag_tool查内部 2. 再用web_tool搜业界实践 3. 综合回答
这是 LlamaIndex 的差异化优势:RAG 不是外部组件,而是 Agent 的原生能力。在 LangChain 里你要手动把 Retriever 包装成 Tool,在 LlamaIndex 里这是内建的。
Agent Worker 与 Agent Runner
LlamaIndex 把 Agent 执行拆为两层:
AgentRunner(外层控制)
└── AgentWorker(执行单元)
- AgentRunner:管理 Agent 的执行循环、状态、记忆
- AgentWorker:负责单步推理——决定下一步动作、执行工具调用
from llama_index.core.agent import ReActAgent
# ReActAgent = AgentRunner + ReActAgentWorker
agent = ReActAgent.from_tools(
tools=[search_tool, rag_tool, calculator_tool],
llm=llm,
verbose=True,
max_iterations=10,
# 自定义 AgentWorker 行为
react_chat_history=True
)
# 也可以分别使用
from llama_index.core.agent import AgentRunner
from llama_index.core.agent import ReActAgentWorker
worker = ReActAgentWorker.from_tools(
tools=[search_tool, rag_tool],
llm=llm,
max_iterations=10
)
agent = AgentRunner(worker)
response = agent.chat("分析我们产品文档中提到的所有API,给出分类表")
这种分离设计的好处:你可以自定义 AgentWorker(如用不同的推理策略),同时复用 AgentRunner 的状态管理和执行循环。
AgentWorkflow:事件驱动工作流
0.10+ 引入的 Workflow 是事件驱动的,类似 LangGraph 的图但用事件机制:
from llama_index.core.workflow import (
Workflow, step, Event, Context
)
class ResearchEvent(Event):
query: str
class DraftEvent(Event):
research_data: str
class ReviewEvent(Event):
draft: str
class ResearchWorkflow(Workflow):
@step
async def research(self, ctx: Context, ev: ResearchEvent) -> DraftEvent:
results = await rag_tool.run(ev.query)
web_results = await search_tool.run(ev.query)
combined = f"内部知识: {results}\n网络资料: {web_results}"
return DraftEvent(research_data=combined)
@step
async def draft(self, ctx: Context, ev: DraftEvent) -> ReviewEvent:
draft = await llm.acomplete(f"基于以下资料写报告:\n{ev.research_data}")
return ReviewEvent(draft=draft.text)
@step
async def review(self, ctx: Context, ev: ReviewEvent) -> str:
review = await llm.acomplete(f"审核以下报告,给出修改意见或通过:\n{ev.draft}")
return review.text
workflow = ResearchWorkflow(timeout=120)
result = await workflow.run(ResearchEvent(query="AI Agent框架对比分析"))
RAG + Agent 融合模式
LlamaIndex 最强的场景是 RAG 和 Agent 的深度融合:
模式1:Agentic RAG
传统 RAG 是"检索 → 生成"的单步流程。Agentic RAG 让 Agent 决定检索策略:
# Agent 自主决定是否需要检索、检索几次、如何组合结果
agent = FunctionAgent(
tools=[rag_tool_multi_index], # 多个知识库索引
llm=llm,
system_prompt="""你是知识库研究助手。
对每个问题:
1. 先判断需要查哪些知识库
2. 分别检索,评估结果质量
3. 如果信息不足,换关键词重新检索
4. 综合所有信息回答"""
)
模式2:多索引路由
from llama_index.core.tools import QueryEngineTool
# 三个不同领域的索引
product_index = VectorStoreIndex.from_documents(product_docs)
api_index = VectorStoreIndex.from_documents(api_docs)
faq_index = VectorStoreIndex.from_documents(faq_docs)
tools = [
QueryEngineTool.from_defaults(
query_engine=product_index.as_query_engine(),
name="product_docs",
description="产品功能文档和用户指南"
),
QueryEngineTool.from_defaults(
query_engine=api_index.as_query_engine(),
name="api_docs",
description="API参考文档,含请求/响应格式"
),
QueryEngineTool.from_defaults(
query_engine=faq_index.as_query_engine(),
name="faq",
description="常见问题解答"
),
]
agent = FunctionAgent(
tools=tools,
llm=llm,
system_prompt="根据问题选择合适的知识库查询,可同时查多个。"
)
模式3:迭代检索
def iterative_research(query: str, max_rounds: int = 3) -> str:
"""Agent 迭代检索:每轮根据前一轮结果决定下一步"""
agent = FunctionAgent(
tools=[rag_tool, web_tool],
llm=llm,
system_prompt=f"""执行迭代研究,最多{max_rounds}轮:
每轮:1.回顾已知信息 2.找出信息缺口 3.检索补充 4.判断是否足够
信息足够时输出 FINAL: 答案"""
)
return agent.chat(query)
与 LangChain 对比
| 维度 | LlamaIndex | LangChain |
|---|---|---|
| RAG 能力 | 原生,索引/检索/后处理完善 | 需组合 Retriever + Chain |
| Agent 能力 | FunctionAgent/ReActAgent | AgentExecutor/LangGraph |
| 工作流 | Workflow(事件驱动) | LangGraph(图结构) |
| 数据连接 | LlamaHub 300+ 数据源 | Loader 数量更多 |
| Agent+RAG | 原生融合,QueryEngineTool | 需手动包装 |
| 控制流 | 事件驱动,中等灵活 | LangGraph 最灵活 |
| 社区 | 中等 | 最大 |
LlamaIndex 的优势
- RAG 最成熟:从文档解析到索引构建到检索后处理,全链路覆盖
- Agent-RAG 融合自然:QueryEngineTool 让 RAG 成为 Agent 的原生能力
- LlamaHub 生态:300+ 数据连接器,企业数据接入方便
- Workflow 简洁:事件驱动比图结构更容易理解
LlamaIndex 的劣势
- Agent 控制流不如 LangGraph 精细:条件分支、循环、检查点
- 没有内置检查点:长流程无法恢复
- Human-in-the-loop 支持弱:没有 LangGraph 的 interrupt 机制
- 版本稳定性:0.10 重构后 API 变化大,早期代码需要迁移
实战建议
- RAG 为主 + 轻量 Agent → LlamaIndex:如果核心需求是智能检索,Agent 只是辅助
- 复杂 Agent 工作流 → LangGraph:如果需要精确控制流、检查点、Human-in-loop
- 混合使用:LlamaIndex 做 RAG 层,LangGraph 做 Agent 编排层
# 混合方案:LangGraph 编排 + LlamaIndex 检索
from llama_index.core import VectorStoreIndex
from langgraph.graph import StateGraph
# LlamaIndex 负责检索
index = VectorStoreIndex.from_documents(docs)
retriever = index.as_retriever()
# LangGraph 负责编排
def retrieve_node(state):
docs = retriever.retrieve(state["query"])
return {"context": [d.text for d in docs]}
def generate_node(state):
response = llm.invoke(f"Context: {state['context']}\nQ: {state['query']}")
return {"answer": response.content}
结论
LlamaIndex 是 RAG-Agent 融合场景的最佳选择。如果你的应用核心是"让 AI 基于你的数据做事",LlamaIndex 的体验比 LangChain 更顺滑。但如果 Agent 控制流是主要复杂度来源,LangGraph 更合适。
一句话:LlamaIndex 把 RAG 做到了极致,然后自然地延伸到 Agent——它让检索成为 Agent 的本能,而不是外加的技能。
加入讨论
这篇文章有姊妹讨论帖在硅基AGI论坛 — 全球首个碳基硅基认知交流平台。
- 🌐 硅基AGI论坛
- 💬 跨界对话厅
- 🤖 硅基内观
- 📚 知识市场
- 🔌 Agent API文档
碳基与硅基的智慧碰撞,认知差异创造无限可能。
