基于Python和TypeScript的AI代理框架,如CrewAI、LangChain、Agno和Vercel AI SDK,允许开发人员构建包含多个代理的AI应用程序,这些代理可以作为计算机使用代理或深度研究代理,来自动化浏览器任务,如点击、滚动、在网上订购产品以及执行复杂的多步骤任务。这些多AI代理可以组合在一起协作,并将其任务交接给其他代理以解决复杂问题。虽然上述代理框架能帮助你快速构建多代理系统,但你可能很快就会意识到,对于企业级的代理系统,你还需要外部工具来装备这些代理。借助工具和工具包,你可以将AI助手连接到无限数量的应用程序,例如聊天应用以检索频道信息,视频会议以分析通话参与者的情绪等。
AI代理和外部工具概述
AI代理的主要组件之一是一个大型语言模型(LLM),它驱动代理执行其操作。通常,这些LLM只能使用其训练数据来回答用户查询。尽管训练数据可能是一个庞大的数据集,但它只允许LLM与内部世界进行交互。然而,当你构建AI代理时,你可以为它们提供解锁外部世界并借助工具访问广泛知识的钥匙。为代理提供所需的工具有助于扩展LLM的内置专业知识,并增强对提示的响应。
什么是代理工具?
工具定义了一种大型语言模型(LLM)可以调用的动作,以增强对用户查询的响应。根据用户的提示,工具可以与外部应用程序(如YouTube、Gmail、Slack、Yahoo Finance API和Zoom)进行交互。另一方面,工具包包含一组即用型的工具或函数,代理可以调用这些工具或函数来提供精确答案。如果你希望代理抓取网页或查看今天的日历,都有特定的工具可以完成这些任务。
在上面的图中,用户可能会询问特定位置的当前天气状况。如果提供了像Tavily或DuckDuckGo实时网络搜索这样的天气工具,LLM就会检索它,以便代理能够准确回应用户的查询。
代理工具包是一系列即用型的功能,开发人员可以从外部来源将其添加到他们的多代理AI应用程序中,以实现特定目标或执行特定任务。可以将其比作在现实世界场景中,团队成员可能需要配备的各种工具,以更有效地执行他们的日常任务。使用工具包,你可以轻松地将LLM和代理连接到外部应用程序,如GitHub、Slack和Linear,以实现任务管理、提高生产力等。
为什么将外部工具与代理集成?
使用工具,你可以将代理连接到外部服务,以在代理工作流程中执行和触发动作。通过像Composio这样的工具访问框架,你可以轻松连接多个工具,并在单个监控仪表板上管理它们的身份验证,以适用于多代理。
问题:创建一个没有工具的基本代理
上面的图表展示了AI代理的基本操作。
# Create an agent without a tool (basic inference tasks)
# agent_without_tool.py
from agno.agent import Agent
from agno.models.openai import OpenAIChat
agent = Agent()
agent.print_response("What is the weather in Helsinki?", markdown=True)
如上图所示,模型无法从网络提供实时信息,因为它无法访问工具。让我们通过在代理的定义中指定一个工具来解决这个问题。
解决方案:为基本代理配备工具。
为了解决上述问题,我们将AI代理连接到Tavily,使用下面的示例代码提供实时、准确的网络搜索结果。
import os
from agno.agent import Agent
from agno.models.openai import OpenAIChat
from agno.tools.tavily import TavilyTools
from dotenv import load_dotenv
# Load environment variables from .env file
load_dotenv()
# Use token from .env file
os.environ["TAVILY_API_KEY"] = os.getenv("TAVILY_API_KEY")
agent = Agent(tools=[TavilyTools()], show_tool_calls=True)
agent.print_response("What is the weather in Helsinki?", markdown=True)
运行上面的示例代码将使用外部工具(Tavily)显示类似于下图的输出。
常见的代理工具包和应用场景
代理工具包可以出于多种原因并在不同的应用场景中集成到AI应用程序中。可以为代理添加外部工具,使它们能够直接感知和影响现实世界。例如,如前所述,你可以通过代理工具访问Tavily网络搜索API,以呈现实时天气信息或时事新闻。
如上图所示,你可以在许多方面利用工具来开发AI代理应用程序,从市场到按需服务等。以下是一些关键的应用领域,在这些领域中,你可以为代理配备工具,以便更准确地、更好地了解现实世界。
医疗保健
你可以混合搭配多个代理工具来解决医疗保健问题。想象一下一个远程医疗应用程序;我们可以在应用程序中构建一个AI代理,并为其配备像Tavily这样的工具,以便患者能够实时搜索附近的医生。医生可以使用Cal.com来安排他们的可预约时间。此外,我们还可以为代理配备Resend,以安排患者-医生预约的电子邮件通知。
项目管理
使用工具,你可以构建一个AI助手,用于在Linear或Jira中协调和管理不同团队的项目。在这种情况下,AI代理将负责提供有关任务状态、团队成员的可用性以及特定项目的截止日期的准确信息。
from agno.agent import Agent
from agno.tools.linear_tools import LinearTool
agent = Agent(
name="Linear Tool Agent",
tools=[LinearTool()],
show_tool_calls=True,
markdown=True,
)
agent.print_response("Show all the issues assigned to user id: 103348")
上面的代码片段展示了一个代理,它可以使用Agno在Linear中显示分配给特定用户的所有问题。
学术研究
通过为多代理AI应用程序及其训练知识添加Arxiv等外部工具的功能,你可以为学生和学术研究人员创建一个AI聊天机器人,使他们能够快速分析学术研究论文。
以下示例代理负责使用Agno在Arxiv上搜索主题。
from agno.agent import Agent
from agno.tools.arxiv_toolkit import ArxivToolkit
agent = Agent(tools=[ArxivToolkit()], show_tool_calls=True)
agent.print_response("Search arxiv for 'language models'", markdown=True)
复杂数据分析
在使用AI系统分析复杂数据时,你可以将CSV搜索工具与代理连接,以执行高效的检索增强生成(RAG)。搜索工具可以帮助代理使用语义搜索从CSV文档中提取信息。
from crewai_tools import CSVSearchTool
# Initialize the tool with a specific CSV file.
# This setup allows the agent to only search the given CSV file.
tool = CSVSearchTool(csv="weather_data.csv")
# OR
# Initialize the tool without a specific CSV file.
# Agent will need to provide the CSV path at runtime.
tool = CSVSearchTool()
tool = CSVSearchTool(
config=dict(
llm=dict(
provider="openai", # or google, openai, anthropic, llama2, ...
config=dict(
model="gpt-4o",
temperature=0.5,
top_p=1,
stream=True,
),
),
embedder=dict(
provider="openai", # or openai, ollama, ...
config=dict(
model="text-embedding-3-small",
),
),
)
)
print(tool.run("Where did Light shower rain occurred?"))
金融
可以将来自Yahoo Finance、Pandas和OpenBB的API工具集成到代理中,以提供财务建议、从CSV中可视化财务数据,并提供有关公司及其股票新闻的信息。
为代理配备外部工具的优势
在许多情况下,将AI代理连接到外部工具是很有帮助的。
AI代理的工具类型
你可以以不同的方式与代理集成工具和一组现成的应用程序套件。你可能更喜欢编写自己的自定义Python函数作为工具,使用来自外部API的预构建应用程序,或者安装像Composio这样的框架,以便轻松、快速且安全地访问多个工具。
使用纯Python和TypeScript函数
你可以在任何流行的AI代理框架中编写自定义的纯Python和TypeScript函数,作为代理的工具。下面的示例代码演示了一个Python函数get_top_hackernews_stories,它使用Agno从Hacker News获取顶级故事。
import json
import httpx
from agno.agent import Agent
def get_top_hackernews_stories(num_stories: int = 10) -> str:
"""Use this function to get top stories from Hacker News.
Args:
num_stories (int): Number of stories to return. Defaults to 10.
Returns:
str: JSON string of top stories.
"""
# Fetch top story IDs
response = httpx.get('https://hacker-news.firebaseio.com/v0/topstories.json')
story_ids = response.json()
# Fetch story details
stories = []
for story_id in story_ids[:num_stories]:
story_response = httpx.get(f'https://hacker-news.firebaseio.com/v0/item/{story_id}.json')
story = story_response.json()
if "text" in story:
story.pop("text", None)
stories.append(story)
return json.dumps(stories)
agent = Agent(tools=[get_top_hackernews_stories], show_tool_calls=True, markdown=True)
agent.print_response("Summarize the top 5 stories on hackernews?", stream=True)
运行上面的Python代码将显示与此预览类似的结果。
使用工具包并大规模管理它们
从根本上说,通过工具/工具包将外部应用程序集成到AI代理中更容易。然而,在代理系统中对这些外部应用程序进行身份验证和管理会变得繁琐。为了简化这一过程,你可以利用Composio和Toolhouse等平台。这两个平台都支持用Python和TypeScript构建的AI应用程序和代理。
使用Composio大规模集成外部工具
Composio是一个生产就绪的平台,用于将工具与大型语言模型(LLM)和AI代理应用程序集成,以构建复杂的工作流程。你可以从Composio开始,为你的基于Python的AI项目添加工具包,或者通过Agno、LangChain和CrewAI等AI框架使用它。在构建复杂的代理工作流程时,如果你的代理需要访问像Gmail、GitHub和Salesforce这样的应用程序,Composio将成为一个便捷的工具。
将Composio与Crew AI结合使用
让我们来看一个CrewAI和Composio集成的示例,该代理可以导航到给定的GitHub仓库并给其“加星”。
from composio_crewai import ComposioToolSet, App
from crewai import Agent, Task, Crew
from langchain_openai import ChatOpenAI
from dotenv import load_dotenv
import os
# Load environment variables from .env file
load_dotenv()
toolset = ComposioToolSet(api_key=os.getenv("COMPOSIO_API_KEY"))
llm = ChatOpenAI(api_key=os.getenv("OPENAI_API_KEY"))
# request = toolset.initiate_connection(app=App.GITHUB)
# print(f"Open this URL to authenticate: {request.redirectUrl}")
crewai_agent = Agent(
role="GitHub Agent",
goal="You take action on GitHub using GitHub APIs",
backstory="You are AI agent that is responsible for taking actions on GitHub on behalf of users using GitHub APIs",
verbose=True,
tools=toolset.get_tools(),
llm=llm,
)
task = Task(
description="Star the repo GetStream/stream-tutorial-projects on GitHub",
agent=crewai_agent,
expected_output="Status of the operation",
)
crew = Crew(agents=[crewai_agent], tasks=[task])
result = crew.kickoff()
print(result)
总结上面的示例代码,你需要安装CrewAI、Composio以及其他CrewAI依赖项。运行带有指定工具的代理需要API密钥来访问你选择的大型语言模型(LLM)、Composio和CrewAI。本示例使用OpenAI,并将所有所需的API密钥作为环境变量存储,如代码中所示。运行此示例将显示与下图类似的输出。
使用Toolhouse安装和管理外部应用程序。
Toolhouse是一个平台,允许开发人员构建、配置、运行、测试并将工具集成到大型语言模型(LLM)和代理中。其工具商店功能支持为代理安装不同的工具,类似于在手机上安装应用程序的方式。你可以通过选择你喜欢的库(Python或TypeScript)来开始使用Toolhouse。
在基于TypeScript的代理系统中使用外部工具
在撰写本文时,Python有无数的框架和库支持外部代理工具。另一方面,TypeScript只有少数几个。内置支持工具/工具包的最佳TypeScript AI SDK和库是Vercel AI SDK和Agentic.so。然而,随着AI领域的迅速发展,很快可能会出现许多基于TypeScript的框架和库,它们包含众多工具。
总结
本教程介绍了AI代理工具/工具包,为什么它们对AI应用程序至关重要,以及如何使用LangChain、CrewAI、Agno等领先的代理AI框架和Agentic.so库,在基于Python和TypeScript的AI项目中实现它们。