如何把 agno 的 Agent、Team 与 Workflow 存进数据库并加载回来复用?

发布时间:2026/11/1 15:01:11

如何把 agno 的 Agent、Team 与 Workflow 存进数据库并加载回来复用? 如何把 agno 的 Agent、Team 与 Workflow 存进数据库并加载回来复用【免费下载链接】agnoBuild, run, and manage agent platforms.项目地址: https://gitcode.com/GitHub_Trending/ag/agno在 agno 中Agent、Team 和 Workflow 都是 Python 对象默认只存在于代码里。如果你想把它们的配置持久化、版本化并在另一个进程或另一台机器上原样加载回来运行agno 的 Agent-as-Config 特性支持把它们存进 PostgreSQL 或 SQLite再通过 ID 加载回带完整功能的对象。本文按 cookbook 中93_components目录的示例走一遍「保存 → 加载 → 验证 → 删除」的完整路径并覆盖加载含工具/自定义函数/Pydantic Schema 的组件时必需的 Registry。适用前提Python 环境中已安装 agno有一个可用的数据库PostgreSQL推荐用于生产或 SQLite仅限开发示例中使用的是 OpenAI 模型加载回来的组件会实际调用模型运行。准备数据库cookbook 提供的脚本cookbook/scripts/run_pgvector.sh用 Docker 启动一个 PostgreSQL 容器。执行它前需要本地装有 Docker副作用是启动一个名为pgvector的常驻容器占用宿主机 5532 端口并创建名为pgvolume的数据卷数据落在该卷内。./cookbook/scripts/run_pgvector.sh脚本内容就是这一条docker run命令关键参数数据库名ai、用户名ai、密码ai端口映射5532:5432镜像agnohq/pgvector:18。对应的连接字符串在后续所有代码中统一使用from agno.db.postgres import PostgresDb db PostgresDb(db_urlpostgresqlpsycopg://ai:ailocalhost:5532/ai)开发阶段也可以用 SQLite 代替不需要起容器from agno.db.sqlite import SqliteDb db SqliteDb(db_urlsqlite:///agents.db)保存 Agent 并加载回来保存的完整示例见 save_agent.py。核心是创建 Agent 时通过db参数绑定数据库然后调用agent.save()返回新版本号from agno.agent.agent import Agent from agno.db.postgres import PostgresDb from agno.models.openai import OpenAIChat db PostgresDb(db_urlpostgresqlpsycopg://ai:ailocalhost:5532/ai) agent Agent( idagno-agent, modelOpenAIChat(idgpt-5-mini), nameAgno Agent, dbdb, ) version agent.save() print(fSaved agent as version {version})按文档示例首次运行会打印形如Saved agent as version 1的输出具体版本号取决于保存次数不要把它当成固定值。加载侧示例见 get_agent.py。用get_agent_by_id按 ID 取回取到就直接运行验证方式是看它是否真的能回答from agno.agent.agent import get_agent_by_id, get_agents # noqa: F401 from agno.db.postgres import PostgresDb db PostgresDb(db_urlpostgresqlpsycopg://ai:ailocalhost:5532/ai) agent get_agent_by_id(dbdb, idagno-agent) if agent: agent.print_response(How many people live in Canada?) else: print(Agent not found)结果判断很直接ID 存在且未被硬删除时Agent 会输出对问题的回答ID 不存在时打印Agent not found。get_agents(dbdb)可以列出数据库中全部 Agent用来核对保存是否落库。保存 Team成员 Agent 作为关联组件一起入库Team 保存时会把成员 Agent 作为 linked components 一并存下。示例见 save_team.pyfrom agno.agent import Agent from agno.db.postgres import PostgresDb from agno.models.openai import OpenAIChat from agno.team import Team db PostgresDb(db_urlpostgresqlpsycopg://ai:ailocalhost:5532/ai) researcher Agent( idresearcher-agent, nameResearcher, modelOpenAIChat(idgpt-5.6-luna), roleResearch and gather information, ) writer Agent( idwriter-agent, nameWriter, modelOpenAIChat(idgpt-5.6-luna), roleWrite content based on research, ) content_team Team( idcontent-team, nameContent Creation Team, modelOpenAIChat(idgpt-5.6-luna), members[researcher, writer], descriptionA team that researches and creates content, dbdb, ) version content_team.save() print(fSaved team as version {version})加载侧见 get_team.py。加载回来的 Team 保留了委派能力可以直接print_response它会把任务分派给成员from agno.db.postgres import PostgresDb from agno.team.team import get_team_by_id, get_teams # noqa: F401 db PostgresDb(db_urlpostgresqlpsycopg://ai:ailocalhost:5532/ai) team get_team_by_id(dbdb, idcontent-team) if team: team.print_response(Write about the history of the internet., streamTrue) else: print(Team not found)验证方式与 Agent 相同流式输出最终回答说明成员链恢复成功ID 不存在则打印Team not found。保存 Workflow步骤与执行者以链接形式入库Workflow 保存时每个 Step 会记录链接到执行它的 Agent/Team。示例见 save_workflow.pyfrom agno.agent import Agent from agno.db.postgres import PostgresDb from agno.models.openai import OpenAIChat from agno.workflow.step import Step from agno.workflow.workflow import Workflow db_url postgresqlpsycopg://ai:ailocalhost:5532/ai db PostgresDb(db_urldb_url) hackernews_agent Agent( idhackernews-agent, nameHackernews Agent, modelOpenAIChat(idgpt-5.6-luna), roleExtract key insights and content from Hackernews posts, ) web_agent Agent( idweb-agent, nameWeb Agent, modelOpenAIChat(idgpt-5.6-luna), roleSearch the web for the latest news and trends, ) research_step Step(nameResearch Step, agenthackernews_agent) content_planning_step Step(nameContent Planning Step, agentweb_agent) content_creation_workflow Workflow( idcontent-creation-workflow, nameContent Creation Workflow, descriptionAutomated content creation from blog posts to social media, dbdb, steps[research_step, content_planning_step], ) version content_creation_workflow.save(dbdb) print(fSaved workflow as version {version})加载侧见 get_workflow.pyfrom agno.db.postgres import PostgresDb from agno.workflow.workflow import get_workflow_by_id, get_workflows # noqa: F401 db PostgresDb(db_urlpostgresqlpsycopg://ai:ailocalhost:5532/ai) workflow get_workflow_by_id(dbdb, idcontent-creation-workflow) if workflow: workflow.print_response(inputAI trends in 2024, markdownTrue) else: print(Workflow not found)加载回来后按步骤顺序执行各 Step输出为 MarkdownID 不存在则打印Workflow not found。核对、删除与版本三类组件的列表与删除操作是同一套模式# 列出所有已保存的组件核对保存结果 from agno.agent.agent import get_agents from agno.team.team import get_teams from agno.workflow.workflow import get_workflows agents get_agents(dbdb) teams get_teams(dbdb) workflows get_workflows(dbdb)删除分软删和硬删两种默认是软删# 软删除标记为已删除记录仍留在数据库 agent.delete() # 硬删除从数据库永久移除不可恢复 agent.delete(hard_deleteTrue)使用hard_deleteTrue前确认不需要这条配置——它是永久删除。版本规则每次调用save()都会为该组件创建一个新版本。README 中给出的示例是首次保存得到 version 1修改instructions后再保存得到 version 2。需要说明的是按指定版本加载get_agent_by_id(..., version1)在文档中标注为 coming soon当前只能加载最新版本。加载含工具、自定义函数或 Schema 的组件Registry序列化时有些组件无法写成 JSON工具Toolkit/Function、自定义函数、Pydantic Schema 只保存名称完整对象需要加载时通过Registry还原。对照表如下来自 README组件是否序列化如何还原Agent ID、name、description是-Model 配置是-Instructions、prompts是-ToolsToolkit、Function仅名称通过 Registry 还原完整可调用对象自定义函数仅名称通过 Registry 还原完整可调用对象Pydantic Schema仅名称通过 Registry 还原完整类完整示例见 registry.pyfrom agno.agent.agent import Agent, get_agent_by_id from agno.db.postgres import PostgresDb from agno.models.openai import OpenAIChat from agno.registry import Registry from agno.tools.duckduckgo import DuckDuckGoTools from pydantic import BaseModel db PostgresDb(db_urlpostgresqlpsycopg://ai:ailocalhost:5532/ai) class BasicOutputSchema(BaseModel): message: str def sample_tool(): return Hello, world! registry Registry( nameAgno Registry, descriptionRegistry for Agno, tools[DuckDuckGoTools(), sample_tool], models[OpenAIChat(idgpt-5-mini)], dbs[db], schemas[BasicOutputSchema], )加载时把 Registry 传给get_agent_by_id工具与 Schema 即被还原成可用对象agent get_agent_by_id(dbdb, idregistry-agent, registryregistry) agent.print_response(Call the sample tool)验证方式是让加载回来的 Agent 实际调用 Registry 里注册的工具示例中打印Hello, world!即为文档演示的期望行为。可选分支AgentOS 自动收集 Registry如果组件是挂在一个AgentOS上运行的不必手动声明 Registry构造AgentOS时会递归遍历传入的每个 agent、team、workflow包括嵌套 team 和所有 workflow step 类型如Condition的 else 分支、Router的 choices自动把其引用的 models、tools、databases、vector databases 收集进 registry去重按 id/name手动传入 Registry 的组件会保留、发现到的组件只合并不重复。可参考 auto_populate_registry.py离线检查与 auto_populate_registry_os.py通过GET /registry查看服务中的组件。执行顺序与已知限制cookbook 推荐的运行顺序见 93_components/README.md./cookbook/scripts/run_pgvector.sh # 先跑保存 python cookbook/93_components/save_agent.py python cookbook/93_components/save_team.py python cookbook/93_components/save_workflow.py # 再跑加载 python cookbook/93_components/get_agent.py python cookbook/93_components/get_team.py python cookbook/93_components/get_workflow.py # Registry 示例 python cookbook/93_components/registry.py需要注意的边界SQLite 定位是开发用README 明确建议生产用 PostgreSQL每次save()生成新版本但按版本加载尚未提供coming soonget_*_by_id拿到的是当前版本delete()默认软删除hard_deleteTrue为永久删除使用前确认工具、自定义函数、Pydantic Schema 不随序列化保存跨进程/跨机器复用时必须在加载端提供包含这些对象的 Registry否则无法还原完整功能。【免费下载链接】agnoBuild, run, and manage agent platforms.项目地址: https://gitcode.com/GitHub_Trending/ag/agno创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/11/1 17:55:41

