2026年2月

写了一大份文档,让他写个 app (不算简单,也不算太复杂)。

用的 5.3 ,他自己写了差不多半个小时,也才用了 15% 的 5 hour limit 。

感觉 Claude Code 让它写个简单的东西就得 20% 了。

光猫桥接,路由拨号,到家以后发现没网,拨号死活拨不上,故保障,师傅上门以后,告知情况,他用他的什么 pd 拨号成功,后续我路由也能拨号成功了,他找了个理由说是我光猫和路由之间的网线问题,但是后续我插拔网线很多次都能成功拨号,这根线是我买的成品网线,链接其他设备也正常使用,想问下网线真的能影响拨号吗?还是说这本来就是工作人员自导自演的戏码,他自己后台操作下,然后再挨个上门修复然后做业绩?有老哥解惑吗?

简单介绍下情况,我从事电商行业十几年,有吃到一些行业红利,现在手上也有几家公司有品牌有 TPDP ,80%销量在抖音,一百多人,近年来由于 AI 的快速发展,公司很多岗位例如客服、美工设计、短视频内容团队(编导拍剪后期等岗位)都开始越来越多的使用相关 AI 工具,但都是团队自身或者个人在研究使用,对公司整体而言是很零散且不够高效的,且员工离职后也留存不下来 sop 。我个人并非 IT 出生,了解并不多,我很希望能够单独做一个 AI 支持部门,能够服务对接相关的业务部门,提升效率节省人力,甚至创作出更好的内容来,以下是具体的问题,还请懂的大佬不令赐教:

1 、具体招聘的岗位名称应该是什么,如何评判应聘人员的具体能力水平
2 、我所设想的 AI 支持部门逻辑是否成立,对相关协同部门以及业务部门有多大的帮助
3 、最小团队人员数量应该在多少,以及应该分别负责什么
4 、针对这个团队应该如何设计考核内容
5 、相关设备的投入最小预算预计在多少

问题很多也很具体,恳请有了解的大佬指点一二,对当中的某一个点能有解答,小生也不甚感激

以上

写在前面,本人目前处于求职中,如有合适内推岗位,请加:lpshiyue 感谢。

精确一次语义不是简单的配置开关,而是一致性、性能与复杂度之间的精密权衡艺术

在掌握了Flink实时计算的心智模型后,我们面临一个更根本的挑战:如何保证数据处理结果的绝对准确性?Exactly-once(精确一次)语义作为流处理领域的"圣杯",其实现背后隐藏着巨大的真实成本。本文将深入剖析端到端一致性的技术本质,揭示两阶段提交协议的复杂性代价,帮助企业在一致性需求与系统成本之间找到最佳平衡点。

1 精确一次语义的迷思与真相

1.1 从理想概念到工程现实

精确一次语义在理论上很直观:每条数据只对最终结果产生一次影响。然而工程实践中,这一理想概念需要重新定义为有效一次——数据可能被处理多次,但最终效果只反映一次。

概念澄清至关重要

  • 精确一次:数学意义上的绝对保证,实际系统中无法实现
  • 有效一次:工程折中方案,通过去重或事务机制保证最终效果
  • 端到端精确一次:从数据源到输出端的完整链路保证

分布式系统无法实现真正精确一次的根本原因在于故障不确定性。当节点故障发生时,无法准确区分是永久性故障还是临时不可用,这种不确定性使得绝对的"只处理一次"在理论上不可实现。

1.2 精确一致的现实成本维度

实现有效一次语义需要付出多方面成本,主要包括:

性能成本:延迟增加、吞吐量下降
资源成本:额外的存储、网络和计算开销
复杂度成本:系统设计、实现和维护的复杂性提升
运维成本:监控、调试和故障恢复的难度增加

根据实践经验,追求端到端精确一次会使系统复杂度增加2-3倍,吞吐量降低20%-40%,延迟增加30%-50%

2 一致性等级的全景分析

2.1 三级一致性语义的适用场景

不同一致性等级适用于不同业务场景,理性选择避免过度设计:

最多一次适合可容忍数据丢失的场景:

  • 实时监控仪表盘:短暂数据丢失不影响整体趋势
  • 实时推荐预览:个别推荐丢失不影响用户体验
  • 操作日志统计:近似值即可满足需求

至少一次适合可接受重复但不可丢失的场景:

  • 计数型指标统计:可通过去重解决重复问题
  • 业务状态同步:重复同步可通过幂等性处理
  • 数据导出备份:确保数据完整比避免重复更重要

精确一次适合业务准确性要求极高的场景:

  • 金融交易处理:重复或丢失都可能导致资金损失
  • 计费扣费系统:直接影响客户账单准确性
  • 合规审计场景:法律法规要求绝对准确

2.2 一致性选择的决策框架

选择合适的一致性级别需要综合考量四个维度:

业务影响维度:数据不准确带来的经济损失和声誉风险
技术成本维度:实现更高级别一致性的开发和运维成本
性能要求维度:业务对延迟和吞吐量的敏感程度
团队能力维度:团队对复杂技术的掌握和运维能力

graph TD
    A[业务需求分析] --> B{是否有金融/计费需求?}
    B -->|是| C[精确一次]
    B -->|否| D{是否可接受数据丢失?}
    D -->|是| E[最多一次]
    D -->|否| F[至少一次+幂等去重]
    
    C --> G[评估技术成本]
    E --> G
    F --> G
    G --> H{成本是否可接受?}
    H -->|是| I[确定方案]
    H -->|否| J[重新评估需求]

一致性选择决策流程

3 两阶段提交协议的技术本质

3.1 2PC的工作原理与实现机制

两阶段提交协议是实现分布式事务的核心算法,也是精确一次语义的技术基础。

第一阶段:准备阶段

  • 协调者向所有参与者发送准备请求
  • 参与者执行事务操作但不提交,写入Undo/Redo日志
  • 参与者回复准备就绪或失败状态

第二阶段:提交阶段

  • 如果所有参与者都准备就绪,协调者发送提交指令
  • 如果有任何参与者准备失败,协调者发送回滚指令
  • 参与者完成最终提交或回滚操作

在Flink中,2PC通过TwoPhaseCommitSinkFunction抽象类实现,需要重写四个核心方法:

public abstract class TwoPhaseCommitSinkFunction<IN, TXN, CONTEXT> 
    extends RichSinkFunction<IN> {
    
    // 开启新事务
    protected abstract TXN beginTransaction() throws Exception;
    
    // 预提交:将数据写入事务
    protected abstract void preCommit(TXN transaction) throws Exception;
    
    // 提交事务
    protected abstract void commit(TXN transaction) throws Exception;
    
    // 回滚事务
    protected abstract void abort(TXN transaction) throws Exception;
}

3.2 2PC的故障场景与容错处理

2PC协议面临多种故障场景,需要精细的容错机制:

协调者单点故障:通过备用协调者或选举机制解决
参与者超时无响应:超时机制自动触发回滚
网络分区导致脑裂:多数派原则或人工干预解决
持久化状态丢失:日志重放和状态恢复机制

Flink通过Checkpoint机制保存2PC的状态信息,确保故障恢复后能够继续完成或回滚事务。

3.3 2PC的性能瓶颈分析

2PC协议引入的多方面性能开销:

同步阻塞开销:在准备阶段所有参与者处于阻塞状态
网络通信开销:两轮网络往返的延迟成本
持久化开销:事务日志的写入性能影响
资源锁定开销:事务期间相关资源的独占使用

实测数据显示,启用2PC后,Kafka生产者的吞吐量下降25%-35%,平均延迟增加40-60ms

4 端到端精确一致的实现路径

4.1 输入端的一致性保证

输入端的一致性保证是端到端精确一致的基础:

可重置数据源是前提条件:

  • Kafka:通过Offset机制实现位置重置
  • 文件系统:通过文件偏移量定位
  • 数据库CDC:通过事务日志位置恢复

偏移量管理策略

-- 偏移量与业务数据同一事务提交
BEGIN TRANSACTION;
INSERT INTO business_table VALUES (...);
UPDATE offset_table SET offset = NEW_OFFSET;
COMMIT;

这种原子性保证确保业务处理与位置更新的一致性。

4.2 处理引擎的一致性保证

Flink通过Checkpoint机制保证内部状态的一致性:

分布式快照原理

  • Barrier对齐:保证状态一致性点
  • 异步快照:减少对处理性能的影响
  • 增量检查点:降低全量快照的开销

状态后端选择影响一致性和性能:

  • MemoryStateBackend:适合测试,故障丢失状态
  • FsStateBackend:适合状态较小场景
  • RocksDBStateBackend:适合大状态生产环境

4.3 输出端的一致性保证

输出端是端到端一致性的最终关卡:

幂等写入是轻量级方案:

-- 基于唯一约束的幂等写入
INSERT INTO table (id, data) VALUES (?, ?) 
ON DUPLICATE KEY UPDATE data = VALUES(data);

事务写入是强一致性方案:

  • 预写日志:通用性强,性能开销大
  • 两阶段提交:性能较好,要求外部系统支持事务

5 精确一次的真实成本量化

5.1 性能成本的具体表现

启用精确一次语义对系统性能产生全方位影响:

吞吐量下降:主要来自事务管理和同步开销

  • 网络往返次数增加
  • 资源锁定时间延长
  • 日志写入频次提高

延迟增加:关键路径上的处理时间延长

  • 事务准备和提交时间
  • 屏障对齐等待时间
  • 故障恢复重试时间

资源消耗上升:额外的基础设施开销

  • 事务日志存储空间
  • 网络带宽占用
  • CPU和内存使用率

5.2 运维成本的隐性负担

精确一次语义带来的运维挑战不容忽视:

监控复杂度:需要跟踪分布式事务状态

  • 事务超时监控
  • 资源死锁检测
  • 数据一致性校验

故障调试难度:问题定位和修复更加困难

  • 分布式事务链路追踪
  • 数据重复或丢失根因分析
  • 性能瓶颈定位

团队技能要求:需要深入理解分布式系统原理

  • 事务原理和实现机制
  • 故障恢复和数据修复
  • 性能调优和容量规划

6 精确一次的适用场景与权衡策略

6.1 必须追求精确一次的场景

金融交易系统是典型场景:

  • 资金划转和结算
  • 风险评估和监控
  • 合规报告和审计

关键业务系统需要保证数据准确:

  • 计费和收费系统
  • 库存管理和订单处理
  • 用户账户和权益管理

在这些场景中,数据不准确带来的损失远超过实现精确一次的技术成本。

6.2 可接受最终一致的场景

分析型业务场景通常可接受延迟一致:

  • 用户行为分析
  • 业务指标统计
  • 实时报表生成

操作型业务场景可通过其他手段保证正确性:

  • 异步对账和修复
  • 人工审核和干预
  • 业务层面的去重逻辑

6.3 成本优化策略与实践

分层一致性策略:不同业务采用不同一致性级别

  • 核心业务:精确一次
  • 重要业务:至少一次+幂等性
  • 一般业务:最多一次或最终一致

技术方案优化:在保证一致性的前提下提升性能

  • 批量事务处理减少提交次数
  • 异步提交与并行化处理
  • 智能重试和退避机制

架构设计优化:从系统层面降低一致性成本

  • 事件溯源和CQRS模式
  • 微服务架构和领域界限
  • 读写分离和缓存策略

7 实践建议与成功案例

7.1 精确一次实施路线图

阶段一:需求分析与技术选型

  • 明确业务的一致性要求
  • 评估团队的技术能力
  • 选择合适的技术方案

阶段二:原型验证与性能测试

  • 搭建测试环境验证方案可行性
  • 进行压力测试评估性能影响
  • 制定故障恢复和数据修复预案

阶段三:渐进式实施与监控

  • 先在非关键业务验证
  • 建立完善的监控告警体系
  • 逐步推广到核心业务

7.2 电商平台精确一次实践案例

某大型电商平台在订单处理系统中实施精确一次的经验:

业务挑战

  • 日均订单量超百万
  • 重复下单或丢单影响客户体验
  • 现有系统存在0.1%的差错率

技术方案

-- 幂等性方案为主,关键业务辅以事务
INSERT INTO orders (order_id, status, amount) 
VALUES (?, 'PENDING', ?)
ON DUPLICATE KEY UPDATE status = 'PENDING';

-- 关键资金操作使用事务
BEGIN TRANSACTION;
UPDATE account SET balance = balance - ? WHERE user_id = ?;
INSERT INTO transaction_log VALUES (...);
COMMIT;

实施效果

  • 订单处理差错率降至0.001%以下
  • 系统吞吐量下降18%,在可接受范围
  • 客户投诉率降低35%

总结

精确一次语义的实现确实需要付出显著成本,但这种成本在关键业务场景中是必要的投资。成功的精确一次实践需要在业务需求技术成本之间找到平衡点,而不是盲目追求技术完美性。

核心决策原则

  1. 业务驱动:根据业务影响决定一致性投资
  2. 适度设计:避免过度工程和不必要的复杂性
  3. 渐进演进:从简单方案开始,逐步优化
  4. 监控保障:建立完善的可观测性和应急机制

未来发展趋势

  • 硬件加速:利用RDMA、持久内存等技术降低事务开销
  • 算法优化:新的一致性算法减少协调开销
  • 云原生支持:云平台提供托管的一致性服务
  • 智能降级:根据系统负载自动调整一致性级别

精确一次不是流处理的终点,而是构建可靠数据系统的起点。在理解其真实成本的基础上,企业可以做出更明智的技术决策,构建既满足业务需求又保持合理成本的数据处理系统。


📚 下篇预告
《数据湖技术对比——Iceberg、Hudi、Delta的表格格式与维护策略》—— 我们将深入探讨:

  • 🏗️ 架构设计:三种表格格式的存储布局、元数据管理与Schema演化机制
  • 查询性能:索引策略、数据剪枝、统计信息与查询优化对比
  • 🔄 增量处理:CDC集成、流式更新与时间旅行实现差异
  • 🛡️ 事务保障:ACID实现、并发控制与一致性模型深度分析
  • 🔧 运维成本:数据维护、版本清理与性能调优实践指南

点击关注,掌握数据湖技术选型的关键决策因素!

今日行动建议

  1. 评估关键业务场景的真实一致性需求,避免过度设计
  2. 分析现有系统的数据准确性现状,识别改进优先级
  3. 制定分层一致性策略,不同业务采用不同强度保证
  4. 规划精确一次实施路线,从非核心业务开始验证
  5. 建立数据质量监控体系,确保一致性投资产生实际价值

相关工具太多了

大概要求:
1. 可以自动更新, 比如 yt-dlp 之类工具
2. 可以一键下载列表
3. 自带登录获取 cookie 功能, 很多软件需要使用一些插件软件等拿到 cookie 再配置, 比较麻烦
4. 自动配置使用合适格式下载, 我一般要 1080p 就够了, 如果没有就 720p, 自动选择灵活点

一、组件架构和核心小知识

1.1 一起来看看这个组件是个啥

RichEditor 是 ArkTS 中支持图文混排交互式文本编辑的核心组件,适用于:

  • 评论/社交内容编辑
  • 富文本表单输入
  • 文档编辑器
  • 多媒体内容发布
graph TD
    A[UI层] --> B[渲染引擎]
    B --> C[内容管理层]
    C --> D[样式控制器]
    C --> E[事件处理器]
    D --> F[属性字符串/SPAN管理]

二、核心API对比与适配策略

1.2 内容管理模型对比一下下

特性基于属性字符串构建基于Span构建
数据结构StyledString对象序列化独立Span对象集合
样式更新效率批量更新(O(1))增量更新(O(n))
复杂操作支持有限(依赖属性字符串解析)完整(支持动态增删改)
跨平台兼容性需手动处理序列化/反序列化原生支持

代码对比小例子

// 基于属性字符串构建(鸿蒙5+)
const styledString = new MutableStyledString("带样式的文本", [
  { start: 0, length: 2, styledKey: FONT, styledValue: { fontSize: 20 } }
]);
new RichEditor({ controller: new RichEditorStyledStringController() })
  .setStyledString(styledString);

// 基于Span构建(鸿蒙6+推荐)
new RichEditor({ controller: new RichEditorController() })
  .addTextSpan("动态内容", { fontSize: 18, fontColor: Color.Red });

二、核心API和一些常用功能的实现

2.1 内容操作接口矩阵

操作类型基于属性字符串方法基于Span方法
文本插入setStyledString()addTextSpan()
图片插入不支持addImageSpan()
自定义内容需通过属性字符串编码addBuilderSpan()
样式更新批量更新属性字符串单个Span样式修改
范围查询通过字符串索引定位getSpans()精确查询

2.2 举个例子

2.2.1 自定义表情键盘集成

// 鸿蒙6+实现方案
RichEditor()
.customKeyboard(
  EmojiKeyboard(), // 自定义组件
  { supportAvoidance: true }
)
.onIMEInputComplete((span) => {
  if(span.type === SpanType.IMAGE) {
    this.updateEmojiCount();
  }
});

2.2.2 @好友功能的实现

// 带数据携带的@好友实现(鸿蒙6)
addAtFriend(friendId: string) {
  const friendSpan = new TextSpan(
    `@${friend.name} `,
    { 
      data: { id: friendId },
      style: { textDecoration: Underline }
    }
  );
  this.controller.addTextSpan(friendSpan);
  
  // 光标定位处理
  this.controller.setCaretOffset(
    friendSpan.spanRange[1] + 1
  );
}

三、多版本适配

3.1 API差异对比一下下

API鸿蒙5实现鸿蒙6+优化
图片插入需使用addImageSpan+手动布局支持自动尺寸适配
样式继承需手动设置父子级样式新增inheritStyle属性
撤销/重做需自行实现历史栈内置undoManager
性能监控无原生支持提供getMemoryUsage()方法

3.2 版本兼容

// 鸿蒙5/6兼容处理
const isHarmonyOS6 = version >= 6;

// 内容初始化
const initContent = () => {
  if(isHarmonyOS6) {
    return new RichEditorController().addTextSpan("默认内容");
  } else {
    const styledString = new MutableStyledString("默认内容");
    return new RichEditorStyledStringController().setStyledString(styledString);
  }
}

// 样式应用
const applyStyle = (span: TextSpan) => {
  if(isHarmonyOS6) {
    span.style.inheritStyle = true;
  } else {
    span.style.fontFamily = "SystemDefault";
  }
}

四、优化一下下

4.1 内存管理策略

鸿蒙6+内存优化举个例子

// 批量操作优化
const batchUpdate = () => {
  this.controller.startBatchUpdate();
  try {
    this.controller.addTextSpan("批量内容1");
    this.controller.addTextSpan("批量内容2");
  } finally {
    this.controller.endBatchUpdate();
  }
}

// Span复用策略
const spanPool = new Map<string, TextSpan>();

const getTextSpan = (text: string) => {
  if(!spanPool.has(text)) {
    spanPool.set(text, new TextSpan(text, { fontSize: 14 }));
  }
  return spanPool.get(text)!;
}

4.2 渲染性能对比一波

场景鸿蒙5(FPS)鸿蒙6+(FPS)优化措施
1000字符纯文本5862文本分块渲染
50张图片混排4255图片懒加载+内存缓存
频繁样式切换3548样式对象池+脏标记机制

五、复杂场景解决方案

5.1 自定义键盘

sequenceDiagram
    participant Editor
    participant Keyboard
    participant System
    
    Editor->>+Keyboard: 设置customKeyboard
    Keyboard->>+System: 请求显示权限
    System-->>-Keyboard: 返回权限结果
    Keyboard->>Editor: 返回键盘组件
    Editor->>Editor: 渲染自定义键盘

5.2 撤销/重做实现方案

class EditorHistory {
  private stack: { type: 'add' | 'delete', data: any }[] = [];
  private currentIndex = -1;

  addOperation(type: 'add' | 'delete', data: any) {
    this.stack = this.stack.slice(0, this.currentIndex + 1);
    this.stack.push({ type, data });
    this.currentIndex++;
  }

  undo() {
    if(this.currentIndex >= 0) {
      const op = this.stack[this.currentIndex--];
      op.type === 'add' ? this.controller.deleteSpans(op.data) : this.controller.addSpan(op.data);
    }
  }

  redo() {
    if(this.currentIndex < this.stack.length - 1) {
      this.currentIndex++;
      const op = this.stack[this.currentIndex];
      op.type === 'add' ? this.controller.addSpan(op.data) : this.controller.deleteSpans(op.data);
    }
  }
}

六、调试与监控方案

6.1 开发调试工具链

// 内存监控配置
const memoryMonitor = setInterval(() => {
  console.log(`JS Heap: ${this.controller.getMemoryUsage().jsHeapSize} KB`);
}, 5000);

// 性能分析面板
const perfObserver = new PerformanceObserver((list) => {
  const entries = list.getEntries();
  console.log('渲染耗时:', entries[0].duration);
});
perfObserver.observe({ entryTypes: ['render'] });

6.2 常见问题排查矩阵

现象可能原因解决方案
光标跳动异常Span跨度计算错误使用getSpanRange()验证范围
图片显示错位未设置imageStyle.size显式指定图片尺寸
样式继承失效未启用inheritStyle属性在父级Span设置继承属性
撤销历史丢失未使用批量操作API包裹操作于startBatchUpdate()

