Ruby on Rails 3.2 发行说明详解:更快的开发模式、路由引擎、自动查询 EXPLAIN 与标签日志
本文围绕 Rails 官方仓库中的 3.2 发行说明 展开,完整覆盖该版本的主要变更:升级路径与必备配置、四大亮点特性(更快的开发模式、Journey 新路由引擎、自动查询解释、Tagged Logging),以及 Railties、Action Pack、Active Record、Active Support 等各框架的逐项变更与弃用清单。读完本文,你可以掌握从 Rails 3.1 平滑升级至 3.2 的全部实操要点,并能在当前仓库源码中找到这些特性的落地实现作为印证。
版本亮点总览
Rails 3.2 的四大核心亮点(原文档 Highlights):
- Faster Development Mode——更快的开发模式,只在依赖文件真正变化时才重载类;
- New Routing Engine——基于 Journey 的新路由引擎,路由匹配(route recognition)速度大幅提升;
- Automatic Query Explains——慢查询自动 EXPLAIN,并可手动调用
Relation#explain; - Tagged Logging——Active Support 提供的标签日志,为日志行打上子域、请求 ID 等标记。
需要说明的是,发行说明只覆盖主要变更;更细粒度的 bug 修复与行为变化请参考各框架的 CHANGELOG(当前仓库中各框架目录下均有独立的 CHANGELOG 文件,如 Active Support CHANGELOG、Active Record CHANGELOG)。
升级指南:从 3.1 升到 3.2
如果准备升级现有应用,官方建议遵循以下路径:先保证应用有充分的测试覆盖;如果还没升过,先升级到 Rails 3.1 并确认应用行为正常,再尝试升级到 3.2。
运行环境要求
Rails 3.2 要求至少 Ruby 1.8.7,早期 Ruby 版本的支持被正式移除,应用应与 3.2 兼容 Ruby 1.9.2。官方提示(TIP):
- Ruby 1.8.7 p248 与 p249 存在会导致 Rails 崩溃的 marshalling bug;Ruby Enterprise Edition 自 1.8.7-2010.02 起已修复;
- Ruby 1.9.1 因会直接 segfault 而不可用,想使用 1.9.x 系列请上 1.9.2 或 1.9.3。
应用需要更新的依赖
升级应用时,将 Gemfile 更新为依赖:
rails = 3.2.0sass-rails ~> 3.2.3coffee-rails ~> 3.2.1uglifier >= 1.0.3
同时注意:Rails 3.2 弃用了 vendor/plugins(Rails 4.0 将彻底移除)。推荐做法是把插件抽取为 gem 并加入 Gemfile;如果不想做成 gem,可以移到 lib/my_plugin/* 下,并在 config/initializers/my_plugin.rb 中添加相应的初始化代码。
环境配置新增项
在 config/environments/development.rb 中加入两项新配置:
# Raise exception on mass assignment protection for Active Record models
config.active_record.mass_assignment_sanitizer = :strict
# Log the query plan for queries taking more than this (works
# with SQLite, MySQL, and PostgreSQL)
config.active_record.auto_explain_threshold_in_seconds = 0.5
mass_assignment_sanitizer 同样需要加到 config/environments/test.rb:
# Raise exception on mass assignment protection for Active Record models
config.active_record.mass_assignment_sanitizer = :strict
这两项配置对应 Active Model / Active Record 的新特性::strict 模式下,命中 attr_accessible 保护的大规模赋值会直接抛异常(默认行为为 :logger,仅记录警告);auto_explain_threshold_in_seconds 则是自动查询解释的触发阈值,详见下文。
引擎(Engine)需要更新的内容
将 script/rails 中注释行之后的代码替换为:
ENGINE_ROOT = File.expand_path('../..', __FILE__)
ENGINE_PATH = File.expand_path('../../lib/your_engine_name/engine', __FILE__)
require "rails/all"
require "rails/engine/commands"
创建 Rails 3.2 应用
# You should have the 'rails' RubyGem installed
$ rails new myapp
$ cd myapp
Gem 的 Vendoring
Rails 应用根目录使用 Gemfile 声明启动所需的全部 gem,由 Bundler 负责解析与安装;Bundler 甚至可以把所有依赖本地安装到应用目录内,使应用不再依赖系统 gem。
Living on the Edge
得益于 Bundler 和 Gemfile,"冻结"(freeze)Rails 应用变得非常简单。如果想直接从 Git 仓库 bundle,可传 --edge 参数:
$ rails new myapp --edge
如果手头有本地 Rails 仓库 checkout,想用本地代码生成应用,可传 --dev 参数:
$ ruby /path/to/rails/railties/bin/rails new myapp --dev
主要特性深入解析
1. 更快的开发模式与路由引擎
Rails 3.2 的开发模式明显更快,其灵感来自 Active Reload:只有当依赖文件真正发生变化时才重载类,大型应用上的性能收益是显著性的。这一开关由 Railties 的 config.reload_classes_only_on_change 控制,设为 false 可以关闭该行为(见下文 Railties 章节)。
路由匹配(route recognition)则因新路由引擎 Journey 而获得大幅提速。在当前仓库中,Journey 已被整合进 Action Pack 的路由分发层,入口为 actionpack/lib/action_dispatch/journey.rb,其下有 router、gtg/builder、gtg/simulator 等模块负责路由表的构建与请求的解析匹配;journey 目录下的 路由语法说明模板 也保留了引擎的语法规约文档。
2. 自动查询解释(Automatic Query Explains)
Rails 3.2 通过 ActiveRecord::Relation 上新增的 explain 方法,允许对 Arel 生成的查询执行 EXPLAIN,例如:
puts Person.active.limit(5).explain
这有助于检查索引是否合理、还有哪些优化空间。当前仓库中该方法仍然存在,定义见 activerecord/lib/active_record/relation.rb,各适配器分别在 database_statements.rb 中实现 EXPLAIN 的执行(如 PostgreSQL 适配器、SQLite3 适配器 与抽象基类中的 默认实现)。
除手动调用外,开发模式下运行超过半秒的查询会被自动 EXPLAIN 并写入日志。控制参数为 config.active_record.auto_explain_threshold_in_seconds:
- 设为
nil即禁用该功能; - 默认值:development 模式为
0.5,test 与 production 模式为nil; - 3.2 版本中该功能支持 SQLite、MySQL(mysql2 适配器)与 PostgreSQL。
配合的 API 还有 ActiveRecord::Base.silence_auto_explain,可以在一个代码块内临时关闭自动 EXPLAIN,避免噪声。
3. 标签日志(Tagged Logging)
运行多用户、多账号应用时,按"谁做了什么"过滤日志极为有用。Active Support 的 ActiveSupport::TaggedLogging 正好解决这一问题:它给日志行打上子域名、请求 ID 等任意标记。
用法示例(原文档):
Logger = ActiveSupport::TaggedLogging.new(Logger.new(STDOUT))
Logger.tagged("BCX") { Logger.info "Stuff" }
# Logs "[BCX] Stuff"
Logger.tagged("BCX", "Jason") { Logger.info "Stuff" }
# Logs "[BCX] [Jason] Stuff"
Logger.tagged("BCX") { Logger.tagged("Jason") { Logger.info "Stuff" } }
# Logs "[BCX] [Jason] Stuff"
当前仓库中的实现位于 activesupport/lib/active_support/tagged_logging.rb,从源码结构看其核心设计是:TaggedLogging.new(logger) 克隆传入的 Logger 并克隆其 formatter,然后向 formatter 混入 Formatter 模块——每次日志事件发生时由 Formatter#call 调 tag_stack.format_message(msg) 把标签拼到消息前;TagStack(同文件 L75-L111)维护一个标签栈,push_tags 会去空(reject!(&:blank?))、format_message 按 [tag1] [tag2] message 的格式拼接并缓存结果串。标签栈的存储使用 IsolatedExecutionState 按线程隔离,因此多线程环境下各请求的标签互不串扰。此外还支持无 block 的链式调用:logger.tagged("BCX").info "Stuff" 会返回一个带标签的新 logger 实例。对应的行为测试见 activesupport/test/tagged_logging_test.rb。
这一能力与 Railties 层打通:Rails::Rack::Logger 中间件会把 config.log_tags 中设置的标签应用到 ActiveSupport::TaggedLogging 上,使得用子域、请求 ID 等调试信息给日志行打标签变得非常顺手——这正是多用户生产环境排障的关键手段。
各框架变更明细
Railties
-
只有依赖文件变化时才重载类以加速开发;可将
config.reload_classes_only_on_change设为false关闭。 -
新建应用的环境配置文件中带有
config.active_record.auto_explain_threshold_in_seconds标志:development.rb中值为0.5,production.rb中为注释状态,test.rb中不提。 -
新增
config.exceptions_app,用于设置ShowException中间件在异常发生时调用的异常应用。默认值为ActionDispatch::PublicExceptions.new(Rails.public_path)。该配置在当前仓库中仍保留于应用配置项声明中,见 railties/lib/rails/application/configuration.rb,且默认中间件栈的装配逻辑见 railties/lib/rails/application/default_middleware_stack.rb。 -
新增
DebugExceptions中间件,包含从ShowExceptions中间件抽取出的功能。 -
rake routes会显示挂载引擎(mounted engines)的路由。 -
允许通过
config.railties_order改变 railties 的加载顺序,例如:config.railties_order = [Blog::Engine, :main_app, :all]该配置项及其用法文档保留在 railties/lib/rails/engine.rb。
-
脚手架(scaffold)对无内容的 API 请求返回
204 No Content,使 scaffold 开箱即用兼容 jQuery。 -
更新
Rails::Rack::Logger中间件,将config.log_tags中设置的标签应用到ActiveSupport::TaggedLogging(上文已详述)。 -
rails new的默认选项可以写在~/.railsrc中:该文件里的参数会在每次执行rails new时作为额外的命令行参数生效。 -
为
destroy增加别名d,对引擎同样生效。 -
脚手架与模型生成器的属性默认类型为 string,例如:
bin/rails g scaffold Post title body:text author。 -
允许 scaffold/model/migration 生成器接受
index与uniq修饰符,例如:$ bin/rails g scaffold Post title:string:index author:uniq price:decimal{7,2}这会为
title和author创建索引,后者为唯一索引;部分类型如 decimal 接受自定义选项——示例中price将生成精度 7、小数位 2 的 decimal 列。 -
turngem 已从默认Gemfile中移除。 -
移除旧插件生成器
rails generate plugin,改用rails plugin new命令。 -
移除旧的
config.paths.app.controllerAPI,改用config.paths["app/controller"]。
弃用项
Rails::Plugin被弃用,将在 Rails 4.0 移除。不要再往vendor/plugins里加插件,应改用 gem 或 Bundler 的 path / git 依赖。
Action Mailer
- 升级
mailgem 至 2.4.0 版本。 - 移除了自 Rails 3.0 起就已弃用的旧版 Action Mailer API。
Action Pack
Action Controller
-
ActiveSupport::Benchmarkable成为ActionController::Base的默认模块,#benchmark方法在控制器上下文中恢复可用。 -
caches_page新增:gzip选项;全局默认值可用page_cache_compression配置。 -
当用
:only/:except条件指定 layout 且条件不满足时,Rails 会回退使用默认 layout(如layouts/application):class CarsController layout 'single_car', :only => :show end请求打到
:show动作时使用layouts/single_car,其他动作则使用layouts/application(或存在的layouts/cars)。 -
提供
:as选项时,form_for改用#{action}_#{as}作为 CSS class 与 id(早期版本使用#{as}_#{action})。 -
ActionController::ParamsWrapper对 Active Record 模型只在attr_accessible属性被设置时才包裹它们;否则只包裹类方法attribute_names返回的属性。此修复通过把嵌套属性加入attr_accessible来修正嵌套属性的包裹问题。 -
每次 before 回调中止时,记录日志 "Filter chain halted as CALLBACKNAME rendered or redirected"。
-
ActionDispatch::ShowExceptions被重构:由控制器负责决定是否展示异常;可以在控制器中覆写show_detailed_exceptions?来指定哪些请求在出错时提供调试信息。 -
Responders 对无响应体的 API 请求返回
204 No Content(与新版 scaffold 一致)。 -
ActionController::TestCase的 cookies 被重构。测试中赋值 cookie 应改用cookies[]:cookies[:email] = 'user@example.com' get :index assert_equal 'user@example.com', cookies[:email]清除 cookie 使用
clear:cookies.clear get :index assert_nil cookies[:email]不再写出 HTTP_COOKIE,cookie jar 在请求之间持久存在;如需操纵环境变量,必须在 cookie jar 创建之前进行。
-
未提供
:type时,send_file会从文件扩展名推断 MIME 类型。 -
新增 PDF、ZIP 等格式的 MIME 类型条目。
-
fresh_when/stale?现在可以直接接受 record 而不是 options hash。 -
缺少 CSRF token 的警告日志级别从
:debug提升为:warn。 -
资产(assets)默认使用请求协议;无请求可用时默认为相对路径。
Action Controller 弃用项
-
弃用"父控制器显式设置了 layout 时子控制器隐式查找 layout"的行为:
class ApplicationController layout "application" end class PostsController < ApplicationController end上例中
PostsController不再自动查找 posts layout;若需要该功能,可移除ApplicationController中的layout "application",或在PostsController中显式置为nil。 -
弃用
ActionController::UnknownAction,改用AbstractController::ActionNotFound。 -
弃用
ActionController::DoubleRenderError,改用AbstractController::DoubleRenderError。 -
缺少 action 时的处理由
method_missing弃用,改用action_missing。 -
弃用
ActionController#rescue_action、ActionController#initialize_template_class、ActionController#assign_shortcuts。
Action Dispatch
- 新增
config.action_dispatch.default_charset,用于配置ActionDispatch::Response的默认字符集。 - 新增
ActionDispatch::RequestId中间件:为响应提供唯一的X-Request-Id头,并使ActionDispatch::Request#uuid方法可用——便于在整条技术栈中端到端追踪单个请求,以及在 Syslog 这类混合日志中识别单个请求。 ShowExceptions中间件现在接受一个"异常应用"(exceptions application),由它负责在应用失败时渲染异常:该应用被调用时会拿到env["action_dispatch.exception"]中的异常副本,且PATH_INFO被改写为对应的状态码路径。- 允许通过 railtie 配置 rescue 响应,即
config.action_dispatch.rescue_responses。
Action Dispatch 弃用项
- 弃用在控制器级别设置默认字符集的做法,请改用
config.action_dispatch.default_charset。
Action View
-
ActionView::Helpers::FormBuilder支持button_tag,行为仿照submit_tag的默认行为:<%= form_for @post do |f| %> <%= f.button %> <% end %> -
日期辅助方法接受新选项
:use_two_digit_numbers => true,为月和日的选择框渲染带前导零的两位数字,同时不改变实际取值——适合展示 ISO 8601 风格日期(如'2011-08-01')。 -
可为表单提供命名空间(namespace)以保证表单元素 id 的唯一性,生成的 HTML id 会以带下划线的命名空间作前缀:
<%= form_for(@offer, :namespace => 'namespace') do |f| %> <%= f.label :version, 'Version' %>: <%= f.text_field :version %> <% end %> -
select_year的选项数量被限制为 1000,可传:max_years_allowed选项自定义上限。 -
content_tag_for与div_for现在可以接受记录集合;若 block 声明了接收参数,会以 record 作为第一个参数 yield。不再需要这样写:@items.each do |item| content_tag_for(:li, item) do Title: <%= item.title %> end end可以直接写成:
content_tag_for(:li, @items) do |item| Title: <%= item.title %> end -
新增
font_path辅助方法,计算public/fonts下字体资产的路径。
Action View 弃用项
- 向
render :template及同类方法传递 formats 或 handlers(如render :template => "foo.html.erb")被弃用。应直接提供:handlers与:formats选项:render :template => "foo", :formats => [:html, :js], :handlers => :erb。
Sprockets
- 新增配置项
config.assets.logger用于控制 Sprockets 的日志输出:设为false关闭日志,设为nil则回落到Rails.logger。
Active Record
-
值为
'on'和'ON'的布尔列会被类型转换为true。 -
timestamps方法创建的created_at与updated_at列默认不可为空(non-nullable)。 -
实现
ActiveRecord::Relation#explain(见上文"自动查询解释")。 -
实现
ActiveRecord::Base.silence_auto_explain,允许在代码块内选择性禁用自动 EXPLAIN。 -
实现慢查询的自动 EXPLAIN 日志。新配置参数
config.active_record.auto_explain_threshold_in_seconds决定什么算慢查询;设为nil禁用。默认 development 为 0.5,test 与 production 为 nil。3.2 支持 SQLite、MySQL(mysql2 适配器)、PostgreSQL。 -
新增
ActiveRecord::Base.store,用于声明简单的单列键值存储:class User < ActiveRecord::Base store :settings, accessors: [ :color, :homepage ] end u = User.new(color: 'black', homepage: '37signals.com') u.color # Accessor stored attribute u.settings[:country] = 'Denmark' # Any attribute, even if not specified with an accessor -
支持按给定 scope 只运行部分迁移,例如只跑某个引擎的迁移(比如回滚一个需要移除的引擎的改动):
rake db:migrate SCOPE=blog -
从引擎拷贝出的迁移现在会带上引擎名前缀,例如
01_create_posts.blog.rb。 -
实现
ActiveRecord::Relation#pluck,直接从底层表返回列值数组,对序列化属性同样有效:Client.where(:active => true).pluck(:id) # SELECT id from clients where active = 1当前仓库中
pluck的实现见 activerecord/lib/active_record/relation/calculations.rb 与 关联代理。 -
生成的关联方法被放进独立模块以支持覆写与组合。对名为
MyModel的类,该模块名为MyModel::GeneratedFeatureMethods,它在 Active Model 定义的generated_attributes_methods模块之后立即被 include 进模型类,因此关联方法会覆写同名的属性方法。 -
新增
ActiveRecord::Relation#uniq用于生成去重查询:Client.select('DISTINCT name')可以写成:
Client.select(:name).uniq并且可以再次反转唯一性:
Client.select(:name).uniq.uniq(false) -
SQLite、MySQL 与 PostgreSQL 适配器支持索引排序(index sort order)。
-
关联的
:class_name选项除了字符串外还接受符号,避免新手困惑,并与:foreign_key等选项的取值方式保持一致:has_many :clients, :class_name => :Client # 注意符号需要大写开头 -
开发模式下
db:drop会连带删除测试库,与db:create保持对称。 -
大小写不敏感的 uniqueness 校验在 MySQL 下,若列已经使用大小写不敏感的 collation,就不再调用 LOWER。
-
事务性 fixture(transactional fixtures)会登记所有活动的数据库连接,因此可以在不同连接上测试模型而无需禁用 transactional fixtures。
-
为 Active Record 增加
first_or_create、first_or_create!、first_or_initialize方法。相比旧的find_or_create_by动态方法,它更清楚地表明哪些参数用于查找、哪些用于创建:User.where(:first_name => "Scarlett").first_or_create!(:last_name => "Johansson")当前仓库中
first_or_create系列定义见 activerecord/lib/active_record/relation.rb。 -
为 Active Record 对象新增
with_lock方法:开启事务、对对象加悲观锁,并把对象 yield 给 block;方法接收一个可选参数并传递给lock!。原来的写法:class Order < ActiveRecord::Base def cancel! transaction do lock! # ... cancelling logic end end end可以简化为:
class Order < ActiveRecord::Base def cancel! with_lock do # ... cancelling logic end end endwith_lock的实现至今保留在 activerecord/lib/active_record/locking/pessimistic.rb。
Active Record 弃用项
-
弃用线程中连接自动关闭的行为,例如以下代码被弃用:
Thread.new { Post.find(1) }.join应改为在线程结束时显式关闭数据库连接:
Thread.new { Post.find(1) Post.connection.close }.join只有在应用代码里自行创建线程的人需要关心此变更。
-
set_table_name、set_inheritance_column、set_sequence_name、set_primary_key、set_locking_column被弃用,改用赋值方法。例如不再使用set_table_name,而是使用self.table_name=:class Project < ActiveRecord::Base self.table_name = "project" end或者自定义
self.table_name方法:class Post < ActiveRecord::Base def self.table_name "special_" + super end end Post.table_name # => "special_posts"
Active Model
- 新增
ActiveModel::Errors#added?,用于检查某个具体错误是否已添加。 - 新增严格校验(strict validations):
strict => true时校验失败总是抛出异常。 - 提供
mass_assignment_sanitizer作为替换 sanitizer 行为的简便 API,同时支持:logger(默认)与:strict两种 sanitizer 行为。
Active Model 弃用项
ActiveModel::AttributeMethods中的define_attr_method被弃用——它当初只是为了支持 Active Record 中set_table_name之类的方法,而这些方法本身也在被弃用。- 弃用
Model.model_name.partial_path,改用model.to_partial_path。
Active Resource
- 重定向响应 303 See Other 与 307 Temporary Redirect 的行为现在与 301 Moved Permanently 和 302 Found 一致。
Active Support
-
新增
ActiveSupport::TaggedLogging,可包装任意标准Logger类以提供标签能力(示例代码见上文"标签日志"一节;实现与测试分别在 activesupport/lib/active_support/tagged_logging.rb 与 activesupport/test/tagged_logging_test.rb)。 -
Date、Time与DateTime的beginning_of_week方法接受一个可选参数,表示假定的一周起始日。 -
ActiveSupport::Notifications.subscribed提供"在 block 执行期间订阅事件"的能力。 -
定义新方法
Module#qualified_const_defined?、Module#qualified_const_get、Module#qualified_const_set,与标准 API 对应方法类似,但接受限定常量名(qualified constant names)。 -
新增
#deconstantize,与#demodulize互补,去掉限定常量名中最右侧的一段。 -
新增
safe_constantize:把字符串常量化的同时,若常量(或其某一部分)不存在则返回nil而不是抛异常。 -
ActiveSupport::OrderedHash在使用Array#extract_options!时被标记为可提取(extractable)。 -
新增
Array#prepend作为Array#unshift的别名、Array#append作为Array#<<的别名。 -
Ruby 1.9 下空白字符串的定义扩展到 Unicode 空白字符;Ruby 1.8 下全角空格 U+3000 也被视为空白。
-
词干变化器(inflector)开始理解缩写词(acronyms)。
-
新增
Time#all_day、Time#all_week、Time#all_quarter、Time#all_year,用于生成范围:Event.where(:created_at => Time.now.all_week) Event.where(:created_at => Time.now.all_day) -
Class#cattr_accessor等方法新增instance_accessor: false选项。 -
ActiveSupport::OrderedHash对"以 splat 接收参数的 block"的#each与#each_pair行为有了区分。 -
新增
ActiveSupport::Cache::NullStore,供开发与测试使用。 -
移除
ActiveSupport::SecureRandom,改用标准库的SecureRandom。
Active Support 弃用项
-
ActiveSupport::Base64弃用,改用::Base64。 -
弃用
ActiveSupport::Memoizable,建议直接使用 Ruby 的记忆化(memoization)惯用法。 -
Module#synchronize弃用且无替代方案,请使用 Ruby 标准库的 monitor。 -
弃用
ActiveSupport::MessageEncryptor#encrypt与#decrypt。 -
ActiveSupport::BufferedLogger#silence弃用。想抑制某个 block 的日志,请改为在该 block 中调整日志级别。 -
ActiveSupport::BufferedLogger#open_log弃用——该方法本不该是公开的。 -
ActiveSupport::BufferedLogger自动为日志文件创建目录的行为被弃用,请在实例化前自行创建目录。 -
ActiveSupport::BufferedLogger#auto_flushing弃用:请对底层文件句柄设置 sync 级别,例如:f = File.open('foo.log', 'w') f.sync = true ActiveSupport::BufferedLogger.new f -
ActiveSupport::BufferedLogger#flush弃用:设置文件句柄的 sync,或调优文件系统。
与当前仓库的对照说明
以上变更均以 Rails 3.2 发行说明原文为准,适用前提是运行 Rails 3.2 系列应用。当前仓库是 Rails 的主干源码,其中这些 3.2 特性大多仍在演进并保留可用:TaggedLogging 的模块化包装器结构(activesupport/lib/active_support/tagged_logging.rb)、Relation#explain(activerecord/lib/active_record/relation.rb)、pluck / with_lock / first_or_create 系列、config.exceptions_app 与 config.railties_order(railties/lib/rails/application/configuration.rb)等,都可以在仓库源码中直接检索到,作为理解这些经典特性的第一手实现依据。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0623
Hy4-previewHy4 preview 是由腾讯混元团队研发的新一代混合专家(MoE)旗舰模型。模型总参数量 770B,每个 token 激活 49B,主干共包含78层,第一层采用标准 FFN,其余 77 层均为 MoE 结构,每层包含 256 个路由专家与 1 个共享专家,每个 token 激活 top-8 路由专家及共享专家。主干之外原生内置 1 层 MTP(总参数量 10B,激活 0.7B)以支持投机解码。Python00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
GLM-5.3-FlashGLM-5.3-Flash (320B-A18B),是GLM-5系列的首个原生多模态模型。320B总参数,能力超过GLM-5.2Jinja00
Spark-X2.5-4BSpark-X2.5-4B 旨在让强大的 AI 更实用、更高效、更易获得。在广泛日常任务中表现强劲,涵盖对话、写作、翻译、推理、编码、工具调用以及智能体工作流,并在同等规模的开源模型中取得领先成绩。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00