构建智能体
在LlamaIndex中,智能体是由大型语言模型驱动的半自主软件模块,它被赋予任务并执行一系列步骤来解决该任务。它被提供一组工具,这些工具可以是任意函数,甚至是完整的LlamaIndex查询引擎,它会选择最佳可用工具来完成每个步骤。当每个步骤完成时,智能体会判断任务是否已完成,若已完成则向用户返回结果,若需要继续执行下一步,则返回循环起点。
在LlamaIndex中,您可以选择从零开始构建自己的智能体工作流(相关内容在"构建工作流"章节中介绍),或者使用我们预置的智能体工作流,例如FunctionAgent(一个简单的函数/工具调用智能体)或AgentWorkflow(能够管理多个智能体的智能体)。本教程将介绍如何使用FunctionAgent构建函数调用智能体。
要了解构建多智能体系统的各种方法,请前往“多智能体系统”。

你可以在智能体教程代码库中找到所有这些代码。
为避免冲突并保持环境整洁,我们将创建一个新的Python虚拟环境。您可以使用任何虚拟环境管理器,但这里我们将使用poetry:
poetry initpoetry shell然后我们将安装LlamaIndex库以及其他一些会有用的依赖项:
pip install llama-index-core llama-index-llms-openai python-dotenv如果遇到任何问题,请查阅我们更详细的安装指南。
OpenAI密钥
Section titled “OpenAI Key”我们的智能体将由 OpenAI 的 gpt-4o-mini 大语言模型驱动,因此您需要一个 API 密钥。获取密钥后,您可以将其放置在项目根目录的 .env 文件中:
OPENAI_API_KEY=sk-proj-xxxx如果您不想使用OpenAI,可以使用任何其他LLM,包括本地模型。智能体需要性能强大的模型,因此较小的模型可能可靠性较低。
我们将从导入所需的LlamaIndex组件开始,同时从.env文件加载环境变量:
from dotenv import load_dotenv
load_dotenv()
from llama_index.llms.openai import OpenAIfrom 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函数。在决定使用哪种工具时,您的智能体将使用工具的名称、参数和文档字符串来确定工具的功能以及它是否适合当前任务。因此,确保文档字符串具有描述性且实用非常重要。它还会使用类型提示来确定预期的参数和返回类型。
gpt-4o-mini 今天将执行以下工作:
llm = OpenAI(model="gpt-4o-mini")您也可以选择其他可通过API访问的流行模型,例如来自Mistral、Anthropic的Claude或Google的Gemini的模型。
现在我们创建我们的智能体。它需要一个工具数组、一个大语言模型和一个系统提示,以告知它要成为何种类型的智能体。通常你的系统提示会比这个更详细!
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 中还提供了其他智能体,例如 ReActAgent 和 CodeActAgent,它们使用不同的提示策略来执行工具。
现在我们可以让智能体进行一些数学运算:
response = await workflow.run(user_msg="What is 20+(2*4)?")print(response)请注意这是异步代码。它可以在笔记本环境中运行,但如果你想在常规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.查看代码仓库了解最终代码应该是什么样子。
恭喜!您已经构建了最基础的智能体类型。接下来让我们学习如何使用预构建工具。