七、结论一下下哈

  1. 组件选型原则

    • 简单文本编辑 → TextInput
    • 富文本交互 → RichEditor
    • 纯展示场景 → RichText
  2. 性能优化黄金法则

    • 批量操作优先(startBatchUpdate
    • 避免频繁创建Span对象(使用对象池)
    • 图片资源预加载(Image.preload()
  3. 跨版本适配策略

    // 特性检测实现
    const supportsDataDetector = () => {
      return 'enableDataDetector' in RichEditorController.prototype;
    }
    
    // 条件渲染
    if(supportsDataDetector()) {
      this.controller.enableDataDetector(true);
    }
  4. 安全加固方案

    • 输入内容XSS过滤
    • 敏感词正则拦截
    • 敏感操作二次确认

根据初中思想政治课,越穷的人,支出里的饮食部分比例越大
所以当你想省钱,最先开刀的当然就是饮食支出
/

20 30 年前,要省吃很简单.
吃不起炒菜就吃盖饭,吃不起盖饭就吃炒饭.
于是沙县和兰州风靡天下.他们的食材以廉价的面粉为主,所以售价足够吸引人.
/

后来不动产开始兴风作浪,租金成本飙升.
于是沿街搬进了商场,一楼下沉到地下,实在租不起你就摆个摊.
也还是勉强维持住了食材成本在总成本里的主角地位
/

再后来大家的薪水开始奔小康,人工成本就逐渐成了餐饮业成本里的主角
这时候,沙县兰州的发展就停滞甚至倒退了,因为他们的人力并不比其他店低成本
要是不批量开放外劳,这人力成本怕是没有直接降低的办法.毕竟能去做餐饮的,已经不是什么一线城市有房的土著,也不是什么海归研究生,已经是最便宜的所谓流动人口了,你还能怎么低下去?
/

这时候再要想降低售价,只有中央厨房这种形式了,节约了厨房空间的租金,也利用了生产线带来的人力节约.
于是预制菜就成了人们不想承认,但总是购买的餐饮形式.包括便宜的餐厅和便利店里的各种外食.
/

楼主十几年前很少吃便利店的便当,因为当时一份便当和一份有锅气的热炒一样钱.
可现在呢,便当便宜得多得多得多得多得多
/

这么一对比,中等收入还真是陷阱,起码饮食这部分,没有变好
这样的现状,是不是要全国性迈向富裕,家庭月收入平均 7 万,才能改变?

LLaMA、Mistral、Qwen这些大语言模型动辄数十亿参数,在自定义数据上全量微调代价极高:65B 模型光是 float16 就要消耗掉约 130GB 显存,顶配硬件跑个几天几周很正常而多数下游任务根本用不到那么多参数。

于是研究者们开始思考:能不能只调一小部分参数,效果还不差?答案是可以。这类方法统称为参数高效微调(PEFT)。LoRA、QLoRA、DoRA 各自从不同角度切入这个问题。

LoRA——低秩自适应

论文:LoRA: Low-Rank Adaptation of Large Language Models, Hu et al. (ICLR 2022)

核心思想

LoRA 的做法很简单,冻结原始权重矩阵 W在旁边挂两个小的可训练矩阵 A 和 B。前向传播时的计算表达式为:

 output = W·x + (B·A)·x × (alpha/r)

训练过程中只更新 A 和 B,W 保持不动。这里的秩 r 是分解的瓶颈维度常见取值 4、8 或 16。alpha 是缩放因子控制 LoRA 更新的强度。

参数量的减少非常明显以一个 (4096, 4096) 的权重矩阵为例,原始参数量是 1670 万换成 rank=8 的 LoRA 之后,A 的维度 (8, 4096) 有 32,768 个参数,B 的维度 (4096, 8) 同样 32,768 个,加起来总共 65,536——比原来少了 99.6%。

LoRA 论文中一个关键发现是,微调过程中大部分有意义的权重更新本来就集中在低维子空间里,所以把更新约束在低秩矩阵上并不会造成多大损失。

微软官方仓库中 Linear 层的实现:

 # Source: github.com/microsoft/LoRA — loralib/layers.py 
 
 class Linear(nn.Linear, LoRALayer):  
     def __init__(  
         self,  
         in_features: int,  
         out_features: int,  
         r: int = 0,  
         lora_alpha: int = 1,  
         lora_dropout: float = 0.,  
         merge_weights: bool = True,  
         **kwargs  
     ):  
         nn.Linear.__init__(self, in_features, out_features, **kwargs)  
         LoRALayer.__init__(self, r=r, lora_alpha=lora_alpha,  
                            lora_dropout=lora_dropout,  
                            merge_weights=merge_weights)  
         if r > 0:  
             self.lora_A = nn.Parameter(  
                 self.weight.new_zeros((r, in_features))  
             )  
             self.lora_B = nn.Parameter(  
                 self.weight.new_zeros((out_features, r))  
             )  
             self.scaling = self.lora_alpha / self.r  
             # Freeze the pretrained weights  
             self.weight.requires_grad = False  
   
     def forward(self, x: torch.Tensor):  
         if self.r > 0 and not self.merged:  
             # Original frozen weights + low-rank update  
             result = F.linear(x, self.weight, bias=self.bias)  
             result += (  
                 self.lora_dropout(x)  
                 @ self.lora_A.transpose(0, 1)  
                 @ self.lora_B.transpose(0, 1)  
             ) * self.scaling  
             return result  
         else:  
             return F.linear(x, self.weight, bias=self.bias)

实际用于替换注意力投影的写法:

 # Source: github.com/microsoft/LoRA — README [1]  
 import loralib as lora  
   
 # Before: standard attention projection  
 # qkv_proj = nn.Linear(d_model, 3*d_model)  
   
 # After: apply LoRA to Q and V, freeze K  
 qkv_proj = lora.MergedLinear(  
     d_model, 3*d_model,  
     r=8,  
     enable_lora=[True, False, True]  # Q=LoRA, K=frozen, V=LoRA  
 )  
   
 # Mark only LoRA parameters as trainable  
 lora.mark_only_lora_as_trainable(model)

基准测试结果(来自 LoRA 论文 )

论文在 GPT-2(自然语言生成)和 RoBERTa/DeBERTa(GLUE 基准)上做了评测。下面是 GPT-2 在 E2E NLG Challenge 上的成绩,LoRA 与全量微调及其他 PEFT 方法的对比:

 | Method            | Trainable Params | BLEU | NIST | MET  | ROUGE-L | CIDEr |  
 |-------------------|-----------------|------|------|------|----------|-------|  
 | Full Fine-Tuning  | 117M            | 68.2 | 8.62 | 46.2 | 71.0     | 2.47  |  
 | Adapter (Houlsby) | 1.0M            | 66.3 | 8.41 | 45.0 | 69.8     | 2.40  |  
 | Prefix Tuning     | 0.35M           | 68.1 | 8.59 | 46.3 | 70.8     | 2.47  |  
 | LoRA (r=4)        | 0.77M           | 70.4 | 8.85 | 46.8 | 71.8     | 2.53  |

LoRA 不只是持平全量微调而是在训练不到 1% 参数的情况下反超了。论文把原因归结于正则化效应:低秩约束本身起到了防止过拟合的作用。

关键超参数

秩 r 定义瓶颈维度,4 到 16 的范围能覆盖绝大多数场景,r 越大容量越高、参数也越多。Alpha(lora_alpha)是缩放因子,LoRA 更新的有效学习率等于 alpha/r一般设 alpha=2r 是不错的起点。Target Modules 决定 LoRA 挂载到哪些层,注意力中的

q_proj

v_proj

是最常见的选择。

QLoRA——量化 LoRA

论文:QLoRA: Efficient Finetuning of Quantized LLMs, Dettmers et al. (NeurIPS 2023)

LoRA 没彻底解决的问题

LoRA 虽然减少了可训练参数,但基础模型还是得完整加载。65B 模型 float16 要 130GB 显存通常得上多块 A100,大部分研究者手里没这个条件。

QLoRA 先把基础模型量化成 4 位再在上面以 16 位跑 LoRA 适配器。

三大技术创新(来自 QLoRA 论文 )

QLoRA 论文同时引入了三项相互配合的技术。

第一项是 NF4(4-bit NormalFloat)一种专门针对正态分布权重设计的 4 位数据类型。神经网络权重天然服从正态分布NF4 从信息论角度是最优的编码方式,存储效率上比 INT4 和 FP4 都要高出一截。

第二项是双重量化,量化常数(把 4 位值转换回浮点时用的常数)本身也占内存,QLoRA 干脆把量化常数也给量化了,65B 模型上约省 3GB 内存。

第三项针对梯度检查点带来的内存峰值,QLoRA 利用 NVIDIA 统一内存机制,当某条序列在 GPU 上触发 OOM 风险时,自动把优化器状态卸载到 CPU RAM等需要时再换回来。

代码(来自 artidoro/qlora)

 # Source: github.com/artidoro/qlora — qlora.py [2]  
 from transformers import AutoModelForCausalLM, BitsAndBytesConfig  
 from peft import LoraConfig, get_peft_model, prepare_model_for_kbit_training  
 import torch  
   
 # Step 1: Define 4-bit quantization config (NF4)  
 bnb_config = BitsAndBytesConfig(  
     load_in_4bit=True,  
     bnb_4bit_quant_type="nf4",          # NormalFloat4  
     bnb_4bit_compute_dtype=torch.bfloat16,  # Compute in bf16  
     bnb_4bit_use_double_quant=True,     # Double quantization  
 )  
   
 # Step 2: Load base model in 4-bit  
 model = AutoModelForCausalLM.from_pretrained(  
     "meta-llama/Llama-2-7b-hf",  
     quantization_config=bnb_config,  
     device_map="auto",  
 )  
   
 # Step 3: Prepare for k-bit training (handles frozen layer casting)  
 model = prepare_model_for_kbit_training(model)  
   
 # Step 4: Apply LoRA adapters in 16-bit on top  
 lora_config = LoraConfig(  
     r=64,  
     lora_alpha=16,  
     target_modules=["q_proj", "v_proj"],  
     lora_dropout=0.05,  
     bias="none",  
     task_type="CAUSAL_LM",  
 )  
 model = get_peft_model(model, lora_config)

整个过程中基础模型权重始终保持 NF4(4 位、冻结状态)只有 LoRA 适配器权重以 bf16 精度参与训练。

基准测试结果(来自 QLoRA 论文 )

QLoRA 训练出了 Guanaco 系列模型。在 GPT-4 评估的 Vicuna 基准测试中,Guanaco 65B 用单块 48GB GPU 训练了 24 小时,就达到了 ChatGPT 性能的 99.3%。

更关键的一点是4 位量化相比 16 位 LoRA 几乎没有性能损失:

 | Method               | Model | Memory Usage | Vicuna Score vs ChatGPT |  
 |----------------------|-------|--------------|--------------------------|  
 | Full Fine-Tuning (fp16) | 65B   | >780 GB      | —                        |  
 | LoRA (fp16)          | 65B   | ~130 GB     | —                        |  
 | QLoRA (NF4)          | 65B   | ~48 GB      | 99.3%                    |  
 | QLoRA (NF4)          | 33B   | ~24 GB      | 97.8%                    |  
 | QLoRA (NF4)          | 7B    | ~5 GB       | ~87%                     |

7B Guanaco 模型只占 5GB 显存在 Vicuna 基准上却以超过 20 个百分点的差距碾压了 Alpaca 65B。这才是 QLoRA 真正革命性的地方:拿一块普通 GPU 就能微调大规模语言模型门槛一下子降到了底。

DoRA——权重分解低秩自适应

论文:DoRA: Weight-Decomposed Low-Rank Adaptation, Liu et al. (ICML 2024, Oral)

LoRA 表现不错但和全量微调之间始终有一道精度差距,当秩取值较低时这个差距尤为明显——LoRA 没法完整复现全参数更新时的梯度学习行为。

问题出在哪?DoRA 论文提出了一种权重分解分析来回答这个问题。

核心洞察

任何权重矩阵 W 都可以拆成两个分量:

 W = m × (V / ||V||_c)

其中 m 是幅度分量,这个标量向量反映每个输出神经元权重的"大小";V / ||V||_c 是方向分量,即权重的单位方向向量。

DoRA 论文发现,全量微调时幅度和方向是以灵活、耦合的方式同步更新的。但 LoRA 的更新方式把两者绑在一起,主要只改变了方向上的朝向反而限制了模型的学习能力。

DoRA 的做法是把两者拆开:冻结分解结构后,只让 LoRA 作用于方向分量,同时把幅度 m 当作独立的可学习标量自由更新。

 W' = (m + Δm) × ((V + ΔV_LoRA) / ||V + ΔV_LoRA||_c)

这样一来 LoRA 的学习模式就更接近全量微调了。并且由于幅度和方向在部署前可以合并回单个权重矩阵,推理阶段零额外开销。

代码(来自 NVlabs/DoRA )

DoRA 的前向传播逻辑,简化后展示核心分解机制:

# Source: github.com/NVlabs/DoRA — adapted from DoRA paper implementation [3]  
import torch  
import torch.nn as nn  
import torch.nn.functional as F  

class DoRALayer(nn.Module):  
    def __init__(self, d_in, d_out, rank, lora_alpha):  
        super().__init__()  

        # Frozen pretrained weight  
        self.weight = nn.Parameter(  
            torch.randn(d_out, d_in), requires_grad=False  
        )  

        # Learnable magnitude (one scalar per output neuron)  
        self.m = nn.Parameter(  
            self.weight.norm(p=2, dim=1, keepdim=True)  
        )  

        # LoRA matrices for directional updates (trainable)  
        std = 1 / torch.sqrt(torch.tensor(rank).float())  
        self.lora_A = nn.Parameter(torch.randn(d_in, rank) * std)  
        self.lora_B = nn.Parameter(torch.zeros(rank, d_out))  

        self.rank = rank  
        self.scaling = lora_alpha / rank  

    def forward(self, x):  
        # Compute the directional update from LoRA  
        lora_update = (self.lora_A @ self.lora_B).T * self.scaling  

        # Adapted weight = base weight + LoRA update  
        adapted = self.weight + lora_update  

        # Column-wise normalization → unit direction vectors  
        column_norms = adapted.norm(p=2, dim=1, keepdim=True)  
        V_normalized = adapted / column_norms  

        # Scale by learned magnitude  
        effective_weight = self.m * V_normalized  

        return F.linear(x, effective_weight)

通过 HuggingFace PEFT 启用 DoRA(peft>=0.9.0 已支持 ):

# Source: HuggingFace PEFT documentation — DoRA is supported from peft>=0.9.0 [3]  
from peft import LoraConfig, get_peft_model  

lora_config = LoraConfig(  
    r=16,  
    lora_alpha=32,  
    target_modules=["q_proj", "v_proj"],  
    lora_dropout=0.05,  
    bias="none",  
    task_type="CAUSAL_LM",  
    use_dora=True,   # ← This single flag enables DoRA  
)  

model = get_peft_model(model, lora_config)

就一个标志位这是和 LoRA 配置的唯一区别。

基准测试结果(来自 DoRA 论文 [3])

DoRA 论文在 8 个常识推理数据集(BoolQ、PIQA、HellaSwag、WinoGrande、ARC-e、ARC-c、OBQA 及综合平均)上做了评测,在 LLaMA-7B 和 LLaMA2-7B 两个模型上与 LoRA 对比,秩相同、可训练参数量相同,确保公平:

| Method        | BoolQ | PIQA | HellaSwag | WinoGrande | ARC-e | ARC-c | OBQA | Avg   |  
|--------------|-------|------|-----------|------------|-------|-------|------|-------|  
| Full FT      | 69.4  | 82.3 | 89.7      | 82.4       | 79.8  | 60.7  | 81.6 | 77.99 |  
| LoRA (r=32)  | 68.9  | 80.9 | 90.0      | 82.1       | 78.2  | 59.8  | 80.0 | 77.13 |  
| DoRA (r=32)  | 70.0  | 83.6 | 91.0      | 83.0       | 81.4  | 65.8  | 83.4 | 79.75 |

8 个数据集上 DoRA 全面胜出。差距在复杂推理任务上尤其明显比如 ARC-c 从 LoRA 的 59.8 跳到 65.8,幅度相当大。论文还跑了 LLaVA-1.5-7B 的视觉指令调优和 VL-BART 的图像/视频-文本理解实验,DoRA 同样全面压过 LoRA。

对比

内存需求

| Method                  | LLaMA 7B | LLaMA 13B | LLaMA 33B | LLaMA 65B |  
|-------------------------|----------|-----------|-----------|-----------|  
| Full Fine-Tuning (fp16) | ~28 GB   | ~52 GB    | ~130 GB   | ~260 GB   |  
| LoRA (fp16)             | ~14 GB   | ~26 GB    | ~65 GB    | ~130 GB   |  
| QLoRA (NF4)             | ~5 GB    | ~8 GB     | ~20 GB    | ~48 GB    |  
| DoRA (fp16)             | ~14 GB   | ~26 GB    | ~65 GB    | ~130 GB   |

DoRA 因为多了一个幅度向量(每个目标层的每个输出神经元一个标量),会有少量额外开销但实际可以忽略。

与全量微调的性能对比

| Method            | Commonsense Reasoning | Instruction Tuning     | Memory     |  
|-------------------|-----------------------|------------------------|------------|  
| Full Fine-Tuning  | Baseline              | Baseline               | Very High  |  
| LoRA              | -0.86 avg             | Comparable             | Medium     |  
| QLoRA             | ~Same as LoRA         | 99.3% of ChatGPT       | Low        |  
| DoRA              | +2.62 avg over LoRA   | Better than LoRA       | Medium     |

训练速度(相对值)

 | Method | Speed                                   |  
 |--------|------------------------------------------|  
 | LoRA   | Fast                                     |  
 | DoRA   | Fast (near identical to LoRA)            |  
 | QLoRA  | Moderate (quantize/dequantize overhead)  |

各场景下的最佳选择

该用 LoRA 的场景

显存 16GB 以上,模型不超过 13B 左右想要一个稳定可靠、经过实战验证的方案。所有后续方法都建立在 LoRA 之上,HuggingFace 的 PEFT 生态围绕它搭建,工具链最成熟。没做过 PEFT 的人从这里入手最省心。

该用 QLoRA 的场景

显存小但又想跑 30B 以上的大模型。QLoRA 让单块 48GB GPU 微调 LLaMA-65B 成为现实,24GB 显存就能跑 LLaMA-33B。用免费 Colab T4(15GB 显存)想动 20B+ 模型的话,QLoRA 基本是唯一可行方案。

该用 DoRA 的场景

在跟 LoRA 一样的参数预算下追求最高精度,DoRA 是 LoRA 的即插即用替代品配置里加个

use_dora=True

就行推理零成本,并且在复杂推理任务上提升尤为突出。

该用 QLoRA + DoRA(QDoRA)的场景

既要省显存又要高精度这种组合已获官方支持,实验数据证明效果优于单纯的 QLoRA。部分早期实验甚至表明 QDoRA 能持平乃至超过全量微调。

总结

2025 年的微调生态分三层:LoRA 是底座,简单、快、生态好,多数场景够用;QLoRA 打开了消费级显卡微调大模型的大门精度还没怎么掉;DoRA 则是免费升级——跟 LoRA 成本一样但结果更好,

use_dora=True

一行代码就能搞定。

三种方法各有分工,互为补充,你唯一需要考虑的是哪种 PEFT 方案最贴合自己的硬件条件和精度要求。

https://avoid.overfit.cn/post/154732e0b0474f2ea8e2a4dac0d16819

by Harish K

在日常的软件开发与技术深耕中,大语言模型(LLM)已经从单纯的“智能问答”演变成了不可或缺的生产力引擎。2026 年的今天,超过半数的代码由 AI 辅助生成已成为常态。然而,面对同样的工具,不同开发者的产出效率却有着天壤之别。

如何真正将 AI 深度融入工程工作流,而不是停留在简单的“尝鲜”阶段?以下总结了 8 个极具实操价值的 AI 使用技巧,覆盖了从底层认知、代码工程到架构自动化的全链路,旨在帮助开发者打破效率瓶颈。


一、 认知与工具篇

1. 拥抱优质模型:在能力范围内为效率投资

免费与付费模型之间,存在着维度的代差。在处理复杂的逻辑推理、长上下文理解或底层架构设计时,前沿的高阶模型(如具备深度思考和长文本处理能力的模型)往往能一次给出结构清晰、Bug 极少的答案。相反,能力较弱的模型产生的“看似正确实则漏洞百出”的代码,会大幅增加 Debug 的时间。将订阅优质工具视为对“研发效率”的投资,其节省的时间和排错精力,回报率通常远超预期。

2. 重塑交互耐心:把“不符合预期”视为优化的契机

许多人在尝试将完整需求交给 AI 时,一旦发现输出结果无法运行,就会得出“AI 不好用,还不如自己写”的结论,从而将其束之高阁。事实上,大模型是严格遵循“输入决定输出(Garbage in, garbage out)”法则的概率机器。结果不理想,往往是因为隐性上下文(如框架版本、本地表结构)没有交代清楚。遇到报错时不要急于放弃,补充约束条件、重新调整提示词,是与 AI “对齐”的必经之路。

3. 保持技术敏锐度:紧跟新模型与新范式

AI 领域的迭代速度极快。新的长上下文技术、更强大的代码专属模型或是新的 Agent(智能体)交互范式随时都在涌现。保持开放的心态,当有显著提升的新模型或新工具发布时,第一时间将其纳入本地的开发测试流。在技术大爆炸的时代,固守旧版本的工具往往意味着被生产力曲线抛弃。


二、 编码与工程篇

4. 转移核心精力:从“编写者”转型为“审查与验收者”

AI 极大地降低了代码生成的成本。几秒钟内生成几百行代码已成为常态,但这并不意味着软件工程的门槛降低了。相反,它要求开发者将核心精力从“敲击键盘编写代码”转移到系统设计、代码审查(Code Review)和质量验收上。验证 AI 代码的健壮性、安全性和极端边界处理能力,正成为现代开发者最重要的核心竞争力。

5. 避免上下文污染:生成优于修改,果断 Reset

在修改 AI 生成的错误代码时,一个常见的陷阱是:在同一个对话框里不断让 AI “修复这个 bug”、“再改一下那里”。这会导致对话历史中堆积大量废弃的代码和无效补丁,造成严重的“上下文污染”,让模型越改越错。
核心实操:AI 生成代码的能力远大于在烂代码上修补的能力。如果生成的代码需要大量修改,最好的策略是果断 Reset(清空当前对话),带上优化后的提示词和干净的上下文重新生成。


三、 进阶提示词与自动化篇

6. 精炼输入质量:系统学习并制作高级提示词

提示词(Prompt)就是人类与 AI 沟通的“编程语言”。学会使用结构化的模板,明确设定角色(Role)、背景(Context)、任务(Task)、约束条件(Constraints)和输出格式(Format)。建立属于自己的“代码切片与风格提示词库”(Few-Shot Prompting),在遇到同类问题时直接带入团队现有的代码规范让 AI 参考,能极大提升输出的可用性。

7. 翻转沟通角色:采用“教练模式”与分阶段交互

不要总是指望 AI 通过一个干瘪的指令就直接给出完美的最终方案。更高阶的做法是“反客为主”——在提示词中告诉 AI:“在给出方案之前,请先向我连续提出 5 个问题,以收集我具体的业务背景、系统环境和性能约束”。通过这种分阶段的问答交互建立高精度的上下文框架,随后生成的定制化代码质量将产生质的飞跃。

8. 工作流自动化:将高频的标准作业沉淀为 Tool

如果每天的输入逻辑和输出目标是高度结构化、标准化的(例如:写博客时需要固定把 Markdown 正文丢给 AI,让它生成图片风格提示词以及每个插图内容提示词,然后再根据风格提示词和插图内容生成图片,最后copy图片),利用现有的工作流编排工具或智能体平台,将固定的提示词和调用逻辑封装成专属的 Tool 或 Pipeline。直接输入原始内容(博客内容),一键输出最终结果(所有插图),完成从“手工对话”到“自动化计算引擎”的思维跃迁。


结语
工具的上限,取决于使用者的思维边界。把 AI 当作一个拥有无限算力但缺乏特定业务背景的“超级实习生”,给足上下文、拆解好任务、把控好验收环节。习惯并精通这些技巧,AI 必将成为职业生涯中最强大的杠杆。

本文由mdnice多平台发布

大家好,近期开源了一个专为 Cloudflare 生态设计的个人博客系统:Flare Stack Blog 。

这个项目最大的特点是完全抛弃了传统 VPS 。你不需要购买和维护任何服务器,只要在 Cloudflare 上托管一个域名,利用其免费额度即可实现完整的边缘节点全栈部署,零运行成本(仅需支付域名费)。

这套系统深度集成了 CF Serverless 服务,非常适合想极低成本建站,或者想完整实践 Cloudflare 全家桶开发工作流的开发者。

界面预览

首页效果:
首页

多主题切换( Fuwari 主题示例):
主题预览

管理后台:
管理后台

项目地址

核心功能

  • 主题系统:内置 default 和 fuwari 两套主题
  • 富文本编辑器基于 TipTap 3 并集成 Shiki 代码高亮,支持标签、AI 摘要生成,图片可直接粘贴上传至 R2
  • 定时发布(基于 Cloudflare Workflows 实现异步调度)
  • 嵌套评论系统及防垃圾 AI 审核机制
  • 友链功能做到了前台申请、后台审核的完整闭环
  • 接入异步邮件通知
  • 全文搜索(边缘端 Orama )
  • 导入/导出功能( v0.8.0 新增,ZIP 格式备份与恢复)
  • 自动检测 GitHub 最新版本并提示
  • 后台集成 Umami 统计
  • Turnstile 人机验证
  • 接口分布式限流

技术与功能细节

整个项目跑在 Cloudflare Workers 上,把 CF Serverless 服务基本用了个遍:D1 ( SQLite 主库)、R2 (媒体存储)、KV (缓存层)、Durable Objects (分布式限流 + 密码哈希重度计算)、Queues (邮件发送异步队列)、Workflows (评论审核、定时发布、导入导出等异步任务)、Workers AI ( AI 功能)。

前后端同构,前端 React 19 + TailwindCSS 4 ,路由和数据管理用 TanStack Router/Query ,后端 SSR 和 Server Functions 由 TanStack Start 承接。最外层网关是 Hono ,处理路由拦截、CDN 缓存控制和鉴权( Better Auth 实现 GitHub OAuth )。ORM 选了 Drizzle 配合 drizzle-zod ,端到端类型安全。

功能层面,多层缓存( CDN → KV → D1 )、边缘端 Orama 全文搜索、R2 图片直传都已实现。主题系统基于 TypeScript 接口定义"主题契约",业务层与表现层彻底解耦,换主题不需要动任何接口和数据层代码,支持脚手架快速创建新主题

先说结论:2026 年了,AI 视频生成依然没有"一个模型打天下"的局面,但格局正在剧变. 所以我从捡钱的套壳转变开始做艰难的品牌站:veemo.ai 。以下是整个心路路程的历程的真实分享:

尤其是上个月 ByteDance 发布 Seedance 2.0 之后,整个行业的天花板被狠狠拉高了一截。今天来跟 V 友们聊聊我花了大半年、烧了不少钱实测出来的发现,以及基于这些发现做了什么。

起因
我是一个独立开发者,去年开始重度使用 AI 视频生成工具,熟悉我的朋友应该知道,我也做了好几个套壳站比如 saro2.aiseedancev2.ainan0banana.ai 。在这半年做套壳的接客诉发现一个很蛋疼的问题:
同一个 prompt ,不同模型出来的东西差异巨大,而且各有各的强项。
举几个真实场景:

  • 想生成一个「女生在咖啡店看书」的画面 → A 模型人物自然但背景糊,B 模型背景精细但人脸崩了
  • 想做一个「无人机航拍城市」的镜头 → C 模型运镜丝滑但色彩偏灰,D 模型色彩艳丽但运镜会抖
  • 想生成「猫咪跳上桌子」→ 有的模型动作很流畅,有的直接给你整出一只六条腿的猫
    每次都要在 4-5 个平台之间来回切,注册一堆账号,充一堆钱,截图对比。这个工作流实在太蠢了。

重点聊聊:Seedance 2.0 到底有多炸裂
2 月 12 号 ByteDance 发了 Seedance 2.0 ,72 小时内微博话题阅读量破千万,马斯克都发了三个字:"It's happening fast." 有人拿它跟年初 DeepSeek 的冲击波相提并论,我觉得不夸张。
用了两周,说几个让我真正震撼的点:

  1. 四模态输入,真正的"导演级控制"
    这是 Seedance 2.0 最核心的突破。它不像其他模型只接受文字 prompt ,它能同时接收文本、图片(最多 9 张)、视频(最多 3 段)、音频(最多 3 段)作为输入。
    什么意思?你可以给它一张人脸照片、一段舞蹈视频、一段背景音乐,然后用自然语言告诉它:"用这个人的脸,模仿这段舞蹈的动作,节奏跟着这段音乐走"——它真的能理解并融合成一个连贯的视频。
    这种"参考 + 指令"的工作方式,目前没有任何其他模型能做到。Sora 2 有 Cameo 功能可以把你的脸放进视频,但跟 Seedance 2.0 的多模态参考系统比,控制精度完全不在一个量级。

  2. 角色一致性终于不是玄学了
    做过 AI 视频的都知道,"角色一致性"是行业性难题——同一个角色跨镜头时脸会变、衣服会换、整个人可能直接变成另一个人。
    Seedance 2.0 在这块进步巨大。面部特征、服装细节、甚至画面中的文字和 Logo ,跨镜头都能保持高度一致。做多镜头叙事短片终于不用祈祷了。

  3. 原生音视频同步
    这个是真正的降维打击。Seedance 2.0 不是生成完视频再配音,而是音频和视频在同一个模型架构里同步生成。脚步声、环境音、对话口型,全部在生成阶段就对齐了。还支持多语言口型同步。
    大多数模型生成完视频还要你自己去配音配乐,Seedance 2.0 直接帮你出成片。

  4. 分辨率直接拉到 2K
    原生支持 2K 输出,Sora 2 目前最高 1080p 。对于需要大屏展示或者后期裁剪的场景,这个差距很实际。

  • Seedance 2.0 = 导演思维。给你最大的控制权,适合商业内容制作、社媒短视频、模板化生产
  • Sora 2 = 物理引擎思维。物理真实感无敌,适合电影级概念片、实验性创作
    对于大部分内容创作者来说,Seedance 2.0 的实用价值其实更高——因为你能精确控制结果,不用反复抽卡。独立测试显示 Seedance 2.0 通常需要更少的生成次数就能得到满意结果。
    但 Sora 2 在极端场景下的表现依然是天花板,比如复杂的多物体碰撞、流体模拟、长镜头叙事( 25 秒 vs 15 秒的时长优势很大)。

其他选手也不能忽视

  • Kling 3.0 (快手):性价比之王,基础生成效果不错,API 价格最友好。适合预算敏感的团队
  • Veo 3.1 ( Google ):整体画质最高,光影处理和色彩分级最接近广播级标准,支持 60fps
  • Runway Gen-4:编辑能力最强,适合已有素材需要精修的工作流
    结论还是那句话:没有全能选手,只有单项冠军。

所以我做了什么
基于这个判断,我做了一个产品:Veemo.ai
思路很直接——既然没有最好的模型,那就让用户一次输入,多模型并行生成,自己挑最好的结果。
具体来说:

  • 视频生成: 聚合了主流视频模型,包括 Seedance 、Sora 等。同一个 prompt 可以同时发给多个模型,结果并排对比。你不用自己在各平台之间反复横跳了。
  • 图片生成: 同样的逻辑。做视频经常需要封面图、分镜参考图,放在一个平台里流程更顺。
  • 音乐生成: 做短视频的用户经常问"有没有配乐功能",就把 AI 音乐也加上了。一个平台搞定内容生产全链路。
    核心价值就一句话:一份订阅替代多个平台,一个工作流覆盖多个模型。
    特别是现在 Sora 2 要 $200/月的 Pro 才能用高级功能,Seedance 2.0 还有地区限制,如果你两个都想用,门槛不低。Veemo 解决的就是这个问题。

一些技术上的取舍(开发者视角)
做这个平台踩了不少坑,简单分享几个:

  1. 多模型调度的延迟问题
    不同模型生成速度差异很大,Seedance 可能 2-3 分钟出结果,Sora Pro 可能要更久。如果等最慢的全部完成再展示,体验很差。最后做成了流式返回,哪个先出就先展示,其他陆续补上。
  2. Prompt 适配是大坑
    同一句自然语言描述,不同模型理解能力差异很大。Seedance 2.0 因为支持多模态参考,其实不太依赖纯文本 prompt ;而 Sora 2 对抽象描述的理解很强但需要更精确的措辞。现在做了一层 prompt 优化层,根据目标模型自动调整输入。
  3. 成本控制
    多模型并行 = 成本翻 N 倍。做了一些策略,比如基于用户需求智能推荐最适合的模型组合,而不是无脑全跑。比如你描述的是"人物舞蹈",系统会优先推 Seedance ;描述的是"物理模拟",会优先推 Sora 。

来求 roast
产品上线不久,功能还在快速迭代。

  1. "模型聚合"这个思路你买不买账? 还是说你觉得大部分用户其实只忠于一个够好的模型?
  2. 作为用户,你选 AI 视频工具最看重什么? 生成质量 > 速度 > 价格 > 操作简单 > 可控性?排个序?
  3. 有什么功能是你特别想要但目前没有的? 比如 API 接口、批量生成、团队协作,还是别的?
  4. 定价方面,Sora 2 Pro 要 $200/月,你觉得这类工具月付多少合理?
    👉 链接:veemo.ai

回帖交流的 V 友,我会认真看每一条回复。
有价值的反馈我会直接加到迭代计划里,也会在帖子里同步后续更新进展。
另外回帖的朋友私信我,送体验额度,感谢各位花时间看完 🙏

首先我虽然学的计算机,但是已经超过 10 年没有接触过任何代码了
自我认知水平应该是文科高中生吧

对于这样的情况,如何利用 AI 开始写出一个自己的程序呢?

比如写一个简单的 web 游戏?

需要安装什么软件?去配置怎样的 AI 接口?
应该不是使用 web 的各种 chat 聊天写代码吧

之前在 ChatGPT 等大模型的 tools 不强大时候,经常使用 Perplexity 来搜集信息+AI 总结。

但现在各家的大模型自带 tools 很强大,就比如 gork 随便丢一个问题都会先搜索一番再回答。所以 Perplexity 很少打开了。

所以它的护城河是什么?大家还在用它吗?什么场景?

问题相关: [Samsung is adding Perplexity to Galaxy AI]( https://www.theverge.com/tech/882921/samsung-is-adding-perplexity-to-galaxy-ai)

麦琪的礼物:指欧·亨利的短篇小说《麦琪的礼物》中,夫妻双方互相牺牲珍贵之物为对方买礼物的故事。

个人无法认同这种表达爱的行为,觉得是 BE. 本来就很穷,德拉卖掉长发,买了表链——但吉姆卖掉了怀表;吉姆卖掉怀表,买了发梳——但德拉剪掉了长发。两份礼物都失去了用途。

联想到现实生活,亲密关系之间,为了表达心意,要费心思准备对方可能用不到的节日礼物,给本来就累的生活加 buff ,形成负和游戏