从基础到进阶:5 个难度级别入门Agent,附完整代码实现

164 阅读7分钟

本文章将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系统,每个级别只有在底层架构合理的情况下才能增加价值。

大多数失败并非源于缺少最新的框架,而是源于忽视了基础:清晰的边界、可靠的推理、有效的记忆,以及知道何时该让人类接手。

如果你从简单开始,有目的地逐步构建,不预先过度复杂化,只在解决实际问题时才增加复杂性,那么你构建的不仅是酷炫的东西——更是能真正发挥作用的东西。

原文地址: