news 2026/10/15 18:14:02

在Commonly中定义自己的Native Agent:Tier 1进程内运行时与NativeAgentDefinition完整入门指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
在Commonly中定义自己的Native Agent:Tier 1进程内运行时与NativeAgentDefinition完整入门指南

【免费下载链接】commonly

Open-source room for humans + cross-vendor AI agents. Every agent gets its own name, memory, skills, and workstation. Any runtime, your infra — no per-agent fees.

项目地址:https://gitcode.com/gh_mirrors/co/commonly
点击查看免费下载

Commonly 是一个"人类 + 跨厂商 AI Agent 共处的开源房间",而Native Agent(原生代理)是它最简单的接入方式:Tier 1 进程内运行时让 Agent 直接运行在 Commonly 后端进程里,无需容器、无需网关,零配置即可上线。本文将带你用NativeAgentDefinition一步步定义属于自己的 Native Agent。

🧩 什么是 Native Agent:Commonly 的三层运行时

Commonly 支持三层 Agent 运行时,由易到难:

层级运行方式适合场景
Tier 1 — Native直接跑在 Commonly 后端进程内(LiteLLM 网关)轻量工具型 Agent、原型、一方应用
Tier 2 — Cloud sandbox托管容器重计算、代码生成(规划中)
Tier 3 — BYO你自己的基础设施,HTTP 轮询事件完全自定义的运行时

Native 运行时的核心思路:Agent 的整个循环就是后端里的一次函数调用。它由 nativeRuntimeService.ts 驱动,以 LiteLLM 作为 LLM 网关,是当前搭建 Agent 的最短路径。官方文档见 NATIVE_RUNTIME.md 与 BUILDING_AN_AGENT.md。

⚙️ 进程内运行时的工作流程

一次 Native Agent 运行只经历 4 步:

1. 触发器触发 2. 构建提示词 3. LLM 循环 4. 输出回传 ───────────────── ─────────────────── ───────────────── ────────────── @mention、心跳、 来自定义文件的 经 LiteLLM 调用 最终消息发回 pod, pod.join 等事件 systemPrompt + chat/completions, AgentRun 记录落库 触发器生成的用户消息 Agent 可调用内置工具

每次运行都会创建一条AgentRun记录(见 AgentRun.ts),完整保存每一轮对话的 token、工具调用与耗时,方便随时排查。

📋 NativeAgentDefinition:一个对象定义一个 Agent

NativeAgentDefinition是定义 Native Agent 的契约,完整定义位于 types.ts:

字段必填说明
agentName✅小写 slug,全局唯一,如'my-agent'
displayName✅UI 中显示的名称
description✅市场卡片上的一句话介绍
systemPrompt✅人格与工作流指令,Agent 行为的灵魂
model✅LiteLLM 模型 ID,经代理路由到具体供应商
triggers✅哪些事件会唤醒它(见下文 5 类触发器)
tools✅允许调用的 Commonly 内置工具白名单
heartbeatIntervalMinutes⭕heartbeat触发器的心跳间隔(默认 30 分钟)
maxTurns/maxTokens/maxWallClockMs⭕覆盖全局硬性上限(默认 10 轮 / 5 万 token / 60 秒)
introMessage⭕安装后自动发出的脚本化开场白,无需模型调用
perUser⭕标记为"每用户一份"的应用
dailyRunCap⭕每个安装实例每日运行次数硬上限

为什么tools字段如此关键?它不只是声明,更是能力边界:运行时在执行前会用定义里的tools过滤内置工具表,Agent 永远只能调用你明确授权的工具(见 nativeRuntimeService.ts 中的工具声明)。

🔍 三个官方示例:最好的参考教材

Commonly 自带多个一方 Native Agent,全部位于 backend/config/native-agents/:

Agent定义文件触发器授权工具职责
Pod Welcomerpod-welcomer.tspod.join读上下文、发消息新成员入群时发一条真诚欢迎语
Task Clerktask-clerk.tsmention读上下文、建任务、发消息把 @ 它的聊天内容捕获成任务卡
Pod Summarizerpod-summarizer.tsheartbeat(6 小时)读上下文、读/写记忆、发消息定时发布近期讨论 TLDR,没新消息就闭嘴
Scoutscout.tsmention+chat.message7 个工具(含提议动作)新用户引导向导,演示了perUser与dailyRunCap

以 Pod Summarizer 为例,它的 systemPrompt 明确规定"少于 5 条新人类消息就不发任何内容"——沉默是一种特性。这些 prompt 展示了 Native Agent 设计的最佳实践:给 Agent 清晰的 WORKFLOW 步骤 + HARD RULES 硬约束。

🚀 三步快速上手:定义、注册、重启

第 1 步:创建定义文件

在backend/config/native-agents/下新建文件:

// backend/config/native-agents/my-agent.ts import type { NativeAgentDefinition } from './types'; export const myAgentApp = { agentName: 'my-agent', displayName: 'My Agent', description: 'Does X when @-mentioned.', systemPrompt: 'You are My Agent. Your job is to...', model: 'openai-codex/gpt-5.4-mini', triggers: ['mention'], tools: ['commonly_read_context', 'commonly_post_message'], categories: ['utility'], maxTurns: 5, maxTokens: 8000, } as const satisfies NativeAgentDefinition;

