主题
在 LlamaIndex 中,agent 是一段由 LLM 驱动的半自主软件:它接到一个任务,然后执行一系列步骤来逐步完成它。它被配备一组工具——从任意函数到完整的 LlamaIndex 查询引擎都可以——并为每一个步骤挑选最合适的工具。每完成一步,agent 会判断任务是否已经完成:完成就把结果返回给用户,否则回到起点再来一轮。
在 LlamaIndex 里,你可以从零构建自己的智能体工作流(见「构建 Workflows」一节),也可以使用我们预置的智能体工作流,比如 FunctionAgent(一个简单的函数/工具调用 agent)或 AgentWorkflow(能管理多个 agent 的 agent)。本教程讲的是用 FunctionAgent 构建一个函数调用 agent。
想了解构建多智能体系统的各种方式,请转到「多智能体系统」。

入门
以上全部代码可以在 agents 教程仓库 找到。
为了避免依赖冲突、保持环境干净,我们新建一个 Python 虚拟环境。用哪个虚拟环境管理器都行,这里用 poetry:
终端窗口
poetry init
poetry shell然后安装 LlamaIndex 库,以及另外几个会用得上的依赖:
终端窗口
pip install llama-index-core llama-index-llms-openai python-dotenv如果这些步骤遇到麻烦,请看我们更详尽的安装指南。
OpenAI Key
我们的 agent 将由 OpenAI 的 gpt-4o-mini 驱动,所以你需要一个 API key。拿到 key 之后,可以把它放进项目根目录的 .env 文件:
终端窗口
OPENAI_API_KEY=sk-proj-xxxx如果不想用 OpenAI,你也可以使用其他任意 LLM,包括本地模型。不过 agent 需要能力足够强的模型,较小的模型可能可靠性较差。
引入依赖
先导入我们需要的 LlamaIndex 组件,并从 .env 文件加载环境变量:
from dotenv import load_dotenv
load_dotenv()
from llama_index.llms.openai import OpenAI
from llama_index.core.agent.workflow import FunctionAgent创建基础工具
在这个简单示例里我们创建两个工具:一个知道怎么把数字相乘,一个知道怎么把它们相加。
def multiply(a: float, b: float) -> float:
"""Multiply two numbers and returns the product"""
return a * b
def add(a: float, b: float) -> float:
"""Add two numbers and returns the sum"""
return a + b你可以看到,这些就是普通的 Python 函数。在决定用哪个工具时,agent 会借助工具的名称、参数和 docstring 来判断这个工具做什么、是否适合当前的任务。所以务必让 docstring 写得描述充分、有帮助。它还会用类型注解来判断期望的参数和返回类型。
初始化 LLM
今天负责干活的是 gpt-4o-mini:
llm = OpenAI(model="gpt-4o-mini")你也可以选其他通过 API 提供的流行模型,比如 Mistral、Anthropic 的 Claude 或 Google 的 Gemini。
初始化 agent
现在创建 agent。它需要一个工具数组、一个 LLM,以及一段告诉它「该成为什么样的 agent」的系统提示词。你实际使用的系统提示词通常应该比这里的示例更详细!
workflow = FunctionAgent(
tools=[multiply, add],
llm=llm,
system_prompt="You are an agent that can perform basic mathematical operations using tools.",
)GPT-4o-mini 其实足够聪明,处理这样简单的算术并不需要用工具——这也是为什么我们在提示词里明确要求它使用工具。
除了 FunctionAgent,LlamaIndex 还提供了其他 agent,例如 ReActAgent 和 CodeActAgent,它们采用不同的提示词策略来执行工具。
提一个问题
现在我们可以让 agent 算一道题:
response = await workflow.run(user_msg="What is 20+(2*4)?")
print(response)注意这是异步代码。它在 notebook 环境里可以直接跑;如果你想在普通 Python 里运行,需要把它包进一个异步函数,像这样:
async def main():
response = await workflow.run(user_msg="What is 20+(2*4)?")
print(response)
if __name__ == "__main__":
import asyncio
asyncio.run(main())输出应该与下面类似:
The result of (20 + (2 times 4)) is 28.提示
有些模型可能不支持流式 LLM 输出。流式默认是开启的,如果遇到报错,你随时可以用 FunctionAgent(..., streaming=False) 把它关掉。
最终代码应该长什么样,可以对照仓库里的这份文件。
恭喜!你已经构建了最基础的 agent。接下来学学如何使用预置工具。