目录

01 - Agno 是什么:5 分钟跑起你的第一个 Agent

一句话总结:装好 Agno,写 3 行代码,让大模型开口说话。


Agno 是什么

如果你用过 LangChain,你大概知道”用框架把大模型包一层”是什么感觉 – 链式调用、回调地狱、一层套一层的抽象,写个简单功能翻半天文档。

Agno 走的是另一条路。它更像是一个轻量级的 Agent 工厂:你告诉它用哪个模型、给什么指令、装什么工具,它帮你把 Agent 组装好,剩下的事情你自己说了算。没有多余的抽象,代码就是你看到的那样直白。

Agno 的架构分三层,但你现在只需要关心第一层:

层级 名字 干什么的
SDK 层 Agent / Team / Workflow 你写代码直接打交道的部分
引擎层 Execution Engine 负责调度执行,你不用管
运行时层 AgentOS 生产环境部署用的,后面再说

今天我们只碰 SDK 层里最基础的东西:Agent


安装

两个包,一条命令:

pip install agno openai

agno 是框架本体,openai 是模型提供方的 SDK。Agno 支持很多模型(Claude、Gemini、Mistral 等等),但我们这个系列统一用 OpenAI 的模型来演示,上手最快。

然后设置 API Key。如果你还没有,去 platform.openai.com 申请一个。

export OPENAI_API_KEY="sk-你的密钥"

Windows 用户用 set 代替 export,或者直接写到 .env 文件里。

搞定,可以写代码了。


第一个 Agent:3 行代码

不废话,先跑起来:

from agno.agent import Agent
from agno.models.openai import OpenAIChat

agent = Agent(model=OpenAIChat(id="gpt-4o-mini"))
agent.print_response("用一句话介绍你自己")

把这段代码保存为 hello.py,然后运行:

python hello.py

你会看到终端里打印出模型的回复,带格式的那种。就这么简单 – 创建一个 Agent,给它一个模型,然后让它回答问题。

这里的 OpenAIChat(id="gpt-4o-mini") 就是告诉 Agno 用哪个模型。gpt-4o-mini 便宜又快,拿来学习刚刚好。想用 gpt-4o 也行,把 id 换掉就完事。

print_response() 是个便捷方法,它会把模型的回复直接打印到终端,格式化好的,适合调试和交互式使用。


稍微正经一点的 Agent

光有模型还不够,一个好的 Agent 得有名字、有人设。就像你不会直接把 ChatGPT 扔给用户一样,你会告诉它”你是谁、该怎么说话”。

from agno.agent import Agent
from agno.models.openai import OpenAIChat

agent = Agent(
    name="小助手",
    model=OpenAIChat(id="gpt-4o-mini"),
    instructions="你是一个友好的中文助手,回答要简洁明了",
    markdown=True,
)
agent.print_response("Python 和 JavaScript 哪个更适合初学者?")

多了三个参数:

  • name – Agent 的名字,主要是给你自己看的,日志和调试的时候有用
  • instructions – 系统指令,也就是你给 Agent 的”人设”。这东西会塞到 system prompt 里,模型每次回答都会参考它
  • markdown=True – 让 print_response() 按 Markdown 格式渲染输出,表格、代码块这些都会好看很多

instructions 是你控制 Agent 行为最直接的手段。写得好,Agent 就听话;写得烂,Agent 就放飞自我。这个后面会专门聊。


流式输出

如果你用过 OpenAI 的 API,你肯定知道流式输出(streaming)是什么 – 模型一边生成一边往外吐字,而不是等全部生成完再一次性返回。用户体验好很多,特别是回答比较长的时候。

在 Agno 里,一个参数搞定:

from agno.agent import Agent
from agno.models.openai import OpenAIChat

agent = Agent(
    name="小助手",
    model=OpenAIChat(id="gpt-4o-mini"),
    instructions="你是一个友好的中文助手",
    markdown=True,
)
agent.print_response("给我讲一个关于程序员的笑话", stream=True)

加上 stream=True,你会看到文字一个一个蹦出来,而不是干等半天突然刷一屏。


用 run() 代替 print_response()

print_response() 适合你在终端里玩,但真正写程序的时候,你需要拿到返回值做后续处理。这时候用 run()

from agno.agent import Agent
from agno.models.openai import OpenAIChat

agent = Agent(
    model=OpenAIChat(id="gpt-4o-mini"),
    instructions="回答要简洁,不超过20个字",
)

response = agent.run("1+1等于几?")
print(response.content)

run() 返回一个 RunOutput 对象,里面有很多有用的东西,但最常用的就是 response.content – 模型回复的文本内容。

简单理一下这两个方法的区别:

方法 用途 返回值
print_response() 交互式调试,直接看结果 None(直接打印到终端)
run() 程序化调用,拿结果做后续处理 RunOutput 对象

90% 的场景你会用 run(),因为你总得对返回结果做点什么。print_response() 更多是开发调试的时候用。


完整示例:把上面的串起来

来一个稍微完整点的例子,把今天学的东西都用上:

from agno.agent import Agent
from agno.models.openai import OpenAIChat

# 创建一个有人设的 Agent
agent = Agent(
    name="代码顾问",
    model=OpenAIChat(id="gpt-4o-mini"),
    instructions=[
        "你是一个资深的编程顾问",
        "回答要简洁实用,给出具体建议",
        "如果问题太宽泛,先帮用户缩小范围",
    ],
    markdown=True,
)

# 方式1:直接打印(调试用)
print("--- 直接打印 ---")
agent.print_response("新手学 Python 应该从哪里开始?", stream=True)

# 方式2:拿到返回值(写程序用)
print("\n--- 程序化调用 ---")
response = agent.run("Python 最常用的 Web 框架是哪个?")
print(f"Agent 的回答:{response.content}")

注意 instructions 这里传了一个列表而不是字符串 – 两种写法都行。传列表的好处是每条指令更清晰,Agno 会自动帮你拼起来。


今天学了什么

回顾一下关键概念:

  • Agent 是 Agno 的核心单元,最简单的公式是:Agent = 模型 + 指令(后面还会加上工具、知识库等)
  • OpenAIChat 是模型的包装类,通过 id 参数指定具体用哪个模型
  • print_response() 直接打印结果,适合调试;run() 返回结果对象,适合写程序
  • stream=True 开启流式输出,体验更好
  • instructions 是你给 Agent 下达的系统指令,决定了它的行为风格

现在的 Agent 只能聊天,跟直接调 OpenAI API 没什么本质区别。那 Agno 的价值在哪里?答案在下一篇。


下一篇预告

02 - 给 Agent 装上工具:让它不只是聊天

光说不练假把式。下一篇我们给 Agent 接上工具(Tools),让它能搜网页、查天气、算数学题 – 从一个只会动嘴的聊天机器人,变成一个真正能干活的 Agent。这才是 Agent 框架的真正价值所在。