LlamaIndex系列教程-四、给Agent添加一些工具

海心 11 次阅读 发布于 27 天前 预计阅读时间: 6 分钟


LlamaIndex系列教程-四、给Agent添加一些工具

本文作于:2025-07-11 01:35 作者:海心


一、引言

上一篇文章我们教学了如何构建一个没有工具,仅仅只有上下文功能的聊天机器人Agent。

[[LlamaIndex系列教程-三、构建Agent对话机器人]]

但是我们都是到,没有工具,就不是一个真正意义上的Agent。Agent只有拥有了工具,才能从外界获取信息、作用于外界,才能在真正意义上给我们“动手做事情”。

就拿最简单的计算来说。如果我们直接给AI一个非常复杂的计算,例如,计算,AI肯定会给你一个错误的答案。因为AI就像是我们人类的大脑,倘若我直接给你出这个计算题,你肯定也涮不出来。

但是,如果我们是一个正常人类,想要完成上面这个计算,就需要借助计算机。同样的,AI虽然自己本身计算能力不行,但是它可以借用计算机的能力,让其来计算,然后AI再将计算结果返回给人类。

所以本章我们将介绍,如何利用LlamaIndex提供的强大的组件,来将Python中的函数工具,转换成可以让AI使用、调用的Agent Tools。

二、正式开始构建Agent

本章我们介绍如何构建一个可以调用工具进行计算的Agent。我们这里只给出计算乘法和加法函数的Agent。当然,你们可以构建更加复杂的工具函数,例如调用其他服务的API,比如有网页查询服务的BingAPI。

2.1. 引入依赖、LLM

同样的,我们第一章里面介绍过引入LLM的方法

[[LlamaIndex系列教程-二、使用LLM:给Agent添加一个大脑]]

from llama_index.core.agent.workflow import FunctionAgent
from llama_index.core.tools import FunctionTool
from llamaindex_models import OpenAIModel

llm = OpenAIModel(model="gpt-4o", temperature=0.1)

 

2.2. 定义计算函数并转换成工具

我们这里定义两个函数,可以实现计算机层面的乘法和加法,而不是通过LLM的“大脑”来口算的乘法加法。。

def multiply(a: float, b: float) -> float:
    """乘法,然后返回结果"""
    return a * b


def add(a: float, b: float) -> float:
    """加法,然后返回结果"""
    return a + b

 

此时,我们仅仅只是拥有了两个Python的函数。我们的Agent并不知道该如何执行他。

Agent眼中的工具,应该得具有两种信息:工具名称、工具描述。这相当于是工具的说明书,可以告诉AI:你需要这样调用这个工具,这个工具可以实现这样的效果,然后你将会得到这样的返回值。AI才会根据描述来调用需要的工具。

LlamaIndex提供了FunctionTool类,里面有的from_default方法。这让我们可以直接传入我们定义好的Python函数,然后用默认的转换方式,将Python函数转换成LlamaIndex的Tool。

这里说的“默认转换方式”,就是将函数下方的字符串设置为工具的描述,将函数本身的名称设置为工具名称。例如,对上面的multiply函数这个转换,就可以得到一个名字叫“multiply”的工具,它的工具描述就是:“乘法,然后返回结果”。

具体使用方法如下:

multiply_tool = FunctionTool.from_defaults(multiply)
add_tool = FunctionTool.from_defaults(add)

 

这样,我们就得到了两个tool:multiply_tool和add_tool。他们将在下一步的Agent构建中被传给Agent。

2.3. 构建FunctionCall Agent

接下来的步骤与上一章介绍的Agent构建大致相同。唯一的区别就是我们需要在tools参数中,传入我们要用的工具的列表。具体操作如下:

math_agent = FunctionAgent(
    tools=[multiply_tool, add_tool],
    llm=llm,
    system_prompt="你是一个数学计算助手,擅长计算数学问题。你可以使用工具multiply和add来计算数学问题。",
)

 

可以看到,我们在Agent的tools中就传入了[multiply_tool, add_tool],这两个我们刚刚定义了的工具。这样,我们下次用这个agent运行任务时,他就会根据需求来调用工具了。

2.4. 创建主函数

async def main():
    response = await math_agent.run(user_msg="计算20+(2*4)")
    print(response)


if __name__ == "__main__":
    import asyncio

    asyncio.run(main())

 

运行结果:

计算结果是28。

 

这样,我们就完整的创建了一个可以自助调用工具的Agent。

总结

本文介绍了如何为 Agent 添加工具,使其能够调用外部函数来执行特定任务,如复杂的数学计算,弥补了 AI 在某些方面(如精确计算)的不足。文章详细阐述了如何将 Python 函数转换为 LlamaIndex 的工具,并将其集成到 Agent 中。

通过具体示例,展示了构建一个能进行加乘运算的 Agent 的全过程,包括依赖引入、工具定义、Agent 构建及主函数运行。这使得 Agent 不仅限于上下文理解,更能“动手”解决实际问题。