LlamaIndex 的 Agent 与 Workflows
让索引长出手脚:FunctionTool 包装查询引擎、ReActAgent 调度多索引,以及事件驱动的 Workflows。
把查询引擎变成工具
LlamaIndex 的 Agent 思路:每个 QueryEngine / Retriever 都可以包装成工具(Tool),由 Agent 决定调用哪个:
from llama_index.core.tools import QueryEngineTool
finance_tool = QueryEngineTool.from_defaults(
query_engine=finance_index.as_query_engine(),
name="finance_docs",
description="回答财务制度相关问题")
hr_tool = QueryEngineTool.from_defaults(
query_engine=hr_index.as_query_engine(),
name="hr_docs",
description="回答人事制度相关问题")
from llama_index.core.agent import ReActAgent
agent = ReActAgent.from_tools([finance_tool, hr_tool], verbose=True)
agent.chat("报销流程是什么?出差补贴标准呢?") # 自动分别查两个库
description 就是路由依据——与本站《意图识别》课的槽位路由思想一致,只是路由决策交给了模型。
常见工具类型
- QueryEngineTool:知识库问答;
- FunctionTool:包装任意 Python 函数(查数据库、调 API);
- 第三方集成:搜索、SQL、代码解释器等现成工具。
Workflows:事件驱动的编排
复杂多步流程(抽取→校验→汇总)推荐用 Workflows:用事件(Event)驱动步骤(Step),每个步骤监听/发出事件,天然支持分支、循环与流式中间结果 —— 定位类似 LangGraph,是 LlamaIndex 的编排层。
from llama_index.core.workflow import Workflow, step, Event
class IngestedEvent(Event): ...
class DoneEvent(Event): ...
class MyFlow(Workflow):
@step
async def ingest(self, ev: IngestedEvent) -> DoneEvent:
... # 每个步骤一个函数,事件串联
选型提示:简单工具循环用 Agent 即可;有分支/循环/人工介入的流程上 Workflows。
📝 课后练习
quiz-1 LlamaIndex 中让 Agent 能分别查询财务与人事两个知识库,标准做法是?