802.11n波束成形Simulink仿真解析:从SVD到CSI反馈

简介:针对802.11n WLAN物理层基带处理的一份Simulink仿真模型,面向通信工程专业学生、无线算法研究人员以及需要评估MIMO系统性能的工程人员。模型涵盖多种传输速率配置,包含空间复用、空间分集与波束成形(beamforming&#xff09…

2026/11/1 20:18:38

若依(RuoYi)App版开发框架解析与实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/25 4:23:39

Python数据分析实战:从环境搭建到电商项目全流程解析

你有没有过这种经历:领导甩给你一份几十万行的Excel,让你两小时内说清楚“哪个区域的销售额在掉、哪个品类在涨、有没有明显的季节性规律”。打开文件的第一眼,电脑先卡三秒,筛选一次转半天,透视表拉完还得手动写结论。…

2026/11/2 3:14:56

STM32F103C8T6+L298N双直流电机正反转按键控制与避坑

简介:这份PDF文档面向STM32初学者与嵌入式课程实践者,围绕STM32F103C8T6通过L298N双H桥驱动两个直流电机实现正转、反转与停止展开,可用于单片机GPIO控制、按键输入与电机驱动入门实验。文档内含硬件连接说明与完整C代码,讲解L298…

2026/11/2 3:14:56

RK3588 NPU部署YOLOv5s实战:5条FAQ避坑指南

1. 为什么我坚持把 YOLOv5s 塞进 RK3588 的 NPU 里第一次在 RK3588 上跑 YOLOv5s 的时候,我天真地以为把 PyTorch 权重转成 ONNX,再丢给 RKNN-Toolkit2 走一遍就完事了。结果模型是跑起来了,帧率却只有个位数,CPU 占用直接拉满&am…

2026/11/2 3:14:56

BaiduPCS-Go命令行工具实战:批量下载与断点续传技巧

1. 从一条命令行说起:这个工具到底在解决什么问题第一次接触 BaiduPCS-Go 是在一个需要批量整理云端资料的项目里。当时手头有几十个文件夹、上千个文件散落在网盘里,用网页端一个个点下载,进度条卡顿、断线重连、大文件限速,折腾…

2026/11/2 3:14:56

AI助力科研图表:从数据到出版级可视化的智能解决方案

1. 学术图表可视化现状与痛点分析在科研论文写作中,数据可视化质量往往决定着研究成果的呈现效果。根据Nature Human Behaviour期刊的统计,约83%的审稿人会首先关注论文中的图表内容。然而当前学术图表制作存在三大典型问题:技术门槛高&#…

2026/11/2 3:14:56

BaiduPCS-Go 命令行网盘工具:参数调优与避坑实战笔记

命令行网盘工具的学习曲线,往往卡在“能登录但传不动”“能列目录但下载龟速”“多账号切换就乱套”这几个坎上。BaiduPCS-Go 这个项目我断断续续用了挺长时间,从最早只会敲login和download两条命令,到后来把配置文件、并发参数、分片策略、断…

2026/11/2 3:09:55

2026网络安全学习路线:从零基础到红队专家

1. 网络安全学习路线全景图2026年的网络安全领域正在经历前所未有的变革。随着AI技术的渗透和攻击手段的升级,传统的学习路径已经无法满足当前行业需求。这套学习路线经过3年实战检验,成功培养出37名护网行动红队成员和19家企业的安全负责人。网络安全工…

2026/11/1 0:01:26

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/1 1:01:33

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/2 1:04:04

工业级SPI隔离设计:硬件抗扰与信号完整性实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/2 1:04:04

PLFM_RADAR:主动探测数据通道,构建低误报的数据感知系统

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/2 1:04:04

工业SPI隔离设计:MAX14431与STM32F746硬件抗干扰实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/1 0:01:26

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/1 1:01:33

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