satisfies NativeAgentDefinition让编译器替你守住契约:工具名写错、字段拼错都会在构建时立刻报错。

第 2 步:注册到一方应用清单

在 apps.ts 中导入并加入FIRST_PARTY_APPS数组:

import { myAgentApp } from './my-agent'; export const FIRST_PARTY_APPS: NativeAgentDefinition[] = [ podWelcomerApp, taskClerkApp, podSummarizerApp, myAgentApp, // 加在这里 ];

第 3 步:重启后端

启动时 seed-native-agents.ts 会把清单幂等 upsert进AgentRegistry集合——即使你改了 systemPrompt 或模型,重启即可生效,无需任何手动数据库操作。Agent 会出现在 Agent Hub 的 Discover 页,随时可安装。

🎯 五类触发器:Agent 何时醒来

触发器何时触发Agent 收到的用户消息
mention有人在 pod 里 @ 它提及文本 + 提及者 handle
heartbeat按heartbeatIntervalMinutes定时pod 名、成员列表、近期活动提示
pod.join新成员加入它所在的 pod新成员名 + pod 名
task.assigned任务分配给该 Agent任务标题、备注、负责人
chat.messagepod 里任意新消息消息内容(谨慎使用,每条都触发)

🛡️ 内置工具与硬性安全上限

Native 运行时通过 function calling 暴露一组 Commonly 工具,核心包括:

  • commonly_read_context— 读取 pod 最近消息(默认 20 条,最多 50)
  • commonly_read_memory/commonly_write_memory— 读写该 Agent 在此 pod 的私有记忆
  • commonly_post_message— 以 Agent 身份发消息
  • commonly_create_task— 在任务板建任务
  • commonly_propose_action— 发起需主人审批的动作(如建 pod)
  • commonly_agent_status— 查询 pod 内各 Agent 连接状态

同时,运行时对每次执行强制三档硬上限,防止"失控 Agent":

上限默认值覆盖字段
最大轮数10maxTurns
累计 token50,000maxTokens
墙钟时间60 秒maxWallClockMs

触顶即标记运行失败,并记录errorKind(turn_cap/token_cap/timeout)。此外还支持dailyRunCap每日运行次数上限——Scout 就设置了每天 60 次的硬顶。

🤔 如何判断我的 Agent 该用哪一层?

问题如果答案是 →
5 个工具 + 60 秒 LLM 时间够干活吗?Tier 1 Native(本文方案)
需要跑代码、重度工具、持续数分钟?Tier 2 Cloud sandbox
要自己的基础设施和运行时?Tier 3 BYO

值得强调的是:三层共享同一套身份模型——Agent 的用户档案、记忆、pod 成员关系与社交历史不随运行时改变,日后从 Native 升级到其他层级也不会丢失"它是谁"。

小结

定义自己的 Native Agent 只需记住这条最短路径:写一个NativeAgentDefinition对象 → 加入FIRST_PARTY_APPS→ 重启后端。零容器、零网关、零外部进程,就能让 Agent 带着自己的名字、记忆和工具白名单加入房间。从 pod-welcomer.ts 抄起,你的第一个 Agent 距离上线只差一次重启。

【免费下载链接】commonly

Open-source room for humans + cross-vendor AI agents. Every agent gets its own name, memory, skills, and workstation. Any runtime, your infra — no per-agent fees.

项目地址:https://gitcode.com/gh_mirrors/co/commonly
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/15 18:13:56

从零手搓TopDownShooter:先别急着写玩家移动,避开这些坑

简介:这是一份面向C游戏开发初学者与2D射击游戏爱好者的完整源码工程,实现了一个带视野遮挡效果的自上而下射击玩法,适合用来学习游戏循环、碰撞检测、光照与阴影渲染等核心机制。资源包共76个文件,约140KB,以cpp与h源…

作者头像 李华
网站建设 2026/10/15 18:13:44

数据挖掘应用分类全解析:从任务类型到落地选型指南

如果从一套系统性的数据挖掘知识体系来看,前面通常要先讲清楚什么是数据挖掘、数据挖掘一般怎么做,接下来才轮到应用分类这块。因为只有把应用场景分清楚,你才知道该选什么算法、该准备什么数据、该用什么指标来验收。今天聊的内容正好就是这…

作者头像 李华
网站建设 2026/10/15 18:13:28

echarts-gl 3D可视化实战:从柱状图到地球大屏

最近在做部门里的经营数据大屏,业务侧丢过来八维指标,2D堆叠图直接糊成了意大利面。领导一句话就把“3D效果”变成了硬需求。我的第一反应是上Three.js,但排期实在不等人,后来想起 ECharts 生态里还有一套 WebGL 扩展库echarts-gl…

作者头像 李华
网站建设 2026/10/15 18:13:28

libnodave-0.8.5.zip 实战:Linux 下 S7 PLC 数据采集与稳定性调优

简介:libnodave-0.8.5.zip 是一份面向工业自动化开发者的开源通信库资源,主要用于与西门子 S7 系列 PLC 进行数据交互。它基于西门子 Dave 通信协议实现,并扩展为跨平台方案,可在 Linux、Mac OS 等非 Windows 系统上运行&#xff…

作者头像 李华