OmniAgent开发者指南:如何为Agent编写自定义工具与扩展,从Tool基类到Manifest插件
OmniAgent开发者指南如何为Agent编写自定义工具与扩展从Tool基类到Manifest插件【免费下载链接】OmniAgentAn agent capable of self-evolving and dynamically hardening security项目地址: https://gitcode.com/gh_mirrors/om/OmniAgentOmniAgent是一个开源自进化 Agent 框架让 Agent 随交互持续进化、让安全随使用动态加固。本指南面向新手开发者带你从零开始为 OmniAgent 编写自定义工具Tool与插件扩展Extension先理解Tool基类与ToolResult的返回契约再掌握ToolRegistry注册机制最后学会用plugin.yamlManifest 打包完整插件通过事件订阅与工具钩子深度嵌入 Agent 生命周期。一、先认识工具系统Tool基类与ToolResultOmniAgent 的所有能力读文件、跑命令、搜网页都以工具为单位挂载到 Agent 上。工具系统的入口在 omniagent/tools/base.py核心只有两个概念概念作用关键点Tool抽象基类定义工具的统一接口必须实现execute()与_get_parameters_schema()ToolResult数据类承载执行结果包含success、output、error、metadata四个字段ToolRegistry注册表管理所有已注册工具通过register()/get()/get_schemas()操作只需三步就能写一个合法工具继承Tool在构造函数中调用super().__init__(name..., description...)description会直接展示给 LLM请写清楚什么时候该用这个工具实现execute(params) - ToolResultparams是 LLM 按 Schema 传来的参数字典返回ToolResult(successTrue, output...)即可出错时返回successFalse并带上error信息实现_get_parameters_schema()返回 OpenAI function calling 格式的 JSON Schema例如{type: object, properties: {...}, required: [...]}。一个真实的参照物是内置的 Bash 工具 omniagent/tools/bash_tool.py它的参数 Schema 声明了command必填、timeout、background三个参数执行前还会做危险命令拦截——这是写工具时值得借鉴的安全习惯。新手提示get_schema()方法会自动把name、description、parameters组装成 LLM 可识别的格式你不需要手写 JSON 字符串。二、注册工具ToolRegistry与Agent内置注册工具写好之后需要挂到 Agent 上才能被调用。ToolRegistry提供四个方法见 tools/base.pyregister(tool)按工具名注册同名会覆盖get(name)按名查找list_tools()/get_schemas()列出全部工具及其 Schema供 LLM 调用时使用。在 Agent 启动时OmniAgent 会批量注册一批内置工具注册点集中在 omniagent/agents/reflexion.pyself.registry.register(BashTool(work_dirself.work_dir, allow_dangerousFalse)) self.registry.register(ReadTool(work_dirself.work_dir)) self.registry.register(WebFetchTool())你也可以看到 Agent 暴露了register_tool()方法reflexion.py它就是对registry.register()的轻量封装——扩展系统注册的自定义工具正是走这条通道。三、扩展插件Extension基类与ExtensionAPI当需求不只是多一个工具而是想监听事件、拦截工具调用、读取配置时就该用扩展Extension了。基类在 omniagent/extensions/base.py生命周期只有两个方法方法时机用途on_load(api)扩展被加载时注册工具、订阅事件、添加钩子on_unload()扩展被卸载时清理资源加载时框架会注入一个ExtensionAPIbase.py它给了你五把钥匙api.register_tool(tool)把自定义工具挂进ToolRegistryapi.subscribe(event_type, handler)订阅 Agent 生命周期事件api.add_before_tool_hook(hook)在工具执行前拦截可阻止执行api.add_after_tool_hook(hook)在工具执行后改写结果api.config/api.work_dir读取全局配置与工作目录。3.1 事件系统订阅Agent生命周期事件类型定义在 omniagent/agents/events.py覆盖四个粒度层级层级事件典型用途Agent 生命周期agent_start/agent_end会话统计、埋点Turn 生命周期turn_start/turn_end单轮耗时监控消息生命周期message_start/update/end流式 UI 联动工具生命周期tool_execution_start/end工具审计日志此外还有压缩compaction_*与审批approval_requested/resolved事件。EventBus的 handler 以asyncio.gather并发执行单个 handler 抛异常不会影响其他订阅者——写扩展时可以放心使用。3.2 工具钩子拦截与改写执行钩子机制在 omniagent/agents/hooks.pybefore 钩子返回ToolHookResult(blockedTrue, block_reason...)即可短路执行任何钩子拦截都会立即终止见 hooks.py 的run_beforeafter 钩子通过override_content替换最终结果文本适合脱敏、审计标记。这为企业级安全管控类插件提供了标准挂载点。四、Manifest插件用plugin.yaml打包你的扩展有了扩展类最后一步是让它被自动发现。加载器ExtensionLoader定义在 omniagent/extensions/init.py它扫描扩展目录默认~/.omniagent/extensions/下的两个模式4.1 标准模式plugin.yaml Manifestmy_plugin/ ├── plugin.yaml # 清单文件 └── my_plugin.py # 扩展模块Manifest 的解析逻辑在 omniagent/extensions/manifest.py字段非常少字段必填说明name否缺省时取目录名version否默认0.1.0module否入口模块文件名缺省等于nameclass否扩展类名缺省为Extensiondescription否插件描述加载器会按 Manifest 动态import对应模块实例化指定的Extension子类并调用on_load(api)。加载失败只记录警告、不会拖垮整个 Agent见init.py。4.2 简写模式extension.py如果目录里没有plugin.yaml只要存在extension.py加载器会自动扫描其中第一个Extension子类并加载_load_direct_extension。写小插件时这一模式最省事。五、最佳实践清单写好 description它是 LLM 判断该不该调用你的工具的唯一依据写清场景与边界。永远优雅地失败捕获异常并返回successFalse的ToolResult让 Reflexion 反思层有机会自我修复而不是把 traceback 抛给 Agent 主循环。Schema 保持精简必填参数放进required可选参数给default避免 LLM 因参数臆测而调用失败。高危操作内置拦截参考 bash_tool.py 的危险命令黑名单在execute()内先自检再依赖外层四层安全扫描兜底。卸载时清理在on_unload()中释放连接、取消订阅避免插件热更新时资源泄漏。小结从Tool基类到ToolRegistry再到Extensionplugin.yamlManifestOmniAgent 的扩展体系可以概括为一条链路工具是原子能力注册表让 Agent 看见它扩展让它在正确的事件点被安全地触发。掌握 tools/base.py 的接口契约与 extensions/manifest.py 的清单格式你就可以开始为这个自进化 Agent 贡献第一个自定义插件了。【免费下载链接】OmniAgentAn agent capable of self-evolving and dynamically hardening security项目地址: https://gitcode.com/gh_mirrors/om/OmniAgent创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

