本文章将Agent设计分为五个实用的难度级别,每个级别都配有可运行的代码。
无论你是刚入门,还是正尝试扩展实际任务,这都能帮助你避开我踩过的坑,构建出真正能用的Agent。
这五个级别分别是:
级别1:具备工具和指令的Agent
级别2:具备知识和记忆的Agent
级别3:具备长期记忆和推理能力的Agent
级别4:多Agent团队
级别5:Agent系统
好了,让我们开始深入探讨。
级别1:具备工具和指令的Agent
这是基本设置——一个遵循指令并在循环中调用工具的大语言模型(LLM)。当人们说“Agent不过是大语言模型加上工具使用能力”时,他们指的就是这个级别(这也暴露了他们对Agent的探索深度)。
指令告诉Agent要做什么。工具让它能够采取行动——获取数据、调用API或触发工作流。虽然简单,但已经足以自动化一些任务了。
from agno.agent import Agent
from agno.models.openai import OpenAIChat
from agno.tools.duckduckgo import DuckDuckGoTools
agno_assist = Agent(
name="Agno AGI",
model=OpenAIChat(id="gpt-4.1"),
description=dedent("""\
你是"Agno AGI",一个能够使用Agno框架构建Agent的自主AIAgent。你的目标是通过提供解释、可运行的代码示例以及关键概念的可选视觉和音频解释,帮助开发者理解和使用Agno。"""),
instructions="在网上搜索关于Agno的信息。",
tools=[DuckDuckGoTools()],
add_datetime_to_instructions=True,
markdown=True,
)
agno_assist.print_response("什么是Agno?", stream=True)
级别2:具备知识和记忆的Agent
大多数任务都需要模型本身不具备的信息。你不可能把所有东西都塞进上下文里,所以Agent需要一种在运行时获取知识的方式——这就是Agent式检索增强生成(RAG)或动态少样本提示发挥作用的地方。
搜索应该是混合式的(全文+语义),而且重排序是必不可少的。总之,混合搜索+重排序是Agent式检索的最佳即插即用设置。
存储为Agent提供了记忆。大语言模型默认是无状态的;存储过去的行动、消息和观察结果能让Agent变得有状态——能够参考到目前为止发生的事情,并做出更好的决策。
... 导入语句
# 你也可以使用https://docs.agno.com/llms-full.txt获取完整文档
knowledge_base = UrlKnowledge(
urls=["https://docs.agno.com/introduction.md"],
vector_db=LanceDb(
uri="tmp/lancedb",
table_name="agno_docs",
search_type=SearchType.hybrid,
embedder=OpenAIEmbedder(id="text-embedding-3-small"),
reranker=CohereReranker(model="rerank-multilingual-v3.0"),
),
)
storage = SqliteStorage(table_name="agent_sessions", db_file="tmp/agent.db")
agno_assist = Agent(
name="Agno AGI",
model=OpenAIChat(id="gpt-4.1"),
description=...,
instructions=...,
tools=[PythonTools(), DuckDuckGoTools()],
add_datetime_to_instructions=True,
# 当向Agent提供"知识"时,Agent式RAG会默认启用。
knowledge=knowledge_base,
# 将Agent会话存储在sqlite数据库中
storage=storage,
# 将聊天历史添加到消息中
add_history_to_messages=True,
# 历史运行次数
num_history_runs=3,
markdown=True,
)
if __name__ == "__main__":
# 加载知识库,首次运行后可注释掉
# agno_assist.knowledge.load(recreate=True)
agno_assist.print_response("什么是Agno?", stream=True)
级别3:具备长期记忆和推理能力的Agent
大多数任务都需要模型不具备的信息。你无法将所有内容都塞进上下文,因此Agent需要一种在运行时获取知识的方式——这就是Agent式RAG或动态少样本提示的用武之地。
记忆能让Agent回忆起跨会话的细节——比如用户偏好、过去的行动或失败的尝试——并随着时间的推移进行调整。这实现了个性化和连续性。我们在这里只是略作探讨,但最让我兴奋的是自学习:Agent能够根据过去的经验改进自己的行为。
推理则更进一步。
它帮助Agent分解问题、做出更好的决策,并更可靠地遵循多步骤指令。这不仅仅是理解的问题——更是提高每一步成功率的关键。每个认真的Agent构建者都需要知道何时以及如何应用推理。
... 导入语句
knowledge_base = ...
memory = Memory(
# 可以使用任何模型来创建记忆
model=OpenAIChat(id="gpt-4.1"),
db=SqliteMemoryDb(table_name="user_memories", db_file="tmp/agent.db"),
delete_memories=True,
clear_memories=True,
)
storage =
agno_assist = Agent(
name="Agno AGI",
model=Claude(id="claude-3-7-sonnet-latest"),
# 用于记忆的用户
user_id="ava",
description=...,
instructions=...,
# 赋予Agent推理能力
tools=[PythonTools(), DuckDuckGoTools(),
ReasoningTools(add_instructions=True)],
...
# 将记忆存储在sqlite数据库中
memory=memory,
# 让Agent管理自己的记忆
enable_agentic_memory=True,
)
if __name__ == "__main__":
# 首次运行后可以注释掉这一行,Agent会记住
agno_assist.print_response("总是以'嗨,艾娃'开始你的消息", stream=True)
agno_assist.print_response("什么是Agno?", stream=True)
级别4:多Agent团队
Agent在专注时效率最高——专注于一个领域,拥有精简的工具集(理想情况下不超过10个)。为了处理更复杂或更广泛的任务,我们将它们组合成团队。每个Agent处理问题的一部分,共同协作覆盖更广泛的范围。
但这里有个问题:如果没有强大的推理能力,团队领导者在处理任何细微问题时都会崩溃。根据我目前所见,自主多Agent系统仍然无法可靠地工作。它们的成功率不到一半——这还不够好。
话虽如此,有些架构确实让协作变得更容易。例如,Agno支持三种执行模式——协调、路由和协作——以及内置的记忆和上下文管理。你仍然需要精心设计,但这些构建块让严肃的多Agent工作更可行。
... 导入语句
web_agent = Agent(
name="网页搜索Agent",
role="处理网页搜索请求",
model=OpenAIChat(id="gpt-4o-mini"),
tools=[DuckDuckGoTools()],
instructions="始终包含来源",
)
finance_agent = Agent(
name="金融Agent",
role="处理金融数据请求",
model=OpenAIChat(id="gpt-4o-mini"),
tools=[YFinanceTools()],
instructions=[
"你是金融数据专家。提供简洁准确的数据。",
"使用表格展示股票价格、基本面数据(市盈率、市值)",
],
)
team_leader = Team(
name="推理金融团队领导者",
mode="coordinate",
model=Claude(id="claude-3-7-sonnet-latest"),
members=[web_agent, finance_agent],
tools=[ReasoningTools(add_instructions=True)],
instructions=[
"使用表格展示数据",
"只输出最终答案,不包含其他文本。",
],
show_members_responses=True,
enable_agentic_context=True,
add_datetime_to_instructions=True,
success_criteria="团队已成功完成任务。",
)
if __name__ == "__main__":
team_leader.print_response(
"""\
分析最近美国关税对以下关键行业市场表现的影响:
- 钢铁与铝业:(X、NUE、AA)
- 科技硬件业:(AAPL、DELL、HPQ)
对于每个行业:
1. 比较关税实施前后的股票表现
2. 确定供应链中断情况和成本影响百分比
3. 分析公司的战略应对(回流、价格调整、供应商多元化)""",
stream=True,
stream_intermediate_steps=True,
show_full_reasoning=True,
)
级别5:Agent系统
这是Agent从工具转变为基础设施的阶段。Agent系统是完整的API——接收用户请求,启动异步工作流,并在结果生成时流式返回。
理论上听起来很简洁。但在实践中,这非常困难。真的非常困难。
当请求进来时,你需要持久化状态,启动后台任务,跟踪进度,并在输出生成时流式传输。WebSocket可能会有所帮助,但它们的扩展和维护都很棘手。大多数团队都低估了这里的后端复杂性。
这正是将Agent转化为真正产品所需要的。在这个级别,你不是在构建一个功能——而是在构建一个系统。
从演示失败到真正成功:Agent设计的关键经验 构建AIAgent不在于追逐 hype 或堆砌功能——而在于把基础做好。从基本的工具使用到完全异步的Agent系统,每个级别只有在底层架构合理的情况下才能增加价值。
大多数失败并非源于缺少最新的框架,而是源于忽视了基础:清晰的边界、可靠的推理、有效的记忆,以及知道何时该让人类接手。
如果你从简单开始,有目的地逐步构建,不预先过度复杂化,只在解决实际问题时才增加复杂性,那么你构建的不仅是酷炫的东西——更是能真正发挥作用的东西。
原文地址: