ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

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

如何把 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),仅供参考
返回列表