MacBook本地跑33B视频生成模型:h3.c封装ComfyUI完整工程实践

MacBook本地跑33B视频生成模型:h3.c封装ComfyUI完整工程实践

上个月我干了一件有点疯狂的事:把 antirez 那份手写的 h3.c 推理代码,封装成了一个 ComfyUI 自定义节点,然后在 MacBook 上把一个 33B 参数级别的视频生成模型跑了起来。先说结论:这台机器没有大显存显卡,也没有任何云…

2026/10/2 21:38:47 阅读更多 →
OpenAPI 自动生成 DeepSeek 工具,解决函数调用 JSON 手写难题

OpenAPI 自动生成 DeepSeek 工具,解决函数调用 JSON 手写难题

这些年接过的后端服务越来越多,手头维护的 REST API 随便一数就是几十个,每次要接大模型 Function Calling 的时候,最头疼的就是“写 Tools”。一个接口一个接口地手写 JSON Schema,描述参数、写含义、想 example,写完…

2026/10/2 21:38:47 阅读更多 →
为什么Amicro的动画如此丝滑?揭秘5组Spring物理预设(snappy/bouncy/smooth/gentle/stiff)

为什么Amicro的动画如此丝滑?揭秘5组Spring物理预设(snappy/bouncy/smooth/gentle/stiff)

为什么Amicro的动画如此丝滑?揭秘5组Spring物理预设(snappy/bouncy/smooth/gentle/stiff) 【免费下载链接】Amicro--Micro-transitions- 项目地址: https://gitcode.com/gh_mirrors/am/Amicro--Micro-transitions- Amicro&#xff08…

2026/10/2 21:38:47 阅读更多 →

最新新闻

本地AI学习软件搭建指南:Ollama与开源大模型实践

本地AI学习软件搭建指南:Ollama与开源大模型实践

1. 为什么我要自己动手做一个本地 AI 学习软件 1.1 从“云端对话”到“本地运行”的动机转变 最开始用各类在线 AI 对话工具的时候,确实觉得方便,打开网页就能问问题。但用久了问题就冒出来了:网络一断就没法用,有些专业问题涉及…

2026/10/2 22:22:35 阅读更多 →
数字孪生落地实战:L2/L3混合建模与IoT数据闭环指南

数字孪生落地实战:L2/L3混合建模与IoT数据闭环指南

简介:本资源是一份面向工业数字化转型从业者、智能制造工程师及高校师生的数字孪生技术应用课件,聚焦物联网与5G赋能下的智慧工厂落地实践。PPTX文件共1个,大小145.29MB,内容结构完整,涵盖数字孪生技术原理&#xff08…

2026/10/2 22:22:35 阅读更多 →
霍尔式流量计信号处理与流量算法全解析

霍尔式流量计信号处理与流量算法全解析

1. 从一块磁铁讲起:霍尔式流量计的信号源头做流量测量这行的朋友应该都清楚,市面上流量计种类多到让人眼花缭乱——电磁、超声波、涡街、差压、转子,各有各的主场。但有一个品类,结构简单、响应快、功耗极低、成本控制得非常好&am…

2026/10/2 22:22:35 阅读更多 →
Jetson AGX Orin上使用llama.cpp部署大模型:从编译到服务化全指南

Jetson AGX Orin上使用llama.cpp部署大模型:从编译到服务化全指南

前几天我带着一台Jetson AGX Orin去客户现场做演示,到了才发现会场网络状况一塌糊涂,云端大模型接口的延迟高到没法看,整个demo差点翻车。还好我提前在设备上用llama.cpp部署了7B的Qwen模型,断网状态下现场问答流畅到让客户以为我…

2026/10/2 22:22:35 阅读更多 →
OpenRig落地实践:钻井现场数据接入与协议解析全攻略

OpenRig落地实践:钻井现场数据接入与协议解析全攻略

上个月在井场做数字化改造,甲方工程师从抽屉里翻出三根串口线,型号都对不上,最后靠手机拍屏把数据填进Excel。这种场面我见过太多次了,也是我后来坚持用OpenRig这类开源设备接入框架的原因。OpenRig不是一个包治百病的商业平台&am…

2026/10/2 22:22:35 阅读更多 →
基于Hadoop的学情分析系统设计与实现:从数仓分层到可视化

基于Hadoop的学情分析系统设计与实现:从数仓分层到可视化

1. 为什么选"学情分析"作为大数据毕业设计题目每年毕业季我都会收到不少私信,问的大多是"大数据方向的毕业设计到底做什么好"。我的答案一直很明确:别去碰那些纯业务管理系统,也别做那种跑个爬虫抓点数据画几张图就完事的…

2026/10/2 22:21:34 阅读更多 →

日新闻

从零搭建AI工程化:模型之外的完整闭环

从零搭建AI工程化:模型之外的完整闭环

先搞清楚一件事:从零开始做 AI 工程化,难的从来不是调模型、写提示词,而是把一套原型 Demo 变成长得像是“正经系统”的东西。你手里可能已经有了能跑通的代码,也可能刚读完一些概念,但真到了要把它变成可维护、可观测…

2026/10/2 0:00:20 阅读更多 →
大模型训练显存估计与混合精度训练实战指南

大模型训练显存估计与混合精度训练实战指南

1. 大模型训练显存估计与混合精度训练详解显存不够用,几乎是每个做大模型训练的人都会撞上的第一堵墙。你可能也经历过:模型代码写完了,数据管道跑通了,满心欢喜地按下训练启动脚本,结果几秒钟后终端弹出一行红字——C…

2026/10/2 0:00:20 阅读更多 →
小样本学习数据集选型指南:27个真正可用的高质量数据集

小样本学习数据集选型指南:27个真正可用的高质量数据集

1. 小样本学习的“弹药库”:为什么你总在找数据集,却总找不到真正能用的? 小样本、数据集——这两个词最近半年在我处理的200多个AI项目咨询里,出现频率排进前三。不是模型调不好,不是代码写不对,而是卡在…

2026/10/2 0:00:20 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/10/1 19:40:48 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/10/1 19:41:40 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/10/1 20:05:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/2 10:36:31 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/2 5:26:06 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/2 6:09:11 阅读更多 →