跳转到内容

Agno Cookbook 测试与文档框架

Agno Cookbook 测试与文档框架

学习目标

本章将分析 Agno 的 Cookbook 测试和文档框架:

  • 分级目录结构与章节组织
  • TEST_LOG.md / TEST_PROMPT.md 标准化测试记录
  • 双虚拟环境隔离(开发 vs Cookbook 运行)
  • 格式化与验证脚本的 CI 集成

项目实践

分级目录结构

Agno 的 Cookbook 采用分级目录组织:

cookbook/
├── 00_quickstart/ # 快速入门(必读)
├── 01_demo/ # 演示项目
├── 02_agents/ # Agent 教程
├── 03_teams/ # Team 教程
├── 04_workflows/ # Workflow 教程
├── 05_agent_os/ # AgentOS 教程
├── 06_storage/ # 存储教程
├── 07_knowledge/ # 知识库教程
├── 08_learning/ # 学习系统教程(黄金标准)
├── 09_evals/ # 评估教程
├── 10_reasoning/ # 推理教程
├── 11_memory/ # 记忆教程
├── 12_context/ # 上下文教程
├── 90_models/ # 模型专题
├── 91_tools/ # 工具专题
├── 92_integrations/ # 集成专题
├── 93_components/ # 组件示例
└── 99_docs/ # 文档相关

编号规则

  • 00-12:核心教程,按学习顺序排列
  • 90-99:专题/参考,不按顺序学习
  • 每个章节目录包含多个 .py 示例文件

标准化测试记录

每个章节目录包含:

cookbook/08_learning/
├── 01_basics/
│ ├── 1a_user_profile_always.py
│ ├── 1b_user_profile_agentic.py
│ ├── ...
├── README.md # 章节说明
├── TEST_LOG.md # 测试结果记录
├── TEST_PROMPT.md # 测试提示模板
├── requirements.txt # 依赖
└── requirements.in # 依赖源(pip-compile)

TEST_LOG.md 格式

### 1a_user_profile_always.py
**Status:** PASS
**Description:** 测试用户画像的 always 模式,验证 Agent 能自动捕获和更新用户信息。
**Result:** 成功捕获用户姓名和偏好,数据库中有对应记录。
---

双虚拟环境隔离

Agno 使用两个独立的虚拟环境:

环境用途设置脚本
.venv/开发:测试、格式化、验证./scripts/dev_setup.sh
.venvs/demo/Cookbook 运行:所有演示依赖./scripts/demo_setup.sh

为什么隔离?

  • 开发环境只包含测试和 linting 依赖
  • Cookbook 环境包含所有模型 API 和工具集成的演示依赖
  • 避免依赖冲突(如测试框架与演示框架)

运行 Cookbook

Terminal window
# 使用 Cookbook 环境
.venvs/demo/bin/python cookbook/08_learning/01_basics/1a_user_profile_always.py
# 长时间运行的测试,实时查看输出
.venvs/demo/bin/python cookbook/08_learning/.../file.py 2>&1 | tail -100

pgvector 本地测试环境

Terminal window
# 启动本地 PostgreSQL + pgvector
./cookbook/scripts/run_pgvector.sh

提供 Docker 容器运行 pgvector,用于测试向量搜索功能。

格式化与验证脚本

Terminal window
# 格式化所有代码(ruff format)
./scripts/format.sh
# 验证所有代码(ruff check + mypy)
./scripts/validate.sh

CI 集成:两个脚本必须在 push 前通过。PR 的 GitHub Actions 自动运行验证。

CLAUDE.md 开发规范

Agno 的 CLAUDE.md 文件定义了严格的开发规范:

  • 不在循环中创建 Agent(复用)
  • 使用 output_schema 进行结构化响应
  • PostgreSQL 用于生产,SQLite 用于开发
  • 先单 Agent 后多 Agent 扩展
  • 所有公开方法需要 sync 和 async 双版本
  • 禁止在 cookbook 中使用 OpenAIChat(用 OpenAIResponses
  • 禁止使用 gpt-4ogpt-4o-mini(用 gpt-5.4

问题与规避

1. Cookbook 过时

框架更新后,Cookbook 示例可能不再工作。

规避

  • TEST_LOG.md 记录测试结果和日期
  • CI 定期运行所有 Cookbook
  • generate_requirements.sh 更新依赖锁定

2. 模型 API Key 管理

Cookbook 示例需要各种模型的 API Key。

规避

  • 使用环境变量(os.getenv("OPENAI_API_KEY")
  • .env 文件(在 .gitignore 中)
  • CI 使用 GitHub Secrets

3. 环境搭建成本

两个虚拟环境 + pgvector 容器,新贡献者需要时间搭建。

规避

  • 脚本自动化(dev_setup.sh / demo_setup.sh
  • CLAUDE.md 中的快速参考表
  • Docker Compose 一键启动

设计取舍

为什么用 Markdown 测试记录而非自动化测试框架?

优势:人类可读,包含描述性结果和观察 代价:无法自动化验证 替代方案:pytest 自动化测试——可以 CI 集成但缺少定性描述

为什么核心教程和专题分开编号?

优势:核心教程按学习顺序排列,专题按需查阅 代价:文件分散在不同目录 替代方案:扁平目录——简单但难以导航

参考来源