AI Agent 框架
在 2026 年 9 月这一批可考的开源记录中,最值得留意的现象并不是某个 agent 框架的技术细节,而是"追踪 agent 框架"本身变成了一类密集出现的项目。GitHub 侧出现了按日自动化跟踪的 ai-agent-pulse、按周刷新热度排名的 ai-agent-map、以增删提交形式维护名单的 agent-framework-radar、以日报和生态日报形式沉淀情报的 agents-radar,以及一批 awesome 高星合集;中文社区侧则有按日、按周整理的 GitHub 热榜与趋势速报。这些条目的标题里嵌着 2026-09-01、09-08、09-09、09-10、09-12、09-17、09-20、09-22、09-29 等明确日期[2][3][4][5][6][7][8][9][15],形成了本批数据中时间密度最高、最可考的一条证据链。
本文不做项目推荐排名,而是以这批追踪工具为样本,讨论两件事:agent 生态为什么正在被"榜单化",以及所谓"框架动量"到底能不能被量化、该怎样量化、又会在哪里骗人。在进入正题前,需要先交代数据边界:本批采集到的全部来源记录的热度字段均为 0、发布时间字段均为 null,这只说明字段缺失,不代表真实关注度为零;除标题内嵌日期外,本文不声称任何来源的发布日期。涉及具体数值(例如某清单条目记录的 “Pydantic AI 20.1K ★ +660”)也只作为"清单在某个未标明时点记录的数值"引用,不作为实时事实[12]。
一、当生态开始被"每日播报"
判断一个开源领域是否进入"过热前夜",有一个不太严谨但很实用的信号:讨论它的内容从"介绍某个项目"变成"介绍很多项目的排名"。本批来源正好呈现出这个转变。
先把可考日期排成一条线。2026-09-01,agent-framework-radar 产生一次 “+1 added, -1 removed” 的名单更新提交[4];09-08 是 “+2 added, -2 removed”[5];09-10 08:00 一次提交记录了 “+14 added, -14 removed”[6]。同期,ai-agent-map 在 09-09 发起周榜刷新 PR #23,标题写明"上一窗口的新进入者占据前十中三席"[2];09-17 的 PR #25 标题则写明"Trending 曝光把某项推到 #1;DeepSeek Harness 确认"[3]。agents-radar 在 09-12、09-20、09-22 连续产出趋势日报与生态日报[7][8][9]。中文社区侧,CSDN 的日榜、趋势速报覆盖 09-06、09-17、09-18、09-20、09-29,周报则覆盖 09-07 至 09-13 的第 37 周[14][15][16]。
这条时间线说明的不是"哪个框架火",而是观测行为本身的频率已经高到需要自动化。手动选型依赖阅读 README、翻 issue、看最近一次发版,当候选池在一周之内进出十几个项目时,人的时间预算会先于判断力耗尽。于是追踪工具从个人笔记变成一层公共基础设施:它们把"生态状态"压缩成若干可消费的产物——清单、日报、榜单、评分。压缩必然带来失真,这正是本文后半部分要处理的问题。
二、三层情报工具谱系:清单、雷达、评分
把本批样本按产出形态分层,可以得到一个相当清晰的谱系。三层工具回答的问题不同,盲区也不同,混用会导致误判。
| 层级 | 典型样本 | 回答的问题 | 主要盲区 |
|---|---|---|---|
| 静态清单层 | sifted-awesome-ai-agents[10]、awesome-llm-agents[11]、awesome-automated-ai[12] | 有哪些项目可看 | 不反映时间维度,无法回答"谁在变强" |
| 动态雷达层 | agent-framework-radar[4][5][6]、agents-radar[7][8][9]、github-trending[13] | 谁进谁出、今天发生了什么 | 收录与移除判定口径常是黑盒 |
| 评分榜单层 | ai-agent-pulse[1]、ai-agent-map 的 weekly heat ranking[2][3] | 谁在加速、动量如何排序 | 指标可被刷、可被外生冲击扭曲 |
静态清单层的价值在于覆盖面与稳定性。sifted-awesome-ai-agents 自我描述为自动更新的高星 agent 相关仓库合集[10];awesome-llm-agents 聚焦 LLM agent 框架[11];awesome-automated-ai 则收录 250+ 自动化 AI/ML 工具,其条目中记录了 “Pydantic AI 20.1K ★ +660” 这样的星数与增量信息[12]。清单能快速建立候选池,但它天然偏向已积累星标的存量项目,对新进入者不友好。
动态雷达层把变化本身当作产出。agent-framework-radar 的提交信息直接把名单流转写进 commit message:09-01 增删各 1 个[4]、09-08 增删各 2 个[5]、09-10 增删各 14 个[6]。agents-radar 以 Issue 形式沉淀日报与生态日报,其中 09-22 一期以 OpenClaw 生态为主题[9],09-12 与 09-20 两期为开源趋势日报[7][8]。github-trending 则定时抓取 GitHub Trending 页[13]。雷达回答了清单回答不了的"进出",但收录阈值、抓取规则、移除条件往往没有完整公开,读者看到的增删是结果,看不到规则。
评分榜单层把变化压缩成一个可排序的数。ai-agent-pulse 明确自我描述为每日自动化跟踪 19 个 AI agent 框架,并用 Pulse Score 从 star velocity、release freshness、commit activity、community health 四个维度给动量排序[1]。ai-agent-map 则以周为窗口刷新热度排名,PR #23 与 PR #25 是这种刷新机制留下的可核查痕迹[2][3]。评分层的可读性最强,也最容易被误读:一个数字背后是四个被压缩的维度,而每个维度都有自己的失真方式。
三、拆解 Pulse Score:动量的四个可量化维度
按 ai-agent-pulse 仓库自我描述,Pulse Score 由四个维度构成[1]:星标增速(star velocity)、发版新鲜度(release freshness)、提交活跃度(commit activity)、社区健康度(community health)。需要强调的是,本文只能确认这四个维度的名称与存在,具体的公式、权重、归一化方式与刷新频率应以仓库实际配置为准,下面的拆解是通用方法论,不是对该项目公式的复述。
星标增速是最直观也最容易被高估的维度。增长快说明曝光强,但不等于工程质量高。更麻烦的是"榜单自激":项目被某榜单收录,榜单本身带来流量,流量带来星标,星标又推高榜单排名,形成正反馈。当追踪工具足够多时,这个循环会显著放大头部项目的可见度,也会让"上榜"本身成为一种被刷的资产。
发版新鲜度测的是最近一次 release 距今的时间以及发版节奏。发版频繁通常是活跃信号,但也可能是版本号通胀:内容增量很小的 patch 连续发布,同样能让"最近发版"看起来很新。本批 Gitee 记录中,吴博/灵梭 spring-ai-loom-agent 在 PR 标题里先后记录了"更新版本号至 1.1.41"[17]与"更新版本号到 1.1.44"[18],可以作为"版本号推进节奏"这一现象的样本;由于缺少可考时间跨度,本文不对这两个版本间隔与发布质量作任何结论。
提交活跃度用提交次数、提交者数量等刻画工程节奏。提交数可以被拆分提交灌水,一次重构拆成二十个 commit 与二十次独立改进在计数上等价。更稳健的做法是看去重后的活跃贡献者数、提交涉及的文件面,以及是否有持续超过数月的提交曲线,而不是单看周提交总数。
社区健康度是最难量化的一维:issue 响应时间、PR 合并率与合并时延、first-time contributor 的留存、文档与示例完整度、维护者集中度(是否单点依赖)。这些指标很多需要抓取交互数据并处理机器人账号,成本远高于前三个维度,也因此常常被简化成"issue 数量"之类的易得代理变量,进而失真。
把四维合成为一个分数时,必须处理量纲与长尾问题。星标增量的分布通常是重尾的,直接线性加权会让少数暴涨项目垄断分数。常见做法是对星标类指标取对数或做分位数归一,对时间类指标做截断(例如"距上次发版 365 天"与"1000 天"在决策上没有区别),并做极值缩尾。示意性的合成逻辑如下,权重仅为占位:
# 权重仅为占位符:实际权重与归一化方式应以目标榜单仓库的配置为准WEIGHTS={"star_velocity":0.35,"release_freshness":0.25,"commit_activity":0.25,"community_health":0.15,}defmomentum_score(metrics:dict[str,float])->float:"""metrics 中各维度应先完成归一化,取值范围建议 [0, 1]。"""missing=[kforkinWEIGHTSifknotinmetrics]ifmissing:raiseValueError(f"缺少维度:{missing},请显式决定是剔除该仓库还是补零")returnsum(WEIGHTS[k]*metrics[k]forkinWEIGHTS)注意momentum_score里对缺失维度的处理:直接补零会把"没抓到数据"当成"表现很差",与本批来源heat字段全为 0 的教训完全同构——字段缺失不是零值。缺失值要么触发重试采集,要么在归一化时剔除该仓库并标注,不能静默填 0。
四、周榜刷新:榜单是怎么"洗牌"的
评分榜单通常有两种口径:按累计存量排名,和按窗口内增量排名。weekly heat ranking 属于后者。这个区别至关重要:窗口榜衡量的是"最近一周谁在加速",它天然有利于低基数项目和刚获得曝光的项目,而不利于稳定但增长平缓的老框架。
ai-agent-map 的两个 PR 提供了观察窗口效应的样本。2026-09-09 的 PR #23 标题记录"上一窗口的新进入者占据前十中三席"[2],这正是增量口径的典型结果:上一个窗口刚进入观察名单的项目,在下一个窗口以高增速占据前列。2026-09-17 的 PR #25 标题记录"Trending 曝光把某项推到 #1;DeepSeek Harness 确认"[3]。前者是典型的外生冲击:一次 GitHub Trending 曝光足以让排名登顶,说明榜单对单点曝光高度敏感。后者的字面含义是榜单侧对 “DeepSeek Harness” 这一名称/项目的某种确认动作,其确切含义(进入榜单、确认收录、还是确认某个排名变化)应以 PR 正文为准,仅凭标题不应理解为产品发布事件。
另一个观察窗口来自 agent-framework-radar 的名单流转:09-01 增删各 1[4]、09-08 增删各 2[5]、09-10 增删各 14[6]。单次 +14/-14 的对称增删,通常不是 28 个项目同时发生了状态变化,而更可能来自以下几类原因之一:收录规则或抓取脚本变更、名单分类口径调整、批量清理失效仓库。这些都只是可能性推断,确切成因需查仓库的规则说明与该提交的 diff。这里可以确定的是:名单边界在剧烈抖动,读者不应把"被收录/被移除"直接读作"项目变好/变坏"。
对使用周榜的读者,一个实用的检验方法是看"连续在榜周数"而非单周名次。一次 Trending 就登顶的项目,如果下个窗口大幅回落,说明其排名主要由曝光驱动;连续多个窗口稳定在榜且名次波动较小,才更接近持续动量。
五、动手:做一个最小可用的框架动量看板
理解指标的最好方式是自己算一遍。下面给出一个简化版看板骨架:输入仓库列表,采集四个原始指标,归一化后加权输出 Markdown 表格。代码刻意保留了口径注释,因为口径必须写进 README,否则自建榜单无法与他人对话。
采集层使用 GitHub REST API。端点与限额会随官方文档调整,实现时应以官方文档为准并读取/rate_limit端点确认余量;通常而言,未认证请求的额度远低于携带令牌的请求,且搜索类端点有独立的更低限额,批量抓取建议使用环境变量注入令牌并在请求间做退避。
importjsonimportosimporttimefromdatetimeimportdatetime,timedelta,timezonefrompathlibimportPathimportrequests API="https://api.github.com"HEADERS={"Accept":"application/vnd.github+json","X-GitHub-Api-Version":"2022-11-28"}ifos.environ.get("GITHUB_TOKEN"):HEADERS["Authorization"]=f"Bearer{os.environ['GITHUB_TOKEN']}"WINDOW_DAYS=7# 口径:动量窗口长度SNAPSHOT=Path("snapshots.json")defget(path:str,**params):r=requests.get(f"{API}{path}",headers=HEADERS,params=params,timeout=30)ifr.status_code==403and"rate limit"inr.text.lower():reset=int(r.headers.get("X-RateLimit-Reset",0))raiseSystemError(f"触发速率限制,reset 时间戳:{reset}")r.raise_for_status()returnr.json()defcollect(repo:str)->dict:"""采集单仓库原始指标;所有时间均使用 UTC,避免本地时区污染窗口。"""now=datetime.now(timezone.utc)since=(now-timedelta(days=WINDOW_DAYS)).isoformat()meta=get(f"/repos/{repo}")latest=get(f"/repos/{repo}/releases/latest")ifmeta.get("has_downloads")isnotNoneelse{}commits=get(f"/repos/{repo}/commits",since=since,per_page=100)contributors=get(f"/repos/{repo}/contributors",per_page=100,anon="false")last_release=latest.get("published_at")release_age=Noneiflast_release:dt=datetime.fromisoformat(last_release.replace("Z","+00:00"))release_age=(now-dt).daysreturn{"repo":repo,"stars":meta["stargazers_count"],"release_age_days":release_age,# None 表示无 release,而非 0"commits_7d":len(commits),"contributors_top":len(contributors),"open_issues":meta["open_issues_count"],}上面的collect有几个刻意的设计点值得说明。第一,release_age_days在项目从未发 release 时返回None而不是 0,避免把"没有发版"当成"刚发版"。第二,提交采集用since参数限定窗口,而不是事后按提交时间过滤,可以减少分页压力。第三,贡献者端点返回的是历史累计榜,用len(contributors)代表"贡献者总数"而非"窗口内活跃贡献者";若要严格口径,需要改为统计窗口内有提交的去重作者。第四,/stats/contributors之类的统计端点在数据未就绪时会返回 202 而非 JSON,生产实现必须处理这种情况,这里为简洁改用更稳定的端点。
归一化与输出层可以这样组织:
defnormalize(values:list[float],invert:bool=False,log:bool=False)->list[float]:importmath xs=[math.log1p(v)forvinvalues]iflogelse[float(v)forvinvalues]lo,hi=min(xs),max(xs)ifhi==lo:return[0.5]*len(xs)out=[(x-lo)/(hi-lo)forxinxs]return[1-yforyinout]ifinvertelseoutdefrender(rows:list[dict])->str:"""rows 含 collect() 结果;star 增量需与上一日快照做差,而不是读当前 star 总数。"""stars=normalize([r["star_delta_7d"]forrinrows],log=True)fresh=normalize([r["release_age_days"]or365forrinrows],invert=True)commit=normalize([r["commits_7d"]forrinrows])comm=normalize([r["contributors_top"]forrinrows])lines=["| 框架 | star 周增量 | 最近发版距今天数 | 周提交数 | 贡献者数 | 综合分 |","|---|---|---|---|---|---|"]fori,rinenumerate(rows):score=momentum_score({"star_velocity":stars[i],"release_freshness":fresh[i],"commit_activity":commit[i],"community_health":comm[i],})lines.append(f"|{r['repo']}|{r['star_delta_7d']}| "f"{r['release_age_days']ifr['release_age_days']isnotNoneelse'无 release'}| "f"{r['commits_7d']}|{r['contributors_top']}|{score:.3f}|")return"\n".join(lines)需要特别提醒:star_delta_7d必须来自快照差分(每天把stargazers_count存入snapshots.json,再与 7 天前的快照做差),不能用当前星标总数代替增速。若要精确到"某用户何时加星",需要使用带application/vnd.github.star+json接受头的 stargazers 端点并分页拉取,成本高得多,通常只适合小样本复核。这套骨架的产物是一张可解释的表,它的价值不在分数本身,而在于每个数字都能回溯到口径定义。
六、榜单会说谎:动量指标的五种失真
第一,数据缺失被当成 0。本批 74 条来源的热度字段全部为 0、发布时间全部为 null,这是最直接的反面教材。正确表述是"热度数据缺失,无法排序",而不是"这些项目热度为零",更不能据此宣称某条目是"爆款"。唯一带有夸张措辞的 CSDN 标题"阿里开源的 Agent 项目在 Github 又爆了"[21],也只是一个原文标题,不是可验证的热度数据。
第二,时间不可考。除标题内嵌日期外,本批条目没有可核验的发布时间。因此任何趋势判断都应限定在 2026-09-01 至 09-29 这段标题可考区间内,并注明"日期取自标题标注"。把标题日期等同于发布日期、再等同于事件发生日期,是层层递进的三重过度解读。
第三,榜单自激。被收录带来曝光,曝光带来星标,星标推高下一次排名。当本批同时存在日报、周榜、评分、合集四类工具时,同一批头部项目会被反复放大。评估动量时,最好区分"自然增长"与"上榜后增长",至少在心里保留这层折扣。
第四,同名混淆。本批记录里同时出现两个 Aether:pacobaco/Aether[19] 与 showjihyun/aether(自述为 “AGENT OS System”)[20],二者是不同项目。在合集、榜单、检索结果中并列出现时极易张冠李戴,引用前必须逐个核对仓库地址与自述定位,不能按名称合并统计。
第五,标题即结论。榜单类内容的标题常内嵌结论词(“霸榜”“爆了”“趋势速报”),但这些词描述的是作者的编辑判断,不是数据。消费这类内容时应把标题与数据分开:标题可以告诉你作者想强调什么,数据才支持你能说什么。
把这五条整理成自检清单,可以在读任何一份 agent 榜单时快速过一遍:
| 检查项 | 常见问题 | 可支持的结论强度 |
|---|---|---|
| 数值字段 | 缺失被填 0、口径未标注 | 仅支持"存在该数据/缺失该数据" |
| 时间字段 | 用标题日期冒充发布日期 | 仅支持"标题标注日期"层面的时序 |
| 增量口径 | 窗口长度不明、未去重 | 只能作趋势提示,不能作排名依据 |
| 名单规则 | 收录/移除条件黑盒 | 增删只能读作"名单变动",非质量判断 |
| 项目标识 | 同名不同仓、镜像仓混入 | 必须回到仓库地址核对 |
七、落地:给团队做一份 agent 框架选型情报
工具分层清楚之后,团队选型流程可以收敛为四步。第一步,用清单层收候选:从 sifted-awesome-ai-agents、awesome-llm-agents、awesome-automated-ai 这类合集里圈出 10 到 20 个候选项[10][11][12]。第二步,用雷达层监控进出:订阅 agent-framework-radar 的名单更新与 agents-radar 的日报[4][5][6][7][8][9],关注候选是否被移除、是否出现同类新项目。第三步,用评分层看动量:参考 ai-agent-pulse 的四维思路自建打分[1],或跟踪 ai-agent-map 的周榜刷新[2][3],重点看连续在榜周数与分数走势,而非单周名次。第四步,回到技术适配度做决策:许可协议、可执行性(能否在自有环境跑通最小用例)、与自身技术栈的契合度、社区响应质量、迁移成本。
这里要明确一条纪律:动量是观测项,不是决策项。一次 Trending 曝光就登顶的框架,应当观察它在下个窗口是否回落;真正进入短名单的项目,必须经过团队自己的 PoC 验证。榜单能帮你把注意力投向哪里,不能替你承担选错的后果。另外,若要引用任何项目的许可协议,应逐仓库核对 LICENSE 文件,不要沿用二手清单的标注。
一个可复用的观察清单模板如下,字段留给读者按自己的候选填写:
| 候选框架 | 仓库地址 | 首次入榜窗口 | 连续在榜周数 | 动量分走势 | 许可(自查) | PoC 结果 | 决策备注 |
|---|---|---|---|---|---|---|---|
结语:榜单是地图,不是地形
当 agent 生态的演化速度快过人的阅读速度,榜单、雷达与日报就是必要的压缩层:它们把分散的仓库活动压缩成可读的排名、增删和评分,帮助开发者在有限注意力下定位值得关注的方向。但压缩必有失真——缺失字段、窗口效应、榜单自激、同名混淆、标题先行,都在压缩过程中被放大。带着数据质量意识消费榜单,比记住任何一次排名都更有价值。
如果要在下一个窗口验证本文的判断,可以回看 ai-agent-map 的周榜 PR 与 agent-framework-radar 的增删提交,观察 2026 年 9 月出现的高流转(尤其是一次 +14/-14 的名单变动)在 10 月是否持续,以及 09-17 那次"Trending 曝光登顶"的项目在后续窗口是否回落。榜单是地图,地形仍需要自己走一遍。
参考资料
[1] Daily automated tracking of 19 AI agent frameworks(Pulse Score)· GitHub · https://github.com/PurpleHaze2320/ai-agent-pulse
[2] Refresh weekly heat ranking (2026-09-09) · weijt606/ai-agent-map PR #23 · GitHub · https://github.com/weijt606/ai-agent-map/pull/23
[3] Refresh weekly heat ranking (2026-09-17): a Trending placement takes #1; DeepSeek Harness confirms · weijt606/ai-agent-map PR #25 · GitHub · https://github.com/weijt606/ai-agent-map/pull/25
[4] feat: +1 added, -1 removed (2026-09-01 03:45) · linny006/agent-framework-radar 提交 · GitHub · https://github.com/linny006/agent-framework-radar/commit/18862f9234e6d706ff34d36e201209f5d7052785
[5] feat: +2 added, -2 removed (2026-09-08 21:15) · linny006/agent-framework-radar 提交 · GitHub · https://github.com/linny006/agent-framework-radar/commit/5c10ededc9f89d87988c4b813f825a80031deb9f
[6] feat: +14 added, -14 removed (2026-09-10 08:00) · linny006/agent-framework-radar 提交 · GitHub · https://github.com/linny006/agent-framework-radar/commit/8e1587f895eb064a1410b96b10b33ad1eaec11cb
[7] AI 开源趋势日报 2026-09-12 · duanyytop/agents-radar Issue #3229 · GitHub · https://github.com/duanyytop/agents-radar/issues/3229
[8] AI Open Source Trends 2026-09-20 · duanyytop/agents-radar Issue #3380 · GitHub · https://github.com/duanyytop/agents-radar/issues/3380
[9] OpenClaw 生态日报 2026-09-22 · duanyytop/agents-radar Issue #3420 · GitHub · https://github.com/duanyytop/agents-radar/issues/3420
[10] sifted-awesome-ai-agents:自动更新的高星 AI agent 仓库清单 · GitHub · https://github.com/sifted-network/sifted-awesome-ai-agents
[11] awesome-llm-agents:LLM agent 框架清单 · GitHub · https://github.com/kaushikb11/awesome-llm-agents
[12] awesome-automated-ai:250+ 自动化 AI/ML 工具清单 · GitHub · https://github.com/jbogocz/awesome-automated-ai
[13] github-trending:定时抓取 GitHub Trending · GitHub · https://github.com/johe123qwe/github-trending
[14] GitHub 开源项目周报 · 2026 年第 37 周(09-07~09-13)· CSDN · https://blog.csdn.net/xiaoquqi/article/details/166208787
[15] GitHub 日榜趋势速报 | 2026-09-29 · CSDN · https://blog.csdn.net/weixin_40013817/article/details/166827963
[16] GitHub 开源项目日报 · 2026 年 9 月 6 日 · CSDN · https://blog.csdn.net/xiaoquqi/article/details/164558736
[17] chore(docs): 更新版本号至 1.1.41 · 吴博/灵梭 spring-ai-loom-agent PR !84 · Gitee · https://gitee.com/wb04307201/spring-ai-loom-agent/pulls/84
[18] docs(version): 更新版本号到 1.1.44 · 吴博/灵梭 spring-ai-loom-agent PR !89 · Gitee · https://gitee.com/wb04307201/spring-ai-loom-agent/pulls/89
[19] pacobaco/Aether · GitHub · https://github.com/pacobaco/Aether
[20] showjihyun/aether:AGENT OS System · GitHub · https://github.com/showjihyun/aether
[21] 阿里开源的 Agent 项目在 Github 又爆了!· CSDN · https://blog.csdn.net/caoli201314/article/details/166691579
说明:以上来源均取自本次采集记录,其热度字段均为 0、发布时间字段均为 null;文中出现的日期仅来自各来源标题中明确标注的日期,不代表已核实的发布日期。