我曾经深陷 Agent 框架复杂性的泥潭中无法自拔。花了好几周时间和 LangGraph 的状态管理死磕,又被 CrewAI 的抽象层折腾得够呛,好不容易搞出了一个能跑的多 Agent 系统,结果每次需要加个新工具或者改个工作流,它就崩给你看。压死骆驼的最后一根稻草,是一个简单的“加个网页搜索工具”的任务,硬生生演变成了一场长达三天的代码重构。我急需一种能顺着我直觉来构建 Agent 的方式——把它们当成可组合的 Python 对象,而不是什么乱糟糟的图或者死板的流水线。
就在那时,我发现了 Agno(前身是 Phi Data)。这是一个开源框架,它把 Agent 当作 Python 的一等公民来对待,并且将模型、工具、记忆和推理干净地解耦。用它重构了我的项目后,我敢说它彻底改变了我开发 Agent 的思路。接下来,我就带你看看到底该怎么用它。
痛点:我为什么换框架
我之前的配置是三个 Agent 协作完成研究任务。每个 Agent 需要不同的工具、不同的模型配置,还要共享记忆。用之前的框架,加个工具意味着要改配置文件、更新状态模式(state schemas),然后祈祷图的执行流程别出岔子。这种心智负担简直把我的生产力按在地上摩擦。
Agno 的卖点很简单:Agent 就是 Python 对象,工具就是函数,你把它们组合在一起就完事了。没有图编辑器,没有 YAML 配置,没有黑魔法。我一开始是怀疑的,但实在被逼急了,就试了试。
上手:真实的配置过程
首先,安装 Agno:
pip install agno
你还需要安装模型提供商的 SDK。我主要用 OpenAI:
pip install openai
设置你的 API key:
export OPENAI_API_KEY=sk-your-key-here
基础配置就这些。不需要 Docker 容器,不需要数据库迁移,不需要配置文件。我真的惊呆了——我之前用的那个框架,光跑个 "hello world" 都得配一个 2GB 的 Docker 环境。
构建你的第一个 Agent(真正管用的方式)
这是一个基础的网络研究 Agent:
from agno.agent import Agent
from agno.models.openai import GPT4oMini
from agno.tools.duckduckgo import DuckDuckGoTools
research_agent = Agent(
name="Research Agent",
model=GPT4oMini(id="gpt-4o-mini"),
tools=[DuckDuckGoTools()],
instructions=[
"You are a research assistant.",
"Always cite your sources with URLs.",
"Keep responses concise and factual.",
],
)
research_agent.print_response("What are the latest developments in Rust's async ecosystem?")
运行它:
python research_agent.py
我注意到的第一件事就是速度。Agno Agent 的启动时间是毫秒级的,而不是秒级。这个框架非常轻量——它不会去加载一堆你根本用不到的抽象。我之前的框架光初始化一个 Agent 就要 8-12 秒,而 Agno 不到 1 秒就能跑起来。
添加工具:Agno 大放异彩的地方
就是这里让我彻底爱上了它。添加自定义工具其实就是写个 Python 函数:
from agno.agent import Agent
from agno.models.openai import GPT4oMini
from agno.tools import tool
@tool
def calculate_moving_average(prices: list[float], window: int) -> float:
"""Calculate the simple moving average for a list of prices.
Args:
prices: List of price values
window: Number of periods for the moving average
"""
if len(prices) < window:
return sum(prices) / len(prices)
relevant = prices[-window:]
return sum(relevant) / window
finance_agent = Agent(
name="Finance Agent",
model=GPT4oMini(id="gpt-4o-mini"),
tools=[calculate_moving_average],
instructions=["You are a financial analysis assistant."],
)
finance_agent.print_response(
"Calculate the 3-day moving average for prices [45.20, 46.10, 44.80, 47.30, 48.50]"
)
不需要装饰器注册,不需要定义模式(schema),不需要单独写工具描述文件。函数的 docstring 直接变成了工具描述,类型提示(type hints)直接变成了参数模式。就这么简单。我第一次试的时候,一直在等那个“现在请配置工具清单”的步骤——结果根本没这步。
Agno 还自带了一个超大的预构建工具库。下面这几个是我经常用的:
from agno.tools.duckduckgo import DuckDuckGoTools
from agno.tools.yfinance import YFinanceTools
from agno.tools.file import FileTools
from agno.tools.python import PythonTools
from agno.tools.sql import SQLTools
多 Agent 团队:真正的考验
我的实际需求是多个 Agent 协同工作。这是我重建研究系统的方式:
from agno.agent import Agent
from agno.models.openai import GPT4oMini, GPT4o
from agno.tools.duckduckgo import DuckDuckGoTools
from agno.tools.python import PythonTools
from agno.team import Team
# 专家 Agent
researcher = Agent(
name="Researcher",
role="Find and gather information",
model=GPT4oMini(id="gpt-4o-mini"),
tools=[DuckDuckGoTools()],
instructions=["Focus on finding accurate, recent information."],
)
analyst = Agent(
name="Analyst",
role="Analyze and synthesize findings",
model=GPT4o(id="gpt-4o"),
tools=[PythonTools()],
instructions=[
"Analyze the data provided by the researcher.",
"Create visualizations when helpful.",
"Draw evidence-based conclusions.",
],
)
# 团队协调者
research_team = Team(
name="Research Team",
mode="coordinate", # Agent 在协调者领导下协同工作
members=[researcher, analyst],
)
research_team.print_response(
"Research the current state of WebAssembly adoption and analyze the trends."
)
mode 参数控制 Agent 之间如何交互。coordinate 模式是指由一个主 Agent 来分配任务;route 模式是团队为每个查询挑选最合适的 Agent;collaborate 模式则是 Agent 并行工作然后合并结果。
我踩过的坑: 我一开始所有东西都用 mode="collaborate",以为并行执行总是更好的。结果发现,对于有先后顺序的任务(先研究,再分析),coordinate 模式靠谱得多。并行模式下,有时候研究员还没找到资料,分析师就已经在那瞎分析了。
记忆:让 Agent 拥有记忆
默认情况下,Agent 是无状态的。添加记忆非常简单直接:
from agno.agent import Agent
from agno.models.openai import GPT4oMini
from agno.memory.v2.memory import Memory
from agno.storage.sqlite import SqliteStorage
# 持久化存储
storage = SqliteStorage(table_name="agent_sessions", db_file="agents.db")
# 带存储的记忆
memory = Memory()
agent = Agent(
name="Assistant",
model=GPT4oMini(id="gpt-4o-mini"),
memory=memory,
storage=storage,
add_history_to_messages=True,
num_history_responses=5,
)
# 第一次对话
agent.print_response("My name is Sarah and I work on distributed systems.")
# 第二次对话——Agent 记住了
agent.print_response("What field do I work in?")
add_history_to_messages=True 这个参数会把之前的对话轮次注入到上下文中。num_history_responses 控制注入多少轮。我一开始设了 10,但那烧 token 的速度简直飞起。对于我的使用场景,5 轮是最完美的甜点。
使用 AgentOS 部署上线
当你准备部署时,Agno 提供了 AgentOS——一个将 Agent 作为 API 提供服务并带有管理 UI 的运行时。最快的上手方式:
# 克隆启动模板
git clone https://github.com/agno-agi/agentos-docker.git agent-platform
cd agent-platform
# 阅读并按照 README 操作
# 它会配置好:API 服务器、Postgres 数据库、MCP 服务器和控制平面
docker compose up
这会为你的 Agent 提供一个 REST API、持久化存储,以及一个用于监控的 Web UI。我在 DigitalOcean 的一台云主机上大概 20 分钟就部署好了。
你也可以把这套配置丢给编程 Agent 去干。Agno 文档建议给 Claude Code 或 Cursor 这样的工具用下面这个提示词:
Help me set up my agent platform. Clone https://github.com/agno-agi/agentos-railway into a folder called agent-platform, cd in, read the README, and follow the get started guide.
它为不同平台提供了模板:agentos-aws、agentos-gcp、agentos-azure、agentos-fly、agentos-render、agentos-modal,以及用于 Kubernetes 的 agentos-helm。
来自实战的经验之谈
1. 开发时先用 GPT-4o-mini。 便宜又快。把 GPT-4o 留给生产环境或复杂的推理任务。我第一天就用 GPT-4o 跑所有东西,连测试也不放过,结果一天就烧了 40 美元的 API 费用。
2. 指令要具体。 Agno Agent 会死板地遵守指令。“Be helpful” 只会得到泛泛的回答。“Always respond in bullet points, cite sources with URLs, and flag uncertainty with [UNVERIFIED]” 才能产出稳定、有用的结果。
3. 使用 markdown=True 参数让输出更易读:
agent = Agent(
name="Writer",
model=GPT4oMini(id="gpt-4o-mini"),
markdown=True, # 将响应格式化为 markdown
)
4. 先独立测试工具。 在把自定义工具接入 Agent 之前,先把它当成普通 Python 函数测一测。我浪费了一个小时调试 Agent 的问题,结果发现是我工具的类型提示(type hints)写错了。
5. 监控 token 用量。 Agno 会记录每次运行的 token 消耗。盯紧点,尤其是在跑多 Agent 团队的时候。两个 Agent 进行长“对话”,分分钟就能吃掉几千个 token。
实话实说的局限性
Agno 并非完美无缺。文档虽然在不断完善,但依然有缺口——我有时候不得不去读源码才能搞懂某些记忆配置选项。框架的演进速度也很快,这意味着版本之间偶尔会出现破坏性更新。记得在 requirements.txt 里锁定你的版本。
内置工具很方便,但定制性有时不够。我就曾为了加限流和结果过滤,不得不去 fork 了 DuckDuckGoTools。社区的工具库在不断壮大,但跟 LangChain 比起来,规模还是差了点。
多 Agent 协作在简单的任务委派上表现很好,但遇到复杂的相互依赖就容易抓瞎。如果你需要 Agent 之间进行协商、投票,或者维护可变的共享状态,你就得自己写协调逻辑了。
最后,AgentOS 还比较新。用它来服务 Agent 和做基础监控没问题基本监控没问题,但如果你需要高级的可观测性(详细的链路追踪、自定义指标),你就得把 Langfuse 或 Phoenix 这样的工具跟它集成在一起用了。
最终评价
用了 Agno 三个月后,我用一半的代码量和四分之一的复杂度重建了我的研究平台。以前要花好几天才能建好的 Agent,现在几个小时就搞定了。这个框架不会碍手碍脚,它让你把精力集中在 Agent 到底要干什么上,而不是怎么把它们接线拼装上。
如果你受够了那些笨重的 Agent 框架,想要一种像写普通 Python 一样的开发体验,试试 Agno 吧。从小处着手——一个 Agent,一个工具——然后再逐步扩展。这种可组合的设计意味着,当你的系统规模增长时,你不会撞到南墙。