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 框架的真正价值所在。