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 不仅限于上下文理解,更能“动手”解决实际问题。
Comments NOTHING