LlamaIndex 高级

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 能分别查询财务与人事两个知识库,标准做法是?