用Agno构建多模态AI代理
想象一下一个世界,其中人工智能不仅仅是回答问题——它会“行动”。它研究、协作、适应并像人类专家一样解决问题。这不是科幻小说。通过Agno,一个轻量级的开源库,用于构建多模态代理,开发人员现在可以创建具有前所未有的自主性的思考、学习和执行任务的AI程序。
让我们探索Agno如何重塑AI代理开发的可能性。
1、Agno脱颖而出的原因是什么?
Agno是一个轻量级的开源框架,专为希望将自主代理集成到项目中但不想陷入复杂工作流的AI开发人员设计。其核心原则围绕以下几点:
- 简单性:使用Python的基本结构(如循环和条件语句)编写您的AI逻辑。无需处理复杂的链或图。
- 无与伦比的速度:Agno经过工程优化以提高性能。它的实例化速度大约是某些同类产品的10,000倍,这意味着更低的开销和内存使用。
- 模型无关性:无论您使用的是OpenAI、Groq还是其他任何模型提供商,Agno都可以无缝集成您选择的模型。
2、为什么代理?超越聊天机器人和脚本
传统AI模型遵循固定的脚本或基于提示生成文本。而代理则不同。它们是积极的问题解决者。可以将它们视为具有不同程度独立性的AI“员工”:
- 级别0:基本助手(例如回答琐事)。
- 级别1:工具使用者(例如搜索网络、分析数据)。
- 级别2:知识驱动的专家(例如引用数据库、从过去的交互中学习)。
- 级别3:团队中的专家协作完成复杂任务(例如财务分析师与研究人员配对)。
Agno使得在每个级别构建代理变得容易,无论是原型设计一个简单的助手还是部署一支AI合作者团队。
3、使用Agno构建第一个代理
3.1 一个基本的新闻报道者
从一个生成创意新闻故事的基本代理开始:
from agno.agent import Agent
from agno.models.openai import OpenAIChat
agent = Agent(
model=OpenAIChat(id="gpt-4o"),
description="你是一位热情洋溢的新闻报道者!",
markdown=True
)
agent.print_response("告诉我纽约的最新新闻。", stream=True)
此代理使用GPT-4o的知识——但它可能会产生幻觉。让我们将其与现实联系起来。
3.2 添加工具:网络搜索实时数据
为您的代理配备DuckDuckGo以获取实时信息:
from agno.agent import Agent
from agno.models.openai import OpenAIChat
from agno.tools.duckduckgo import DuckDuckGoTools
agent = Agent(
model=OpenAIChat(id="gpt-4o"),
description="你是一位热情洋溢的新闻报道者,擅长讲故事!",
tools=[DuckDuckGoTools()],
show_tool_calls=True,
markdown=True
)
agent.print_response("告诉我纽约的一条突发新闻。", stream=True)
现在,当被问及纽约新闻时,它将自主搜索网络,引用来源并综合结果。
3.3 知识库:将PDF转化为专家顾问
代理可以参考自定义数据库。例如,创建一位泰国菜专家:
from agno.agent import Agent
from agno.models.openai import OpenAIChat
from agno.embedder.openai import OpenAIEmbedder
from agno.tools.duckduckgo import DuckDuckGoTools
from agno.knowledge.pdf_url import PDFUrlKnowledgeBase
from agno.vectordb.lancedb import LanceDb, SearchType
agent = Agent(
model=OpenAIChat(id="gpt-4o"),
description="你是一位泰国菜专家!",
instructions=[
"在你的知识库中搜索泰国菜谱。",
"如果问题更适合网络搜索,请搜索网络以填补空白。",
"优先使用知识库中的信息而不是网络结果。"
],
knowledge=PDFUrlKnowledgeBase(
urls=["https://agno-public.s3.amazonaws.com/recipes/ThaiRecipes.pdf"],
vector_db=LanceDb(
uri="tmp/lancedb",
table_name="recipes",
search_type=SearchType.hybrid,
embedder=OpenAIEmbedder(id="text-embedding-3-small"),
),
),
tools=[DuckDuckGoTools()],
show_tool_calls=True,
markdown=True
)
# 在知识库加载后注释掉
if agent.knowledge is not None:
agent.knowledge.load()
agent.print_response("如何制作椰奶汤中的鸡肉和高良姜?", stream=True)
agent.print_response("泰国咖喱的历史是什么?", stream=True)
4、当一个代理不够用时:组建团队
专业化优于通用化。Agno允许您部署代理团队:
from agno.agent import Agent
from agno.models.openai import OpenAIChat
from agno.tools.duckduckgo import DuckDuckGoTools
from agno.tools.yfinance import YFinanceTools
web_agent = Agent(
name="Web Agent",
role="在网络上搜索信息",
model=OpenAIChat(id="gpt-4o"),
tools=[DuckDuckGoTools()],
instructions="始终包含来源",
show_tool_calls=True,
markdown=True,
)
finance_agent = Agent(
name="Finance Agent",
role="获取财务数据",
model=OpenAIChat(id="gpt-4o"),
tools=[YFinanceTools(stock_price=True, analyst_recommendations=True, company_info=True)],
instructions="使用表格显示数据",
show_tool_calls=True,
markdown=True,
)
agent_team = Agent(
team=[web_agent, finance_agent],
model=OpenAIChat(id="gpt-4o"),
instructions=["始终包含来源", "使用表格显示数据"],
show_tool_calls=True,
markdown=True,
)
agent_team.print_response("人工智能半导体公司的市场前景和财务表现如何?", stream=True)
询问这个团队关于“人工智能半导体公司”,他们会分工合作:一个研究市场趋势,另一个分析财务状况——然后将见解整合成一份连贯的报告。
5、调试变得简单
Agno包含一个内置调试器,将在终端打印调试日志。在任何代理上设置debug_mode=True
或在环境中设置AGNO_DEBUG=true
。Agno的调试模式揭示了:
- 系统提示
- 工具调用
- 内部推理
from agno.agent import Agent
agent = Agent(markdown=True, debug_mode=True)
agent.print_response("分享两个句子的恐怖故事")
6、结束语
Agno不仅仅是一个AI库——它是一种变革者。它结合了多模态能力、自主工具使用和团队协作,使开发人员能够创建不仅响应问题而且积极解决复杂问题的AI系统。
原文链接:Agno: Building Multimodal AI Agents
汇智网翻译整理,转载请标明出处