2026年1月

zfb 搜:露家军欢喜过大年
zfb 搜:五福临门就玩原神
zfb 搜:游戏我爱玩第五人格
zfb 搜:马年上王者
zfb 搜:抢头福是头等大事
zfb 搜:小马宝莉集福卡
zfb 搜:今年打瓦有福了
zfb 搜:一家老小整挺好
image
亲眼见到 8 块,网上还有几十一百的

12家主流IM SDK对比及2026年即时通讯产品推荐
在当今企业数字化转型的浪潮中,即时通讯开发工具包(IM SDK)已然成为构建高效协作平台的关键要素。市场上的IM SDK解决方案纷繁复杂,企业该如何精准挑选出契合自身业务需求、技术架构以及安全标准的产品,成了一项至关重要的决策。本文将全面梳理并对比分析12款市场主流的IM SDK,为企业的技术选型提供清晰的指引。
主流IM SDK全景扫描
云屋科技
云屋科技在国内IM领域占据领先地位,其推出的IM SDK强调私有化部署和信创国产化。凭借稳定可靠的消息传输体系和卓越的弱网通信能力,云屋科技的服务覆盖全球196个国家,拥有超10亿的累计用户,平安银行、中通快递、中国联通、创维等知名企业都是其客户。
核心优势:

丰富场景覆盖:支持单聊、群聊、聊天室等多种模式,能应对从简单沟通到高并发互动社区等各类场景。

多元消息类型:涵盖文本、语音、音视频、文件以及自定义消息,具备离线存储、撤回、多端同步、已读回执等完备功能。

灵活部署方式:提供公有云、私有云及混合云三种部署选择,满足不同企业的合规与架构要求。

网络与安全保障:自研私有通信协议,结合智能重连和多厂商推送集成,确保消息准确送达。借助WE - CAN全球智能网络、多重加密以及内容审核机制,保障通信质量与安全合规。

适用企业:追求快速集成、高稳定性,需要支撑复杂社区互动或开展全球化业务的企业。
WorkPlus
WorkPlus定位为企业级安全协同平台,其核心竞争力在于提供可私有化部署的完整解决方案,将即时通讯与办公应用深度融合,满足组织对数据主权和深度定制的严格要求。
核心亮点:

功能一体化:除了基础的IM、音视频、文件共享功能外,还内置了移动审批、考勤、智能表单、企业云盘等办公套件,并支持与现有业务系统集成。

安全可控性强:强调私有化部署,让企业完全掌控数据。采用多重加密技术,全面适配信创环境(国产软硬件),符合特定行业的严格合规要求。

适用单位:对数据安全、私有化部署及信创兼容性有硬性要求的政府、金融、大型国企等单位。
融云IM (RongCloud)
融云IM提供一站式的即时通讯与实时音视频(RTC)能力,助力开发者高效开发各类通讯应用,以高可靠性、低延迟和出色的跨平台支持著称。
核心特性:

通信双引擎融合:IM与RTC能力深度融合,适用于社交、协同、教育等多种业务场景。

协议与网络优化:采用私有二进制协议,结合智能DNS、多链路接入和抗弱网策略,保障复杂网络环境下的良好通信体验。

全平台支持:SDK覆盖Android、iOS、Web、Windows、macOS、Linux等主流平台,同时提供详细的开发文档和技术支持。

适用团队:需要同时集成IM与高质量音视频功能,且注重跨平台一致性的开发团队。
Dialogic
Dialogic是一家老牌的通信技术提供商,其SDK专注于为企业和设备制造商提供底层的语音、传真、视频及IM多媒体处理能力,在传统通信系统集成方面优势显著。
核心专长:

专业技术能力:提供如Brooktrout(传真)、Diva(语音/视频)等垂直领域的SDK,支持SIP、H.323等标准协议。

灵活编程接口:提供从高层到低层的多种编程接口,满足不同复杂度和控制度的开发需求。

广泛兼容性:支持Linux、Windows等操作系统,并能与自有硬件产品协同工作。

适用项目:开发传统呼叫中心、传真服务器、嵌入式通信设备或需要深度定制底层通信协议的项目。
360织语
360织语依托360集团的安全优势,打造以安全为核心竞争力的企业级IM SDK,为企业提供可定制的实时通讯解决方案。
核心价值:

突出安全特性:在数据传输、身份验证等环节实施多重安全加固,彰显其企业安全背景的优势。

功能完备齐全:提供单聊、群聊、音视频、文件传输、内容审核以及完整的消息管理功能(撤回、回执、搜索等)。

高度可定制化:提供灵活的接口,支持企业根据自身业务流程进行定制开发。

适用企业:对通讯数据安全有极高要求,或处于强监管行业的企业。
小天互连
小天互连专注为政企客户提供私有化部署的IM及协同办公平台,强调安全、合规和业务集成能力。
核心能力:

精准政企导向:深入了解政务、金融、医疗等行业需求,提供符合其安全和流程规范的解决方案。

强大平台化能力:在基础通讯功能之上,集成流程审批、日程管理、文档中心等OA功能,支持低代码开发和第三方应用接入。

私有化数据部署:支持数据本地化部署,确保核心数据不出私域。

适用组织:政企单位及对私有化、业务系统集成有明确需求的大型组织。
容联·云通讯
容联·云通讯致力于提供高性能、低延迟的通讯云服务,其IM SDK在弱网优化和消息可靠性方面进行了专门设计。
核心优势:

优化弱网体验:采用二进制协议与压缩策略,结合无DNS设计、自适应网络等机制,提高弱网环境下的通讯成功率。

可靠消息架构:通过推拉结合的消息架构,确保消息有序、必达,支持阅后即焚、已读回执等特性。

开发者友好:提供丰富的开发文档和示例代码,降低集成难度。

适用应用:对消息到达率、弱网环境用户体验有较高要求的移动应用。
环信
环信作为国内较早的云通讯服务商,提供高可靠、低时延、支持高并发的全球化IM云服务,在社交、教育等领域应用广泛。
核心特点:

高并发处理能力:架构设计针对高并发场景,能够支撑大规模用户同时在线和消息互动。

先进技术保障:与容联类似,采用二进制协议、无DNS、自适应网络等技术,保障性能与稳定性,支持聊天室等互动场景。

全球化服务能力:提供全球化的通信云服务,助力应用出海。

适用应用类型:用户规模增长迅速、有高并发场景或出海需求的社交、直播类应用。
Cisco Jabber
Cisco Jabber是思科统一通信(UC)生态中的核心客户端软件,为企业提供与后端通信系统深度集成的桌面级协作体验。
核心亮点:

深度生态集成:与Cisco Unified Communications Manager (CUCM) 等后端系统无缝集成,提供企业级语音、视频、会议、状态管理的一体化体验。

全面功能覆盖:集成了即时消息、高清音视频、Webex会议、语音邮件、桌面共享等丰富功能。

多平台支持:支持Windows、macOS、iOS、Android等多个平台。

适用企业:已部署或计划部署思科统一通信基础设施的大型企业,追求内部通信系统的高度集成与统一管理。

图片

云之讯 UCPaaS
云之讯UCPaaS提供以通讯能力为核心的PaaS平台,其IM SDK注重高性能与可定制性,帮助开发者快速构建场景化通讯应用。
核心特性:

高性能导向:强调低时延、高并发的处理能力,采用自适应网络策略确保连接效率。

高度可定制:支持自定义消息类型,满足特定业务场景的通讯需求。

开发者支持完善:提供完善的文档和代码示例,便于快速集成。

适用企业类型:寻求稳定、可定制IM能力,并可能同时需要短信、语音等其它CPaaS服务的企业。
企达即时通讯
企达IM SDK面向政企市场,提供以安全可控、私有化部署为特色的即时通讯解决方案。
核心卖点:

安全私有化部署:主打私有化部署方案,确保所有通讯数据留存在企业内部。

功能针对性强:提供IM、音视频、群组管理等基础功能,并可根据政企场景进行定制。

行业适配精准:专注服务政务、金融、医疗等对安全合规要求严格的行业。

适用政企客户:需要完全内网部署、对数据物理隔离有强制要求的政企客户。
敏信即时通讯
敏信即时通讯聚焦企业级市场,提供安全、稳定的私有化IM解决方案,支持灵活的定制开发。
核心优势:

自主部署能力:支持私有化部署,让企业完全掌控数据。

功能可扩展性:在标准IM功能基础上,支持根据企业个性化需求进行功能定制与扩展。

行业解决方案丰富:针对不同行业提供相应的功能模块和合规建议。

适用企业:注重数据主权、且需要IM功能与自身业务系统深度结合的中大型企业。
企业选型的核心考量因素
面对众多选择,企业可从以下关键维度进行评估:

业务需求契合度:明确核心需求是基础文本通讯、高质量音视频、大规模聊天室,还是与OA/ERP深度集成等,根据不同场景选择功能侧重点不同的SDK。

部署与安全模式:评估公有云、私有云或混合云部署需求。对于对数据安全和合规性要求极高的行业(如政务、金融),优先选择支持私有化部署且通过相关认证的产品。

技术性能与稳定性:关注消息延迟、丢包率、并发支持上限等指标。可通过POC测试,模拟实际用户规模和网络条件进行验证。

平台兼容与集成成本:确认SDK是否支持所有目标平台(Web、移动端、桌面端)。评估其API设计、文档完善程度、技术支持力度,这直接影响开发集成效率和长期维护成本。

可扩展性与定制能力:考虑业务未来发展。SDK是否支持自定义消息类型?架构是否易于扩展?能否满足未来的定制化需求?

总拥有成本(TCO):综合计算授权费用、服务器资源、运维人力及定制开发等所有成本。

未来技术趋势前瞻
IM SDK的发展正与前沿技术深度融合:

AI集成:智能客服、语音转文字、实时翻译、内容智能审核与摘要将成为标配,大幅提升沟通效率和体验。

5G与低延迟网络:将催生更高清、更沉浸式的实时音视频应用,如VR/AR远程协作。

多模态交互:消息形态将从文本、语音、视频拓展到富媒体、交互式卡片、3D内容等。

边缘计算:通过在网络边缘处理消息路由、音视频转码等任务,进一步降低延迟,减轻中心云压力。

总结
选择合适的IM SDK是一项具有战略意义的技术决策。融云在公有云场景和功能丰富度方面表现出色;云屋科技、小天互连、企达、敏信等在私有化部署和安全合规方面优势明显;环信、容联在高并发和弱网优化方面有深厚积累;Cisco Jabber是现有思科生态用户的理想选择;Dialogic则满足特定的底层通信集成需求。
建议企业组建跨部门的选型团队,明确需求优先级,对候选产品进行充分调研和测试,从而选出最能推动业务发展、兼顾当下与未来的通讯技术基础。
常见问题解答
Q1:IM SDK如何保障通讯数据的安全?
主流SDK通常采用传输层加密(如TLS)、端到端加密、消息内容安全审核以及严格的身份鉴权机制。对于有超高安全需求的企业,应选择支持私有化部署及国密算法的产品。
Q2:如何评估一个IM SDK的实际性能?
除了参考厂商提供的基准数据,企业应自行进行概念验证(POC)测试。重点测试模拟高并发用户时的消息延迟、送达率、服务端资源消耗,以及在弱网(高丢包、高延迟)环境下的连接稳定性和消息流畅度。
Q3:集成IM SDK的技术难度大吗?
难度因产品而异。目前主流服务商都提供了较为完善的平台化SDK、清晰的API文档、示例代码和集成指南,大大降低了基础功能的接入门槛。但涉及深度UI定制或与复杂业务逻辑对接时,仍需要一定的开发投入。
Q4:选择IM SDK时,最容易忽略的关键点是什么?
企业往往容易忽略运维成本和厂商的长期服务能力。需要了解SDK的日志监控、问题诊断工具是否完善,以及厂商的技术支持响应机制、版本更新频率和路线图,确保其能伴随业务长期稳定发展。

在教育数字化转型加速的2026年,教育项目研发呈现跨团队、多场景、高迭代的特点,从课程系统开发到教学工具迭代,从科研项目推进到校企协同创新,都离不开高效的研发协同工具支撑。优质的工具能打通需求、开发、测试、交付全链路,破解教育研发中“跨部门协同不畅、进度管控模糊、知识沉淀不足”等痛点。以下梳理8大核心工具,涵盖项目管控、文档协作、沟通协同等关键场景。

二、教育研发协同核心工具盘点

(一)禅道

  • 产品介绍​:国内开源敏捷项目管理工具,以“需求-任务-缺陷”全流程闭环管理为核心,支持敏捷、瀑布等多种研发模式,具备轻量化部署与高度自定义特性,适配中小团队到大型组织的不同需求。
  • 适用场景​:K12教育系统研发、高校科研项目管控、教育APP迭代升级、教学资源库搭建等场景,尤其适合需要兼顾流程规范与灵活调整的教育研发项目。
  • 功能深度​:核心覆盖需求池管理、迭代规划、任务拆解与分配、缺陷追踪、工时统计、报表可视化等功能,支持自定义工作流与字段配置,可对接代码仓库、测试工具形成协同链路,开源版本满足基础需求,企业版提供私有化部署与权限精细化管控。
  • 适用行业​:基础教育科技企业、高等院校科研团队、职业教育数字化研发机构、教育信息化解决方案提供商。

(二)Jira

  • 产品介绍​:海外主流敏捷项目管理工具,以强大的流程配置能力与插件生态著称,专注于研发全生命周期管理,可实现多角色、多项目的协同管控。
  • 适用场景​:大型教育集团跨区域研发协同、复杂教学平台定制开发、教育科技企业全球化项目推进、多团队并行的研发任务管控。
  • 功能深度​:支持Scrum、Kanban等敏捷框架,可自定义任务状态、字段与审批流程,具备缺陷管理、迭代跟踪、燃尽图分析等核心能力,通过插件生态可拓展CI/CD集成、效能度量、跨工具联动等功能,适配复杂研发场景的个性化需求。
  • 适用行业​:大型教育科技集团、跨国教育信息化企业、高校国家级科研项目团队、教育硬件与软件融合研发机构。

(三)Confluence

  • 产品介绍​:专注于团队知识管理与文档协同的工具,常与Jira联动形成“项目管理+知识沉淀”闭环,支持多人实时编辑、文档版本管控与结构化存储。
  • 适用场景​:教育研发文档协作、教学方案共创、技术手册编写、项目复盘沉淀、校企协同知识库搭建等场景,尤其适合注重知识传承的研发团队。
  • 功能深度​:提供丰富的文档模板、空间权限管控、评论互动与历史版本回溯功能,支持嵌入表格、图表、附件及第三方工具链接,可构建分层级的知识库体系,实现研发文档的规范化管理与高效检索,保障团队信息同步的准确性。
  • 适用行业​:高等院校科研团队、教育科技企业研发部门、职业教育课程研发机构、教育信息化标准制定团队。

(四)TAPD(腾讯敏捷产品研发平台)

  • 产品介绍​:腾讯推出的一站式敏捷研发协同平台,融合需求管理、任务调度、缺陷追踪、文档协作等功能,具备轻量化上手与生态集成优势。
  • 适用场景​:中小型教育科技企业研发项目、教育APP快速迭代、教学小程序开发、跨部门轻量化协同任务管控。
  • 功能深度​:支持敏捷冲刺规划、任务拆解与优先级排序,内置缺陷管理流程与测试用例管理模块,提供可视化报表与数据统计功能,可与腾讯系工具及主流研发工具集成,兼顾流程规范与易用性,适合快速落地研发协同体系。
  • 适用行业​:中小型教育科技公司、教育创业团队、高校创新创业项目组、区域性教育信息化服务商。

(五)Wrike

  • 产品介绍​:云端项目管理与协同平台,以多视图可视化、跨团队协作与自动化流程为核心优势,适配灵活多变的研发场景。
  • 适用场景​:教育研发项目全流程管控、跨部门协同任务推进、多项目并行管理、研发进度可视化追踪,适合需要快速调整优先级的项目。
  • 功能深度​:提供列表、看板、甘特图等多维度项目视图,支持任务依赖设置、自动化工作流配置、资源分配与工时统计,可实现跨团队成员的实时协作与进度同步,具备一定的可扩展能力,能伴随团队规模增长适配复杂需求。
  • 适用行业​:教育科技初创企业、跨区域协作的教育研发团队、教育营销与技术融合项目、中小型在线教育平台研发。

(六)Slack

  • 产品介绍​:以频道为核心的即时通讯与协作工具,打破传统沟通壁垒,实现“沟通-工具-任务”的一体化协同,支持多第三方工具集成。
  • 适用场景​:教育研发团队实时沟通、跨地域协同讨论、研发任务进度同步、紧急问题响应,尤其适合分布式研发团队。
  • 功能深度​:可按项目、部门创建专属频道,支持消息线程讨论、文件共享、语音视频会议等功能,核心优势在于与研发工具的联动能力,能将任务提醒、缺陷通知、进度更新等同步至频道,减少工具切换成本,保持团队沟通的高效与聚焦。
  • 适用行业​:跨国教育科技企业、分布式教育研发团队、校企联合研发项目组、多角色协同的教育信息化项目。

(七)有道云协作

  • 产品介绍​:国内轻量化团队协作与文档管理工具,以“文档为核心”整合任务管理、文件共享等功能,具备易上手、多终端同步特性。
  • 适用场景​:教育研发轻量任务协同、文档共创、教学资源整理、小型项目进度追踪,适合对工具复杂度要求低的团队。
  • 功能深度​:支持多人实时在线编辑、文档版本管理、权限精细化控制,内置基础任务分配与进度追踪功能,可实现文档与任务的关联管理,界面简洁直观,学习成本低,支持本地文件同步与云端存储,满足基础研发协同需求。
  • 适用行业​:中小学教育信息化研发团队、小型教育创业公司、高校课程研发小组、区域性教育资源开发机构。

(八)戴西iDWS数智化研发平台

  • 产品介绍​:国产化数智化研发平台,聚焦复杂工程研发场景,融合AI智能辅助、算力调度、许可管理与数据治理功能,支持私有化部署与国产化适配。
  • 适用场景​:大型教育装备研发、复杂教学系统定制、教育AI算法研发、高安全需求的教育信息化项目,适合对研发效能与数据安全要求高的团队。
  • 功能深度​:内置NexAI智能体,可在研发全流程提供智能建议与异常识别,具备算力调度、许可资源优化、研发数据统一纳管等核心能力,支持多学科协同研发与7×24小时不间断任务监控,强化研发过程的智能化与工程化管控,适配国产化信创需求。
  • 适用行业​:大型教育科技集团、教育装备研发企业、高校AI教育研发团队、有国产化需求的教育信息化服务商。

image.png

教育研发协同工具的选型需结合团队规模、项目复杂度与行业特性,核心是实现“流程规范化、协作高效化、知识体系化”。2026年,随着教育科技与AI技术的深度融合,工具的智能化、国产化与生态化将成为主流趋势,研发团队可根据自身需求组合适配,构建专属协同体系,赋能教育项目高质量落地。

1.前言

在模型板端部署过程中,开发者主要关心图像如何获取,模型性能如何评测以及如何优化模型等问题。对于图像的获取,地平线提供了 Pyramid 硬件,其不但可以获取多尺寸图像,且利用内存共享机制可将内存给到 BPU 直接进行推理。针对耗时,内存占用,DDR 带宽占用等指标进行评测和优化,地平线提供了诸如 Trace,hrt\_ucp\_monitor 等一系列性能分析工具用于性能监测,使得开发者能够清晰掌握模型运行时的资源占用和硬件效率。最后,地平线提供 VP,HPL 以及 DSP 多种模块用于前后处理环节的算法开发。本文将结合实例说明模型如何进行部署,性能分析以及常见的问题解析。

2.UCP 简介

征程 6 工具链在应用部署端新引入了统一计算平台(Unify Compute Platform,以下简称 UCP)。UCP 面向应用层,属于嵌入式应用开发(runtime)范畴,提供视觉处理(Vision Process,以下简称 VP)、模型推理(Neural Network,以下简称 NN)、高性能计算库(High Performance Library,以下简称 HPL)等功能。

UCP 还定义了一套统一的异构编程接口,支持对 SoC 上各后端硬件资源的调用,包括 BPU、DSP、ISP、GDC、STITCH、JPU、VPU、PYRAMID 等,以完成 SoC 上任务的统一调度。

UCP 的架构图如下所示:
MTI4MFgxMjgwICgxKQ==.png
1.png

3.模型推理

3.1 快速上手

以下面的代码为例,说明 DNN 和 UCP 接口的使用方式,整体包含 5 个主要步骤,详细信息可参考用户手册《<u>统一计算平台-模型推理开发</u>》,《<u>模型部署实践指导-模型部署实践指导实例</u>》,《<u>UCP 通用 API 介绍</u>》等相关章节:
2.png

int main(int argc, char **argv) {
​  ...    // 解析命令行参数
​  hbDNNPackedHandle_t packed_dnn_handle;
​  hbDNNHandle_t dnn_handle;
​  const char **model_name_list;
​  auto modelFileName = FLAGS_model_file.c_str();
​  int model_count = 0;
​  
​  //1. 加载模型并获取模型名称列表以及Handle
​  {
​    hbDNNInitializeFromFiles(&packed_dnn_handle, &modelFileName, 1);
​    hbDNNGetModelNameList(&model_name_list, &model_count, packed_dnn_handle);
​    hbDNNGetModelHandle(&dnn_handle, packed_dnn_handle, model_name_list[0]);
​  }

​  std::vector<hbDNNTensor> input_tensors;
​  std::vector<hbDNNTensor> output_tensors;
​  int input_count = 0;
​  int output_count = 0;
​  
​  //2. 根据模型的输入输出准备张量
​  {
​    hbDNNGetInputCount(&input_count, dnn_handle);
​    hbDNNGetOutputCount(&output_count, dnn_handle);
​    input_tensors.resize(input_count);
​    output_tensors.resize(output_count);
​    prepare_tensor(input_tensors.data(), output_tensors.data(), dnn_handle);
​  }
​  //3. 准备输入数据并填入到对应的张量中
​  read_image_2_tensor_as_nv12(FLAGS_image_file, input_tensors.data());
​  // 确保更新输入后进行Flush操作以确保BPU使用正确的数据
​  for (int i = 0; i < input_count; i++) {
​      hbUCPMemFlush(&input_tensors[i].sysMem[0], HB_SYS_MEM_CACHE_CLEAN);
​    }
​    
​  //4. 创建任务并进行推理
​  hbUCPTaskHandle_t task_handle{nullptr};
​  hbDNNTensor *output = output_tensors.data();
​  {

​    hbDNNInferV2(&task_handle, output, input_tensors.data(), dnn_handle);
​    hbUCPSchedParam ctrl_param;
​    HB_UCP_INITIALIZE_SCHED_PARAM(&ctrl_param);
​    ctrl_param.backend = HB_UCP_BPU_CORE_ANY;
​    hbUCPSubmitTask(task_handle, &ctrl_param);
​    hbUCPWaitTaskDone(task_handle, 0);
​  }
​    //5. 处理输出数据
​  for (int i = 0; i < output_count; i++) {
​    hbUCPMemFlush(&output_tensors[i].sysMem[0], HB_SYS_MEM_CACHE_INVALIDATE);
​  }

​  //6: 释放资源
​  {
​  
​    hbUCPReleaseTask(task_handle);
​    for (int i = 0; i < input_count; i++) {
​      hbUCPFree(&(input_tensors[i].sysMem[0]));
​    }
​    for (int i = 0; i < output_count; i++) {
​      hbUCPFree(&(output_tensors[i].sysMem[0]));
​    }
​    // 释放模型
​    hbDNNRelease(packed_dnn_handle);
​  }

​  return 0;
}

⚠️ 上面的例子仅为 demo,实际使用时,需要注意以下几点:

  1. 图像可以直接从 Pyramid 接口直接获取 nv12 的输出,无需进行拷贝,可直接传递给 BPU 进行推理
  2. 输入输出内存的大小和对齐 stride,详见第 5.3 节说明
  3. 接口进行返回值检查,以保证函数的正确执行

3.2 实用技巧

3.2.1 添加 desc

有的时候,为了方便自动化作业,需要给不同的模型,输入和输出打上标签以区分他们。

需要注意的是,如果是为输入添加描述信息,由于 pyramid 和 resizer 节点会改变 bc 的输入节点数,因此需要给对应每个节点都添加对应的信息。

比较推荐的做法是在 compile 之前再添加:

from hbdk4.compiler import load
quantized_bc = load("xxx.bc")
func = quantized_bc[0]
func.desc = "xxx model" #模型的描述
func.inputs[0].desc = "xxx input" #模型输入的描述
func.outputs[0].desc = "xxx output" #模型输出的描述

模型部署时,通过下面的接口来获取描述信息:

//模型的描述信息
int32_t hbDNNGetModelDesc(char const **desc, uint32_t *size, int32_t *type,
​                          hbDNNHandle_t dnnHandle);
//输入的描述信息
int32_t hbDNNGetInputDesc(char const **desc, uint32_t *size, int32_t *type,
​                          hbDNNHandle_t dnnHandle, int32_t inputIndex);
//输出的描述信息
int32_t hbDNNGetOutputDesc(char const **desc, uint32_t *size, int32_t *type,
​                           hbDNNHandle_t dnnHandle, int32_t outputIndex);
3.2.2 模型打包

模型打包功能,可以将多个模型打包进一个 hbm 文件中,对于共享任务可以节省模型的空间,具体 api 介绍可见《<u>HBDK Tool API Reference</u>》:

from horizon_plugin_pytorch.quantization.hbdk4 import export
from hbdk4.compiler import load, convert, compile, link
# export 阶段记得配置 name
qat_bcA = export(qat_model_A, example_input, name="backbone_head1_head2")
quantized_modelA = convert(qat_bcA, "nash-m")
# 注意:此时compile生成的模型后缀名为.hbo
hbo_nameA = "nameA_compiled.hbo"
hboA = compile(quantized_modelA, path=hbo_nameA, march="nash-m")

qat_bcB = export(qat_model_B, example_input, name="backbone_head1")
quantized_modelB = convert(qat_bcB, "nash-m")
hbo_nameB = "nameB_compiled.hbo"
hboB = compile(quantized_modelB, path=hbo_nameB, march="nash-m", opt=2)

# link生成打包模型,后缀名为.hbm
hbm_name = "compiled.hbm"
hbm = link([hboA, hboB], hbm_name)

在生成 hbm 文件后,上板运行使用 hrt\_model\_exec 查看模型可以看到:
4.png

推理测试时,用 model\_file 指定 hbm 路径,model\_name 指定具体哪一个模型
5.png

3.2.3 小模型批处理

由于 BPU 为资源独占型硬件,对于那些耗时较短的小模型,其框架调度耗时开销可能大于其模型运行时间,为了缓解这个问题。在征程 6 平台,UCP 支持通过复用 task\_handle 方式来一次将多个模型下发,全部执行完成后再一次性返回,从而将 N 次开销合并为一次:

// 获取模型指针并存储
std::vector<hbDNNHandle_t> model_handles;

// 准备各个模型的输入输出,准备过程省略
std::vector<std::vector<hbDNNTensor>> inputs;
std::vector<std::vector<hbDNNTensor>> outputs;

// 创建任务并进行推理
{
    // 创建并添加任务,复用task_handle
    hbUCPTaskHandle_t task_handle{nullptr};
    for(size_t task_id{0U}; task_id < inputs.size(); task_id++){
        hbDNNInferV2(&task_handle, outputs[task_id].data(), inputs[task_id].data(), model_handles[i]);
    }
    
    // 提交任务
    hbUCPSchedParam sche_param;
    HB_UCP_INITIALIZE_SCHED_PARAM(&sche_param);
    sche_param.backend = HB_UCP_BPU_CORE_ANY;
    hbUCPSubmitTask(task_handle, &sche_param);
    
    // 等待任务完成
    hbUCPWaitTaskDone(task_handle, 0);
}
3.2.4 优先级抢占

在征程 6 计算平台上,BPU 硬件本身没有抢占功能,对于一个计算任务其一旦进入 BPU 后,就无法被打断,其他计算任务只能等待当前计算任务完成退出后才能运行。

此时很容易出现 BPU 计算资源被一个大模型任务独占,进而影响其他高优先级模型任务的执行,针对这个问题,工具链采用 cpu 调度的机制来优化 BPU 资源:

  1. hbm 模型在 BPU 推理表现为一个或多个 function-call,function-call 为 BPU 最小的执行单元。当一个模型的所有 function-call 都执行完成时,这个模型也就执行完成了
  2. BPU 模型任务抢占粒度设计为 function-all,如果一个模型只有一个 function-call 那么其无法被抢占,如果一个模型有多个 function-call 可能出现这个模型完成部分 function-call 后,BPU 挂起当前模型,然后切换执行其他模型

UCP 支持任务优先级调度和抢占,可通过 hbUCPSchedParam 结构体进行配置:

typedef struct hbUCPSchedParam {int32_t priority;int64_t customId;uint64_t backend;uint32_t deviceId;} hbUCPSchedParam;
  • priority:任务优先级,支持[0, 255]之间的数值,对于模型任务而言:

    • [0, 253]普通优先级,不可抢占其他任务,但在未执行时支持按优先级进行排队
    • 254:为 high 优先级,支持抢占普通任务
    • 255:为 urgent 优先级,支持抢占普通任务和 high 任务
    • 可被中断抢占的任务,需要在模型编译阶段配置 max\_time\_per\_fc 进行模型拆分
  • customId:自定义优先级
  • backend:任务硬件 id
  • deviceId:设备 ID 比如,有下面的两个模型,一个单线程耗时 20.9 ms,一个单线程耗时 8.3ms:
    6.png

让这两个模型同时运行,且设置 max\_time\_per\_fc=2000,两个模型的优先级均为普通优先级时 UCP trace 耗时如下:
7.png

当将模型 2 的优先级设为 high,模型 1 仍为普通优先级时:
8.png

可以看到,在下面的模型一次 infer 过程中,模型被切分为多个 2ms 运行的 function-call 运行,中间插入了很多 high 优先级模型,导致一次模型前向耗时大大增加。

3.2.5 LRU 内存优化

LRU(Least Recently Used)算法是用于优化内存页的调度算法。BPU 内存在 BPU 实际使用前,NN 模块内部需要对该块内存进行特殊处理才能够正常使用,如果频繁对模型及其依赖申请释放会导致 CPU 负载变大,从而可能会引发性能问题。 如果确实有频繁申请释放的需求,推理库提供了内存 LRU 缓存功能,通过设置环境变量 HB_NN_ENABLE_MEM_LRU_CACHE true 来使用。设置方式如下:

export HB_NN_ENABLE_MEM_LRU_CACHE=true

开启了这个功能之后,对模型的输入输出不是实时申请和释放的,会在一开始就申请好并进行循环复用。所以如果用户在模型跑完推理后就立刻执行内存释放操作,实际不会立刻释放,UCP 这一层会等一段时间后才执行(默认至少 1s),所以可能会有内存泄漏的风险,建议是模型推理的内存块不要释放,且模型每次输入输出的虚拟地址是复用的。

3.3 输入输出处理

3.3.1 Crop 裁剪

Crop 主要思想是利用地址偏移,并通过 stride 将图像多余的部分进行屏蔽从而送入准备好的模型输入。这种 Crop 方式不引入 memory copy,减少 IO 开销。

限制:

  1. 图像输入大小要大于模型实际输入大小,w\_stride 要 32(E/M)/64(P/H)字节对齐
  2. 模型的 validShape 为固定值,stride 为动态值
  3. 裁剪偏移的输入首地址要 32 对齐

详细示例可以参考《<u>基础示例包使用说明</u>》中 advanced\_samples 的 crop 示例

3.3.2 Resizer

Resizer 主要是指具有 nv12 图像输入和 ROI 输入的模型,编译器支持通过 JIT 动态指令的方式,从 nv12 图像上完成抠图 +Resize 功能。其不仅仅是图像 stride 为动态,输入的 H,W 也为动态,w\_stride 也同样需要满足 32(E/M)/64(P/H)字节对齐,roi 不需要进行对齐:
9.png
10.png

3.3.3 图像 tensor 对齐

在征程 6 芯片,有一块叫 Pyramid 的金字塔硬件处理模块,可提供 Camera 输入图像的缩放及 ROI 抠图能力,其输出为 nv12 类型的图像数据,并可基于共享内存机制直接给到 BPU 进行模型推理,因此在征程 6 工具链中:

  • Pyramid 模型是指具有 nv12 图像输入的模型
  • Resizer 模型指的是具有 nv12 图像输入和 ROI 输入的模型,编译器支持通过 JIT 动态指令的方式,从 nv12 图像上完成 ROI 抠图 +Resize 功能 征程 6P/H 要求 nv12 stride 满足 64 对齐,征程 6E/M/B 是 32 对齐。 Pyramid 的输入 stride 为动态,比如模型输入为 224x224 的 nv12 图像,其格式为:
    11.png

其中,-1 为占位符,表示为动态,Pyramid 输入的 stride 为动态。那么此时我们就需要通过手动计算方式来获取了:

#define ALIGN_SIZE(size,align_byte) (((size)+(align_byte-1))&~(align_byte-1))
HBDNNTensor* input;
auto dim_len = input[i].properties.validShape.numDimensions;
for(int dim_i = dim_len-1;dim_i>=0;dim_i--){
​    if(input[i].properties.stride[dim_i]==-1){
​        auto cur_stride = input[i].properties.stride[dim_i+1] * 
​            input[i].properties.validShape.dimensionSize[dim_i+1];
​        input[i].properties.stride[dim_i] = ALIGN_SIZE(cur_stride,NUM);
​    }  
}
int input_memSize = input[i].properties.stride[0] * input[i].properties.validShape.dimensinoSize[0];

对于非 nv12 类型的其他输入,以 rgb 输入 input 作为例子,1x224x224x3 的 rgb 图像如下所示:
12.png

输入申请的大小可以通过 aligned byte size 来获取:

int input_memSize = input[i].properties.alignedByteSize;
3.3.4 内存单元对齐

BPU 中的内存单元也是遵循向量化对齐的原则,类似于 avx/neon 等,需要内存对齐。所以对于不满足对齐最小字节的内存要被强制对齐到最小的内存字节上。

征程 6H/P tensor 最小申请内存是 256 字节,征程 6E/M 是 64 字节,征程 6B 是 128 字节,这个差异会体现在模型的 aligned byte size 和 stride 属性上。

举个例子:
13.png

上面模型的 stride=4000,output 需要申请的内存为 4000Byte,但由于内存需要对齐,所以实际上的需要申请的内存大小为((4000+(256-1))&~(256-1))=4096Byte。 在模型实际部署中,非图像输入/输出节点所需申请的内存大小均可以从模型节点属性的结构体中读取到,因此无需特别关注:

hbDNNTensor* output;
int output_memSize = output[i].properties.alignedByteSize;
3.3.5 padding

由于内存单元对齐的影响,feature 申请的大小和拷贝需要根据 stride 和 alignedByteSize 来进行。用户侧需要手动处理这些 padding,可能对前处理和后处理的代码有较大的变动。这里地平线提供了一种优化方案:input\_no\_padding/ouput\_no\_padding,在开启这两个选项后,可以直接将输入/出实际大小的内存送入接口,接口内部会自行处理对齐,无需用户侧修改代码。但开启这个参数后,可能会对模型延时产生微小影响。

  • input\_no\_padding:对所有非图像的输入去 padding
  • output\_no\_padding:对模型所有的输出去 padding 若编译时配置了 input\_no\_padding=True,output\_no\_padding=True,无需关注非图像的对齐问题:
#PTQ配置方式,在yml中
compiler_parameters:
    extra_params: {"input_no_padding": True, "output_no_padding": True}

#QAT配置方式
from hbdk4.compiler import compile
compile(quantized_bc,march,path,input_no_padding=True,output_no_padding=True)

举个例子,比如一个模型的输出 shape 为 1x21x21x255,其 output\_no\_padding=False 和 output\_no\_padding=True 的结果如下图所示:
14.png

4.性能分析

4.1 模型性能分析

如果开发者没有实体板子,只有 hbm 模型,可以使用 hbdk4 中的 hbm\_perf 接口获取静态性能评估文件(html,json 格式)以及模型耗时:

from hbdk4.compiler import hbm_perf
hbm_perf(xxx.hbm)

模型中如果有 CPU 算子,则会影响 perf 的结果,建议去除 CPU 算子之后再进行分析。CPU 算子一般可以通过以下两种方式查看到:

  1. convert 之后的模型可视化,然后查询是否有 hbtl 类型算子
  2. 利用 statistics 接口统计 bc 模型算子类型

如果有与开发环境直连的板子可以使用下面的方式进行测试,与实测偏差会更小:

from hbdk4.compiler import hbm_perf
hbm_perf(xxx.hbm,remote_ip="xxx")

或按照用户手册《<u>统一计算平台-模型推理工具介绍</u>》使用 hrt\_model\_exec 工具在板端进行性能测试:

hrt_model_exec perf --model_file=xxx.hbm --frame_count=200
4.1.1 带宽占用

静态评测时,带宽信息可以从模型编译过程中生成的 xxx.html/xxx.json 中文件获取,在 ptq 中会自动生成这两个文件,在 qat 中,可以通过生成 hbm 模型后,使用 hbm\_perf 接口来生成这两个文件。

平均带宽

平均带宽(GB/s) = DDR bytes per second( for n FPS)/n * 设计帧率/2^30,以下面的模型为例,实际需求帧率为 30FPS,那么该模型所需的平均带宽为:12293553099/57.12 * 30/2^30 = 6.01GB/s:
15.png

峰值带宽

峰值带宽可以通过推理带宽柱状图来进行分析,最高的柱子即最大的 load/strore 带宽。比如下面这个图,该模型的最大 load 需求为 15515MB/s=15.15GB/s,最大的 store 需求为 13125MB/s=12.82GB/s,最大的 load+store 需求为 11954+11812=23766MB/s=23.21GB/s
16.png

4.1.2 带宽优化

在实际应用中,模型的推理耗时可能出现比正常评测要更长的现象,主要原因往往来源于 BPU 的等待耗时以及带宽资源不足的影响。这里主要针对带宽问题进行说明。

BPU 模型的带宽消耗主要集中在模型加载、推理时的 featuremap 读写,输出写回,优化策略如下:

  1. 使用 balance 参数来平衡带宽和延时
compile(balance=x) # 0=优先ddr优化,100=优先延迟优化,默认balance=100,推荐balance=2

ptq 时,修改配置文件中的 compile\_mode:

compile_mode: 'balance'
balance_factor: 2
  1. 对于小模型使用多 batch 推理模式,可以减少 weight 的加载次数
  2. 减少模型抢占调用:优先级 255 的抢占任务会刷新整个 SRAM,导致大量带宽开销,建议通过任务编排方式运行模型,而不是优先级抢占
  3. Batch 拆分:若模型需要 concat 多路输入(比如 BEV 类模型),将 batch mode 拆分,每一路单独提取特征,牺牲很少的延时来降低峰值带宽
4.1.3 内存占用

模型所需的内存可以通过 Summary 查看到:
17.png
18.png

Shared temporary memory 共享临时内存,主要目的是用于相同优先级模型共享内存,优化模型推理内存的使用。对于相同优先级的模型,会共享 temporary memory。该功能的约束条件:

  1. 跨 BPU Core 不可用
  2. 跨优先级不可用,0-253 的优先级之间的都可以共享,254 只能和其他 254 共享,255 只能与其他 255 共享
  3. 跨进程不可用

当开发人员对模型运行时所需内存进行评测时,可先通过 Summary 的内容先进行静态数据评估,模型的内存占用=Static Memory + Dynamic Memory。

4.2 动态性能分析

在模型的部署和运行过程中,我们比较关注模型的推理耗时,bpu/cpu 占用,DDR 读写带宽以及内存占用。这些信息可以通过以下工具来获取:

4.2.1 hrt\_model\_exec

hrt\_model\_exec 是一个模型执行工具,可直接用于在开发板上评测模型的推理性能,获取模型信息。工具源码路径在 samples/ucp\_tutorial/tools/hrt\_model\_exec。

模型输入输出信息:

hrt_model_exec model_info --model_file xxx.hbm

19.png

模型单线程耗时:

hrt_model_exec perf --model_file xxx.hbm --frame_count 1000 --thread_num 1

20.png

模型多线程耗时:

hrt_model_exec perf --model_file xxx.hbm --frame_count 1000 --thread_num 4

21.png

指定优先级运行:

hrt_model_exec perf --model_file xxx.hbm --frame_count 1000 --thread_num 1 --task_priority 1

更多的 hrt\_model\_exec 命令可以在《<u>统一计算平台-模型推理工具介绍-hrt\_model\_exec</u>》中查看。

4.2.1.1 单线程和多线程差异

在单线程下,工具按照单核单线程的串行逻辑运行,统计的性能可以理解为单帧处理的平均时间(包括调度开销,BPU 执行时间以及 CPU 执行时间)。

在多线程下,工具会启动多个线程进行模型推理,统计得到的 FPS 表示充分使用资源情况下模型的吞吐量,主要用于评测高并发情况下的模型处理能力。

  • 为什么单线程模型运行耗时比多线程耗时短? 答:由于 BPU 本身是一种独占硬件,同一时间只能运行一个任务,多个线程同时提交任务时,只能按一定顺序执行,因此多线程模式下,模型的 Latency 耗时的增大,主要来源于任务下发后的等待时间。
4.2.2 hrt\_ucp\_monitor

工具 hrt\_ucp\_monitor 是一个关于监控硬件 IP 占用率和内存信息的工具。hrt\_ucp\_monitor 工具位于 samples/ucp\_tutorial/tools 中。 hrt\_ucp\_moitor 支持的内存信息包括 DDR 读写带宽,ION 内存,进程内存,默认为每秒采样 500 次,详细的运行参数请参考《<u>统一计算平台-UCP 性能分析工具</u>》。在终端运行命令 hrt\_ucp\_monitor 即可看到对应的监控信息:
22.png

rss 查看可以通过以下命令查看:

ps -aux //RSS指标
top //RES指标

23.png补24.png

HBMEM 为应用进程申请的总 ION 大小:

ION:ION 是为了解决内存碎片化而引入的通用内存管理器,一共有三种:ion(上面的 ion\_cam),reserve(上面的 cma\_reserved)和 carveout(上面的 carveout)。ion 是主要类型,用于一般的内存分配。reserve 本质上也是 carveout,区分的主要目的是 DDR 支持多个 bank。对于 BPU 模型来说,其优先在 carveout 上分配内存。可以通过观察 /sys/kernel/debug/ion/heaps/carveout 来测试内存占用:

24.png

上图为未加载时,carveout 的状态

!25.png

模型加载后,carveout 的状态

4.2.3 hrut\_ddr

带宽占用主要使用 hrut\_ddr 来进行分析:

Usage: hrut_ddr [OPTION]...
Show and calculate memory throughput through AIX bus in each period.

Mandatory arguments to long options are mandatory for short options too.
   -t, --type     The type of monitoring range.    Supported
                  values for type are(case-insensitive)
                  when multiple type specified, Enclose in quotation marks 
                  e.g. -t "mcu cpu"
                  If the types exceeds 1, a RoundRobin method is used.
                       For accuracy, set as less types as possible
                  e.g. In the first period the mcu data is read, second period the cpu data is read. 
                  The elapsed time get averaged, and each type result in one round put into one table 
                     slc  vdo  cam  cpe0  cpe1  cpe2  cpe3  cpelite  
                   idu  gpu  vdsp  peri  his  sram  bpu_p0  bpu_p1 
                   bpu_p2  mcu  cpu  secland 
                  cpu        only monitor the throughput of CPU master range
                  bpu        only monitor the throughput of BPU master range
                  cam        only monitor the throughput of Camera master range
                  J6P Note: cam contains cpe, cpelite, idu. bpu id range: bpu_p0, bpu_p1(only in vm), bpu_p2(only in vm)
                  rr_all     RoundRobin between all range types
   -p, --period   The sample period for monitored range. (unit: us, default: 1000, range:[1000, 2000000])
   -d, --device   The char device of DDR Perf Monitor. [0~5] 0: ddrsys0 mon0, 2 ddrsys1_mon0
                   J6P: [0~15]
   -n, --number   The sampling period times for monitored range before copying to userspace. (0~400] default: 100
                  !!!When in roundrobin mode, this is forcely set to 1
   -N, --over_all Over_all read times. i.e. Approximately how much tables you get in commands line
   -f, --filename the csv output filename
   -r, --raw      Output raw data, hexadecimal format, without conversion. Decimal by default
   -c, --csv      Output csv format data
   -D, --dissh    Disable shell output
Example:
hrut_ddr -t cpu -p 1000 -d 0
hrut_ddr -t cpu -p 1000 -r
hrut_ddr -t cpu -p 1000
hrut_ddr -t "cpu mcu" -p 1000 -c -f "mon0.csv"
hrut_ddr -d "0 1" -p 1000

根据 hrut\_ddr 工具的 log,获取 BPU 带宽占用和系统带宽占用,Read+Write 的值即为总带宽:
26.png

4.3 问题

在实际的运行中,可能会出现与上面带宽评测结果差距较大的情况。这是由于在实际中不仅仅是模型的运行需要带宽,cam 和 cpu 也是需要带宽的。根据过往的经验,可以根据峰值带宽和均值带宽来提前判断是否存在风险,高于理论带宽的 75% 以上,就需要进行测试验证了。

5.推理典型问题处理

5.1 timeout 问题

5.1.1 模型 timeout 时间是否设置合理

如果模型是异步推理的,模型本身执行的时间较长,而异步等待接口设置的超时时间不足也可能造成 timeout。

hbUCPWaitTaskDone(hbUCPTaskHandle_t taskHandle, int32_t timeout);

timeout 的耗时可以设置为模型正常推理时间的一倍即可。

5.1.2 CPU 负载是否过高

由于模型的运行调度是由 CPU 来处理的,如果调度线程一直获取不到时间片,即使任务完成也无法及时同步到用户接口,导致推理延时。

在运行过程中,可以使用 top/htop 等监视 CPU 利用率,如果 CPU 负载超过 90%,可能出现系统异常,这个必须得到解决

5.1.3 内存泄漏

当存在内存泄漏时,在系统内存不足的情况下,内存申请缓慢,可能会导致推理超时。可以在编译时添加检测:

target_compile_options(testbed PRIVATE -fsanitize=address)
target_link_options(testbed PRIVATE -fsanitize=address)

或在单元测试时,利用 getpid()获取当前进程的 pid,再查看/proc/pid/status 中的 VmRSS。

5.2 推理 hang

模型指令原因导致的底层运行错误,错误没有上报,导致 hang 住。此时,可通过 cat/sys/devices/system/bpu/bpu0/task_running 对 bpu 任务情况进行查看,如下图所示:27.png

s\_time 不为空表示任务已经正常开始,而 p\_time 一直增加没有减少,即可认为 BPU 任务 hang 住了, 可以使用 watch 命令来记录 bpu 任务情况:

watch -n 2 'cat /sys/devices/system/bpu/bpu0/task_running|tee -a bpu.log'

如果发生此类问题,可以提供 bpu log 给地平线技术支持人员分析,log 的地址在:/log/bpux/message 中。

5.3 log 获取

在遇到上面的问题的时候,我们可以通过分析日志来获取问题原因,需要的是 UCP 日志以及系统日志:

5.3.1 UCP 日志

在程序运行时可以看到各种 log 的等级:
28.png

在发生上面的问题后,为了获取具体的问题原因,可以修改 log 等级来抓取不同等级的日志,配置方式如下:

UCP log 设置主要通过以下环境变量:

  • HB\_UCP\_LOG\_LEVEL:ucp 模块 log 等级(等级从 0 到 6,分别为 trace, debug, info, warn, error, critical, never, 默认为 warn)
  • HB\_NN\_LOG\_LEVEL:nn 模块 log 等级
  • HB\_UCP\_LOG\_PATH: ucp 日志存储路径
export HB_UCP_LOG_LEVEL=3
export HB_UCP_LOG_PATH=xxx

更详细的环境变量和说明可以参考《<u>统一计算平台-UCP 通用 API 介绍-环境变量</u>》

5.3.2 系统日志

系统日志获取:

dmesg:在 Linux 系统中用于显示或控制内核环形缓冲区的内容更,允许查看或操作内核消息。

dmesg >dmesg.log

logcat:可以用于打印设备的系统日志

logcat >logcat.log

6.UCP Trace 使用

征程 6 算法工具链提供了一套板端实测性能工具 UCP Trace,通过在 UCP 执行的关键路径上嵌入 trace 记录,进而深入分析 UCP 应用调度逻辑,具体可以参考《<u>统一计算平台-UCP 性能分析工具</u>》一节。 UCP Tracer 记录点:UCP 记录点包括任务 trace 记录点和算子 trace 记录点
29.png

6.1 in\_process 模式

6.1.1 运行实例

in\_process 模式下只能抓取 UCP 进程内的 trace,无需启动 prefetto 的后台进程

启动步骤:

export HB_UCP_PERFETTO_CONFIG_PATH=ucp_in_process.json
export HB_UCP_ENABLE_PERFETTO=true
  • ucp\_in\_process.json
{
​  "backend": "in_process",    #backend可选
​  "trace_config": "ucp_in_process.cfg"   #perfetto的配置文件路径,仅在in_process下有效
}
  • ucp\_in\_process.cfg
# Enable periodic flushing of the trace buffer into the output file.
write_into_file: true

# Output file path
output_path: "ucp.pftrace"    #保存trace文件的路径

# Sampling duration: 10s
duration_ms: 10000          #0表示持续抓取

# Writes the userspace buffer into the file every 2.5 seconds.
file_write_period_ms: 2500   #控制buffer写文件,不是覆盖,相当于控制罗盘,一般不需要特殊指定

buffers {
​  # buffer size
​  size_kb: 65535   #如果出现数据丢失可设置大一些
​  # DISCARD: no new sampling data will be stored when the storage is full.
​  # RING_BUFFER: old sampling data will be discarded and new data will be stored when the storage is full.
​  fill_policy: RING_BUFFER
}

# UCP data source
data_sources: {
​    config {
​        name: "track_event"
​        track_event_config {
​           enabled_categories: "dnn"
​        }
​    }
}

在该目录下会生成 trace 文件:文件名为 output\_path 中配置的文件名:
30.png

1.Perfetto 不支持自动覆盖,如果设置路径中有之前的 ptrace 文件会报错

31.png

2.ucp\_in\_process.json 中指定的文件路径是相对路径,需要配置文件和脚本放在同一个路径下

6.1.2 结果解析

生成的 ucp.pftrace 就是我们要分析的文件,使用<u>Perfetto UI</u>打开:
32.png

选择生成的 ucp.pftrace 文件,选中一个带有 forward::Wait 字样的一块,如下图所示:
33.png

可以看到等待部分耗时大约为 80.xms,也可以看到线程和进程的信息(Wait 部分)
34.png

  • 单线程 + 多帧
hrt_model_exec perf --model_file xxx.hbm --frame_count 4

35.png

  • 多线程 + 多帧
hrt_model_exec perf --model_file xxx.hbm --frame_count 10 --thread_num 4

36.png

如何分析:

  1. 查看 UCP 内部调度是否正常例如哪块耗时明显高于预期
  2. 观察 BPU 是否持续在使用:例如两个 BPU Opfinish 之间的耗时是否符合预期,继而判断任务编排是否合理,任务下发是否及时
  • 多线程 + 多帧 +CPU 结果
    37.png

6.2 system 模式

在 system 模式下,UCP trace 只是其中一个数据源,因此需要运行 Perfetto 的后台进程来完成 trace 捕获。

  1. 运行 Perfetto 后台进程
tracebox traced --background
tracebox traced_probes --background --reset-ftrace
tracebox perfetto -c ucp_system.cfg -o ucp.pftrace
请注意,为了能够获取完整的数据,需要确保 hrt\_model\_exec 执行结束前,perfetto 进程未退出。可以适当增加 ucp\_system.cfg 中的 duration\_ms,当前默认为 10000ms
  1. 开启一个新终端,设置环境变量和运行程序
export HB_UCP_PERFETTO_CONFIG_PATH=ucp_system.json
export HB_UCP_ENABLE_PERFETTO=true
  1. 运行程序,比如运行 hrt\_model\_exec 命令,并将获取到的 ucp.pftrace 解析:
    38.png

7.视觉处理/高性能算子

UCP 提供了视觉处理和高性能算子两大方向的多种接口:

  1. 视觉处理主要针对视频编/解码,光流,AVM 拼接等常规视觉算法
  2. 高性能算子依赖于 DSP 的实现,主要用于 fft 和 ifft 的加速 更多信息可以参考用户手册《<u>统一计算平台</u>》的相关章节。

8.DSP 使用

征程 6 的 dsp 使用了 Cadence 的 Tensilica Vision Q8 DSP IP(征程 6B 为 Vision 130)。支持 int8/int16/int32/float32/double 的浮点计算。 当前 DSP 可以用于加速模型前后处理比如点云体素化,模型量化反量化等操作,模型中间的算子加速暂不支持。更详细的说明,请参照《<u>DSP 算子开发</u>》章节。 完整的算子开发分为三个步骤:

  1. DSP 算子开发
int test_op(void *input, void *output, void *tm){
​    return 0;
}
  1. 注册算子,编译镜像
typedef int (*handle_fn)(void *input, void *output, void *tm);
int hb_dsp_register_fn(int cmd, handle_fn handle, int latency);
  1. 通过 UCP API 调用,申请计算资源并执行任务
//1. 申请输入输出资源,将输入输出映射为DSP可访问的内存地址
hbUCPSysMem input_mem, output_mem;
hbUCPMalloc(&output_mem, data_size, 0);
hbDSPAddrMap(&output_mem, &output_mem);
hbUCPMalloc(&input_mem, out_size, 0);
hbDSPAddrMap(&input_mem, &input_mem);
//2. 创建并提交dsp任务
hbUCPTaskHandle_t task{nullptr};
hbDSPRpcV2(&task, &input_mem, &output_mem, cmd);
hbUCPSchedParam sched_param;
HB_UCP_INITIALIZE_SCHED_PARAM(&sched_param);
hbUCPSubmitTask(task, &sched_param);
//3. 等待任务完成
hbUCPWaitTaskDone(task, 0);
//4. 释放资源
hbUCPReleaseTask(task);
UNMAP_AND_FREE(&input_mem);
UNMAP_AND_FREE(&output_mem);

Apache Hudi(Hadoop Upserts Delete and Incremental)是下一代流数据湖平台。Apache Hudi将核心仓库和数据库功能直接引入数据湖。Hudi提供了表、事务、高效的upserts/delete、高级索引、流摄取服务、数据集群/压缩优化和并发,同时保持数据的开源文件格式。

Apache Hudi不仅非常适合于流工作负载,而且还允许创建高效的增量批处理管道。Apache Hudi可以轻松地在任何云存储平台上使用。Hudi的高级性能优化,使分析工作负载更快的任何流行的查询引擎,包括Apache Spark、Flink、Presto、Trino、Hive等。

基于Hudi的大数据湖仓一体架构如下图所示:
image.png

视频讲解如下:
https://www.bilibili.com/video/BV11QzYBPEuS/?aid=115959822032...

一、 Hudi发展历史

  • 2015年:发表了增量处理的核心思想/原则(O'reilly 文章)。
  • 2016年:由 Uber 创建并为所有数据库/关键业务提供支持。
  • 2017年:由 Uber 开源,并支撑 100PB 数据湖。
  • 2018年:吸引大量使用者,并因云计算普及。
  • 2019年:成为 ASF 孵化项目,并增加更多平台组件。
  • 2020年:毕业成为 Apache 顶级项目,社区、下载量、采用率增长超过 10 倍。
  • 2021年:支持 Uber 500PB 数据湖,SQL DML、Flink 集成、索引、元服务器、缓存。

二、 Hudi的特性

  • 可插拔索引机制支持快速Upsert/Delete。
  • 支持增量拉取表变更以进行处理。
  • 支持事务提交及回滚,并发控制。
  • 支持Spark、Presto、Trino、Hive、Flink等引擎的SQL读写。
  • 自动管理小文件,数据聚簇,压缩,清理。
  • 流式摄入,内置CDC源和工具。
  • 内置可扩展存储访问的元数据跟踪。
  • 向后兼容的方式实现表结构变更的支持。

三、 编译安装Hudi

这里使用的版本信息如下:
image.png

下面是具体的操作步骤。
(1)安装Maven并修改setting.xml指定Maven仓库地址

<mirror>
    <id>alimaven</id>
    <name>aliyun maven</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    <mirrorOf>central</mirrorOf>
</mirror>

<mirror>
    <id>confluent</id>
    <name>confluent maven</name>
    <url>http://packages.confluent.io/maven/</url>
    <mirrorOf>confluent</mirrorOf>
</mirror>

(2)解压Hudi源码包

tar -zxvf hudi-1.0.0.src.tgz

(3)修改Hudi源码文件

hudi-1.0.0/hudi-sync/hudi-hive-sync/src/test/java/org/apache/hudi/hive/testutils/HiveTestUtil.java文件
第250行把 zkServer.shutdown(true);改为 zkServer.shutdown();

(4)修改hudi-1.0.0/pom.xml,注释或去掉410行内容;并指定Hadoop和Hive的版本

<!--
<exclude>ch.qos.logback:logback-classic</exclude>
-->
<hadoop.version>3.1.2</hadoop.version>
<hive.version>3.1.2</hive.version>

(5)安装Maven的confluent(Kafka)库。

# 下载Confluent Kafka库
wget http://packages.confluent.io/archive/5.5/confluent-5.5.0-2.12.zip

unzip confluent-5.5.0-2.12.zip

# 安装Confluent Kafka库
mvn install:install-file -DgroupId=io.confluent -DartifactId=common-config -Dversion=5.5.0 -Dpackaging=jar -Dfile=./confluent-5.5.0/share/java/confluent-common/common-config-5.5.0.jar

mvn install:install-file -DgroupId=io.confluent -DartifactId=ommon-utils -Dversion=5.5.0 -Dpackaging=jar -Dfile=./confluent-5.5.0/share/java/confluent-common/common-utils-5.5.0.jar

mvn install:install-file -DgroupId=io.confluent -DartifactId=common-utils -Dversion=5.5.0 -Dpackaging=jar -Dfile=./confluent-5.5.0/share/java/confluent-common/common-utils-5.5.0.jar

mvn install:install-file -DgroupId=io.confluent -DartifactId=kafka-avro-serializer -Dversion=5.5.0 -Dpackaging=jar -Dfile=./confluent-5.5.0/share/java/kafka-rest/kafka-avro-serializer-5.5.0.jar

mvn install:install-file -DgroupId=io.confluent -DartifactId=kafka-schema-registry-client -Dversion=5.5.0 -Dpackaging=jar -Dfile=./confluent-5.5.0/share/java/kafka-rest/kafka-schema-registry-client-5.5.0.jar

mvn install:install-file -DgroupId=io.confluent -DartifactId=kafka-json-schema-serializer -Dversion=5.5.0 -Dpackaging=jar -Dfile=./confluent-5.5.0/share/java/kafka-rest/kafka-json-schema-serializer-5.5.0.jar

(6)修改以下两个pom文件:

hudi-1.0.0/packaging/hudi-spark-bundle/pom.xml
hudi-1.0.0/packaging/hudi-utilities-bundle/pom.xml

# 添加如下内容:
    <!-- 增加hudi配置版本的jetty -->
    <dependency>
      <groupId>org.eclipse.jetty</groupId>
      <artifactId>jetty-server</artifactId>
      <version>${jetty.version}</version>
    </dependency>
 
    <dependency>
      <groupId>org.eclipse.jetty</groupId>
      <artifactId>jetty-util</artifactId>
      <version>${jetty.version}</version>
    </dependency>
 
    <dependency>
      <groupId>org.eclipse.jetty</groupId>
      <artifactId>jetty-webapp</artifactId>
      <version>${jetty.version}</version>
    </dependency>
 
    <dependency>
      <groupId>org.eclipse.jetty</groupId>
      <artifactId>jetty-http</artifactId>
      <version>${jetty.version}</version>
    </dependency>

(7)执行编译

mvn clean package -Dcheckstyle.skip=true -DskipTests -Dspark3.5 -Dflink1.20 -Dscala-2.12 -Dhadoop.version=3.1.2 -Pflink-bundle-shade-hive3

四、 快速体验Hudi

在Hudi编译完成后,便可以使用Hudi提供的命令行工具来操作Hudi。下面通过具体的示例来演示如何使用Hudi CLI命令行工具。
(1)启动Hudi CLI命令行工具。

hudi-cli/hudi-cli.sh

# 启动成功后,将输出下面的信息。
===================================================================
*         ___                          ___                        *
*        /\__\          ___           /\  \           ___         *
*       / /  /         /\__\         /  \  \         /\  \        *
*      / /__/         / /  /        / /\ \  \        \ \  \       *
*     /  \  \ ___    / /  /        / /  \ \__\       /  \__\      *
*    / /\ \  /\__\  / /__/  ___   / /__/ \ |__|     / /\/__/      *
*    \/  \ \/ /  /  \ \  \ /\__\  \ \  \ / /  /  /\/ /  /         *
*         \  /  /    \ \  / /  /   \ \  / /  /   \  /__/          *
*         / /  /      \ \/ /  /     \ \/ /  /     \ \__\          *
*        / /  /        \  /  /       \  /  /       \/__/          *
*        \/__/          \/__/         \/__/    Apache Hudi CLI    *
*                                                                 *
===================================================================

Welcome to Apache Hudi CLI. Please type help if you are looking for help. 
hudi->

(2)查看帮助信息

hudi->help

(3)查看create语句创建Hudi表的语法。

hudi->help create

# 输出的信息如下:
NAME
    create - Create a hoodie table if not present

SYNOPSIS
    create [--path String] [--tableName String] --tableType String --archiveLogFolder String --tableVersion Integer --payloadClass String

OPTIONS
    --path String
    Base Path of the table
    [Mandatory]

    --tableName String
    Hoodie Table Name
    [Mandatory]

    --tableType String
    Hoodie Table Type. Must be one of : COPY_ON_WRITE or MERGE_ON_READ
    [Optional, default = COPY_ON_WRITE]

    --archiveLogFolder String
    Folder Name for storing archived timeline
    [Optional]

    --tableVersion Integer
    Specific table Version to create table as
    [Optional]

    --payloadClass String
    Payload Class
    [Optional, default = org.apache.hudi.common.model.HoodieAvroPayload]

(4)创建一张名叫emp的表,并将其存储在HDFS上。

hudi->create --path hdfs://localhost:9000/hudi_db/emp --tableName emp

# 提示:
# 如果使用本地文件系统作为Hudi表的存储介质,可以使用下面的语句。
hudi->create --path file:///root/temp/hudi_db/emp --tableName emp

(5)查看emp表对应的HDFS目录。

hdfs dfs -ls -R /hudi_db/emp

# 输出的信息如下:
drwxr-xr-x   - root supergroup   0 2025-08-15 02:48 /hudi_db/emp/.hoodie
drwxr-xr-x   - root supergroup   0 2025-08-15 02:48 /hudi_db/emp/.hoodie/.aux
drwxr-xr-x   - root supergroup   0 2025-08-15 02:48 /hudi_db/emp/.hoodie/.aux/.bootstrap
drwxr-xr-x   - root supergroup   0 2025-08-15 02:48 /hudi_db/emp/.hoodie/.aux/.bootstrap/.fileids
drwxr-xr-x   - root supergroup   0 2025-08-15 02:48 /hudi_db/emp/.hoodie/.aux/.bootstrap/.partitions
drwxr-xr-x   - root supergroup   0 2025-08-15 02:48 /hudi_db/emp/.hoodie/.schema
drwxr-xr-x   - root supergroup   0 2025-08-15 02:48 /hudi_db/emp/.hoodie/.temp
-rw-r--r--   3 root supergroup 584 2025-08-15 02:48 /hudi_db/emp/.hoodie/hoodie.properties
drwxr-xr-x   - root supergroup   0 2025-08-15 02:48 /hudi_db/emp/.hoodie/timeline
drwxr-xr-x   - root supergroup   0 2025-08-15 02:48 /hudi_db/emp/.hoodie/timeline/history

(6)连接Hudi表。

hudi->connect --path hdfs://localhost:9000/hudi_db/emp

# 输出的信息如下:
Finished Loading Table of type COPY_ON_WRITE
(version=1, baseFileFormat=PARQUET) 
from hdfs://localhost:9000/hudi_db1/emp
Metadata for table emp loaded

(7)查看Hudi表的详细信息。

hudi:emp->desc

# 输出的信息如下:

image.png

‍自人类文明诞生以来,语言一直是知识传承与思想交流的核心载体。如何让机器理解并生成人类语言,成为人工智能领域最富挑战性的课题之一。

大语言模型(Large Language Models,LLMs)的崛起标志着自然语言处理领域的范式转变——从针对特定任务的专门模型,发展为具备通用语言理解和生成能力的智能系统。

本文将系统梳理大语言模型从统计基础到智能涌现的完整技术演进历程,分析各阶段代表性模型的架构创新与核心贡献,并基于当前技术瓶颈,深入探讨前沿技术框架及未来发展方向。

我们不仅要回顾历史,更要通过对发展逻辑的梳理,识别现阶段亟需解决的核心痛点,展望大语言模型技术的下一个前沿。

第一章:技术前史与理论奠基(1950s-2017)

1.1 统计语言模型的兴起

大语言模型的理论根源可追溯至20世纪中叶。克劳德·香农的信息论(1948)首次用数学框架描述了信息与不确定性的关系,为用概率模型刻画语言奠定了基础。早期的语言模型基于n-gram统计方法,通过计算词序列的联合概率来评估语言的可能性。

n-gram模型的核心贡献在于将语言建模问题形式化为概率预测问题,但其局限性也十分明显:随着n增大,参数空间呈指数级增长(维度灾难);无法有效建模长距离依赖关系;缺乏对词汇语义的理解。尽管如此,n-gram模型为机器翻译、语音识别等早期自然语言处理任务提供了基本工具,并确立了语言模型的概率框架。

20世纪90年代,随着计算机算力的提升和语料库规模的扩大,统计语言模型开始引入隐马尔可夫模型(HMM)和最大熵模型等更复杂的概率模型。

隐马尔可夫模型通过状态转移概率和观测概率来建模序列数据,在语音识别领域取得了显著成功,能够在一定程度上处理语音信号到文本序列的映射问题。

最大熵模型则基于最大熵原理,通过对已知特征的约束来构建概率分布,在自然语言处理的词性标注、文本分类等任务中展现出良好的性能。

这些模型在n-gram的基础上进一步拓展了统计建模的能力,但依然未能突破对语义层面的深层理解,对于词汇之间的语义关联和上下文的整体语义把握仍存在较大局限。

同时,统计模型对大规模标注数据的依赖也逐渐成为其发展的瓶颈,在数据稀疏或领域迁移场景下表现不佳。

1.2 神经网络与分布式表示的革命

21世纪初,深度学习技术的复兴为语言模型带来了根本性变革。

约书亚·本吉奥等人于2003年提出的神经概率语言模型(Neural Probabilistic Language Model)是这一变革的关键节点。该模型首次引入词向量的概念——将离散的词语映射到连续的向量空间,使语义相似的词在向量空间中距离相近。

这一思想催生了Word2Vec(2013)和GloVe(2014)等里程碑式工作,它们通过无监督学习从大规模文本中提取词向量表示。

词向量技术的重要性在于:它使模型能够捕捉词汇间的语义和语法关系,解决了传统one-hot表示的高维稀疏问题,为后续深度语言模型奠定了基础。

与此同时,循环神经网络(RNN)及其改进版本长短期记忆网络(LSTM)和门控循环单元(GRU)被引入序列建模。

这些架构通过内部状态传递历史信息,理论上能够处理任意长度的依赖关系。

虽然RNN语言模型在机器翻译、文本生成等任务上取得了显著进展,但其顺序计算特性和梯度消失问题限制了其在更大规模数据上的应用潜力。

为了突破RNN的局限,研究人员开始探索并行化架构,卷积神经网络(CNN)也被尝试用于语言处理,如TextCNN通过卷积操作提取局部特征,但在捕捉长距离依赖上仍显不足。

这一时期,神经网络与分布式表示的结合,不仅推动了语言模型从统计方法向数据驱动的端到端学习转变,更重要的是构建了"语义空间"的认知框架——让机器首次能够以连续向量的形式理解词语的深层含义,为后续Transformer架构的出现埋下了技术伏笔。

这一阶段的探索虽然存在计算效率和长依赖建模的瓶颈,但彻底改变了语言处理的范式,使基于神经网络的语言模型成为自然语言处理领域的主流方向。

第二章:Transformer架构与大模型时代(2017-2020)

2.1 Transformer:注意力机制的革命

2017年,谷歌研究人员在《Attention Is All You Need》论文中提出的Transformer架构,彻底改变了自然语言处理的发展格局。

该架构完全摒弃了传统的循环结构,转而以自注意力机制(Self-Attention)为核心,使模型能够并行处理整个输入序列,并直接捕捉序列中任意位置之间的依赖关系。

Transformer在结构上主要由编码器(Encoder)和解码器(Decoder)两部分组成。

编码器负责将输入序列转换为蕴含上下文信息的连续表示,其内部通过多层堆叠的自注意力子层和前馈神经网络子层实现特征提取。

解码器则在编码器输出的基础上,先通过掩蔽自注意力(Masked Self-Attention)机制确保生成当前 token 时不会提前看到后续信息,再借助编码器-解码器注意力层整合输入序列的全局上下文,最终逐步生成目标序列。

自注意力机制的计算可表示为:

Attention(Q,K,V)=softmax(QKTdk)VAttention(Q,K,V)=softmax(dkQKT)V

其中,查询(Q)、键(K)、值(V)均来自输入的不同线性变换。该机制使每个位置都能直接关注序列中的所有位置,从而显著提升对长距离依赖的建模能力。

这种模块化设计赋予 Transformer 高度的灵活性和可扩展性,便于适配不同任务:例如在文本分类中可仅使用编码器,而在机器翻译等生成任务中则需完整使用编码器-解码器结构。

其并行化特性也极大地利用了现代 GPU 的大规模并行计算能力,为训练超大规模语言模型扫清了架构障碍。

随着 Transformer 的广泛应用,研究者进一步提出如多头注意力(Multi-Head Attention)等改进方案,通过并行运行多个自注意力头,从不同子空间捕捉多样化的依赖关系,进一步增强了模型的上下文表征能力。

自此,注意力机制成为大语言模型的核心组件,开启了模型规模与性能同步跃升的新纪元。

2.2 BERT:双向上下文编码的突破

2018年,谷歌推出的BERT(Bidirectional Encoder Representations from Transformers)模型,首次展示了在大规模无标注文本上进行预训练,然后在具体任务上微调这一范式的强大潜力。

BERT的核心创新在于其预训练目标:掩码语言建模(Masked Language Modeling,MLM)和下一句预测(Next Sentence Prediction,NSP)。

MLM任务随机掩码输入中的部分词元,要求模型基于上下文预测被掩码的内容,这迫使模型学习深层的双向语境表示。

与之前基于自回归的语言模型(只能从左到右或从右到左)不同,BERT能够同时利用左右两侧的上下文信息,从而获得更丰富的语义理解。

BERT在发布时在11项自然语言理解基准测试中刷新了记录,其“预训练+微调”范式迅速成为行业标准。

更重要的是,BERT证明了通过大规模预训练,单个模型可以学习到可迁移到多种下游任务的通用语言表示,这一发现为大语言模型的后续发展指明了方向。

2.3 GPT系列:生成式预训练的演进

几乎与BERT同期,OpenAI推出了生成式预训练Transformer(GPT)系列模型。与BERT的编码器架构不同,GPT基于Transformer的解码器部分,专注于自回归语言建模——根据前文预测下一个词元。

GPT-1(2018) 首次系统性地验证了“生成式预训练+判别式任务微调”的两阶段范式。虽然参数量仅为1.17亿,远小于后续模型,但GPT-1证明了生成式预训练同样能够学习到丰富的语言表示。

GPT-2(2019) 将参数量扩大到15亿,并引入更高质量、更多样化的训练数据。其最重要的贡献在于展示了语言模型在零样本(zero-shot)和少样本(few-shot)学习中的潜力。GPT-2无需针对特定任务进行微调,仅通过适当的提示(prompt)就能完成多种语言任务,这暗示了大语言模型可能具备通用任务求解能力。

GPT-3(2020) 则将这一趋势推向极致。拥有1750亿参数的GPT-3系统性地探索了模型规模与性能的关系,验证了“规模定律”(Scaling Laws)——随着模型参数、训练数据和计算资源的平滑增加,模型性能呈现可预测的幂律提升。GPT-3在上下文学习(In-Context Learning)方面的卓越表现,即仅通过提供任务描述和少量示例就能适应新任务,极大地降低了大语言模型的应用门槛。

2.4 多样化架构探索

在同一时期,市场上陆续推出了多种各异的模型架构与目标函数。

T5(Text-to-Text Transfer Transformer,2019)将所有自然语言处理任务统一为文本到文本的格式,通过大规模实证研究比较了不同预训练目标的效果。

BART(Denoising Sequence-to-Sequence Pre-training,2019)采用编码器-解码器架构,通过多种噪声函数破坏输入文本,训练模型恢复原始文本,在生成任务上表现优异。

这一阶段的共同特点是模型规模迅速扩大,从数亿参数发展到数千亿参数;训练数据从特定领域文本扩展到涵盖互联网大部分公开文本;计算资源需求呈指数级增长。大语言模型开始展现出超出特定任务范畴的通用语言能力,为向通用人工智能迈进奠定了基础。

未完待续....

整理 | 华卫

 

“一圈又一圈的循环融资,投资回报率却不尽如人意,这些 AI 系统实际用起来也远没有想象中好用,或许方向本身就站不住脚。”

 

近日,知名 AI 专家、认知科学家 Gary Marcus 在一场访谈中愤愤表示,“整个世界都在全力押注神经网络,还在这个我始终觉得毫无道理的理念上投入了巨资,但大语言模型根本无法带我们抵达 AGI 这一终极目标。”

 

这场对话由曾因成功预测 2008 年金融危机而闻名的传奇投资人、华尔街最具影响力人物之一 Steve Eisman 发起,他与 Marcus 共同探讨了当下 AI 进展的方方面面,包括商业路径、社区现状和未来方向等。Marcus 认为,大语言模型已经达到了收益递减的阶段。并且,他指出,现在 AI 领域根本没有技术壁垒了,所有 AI 企业的研发思路基本一致。

 

对于大量人才从大厂离职去办初创公司的现象,Marcus 直言道,“如果 OpenAI 真的能在下周推出 AGI,谁会在这个即将改变世界的关键节点离职,去创办一家可能要花四年时间才能做出成果的小公司?显然没人会这么做,大家都会想留在公司见证这个时刻。”在他看来,这些企业内部的人也清楚,他们根本没有做出宣称的那种突破性成果。

 

值得一提的是,他认为,OpenAI 最终会成为 AI 领域的 WeWork,这家公司原本计划以 500 亿美元的巅峰估值风光上市、却在一夕之间破产。“我觉得最终 OpenAI 可能会被微软这样的企业收购。OpenAI 每个月的亏损大概有 30 亿美元,一年就是 300 多亿美元,即便最近完成了 400 亿美元的融资,也只够支撑一年的运营。”

 

谈及各家模型的未来,Marcus 的预测是,“大语言模型会成为一种标准化商品,各家的模型只会比上一年的版本稍有提升,差距微乎其微,最终品牌差异会变得无关紧要。当产品变成商品后,价格必然下跌。”

 

以下是详细对话内容,我们在不改变原意的基础上进行了翻译和删减,以飨读者。

 

2 万亿美元押注 Transformer,根本“毫无道理”?

 

Steve Eisman:大家好,我是 Steve Eisman。今天我们请到了一位特别的嘉宾,他就是 Gary Marcus。他是大语言模型的坚定质疑者,而大语言模型正是整个 AI 领域的核心根基。接下来,Gary 会和我们分享他的观点,聊聊大语言模型到底是什么。

 

Gary Marcus:谢谢你的邀请,也感谢一两个月前你在 CNBC 对我的盛赞。

 

Steve Eisman:不客气,这都是你应得的。在正式开始之前,我的观众大多还不了解你,不如先和大家说说你的背景,让大家知道你在这个领域发表观点是完全有底气的。

 

Gary Marcus:我这辈子几乎都在研究智能相关的问题。我 10 岁学会编程后,就开始涉足 AI 领域了。我的职业生涯中,很大一部分精力都用在研究自然智能上,比如人类的智能、还有孩子是如何学习语言这类问题。我在 MIT 的博士论文围绕两个方向展开,一个是儿童的语言学习机制,另一个就是神经网络。神经网络是 AI 领域的一种特定研究方法,也被用于人类思维的建模,它的设计灵感可以说和大脑有一点松散的关联。这其实是个很巧妙的营销说法,会让人觉得它是完全基于大脑研究的,但事实并非如此,二者只是浅层关联。早年间神经网络就曾风靡一时,我在上世纪 90 年代就研究过这类模型,发现它们并不能很好地模拟人类的思维方式,但我还是投入了大量精力,想弄清楚它们的实际工作原理。

 

2012 年深度学习重新兴起时,我当时就觉得,这些东西我早就研究过了,和我博士论文里的内容高度相似。我在 2001 年写过一本名为《The Algebraic Mind》的书,在书里我其实就预判到了如今大语言模型出现的幻觉问题,还有一些推理层面的缺陷,这些都是我们今天要探讨的话题。所以当深度学习再次成为热点时,我一眼就看出了其中的诸多问题,对我来说这些问题都很熟悉。2012 年,我在《The New Yorker》上发表了一篇文章,标题是《Is Deep Learning a Revolution in Artificial Intelligence?》,我在文中写道:“深度学习确实很有意思,我很佩服 Jeff Hinton,他能长期坚持自己的研究方向。”

 

Steve Eisman:Jeff Hinton 是谁?

 

Gary Marcus:他是去年诺贝尔生理学或医学奖的得主,也是深度学习领域的核心奠基人之一。

 

Steve Eisman:原来如此。

 

Gary Marcus:他的一些学生,最近也开始认同我的观点了。Jeff Hinton 确实是这个领域的大人物,在神经网络一度无人问津的时期,是他一直坚守,这份坚持值得肯定。但当然,他的研究并非全无可议之处,我们这里就不细谈了。他让神经网络重获关注,而更值得你的听众了解的是,真正让这个领域迎来爆发的,是他的学生 Ilya Sutskever,或许还有另外几位研究者。他们找到了方法,能让这套研究了许久的系统落地应用。要知道,神经网络的研究最早能追溯到上世纪 40 年代,Jeff Hinton 也在上世纪 80 年代中期做出了不少重要贡献。而这些研究者发现,借助英伟达研发的图形处理器(GPU),就能实现神经网络的高效运行。

 

彼时的英伟达,生产 GPU 主要是为了满足电子游戏的需求。这些原本为游戏设计的 GPU,核心优势在于并行计算,简单来说,就是能同时处理多个计算任务,而非按顺序逐个完成。传统的中央处理器(CPU),运行软件程序时基本是逐行执行的,虽然现在的技术已经有了改进,但这仍是计算机科学入门课程里会教的基础原理。而 GPU 能把一个复杂问题拆解成无数个小任务,同时进行处理,它的设计初衷就是为了计算机图形处理。比如要渲染电子游戏的下一帧画面,如果逐行处理,耗时会非常久,而用 GPU 的话,能同时处理整个画面,一个子处理器负责一个像素点,以此类推。不得不说,GPU 在图形处理上的表现堪称完美,我偶尔也玩电子游戏,深知 GPU 的算力有多惊人。

 

Ilya Sutskever,还有另一位我一时想不起名字的论文合作者,他们证明了 GPU 是运行神经网络的绝佳载体,至于神经网络的具体定义和实际意义,我们之后可以再聊。他们的这一发现,让神经网络的运行实现了两大突破:一是速度大幅提升,二是能处理海量数据。在此之前,六十多年的神经网络研究做出的基本都是些玩具级的模型,而他们证明,借助 GPU 这项技术能真正实现规模化的实际应用,能在更大的维度上落地。可以说,我们如今看到的所有深度学习成果,都源于 2012 年的这次突破。

 

而在这一突破出现后,两件事接踵而至:《The New York Times》刊发了文章,盛赞深度学习的惊人潜力;第二天,我就在《The New Yorker》的博客上发表了文章。我在文中表示,深度学习固然出色,但也存在诸多问题,它注定会在一些领域表现优异,却在另一些领域束手无策。它擅长模式识别和统计分析,这一点毋庸置疑,但人类的认知活动中还有大量的抽象思维过程。比如我们能理解家谱的逻辑,进而对现实世界的相关问题进行推理,而深度学习模型永远无法擅长这类任务,它的架构本身就不适合做抽象推理。从早年对神经网络的研究以及对人类认知机制的研究中,我早就看清了这一点。你应该读过 Daniel Kahneman 的经典著作《Thinking, Fast and Slow》吧?

 

Steve Eisman:我读过。

 

Gary Marcus:Daniel Kahneman 在书中提出了双系统认知理论,他将人类的认知分为系统一和系统二。系统一的思考速度快,是无意识的、基于统计的、本能的反应;而系统二的思考速度更慢,更具思辨性,核心是逻辑推理。神经网络本质上就相当于人类的系统一,这本身没问题,系统一也是人类认知的重要组成部分,但人类的认知还有系统二的部分。尤其是在理性思考时,我们会依赖系统二,进行更审慎、更有逻辑的推理。而神经网络模型,从始至终都不擅长系统二的这类任务,直到现在依然如此。我在 2012 年就指出,深度学习模型只能实现系统一的功能,却无法完成系统二的思考。

 

而在这之后的 14 年里,整个世界都在全力押注神经网络。这里要说明的是,我们所说的神经网络,就是如今的大语言模型,大语言模型是神经网络的一种形式,抱歉,我之前没明确说明这一点。事实上,2012 年时大语言模型还未出现,后续又有不少技术突破,其中关键的就是 2017 年发表的 Transformer 论文,这也是大语言模型的起源。而全世界在这一领域的投资规模达到了天文数字,据我粗略估算,已经有 1 到 2 万亿美元了,全都投在了这个我始终认为毫无道理的理念上。这些研究者的想法是,只要持续发展神经网络,就能实现智能所需的一切能力,抵达 AGI 的目标,但他们却忽视了系统二的核心价值。

 

一开始,他们只是把神经网络当成一个巨大的黑箱,直到现在,还有很多人抱着这样的想法。他们觉得,只要把海量数据喂进去,就能得到一个拥有智能的系统,却从未从科学的角度深入思考过真正的智能究竟该具备怎样的架构。我认为这些人太过天真,我也一直试图指出这一点,这也让我成了这个领域里的“孤行者”。很长一段时间里,人们对我的观点不屑一顾,甚至不只是不屑,而是鄙夷。

 

Steve Eisman:没错,他们对你的态度远不止是不屑,而是赤裸裸的鄙夷。

 

Gary Marcus:我们还能举出很多这样的例子。我对他们的这种态度感到失望,这个话题我们可以聊很久。他们甚至对我公开表现出敌意,比如我了解到,OpenAI 内部还为我做了专属的表情包。

 

Steve Eisman:我也看到过这个消息。

 

Gary Marcus:某种程度上,这也算是一种认可吧,既觉得荣幸,又觉得有些离谱,你能看出来,我一直试图用平常心看待这件事。但这也能从侧面说明问题,Sam Altman 还在推特上称我为“喷子”。他们就是不想听我的观点,而我核心的观点,都写在了 2022 年发表的论文《Deep Learning is Hitting a Wall》里。我在这篇论文中指出,当时“规模化扩张”的理念已经开始流行,也就是通过不断投入更多数据、更多 GPU,把模型做得越来越大,他们认为只要模型足够大,就会拥有超乎想象的能力。

 

我先暂停一下,和大家解释下这个“规模化扩张”的理念。他们确实有一些数据能支撑这个观点,但这种想法依然太过天真。我把这种理念称作“万亿磅婴儿谬误”,道理很简单:一个婴儿出生时 8 磅重,一个月后长到 16 磅,并不意味着他会一直这样翻倍增长,到上大学时长成万亿磅的巨人。他们就是做出了这样天真的推断,我相信你在商业领域也经常见到这种情况。很多手握巨资的聪明人,都押注了这个理念,他们说,“我们从数据中看到了这样的发展规律,只要投入足够多的数据,就能实现真正的智能。”

 

“大模型不会思考,重构信息碎片致幻”

Steve Eisman:先稍停一下,我们倒回去说。大语言模型到底能做什么?这些研发者又认为它们本该实现什么功能?我真想把这个问题彻底讲清楚。

 

Gary Marcus:你这个问题问得特别好。大语言模型的核心工作原理,就是预测序列中的下一个内容。你可以想想苹果手机的自动校正功能,原理差不多,虽说那功能有时候能把我逼疯,你继续说。这个功能并非总能生效,核心逻辑就是你在输入句子时,它会预判接下来可能要打的内容。比如你打出“在……见我”,它大概率会推测你想说“在餐厅见我”。它会对人类的语言表达做统计分析,效果还算过得去,但绝非完美,偶尔还会出错,让人恼火,这就是我们说的自动补全。

 

而我把大语言模型称作“超级版自动补全工具”,它们只是用一种特殊的方式完成这种预测,这就是其最本质的功能。它们的运作方式里还有些有意思的点,其中一个就是会把所有信息拆解成细碎的片段,之后再重新整合,这就导致信息之间的关联会被切断。也正是因此,它们才会时不时出现幻觉现象,凭空编造内容。

 

Steve Eisman:我们稍后再细说幻觉这个问题。

 

Gary Marcus:好,回头再聊。幻觉是这类模型的典型错误之一,早在 2001 年,大语言模型甚至还没被发明出来的时候,我就指出过这个问题。我当时就说,如果一直沿着这个方向研究下去,必然会出现这个问题,而事实也确实如此。大语言模型把信息拆分成碎片,再通过这些碎片预测后续内容。如果用整个互联网的内容对它们进行训练和数据投喂,它们的表现会好得让人意外,因为几乎任何你能想到的问题,注意,这里的“几乎”是关键,几乎所有问题,此前都有人提出过,也有人给出过答案。从某种程度来说,这些模型就是功能强大的记忆机器。

 

就在前几天,《大西洋月刊》还刊发了相关的文章,而且一直以来都有大量证据能证明这一点。比如你输入《哈利·波特》的部分内容,它能直接补完整段文字,本质上就是因为它记住了这些内容。如果一个模型能记住整个互联网的信息,那确实算得上很厉害。比如你问“道奇队在搬到洛杉矶之前,主场在哪”,网上有大量相关表述,它会告诉你是布鲁克林,大概率能给出正确答案。但仅仅依靠这种方式,模型根本无法形成抽象的概念和思想,还会因为信息碎片的拆解和错误整合出现各种问题。

 

Steve Eisman:那我们现在聊聊幻觉吧。到底什么是 AI 幻觉?举个例子,再说说出现这种情况的原因。

 

Gary Marcus:幻觉就是模型凭空编造内容,还无比笃定地呈现出来,但这些内容根本不符合事实。

 

Steve Eisman:那给我们举个例子。

 

Gary Marcus:我最喜欢的一个例子和 Harry Shearer 有关,你可能听过他的名字,看过《摇滚万万岁》吗?

 

Steve Eisman:当然看过。

 

Gary Marcus:他在这部影片里饰演贝斯手,巧的是,他还是我的朋友。他出演了《摇滚万万岁》,还和 Christopher J. Guest 合作了多部影片,参演了《楚门的世界》,还为《辛普森一家》里的伯恩斯先生等多个角色配音,他的知名度还挺高的,这点对接下来的故事很重要。先倒回说个题外话,我之前遇到的最典型的幻觉案例,主角是我自己。有人发给我一份我的人物简介,里面说我养了一只叫 Henrietta 的宠物鸡,但我根本没养过,这就是个很典型的幻觉案例,纯粹是凭空编造的。后来发现,有位插画师大概叫 Gary Oswald,写过一本关于 Henrietta 去上学的书,模型不过是把这些碎片化的信息胡乱拼凑在了一起。

 

Steve Eisman:那为什么会出现这种幻觉呢?

 

Gary Marcus:这就和我刚才说的信息碎片化拆解有关了。我再给你讲讲 Harry Shearer 的那个例子。我总拿宠物鸡 Henrietta 的事举例,有一天他给我发消息,说他没遇到过宠物鸡这种事,却遇到了和自己相关的幻觉案例。他比我有名多了,至少以前是。我当时也算小有名气,而模型给出的信息里,说他是英国的配音演员和喜剧演员,但他根本不是英国人。你只要花两秒看一下维基百科,就会发现他出生在洛杉矶。他名气不小,你也能在烂番茄、互联网电影数据库上查到他的资料,他接受过很多采访,也聊过自己的成长经历,他小时候还在洛杉矶的《杰克·本尼秀》里当过童星,想找到正确的信息一点都不难。

 

我们会错误地把大语言模型当成和人类一样拥有智能的个体,但实际上,它们所做的只是重构信息碎片之间统计层面的大概率关联,所以难免会出错,这种重构过程也常会出现偏差。Harry Shearer 这个案例就是如此,模型其实就是在构建一个信息集群,用统计学的方式预测各类信息之间的关联。而现实中确实有很多英国的配音演员和喜剧演员,比如 Ricky Gervais、Don Cleeve 等等。模型就把这些信息混为一谈了,这种信息融合的方式整体来看效果还算不错,但你永远无法确定它给出的某一个具体信息是准确的,所以幻觉现象才会频繁出现。

 

有人专门追踪过相关的法律案件,发现律师提交的辩护状里,有很多引用的判例都是模型编造的,根本不存在。我第一次关注这件事时,他已经发现了约 300 起这样的案件,三个月后再看,数量涨到了 600 起。这些律师不仅用 ChatGPT 这类工具代写文书,还因此被法官发现,受到了处罚。模型会出错,而最危险的是,这些错误还很容易被忽略,人们根本发现不了。还有一个例子,CNET 是最早用 AI 写稿的媒体之一,他们首批用 AI 写的 75 篇文章里,有近一半都存在错误,编辑们却没发现。因为这些文章语法通顺、格式规范,也没有拼写错误,人们很容易就放松了警惕。

 

我把这种现象称作“看着没问题效应”。大语言模型带来的这种效应,还催生了一个新词汇,我真后悔不是我发明的,叫“低效工作产物”。这个词大概是去年由几位教授提出的,指的是人们用 AI 写报告、提交给雇主,表面上看没什么问题,实则漏洞百出,因为大语言模型根本不具备真正的理解能力。

 

Steve Eisman:你的意思是,大语言模型并不会思考。

 

Gary Marcus:它们确实不会思考,只是把统计学上大概率关联的内容拼凑在一起。

 

Steve Eisman:只是简单拼凑。

 

Gary Marcus:没错。我还喜欢用“黏合”这个词,它们只是把信息黏合在一起。从统计学角度来说,大部分内容的拼凑是合理的,但总有一部分是错误的,而这些模型根本无法区分对错,也不会主动告知你。它们永远不会说,“维基百科显示 Harry Shearer 出生在洛杉矶,但作为大语言模型,我感觉他可能出生在伦敦,你可以去核实一下”。它们从来不会给出这样的提示,只会把所有内容都当作百科全书里的标准答案呈现出来,无论真假,这也是这类模型的危险之处。

 

Steve Eisman:确实是这样。

 

Gary Marcus:这类问题其实有很多,这个案例属于另一种情况,但也和模型的本质缺陷有关。这个问题的根源在于,所有大语言模型都有数据截止日期,它们的训练都是在某个特定时间点完成的,核心模型所掌握的信息,也只到这个时间点为止。研发者会给它们加各种补救措施,比如接入网络搜索功能,但这些补救措施和核心模型的融合效果都很差,不同系统的表现略有差异而已。这类模型最大的问题就是无法应对新事物、新情况,也是它们最根本的缺陷。早在 1998 年,我就通过研究早早发现了这一点。如果一个模型本质上只是个功能强大的记忆机器,当你向它输入一个超出其训练数据范围的内容时,它就会失灵。

 

有个例子特别能说明问题,具体细节我不太清楚,但特斯拉的 AI 系统也大量采用了这种记忆式的运作方式,而且其系统的复杂程度并不高。有人用过特斯拉的召唤功能,你应该记得马斯克说过,未来可以从纽约远程召唤洛杉矶的特斯拉,但现在显然做不到,不过据说能在停车场里召唤车辆。有人在一场航空展上试过这个功能,你能在油管上找到相关视频。这个人召唤自己的特斯拉,想在航空展上秀一下,结果车子径直撞上了一架价值 350 万美元的私人飞机。

 

原因就是,特斯拉的训练数据里,根本没有教系统如何应对飞机,毕竟谁会专门训练汽车躲避飞机呢?系统对世界没有形成通用的认知,比如“不要撞上挡路的大型贵重物体”,它根本不懂这些,只会识别训练数据里的自行车、行人等目标,它的识别分类里根本没有“飞机”这一项,所以才会直接撞上去。

所有 AI 企业都变了:悄悄复用经典符号式工具

Steve Eisman:那你有没有了解到,随着这场争论的风向转变,各大企业内部现在的情况如何?

 

Gary Marcus:我了解到的情况主要有几点。首先,我一直都在说,单纯的大语言模型行不通,必须结合传统的符号式 AI 技术。但之前他们都对此嗤之以鼻,觉得这套技术早就过时了,没必要用,还说人脑的工作模式本就不是这样。而现在,他们都悄悄在一定程度上采用了这项技术,比如引入代码解释器来运行 Python 代码,这些都是经典的符号式工具。说白了,他们正在偷偷把系统二的相关能力融入模型中,只是没有大肆宣扬,但这一改变确实带来了不小的提升。

 

马斯克发布 Grok 4 时的演示就很能说明问题,我还为此写过一篇文章,标题是《为何 GPT-3 和 Grok 4 无意间印证了神经符号 AI 的正确性》。文章里放了当时的演示图表,能清晰看到,正是那些他们不愿提及的符号式工具的加入,让模型的表现变得更好。如今模型的些许提升,绝大部分都来自这个原因,而非单纯的大语言模型优化,他们其实已经悄悄放弃了纯大语言模型的研发思路。而这对你所关注的商业领域来说意义重大,因为这些符号式工具根本不需要在 GPU 上运行,普通的 CPU 就足够了。

 

Steve Eisman:原来如此。

 

Gary Marcus:对我而言,从技术角度来说,这印证了我一直以来倡导的研发思路是正确的。这是第一个变化。第二个变化是,各大企业的很多人都离职去创办自己的初创公司了。你可以想想,如果 OpenAI 真的能在下周推出 AGI,谁会在这个即将改变世界的关键节点离职,去创办一家可能要花四年时间才能做出成果的小公司?显然没人会这么做,大家都会想留在公司见证这个时刻。

 

所以,大量人才离职的事实就说明,这些企业内部的人也清楚,他们根本没有做出宣称的那种突破性成果。还有一个变化,就是谷歌正在迎头赶上。就像我几年前在 Substack 专栏里预测的那样,因为现在所有企业的研发思路基本一致,这个领域根本没有技术壁垒。

 

Steve Eisman:没错,完全没有技术壁垒。

 

Gary Marcus:你和其他一些人都认为,如果所有人都在做大语言模型的规模化扩张,那么最终的赢家就是最有实力承担这笔扩张成本的企业。而放眼整个行业,谁的资金实力能超过谷歌?根本没有。

 

Steve Eisman:确实。

 

Gary Marcus:我其实也表达过类似的观点,只是表述略有不同,你的这个说法其实也没错。我当时的观点是,行业头部企业会逐渐趋同,而随着大语言模型成为标准化商品,行业内会引发价格战,服务定价会大幅下降。事实也确实如此,现在大语言模型的按 token 计费价格,已经暴跌了 99%。价格战确实爆发了,而最终的受益者自然是谷歌,这一点我当初虽然没有直接点明,但也有所预判。我大概是在 2024 年 3 月,也可能是 2023 年 8 月开始写相关文章,当时就说,所有企业都在遵循同一种研发思路,没人掌握什么独门绝技,这就意味着头部企业的产品会越来越趋同。

 

大语言模型会成为一种标准化商品,各家的模型只会比上一年的版本稍有提升,差距微乎其微,最终品牌差异会变得无关紧要。这一趋势带来的结果就是,谷歌迎头赶上了,中国的企业也追上来了,Anthropic 同样不甘落后。就像你说的,当产品变成商品后,价格必然下跌。这对终端消费者来说是好事,但对企业的商业模式来说却是巨大的打击。毕竟企业原本的设想是,花巨资采购 GPU,然后靠模型服务赚回巨额利润。

推理模型进行不了逻辑分析,再升级也没价值?

Steve Eisman:我们能不能聊聊推理模型?先给我的观众解释一下,推理模型和大语言模型有什么区别?推理模型是基于大语言模型研发的吗?

 

Gary Marcus:推理模型是在大语言模型的基础上运作的,但它不会像大语言模型那样直接给出第一个想到的答案,而是会反复迭代、花费时间去推敲,试图得出最优解。至于具体的研发细节,各家企业都没有公开太多。传统的神经网络模型,在某种意义上都是一次性输出结果的,当然现在行业内对“一次性”的定义有所不同。简单来说,就是把数据输入模型后,神经网络会立刻完成一次正向传播,粗略来讲,模型中的每个神经元都会处理信息并生成对应的结果。而推理模型则会进行多次传播,这是本质上的区别。

 

我有个朋友把传统模型的输出方式称为“恒时推理”,意思是模型生成答案的时间基本固定,无论什么问题,耗时都相差无几:把数据输入模式识别器,模型会根据现有的模式给出最优解。而推理模型采用的是全新的“变时推理”模式,我之后会聊聊它的适用场景和短板,这种模式的特点是,处理不同的问题,耗时会有所不同。目前还没有企业能完全解决推理模型的所有技术难题,但在一些场景下,它的表现确实不错。

 

据我了解,推理模型的研发思路之一,就是让模型模仿人类解决问题的思考过程,毕竟这些模型本质上都是模仿系统。比如在解决几何题或代数题时,模型会刻意模仿人类的解题步骤。人类解决这类问题需要一步步推导,融合了推理能力的神经网络模型,同样需要分步骤完成。

 

Steve Eisman:那推理模型的优势是什么?又有哪些明显的短板?

 

Gary Marcus:在回答这个问题之前,我想先提一点:推理模型的成本天生就更高,因为它需要占用 GPU 更长的时间来生成答案。

 

Steve Eisman:好的。

 

Gary Marcus:那我来说说它的适用场景和短板。推理模型最擅长的,是那些能生成形式规范、可验证的数据来训练模型的领域。比如数学和计算机编程,我们可以编写程序生成各种不同的代码片段来训练模型,也能生成各类几何证明题的解题思路。这类领域之所以适合推理模型,是因为它们都属于封闭领域,相关的知识边界是明确的。

 

Steve Eisman:没错,数据库中的知识量和相关的有效知识量都是有限的。

 

Gary Marcus:对,就是这个意思。所以推理模型在几何、编程这类领域的表现最好,而在开放式的现实世界中,它的表现就差强人意了。我总会从你所熟悉的金融领域举例子,当然你肯定有更贴切的案例,比如长期资本管理公司的破产。其实那也是一种模型失效的情况,只是模型的原理不同,当时没人考虑到俄罗斯债券市场崩盘的可能性,最终导致美国金融市场出现了大幅动荡。这是因为当时的金融模型,其参数设定根本没有覆盖这类极端情况。

 

而现在的推理模型,也面临着类似的问题:它其实并不具备真正的思考能力,哪怕是关于债券的基本问题,它也无法进行真正的逻辑分析。如果用它处理的问题,和训练数据中的内容高度相似,那一切都顺理成章;但一旦超出了它的认知范围,就像我们之前聊到的特斯拉的例子,模型就会立刻失效。

 

Steve Eisman:也就是它依然无法应对新事物、新情况。

 

Gary Marcus:没错,即便升级到了新的推理模型,核心问题依然是无法处理未知信息。它只是在原有基础上做了些许改进,但本质上还是受限于对新事物的适配能力。而关键问题在于,现实世界中,大多数有价值的问题都包含着一定的新要素、新情况,并非全是已知的问题。当然,也有例外,我们确实可以用这种不擅长处理新事物的技术,在一些狭窄的领域做出成绩,比如国际象棋和围棋。这些领域的规则千百年间基本没有太大变化,有海量的历史数据可供参考,模型还能通过自我对弈生成更多训练数据。

 

但在开放式的现实世界中,比如政治、军事战略领域,永远会出现训练数据中没有的新情况。比如,如何应对一位总统授意将军用飞机伪装成民用飞机,去袭击另一个国家的行为?这种情况此前从未发生过,想要分析这类问题,根本无法依靠过往的数据,必须依靠抽象的概念思考,比如权力、外交规则、国际格局的构建逻辑等,这些都是相关领域的学者更擅长的内容。要做到这一点,模型需要接受正确的训练,具备抽象思维能力,而不是单纯依赖数据。即便是在商业应用中,比如看似简单的客户服务,也会遇到类似的问题:用户总会用全新的方式提出问题,而一旦出现这种情况,模型就会因为无法应对新情况而失效。

OpenAI 只够支撑一年,要么倒闭、要么求救微软?

Steve Eisman:假设我任命你为 AI 领域的总负责人,由你掌控所有相关企业,指导整个行业的研发方向。如果你把这些企业的负责人都召集到一起,你会告诉他们,想要实现真正的突破,需要做些什么?

 

Gary Marcus:我会告诉他们,整个行业需要更多的学术思维多样性。就像在你的金融领域,你会告诉人们不要把所有鸡蛋放在一个篮子里,要做资产配置,分散投资股票、债券、黄金、房地产等。而 AI 领域在过去这些年,就是把所有的精力都押在了一个思路上,大语言模型的规模化扩张,这是行业唯一的研发方向。不可否认,这个思路确实带来了一些成果,模型并非毫无用处,我们也确实能利用它解决一些问题,但它终究无法带我们实现所谓的通用人工智能(AGI)这一终极目标,而且这还是一种成本极高、效率极低的研发方式。你可以对比一下,我的孩子只需要少量的信息和学习,就能理解这个世界,而大语言模型却需要学习整个互联网的海量数据,二者的效率差距简直可笑。

 

这些企业花费巨资,做出的却是效率低下、可靠性堪忧,但又有一定使用价值的模型。我们需要的是其他更高效、更经济、更可靠的研发思路,企业应该投入资金去探索这些新方向。但问题的根源,其实也来自你所熟悉的金融领域:风险投资家能从那些听起来合理的投资项目中,赚取 2%的管理费。我很好奇你对这个观点的看法,因为这毕竟是你的专业领域。试想一下,作为风险投资家,如果有一个项目能让你管理一万亿美元的资金,哪怕你根本不在乎项目最终的结果,也能赚到 2%的管理费,这足以让你成为亿万富翁。我并不是说所有的风险投资家都是这样想的,我见过很多投资人,他们确实真心想推动技术进步。

 

但就像任何行业一样,很多投资人都带着功利的心态。对这些功利的投资人来说,最理想的投资标的,就是那些听起来前景广阔、无需真正落地、成本极高的项目,这样他们就能赚取巨额的管理费。我认为,这就是整个行业都沉迷于规模化扩张的原因:投资人能从中赚取不菲的管理费,而且数额极其可观。但从学术研究的角度来说,这绝不是正确的选择,最终也没有带来理想的结果,反而造成了巨额的资金浪费。风险投资家赚走了管理费,而那些有限合伙人,最终会损失大量的资金。

 

Steve Eisman:你是不是觉得,这个行业的泡沫快要破裂了,还是说现在根本没法判断?

 

Gary Marcus:其实炒股的那句老话你我都懂,市场保持非理性的时间,可能比你保持偿付能力的时间还要长。

 

Steve Eisman:没错。

 

Gary Marcus:我去年用一个比喻形容当下的情况,就像《兔八哥》里的歪心狼跑到了悬崖边,它不往下看,就不会掉下去。当然这不符合物理规律,但很有意思。而现在,你所在的投资圈里,已经有人开始往下看了。我觉得从去年 11 月开始,就不断有投资人说,他们看到了一圈又一圈的的循环融资,投资回报率却不尽如人意,这些 AI 系统实际用起来也远没有想象中好用,或许这个赛道本身就不靠谱。我个人觉得,英伟达的产品做得非常出色,生态体系也很完善,不只是芯片本身,配套的软件等方方面面都很好。我见过黄仁勋,他给我留下了很深的印象,英伟达的产品确实很棒。

 

但问题的关键是,他们最终能卖出多少芯片?我认为,目前的芯片销售全靠市场投机,大家都在赌,我稍后再说说其他人的看法。所有人都在投机,认为这类芯片的需求会无限大,而这种投机的底层逻辑,是相信这些 AI 模型最终能实现 AGI。真正的 AGI 能完成人类能做的所有事,其商业价值不可估量,每年创造数万亿美元的价值都有可能。但《华盛顿邮报》几天前报道了一项一个月前完成的研究,研究显示,人类日常的工作中,只有 2.5%的工作能真正由 AI 系统完成。所以人们幻想中 AI 能完成的大部分工作,其实它都做不到,也根本做不好。这就意味着,最终所有在芯片上的投资,都会变得毫无意义。

 

而在这些企业里,OpenAI 可能是最脆弱的那个。OpenAI 有超过一万亿美元的未兑现承诺,却从未实现过盈利,如今又身处一个产品高度同质化的市场。它最大的竞争对手谷歌已经迎头赶上,甚至可以说实现了反超,还拿下了和苹果的合作大单,这可是笔大生意。所以我觉得 OpenAI 现在已经手忙脚乱了,实在看不出它的估值有任何合理性。

 

Steve Eisman:对我所在的投资圈来说,如果投资人开始从 OpenAI 撤资,而它又融不到新的资金,那会给整个生态系统带来连锁反应。

 

Gary Marcus:没错,这正是我认为即将发生的事。我觉得最终 OpenAI 可能会被微软这样的企业收购。我这几年一直说,OpenAI 最终会成为 AI 领域的 WeWork。未来人们都会疑惑,它当初怎么会有那么高的估值,这完全不合逻辑。OpenAI 的年收入只有几十亿美元,却每个月亏损数十亿美元,还有众多竞争对手,这样的企业根本撑不下去。如果投资人撤资,或者不再继续注资,OpenAI 就会陷入巨大的危机。它每个月的亏损大概有 30 亿美元,一年就是 300 多亿美元,即便最近完成了 400 亿美元的融资,也只够支撑一年的运营。

 

Steve Eisman:没错,也就一年的时间。

 

Gary Marcus:而且现在很多人都在持观望态度,他们会觉得,谷歌才是更适合这场竞争的玩家,毕竟谷歌已经追上来了。如果这场竞争只拼规模,那赢家必然是谷歌,这是毋庸置疑的。谷歌有能力做出巨额投入,甚至根本不需要英伟达的芯片,因为他们自研了张量处理单元,能实现类似的功能,所以谷歌的抗风险能力更强。他们有稳定的财务支撑,最终一定会赢。

 

Steve Eisman:没错。

 

Gary Marcus:只要有一部分人意识到,OpenAI 想要活下去,需要的资金量是天文数字,它的处境就会变得岌岌可危。它下一轮可能需要 1000 亿美元的融资,而全世界能拿出这么多钱的人,可能也就五个。就算其中四个愿意投资,只要有一个拒绝,就会出问题;而如果五个都拒绝,它要么倒闭,要么只能去找微软求救。

“脱离世界模型做 AI,根本行不通”

Steve Eisman:Gary,在我们结束访谈前,还有什么我该问却没问的问题吗?

 

Gary Marcus:我觉得这次访谈特别棒。要说还有什么重要的点没聊到,那应该就是“世界模型”这个概念。

 

Steve Eisman:没错,我本来也想聊这个。你一直说我们需要构建世界模型,这个概念完全超出了我的专业领域,不如你给大家解释一下,到底什么是世界模型?

 

Gary Marcus:不同的人对世界模型有不同的定义,简单来说,它就是在计算机系统中,构建一个能表征外部现实世界的体系。我说说我认为我们需要的世界模型是什么样的:软件内部需要有一个结构,能对应现实世界中的各种事物。比如导航系统的世界模型,需要能表征道路的分布、连接方式,以及不同路段的通行时间。在传统的 AI 领域,世界模型是研发的起点,所有的研究都基于此,没人会想过脱离世界模型做研发。Herbert Alexander Simon 是上世纪 50 年代 AI 的奠基人之一,他写过一本自传叫《Models of My Life》,他一生都在研究各类模型和世界模型,并且认为,做好 AI 的关键就是构建正确的世界模型。

 

而大语言模型却试图脱离世界模型运作。构建一个针对特定事物的世界模型,尤其是复杂事物,需要付出巨大的努力。比如过去研发专家系统时,研究者需要构建能模拟医生思考方式的模型,能表征病人身体机能、生理结构的模型,这个过程非常繁琐。当时还有一个专门的领域叫知识工程,做这项工作成本极高,没人愿意做。大语言模型和其他类型的神经网络出现后,研发者宣称,不用再做这些繁琐的工作,只需要让系统从数据中自主学习就行。

 

但事实证明,这根本行不通。就像大语言模型会把出生在洛杉矶的 Harry Shearer 说成是伦敦人,原因就是它没有一个完善的世界模型,无法像设计精良的软件那样,精准调取正确的信息。所以我们必须在 AI 系统中融入世界模型,才能避免幻觉现象的发生。

 

Steve Eisman:我还是不太理解世界模型到底是什么。

 

Gary Marcus:用非专业的语言解释确实有难度,简单说,它就是对世界的一种表征,而且这个“世界”不一定是现实世界。比如我们对《星际迷航》《星球大战》《哈利·波特》这些虚构世界,也会有对应的世界模型。这也是人类和当前 AI 系统最本质的区别:当我们看一部电影、读一本书时,会在脑海中构建出这个世界的运行规则,并且能判断情节是否符合这个世界的逻辑,会不会有不合理的设定。比如看了《哈利·波特》,我们会知道里面的人能骑着扫帚飞,但不会把这个设定和现实世界混淆,不会回家后跳上扫帚就想从窗户飞出去。

 

人类能快速构建并同时掌握多个世界模型,就算看一部新的科幻剧,20 分钟左右就能理解这个全新世界的规则,这是人类的天赋。但在 AI 领域,无论是传统的符号式 AI,还是现在的大语言模型,都做不到这一点。传统 AI 的优势是可以人工构建世界模型,你可以雇一群学者花六周时间,把一个问题的相关规则梳理清楚,构建成模型。最近离世的顶级研究者 Doug Lenat 就做过这样的研究,他为《罗密欧与朱丽叶》构建了世界模型,他的系统能真正理解这部剧的关键情节,而非从网上的读书笔记中获取二手信息,表现非常惊艳。但问题是,我们不知道该如何让传统 AI 自主学习、构建世界模型。而大语言模型则完全做不到构建世界模型,只是在假装自己能做到。

 

我有个很经典的例子,就算用整个互联网的内容训练大语言模型,让它接触海量的国际象棋规则和对局记录,它依然会走出违规的棋步,因为它从未真正抽象出国际象棋的运行逻辑。这一点就足以说明问题了。试想一下,一个人看了一百万盘象棋对局,读了维基百科、象棋网站上的所有规则,还看了 Robert James Fischer 的象棋著作,不可能连基本的棋规都掌握不了,但 AI 就是做不到。

 

所以我们需要研发能自主归纳出世界模型的 AI 系统,这类系统能从数据中挖掘因果规律,识别其中的核心要素。这是一个难题,不是说有人明天回家鼓捣一下就能解决的。长期以来,无论是传统 AI 还是大语言模型,都在回避这个问题,而现在,我们必须直面它。

 

Steve Eisman:看来这需要很长的时间来研究。

 

Gary Marcus:确实需要很久。我想说的是,AI 确实会以我们难以想象的方式改变世界,但绝不是现在,靠当下的这项技术根本做不到。我们需要把这一点考虑进去,做出合理的投资决策。现在的问题是,我们到底是在投资基础研究,还是在为一项已经成熟的技术做规模化投入?答案显然是后者。而当下的市场,大多是在投机,赌那些目前行不通的技术,只要做得更大,就能凭空实现突破。

 

但事实上,单纯的规模化根本解决不了这些核心问题,我们真正需要的是扎实的基础研究。这是我过去五年一直强调的观点,也是 SSG 在去年 11 月提出的观点,而 Ilya Sutskever 也表达了类似的看法。当我们这些背景截然不同的人,都达成了这样的共识,行业内的人其实应该认真听一听。

 

参考链接:

https://www.youtube.com/watch?v=aI7XknJJC5Q

阿里突发最强旗舰模型,总参数过万亿

 

就在刚刚,Qwen3-Max-Thinking 正式版突然发布,总参数规模超过 1 万亿(1T),位于目前全球最大规模 AI 模型行列,预训练数据规模高达 36T Tokens,覆盖大量高质量语料。

 

Qwen3-Max 是阿里通义团队迄今规模最大、能力最强的语言模型,该版本包括 Base、Instruct 和 Thinking 多种形式。

 

在多项权威基准测试中表现优异,Qwen3-Max-Thinking 性能可与 GPT-5.2-Thinking、Claude-Opus-4.5、Gemini-3 Pro 等闭源顶级模型竞争甚至超越。

 

具体而言,Qwen3-Max-Thinking 在多项关键 AI 基准测试中达到了或刷新了全球 SOTA 表现:

 

  • 在包含事实科学知识、复杂推理和编程能力在内的 19 项权威基准测试中取得极高水平,有记录显示其综合表现可媲美 GPT-5.2-Thinking、Claude-Opus-4.5 及 Gemini-3 Pro 等业内领先模型。

  • 在数学推理基准测试中,该模型曾在预览阶段实现 AIME 25 和 HMMT 25 满分(即 100% 准确率),这一表现被认为代表了高难度数学推理能力。

  • 相较于此前的 Instruct 版本,Thinking 版本在 Agent 工具调用、复杂逻辑和深度推理任务中表现出更优的能力。

 

这些测试覆盖了科学知识问答(如 GPQA Diamond)、数学推理(如 IMO 等级测试)、代码编程(如 LiveCodeBench)等多个领域,是衡量大型语言模型综合能力的重要指标。

 

为实现上述性能突破,千问团队在官方博客中称为 Qwen3-Max-Thinking 引入两项核心创新:

 

  • 自适应工具调用能力,可按需调用搜索引擎和代码解释器,现已上线;

  • 测试时扩展技术(Test-Time Scaling),显著提升推理性能,在关键推理基准上超越 Gemini 3 Pro。

 

那么,这两项核心创新到底什么意思?

 

首先是自适应工具调用能力,据千问团队介绍,与早期需要用户手动选择工具的方法不同,Qwen3-Max-Thinking 能在对话中自主选择并调用其内置的搜索、记忆和代码解释器功能。

 

该能力源于专门设计的训练流程:在完成初步的工具使用微调后,模型在多样化任务上使用基于规则和模型的反馈进行了进一步训练。实验表明,搜索和记忆工具能有效缓解幻觉、提供实时信息访问并支持更个性化的回复。代码解释器允许用户执行代码片段并应用计算推理来解决复杂问题。这些功能共同提供了流畅且强大的对话体验。

 

再来说说测试时扩展。该技术是指在推理阶段分配额外计算资源以提升模型性能的技术。研发团队提出了一种经验累积式、多轮迭代的测试时扩展策略。

 

不同于简单增加并行推理路径数量 N(这往往导致冗余推理),团队对并行轨迹数量进行限制并将节省的计算资源用于由“经验提取”机制引导的迭代式自我反思。

 

该机制从过往推理轮次中提炼关键洞见,使模型避免重复推导已知结论,转而聚焦于未解决的不确定性。关键在于,相比直接引用原始推理轨迹,该机制实现了更高的上下文利用效率,在相同上下文窗口内能更充分地融合历史信息。在大致相同的 token 消耗下,该方法持续优于标准的并行采样与聚合方法:GPQA (90.3 → 92.8)、HLE (34.1 → 36.5)、LiveCodeBench v6 (88.0 → 91.4)、IMO-AnswerBench (89.5 → 91.5) 和 HLE (w/ tools) (55.8 → 58.3)。

 

这些技术改善了模型处理复杂任务时的自主规划、推理链构建和决策能力。

 

千问 App PC 端和网页端已经第一时间上新这一 Qwen 系列最强模型,现在即可免费体验。API(qwen3-max-2026-01-23)也已开放。

 

体验地址:https://chat.qwen.ai/?spm=a2ty_o06.30285417.0.0.1ef4c921OJuiXU

网友:中国大模型不负期待!

 

在模型发布消息传出后,社交平台上也迅速出现了大量讨论。一部分网友的关注点集中在模型能力本身,语气中带着明显的惊讶与认可。

 

有海外开发者在 X 上表示,自己已经习惯看到 Qwen 在多个榜单上“反超”其他模型。

 

“Qwen 总是能跑赢其他模型,”一位用户调侃道,同时也提出了更偏产品层面的期待,希望 Qwen 能在 Android 端做出“更简洁、更有辨识度的应用设计”,认为模型能力已经走在前面,产品体验还有进一步打磨空间。

 

也有不少声音将 Qwen 的发布节奏与国际头部厂商作对比。一位网友直言,通义千问团队在模型更新和能力披露上的频率,甚至“已经超过了 OpenAI”。在他看来,这种持续、高密度的迭代和公开沟通,本身就是一种对开发者更友好的信号,至少让外界清楚知道模型在什么阶段、解决了哪些问题。

 

还有用户的反馈则更为直接。一位名为 Harriett Solid 的网友在评论中写道:“这正是我一直在等的 Qwen 发布版本。”这类评价并未展开具体技术细节,但从情绪上看,显然将 Qwen3-Max-Thinking 视为一次“到位”的升级,而不是过渡性产品。

 

整体来看,网友评论呈现出两个明显特点:一方面,对 Qwen 在推理能力和更新速度上的认可度较高;另一方面,讨论已经开始从“模型是否强”延伸到“产品体验、生态建设是否匹配当前能力”。

 

这也从侧面反映出,随着模型能力逼近甚至进入全球第一梯队,外界对通义千问的期待,正在从单点技术突破,转向更完整的产品与平台层面。

 

参考链接:

https://chat.qwen.ai/

https://qwen.ai/blog?id=qwen3-max-thinking

DoorDash 构建并部署了一个AI驱动的安全系统SafeChat,用于审核配送员与顾客在应用内聊天、发送图片及进行语音通话时的互动内容。SafeChat 运用机器学习技术,可近乎实时地检测并响应不安全内容,筛查通信中的冒犯性或不当信息,并支持立即采取行动,如举报问题或取消配送任务。该系统专注于安全保障而非用户互动或自动化。它以 AI 为核心基础设施,旨在维护平台的信誉及保障配送员与顾客的利益。

 

SafeChat 使用了分层 AI 架构,结合了机器学习模型与人工审核。该系统每天处理数百万次互动,对文本消息、图片和语音通信内容进行分类。其文本审核分为两个阶段。

 

在第一阶段,DoorDash 工程师采用了一个三层方案。第一层是审核 API,提供了一个低成本、高召回率的过滤器,以极小的延迟自动清除了大约 90%的消息。随后,未被清除的消息进入一个速度快、成本低的大型语言模型(LLM),它能以更高的精确度将 99.8%的消息识别为安全信息。剩余的消息由一个更精确、成本更高的 LLM 进行评估,对包含不敬言语、威胁和性内容的消息进行评分。这些评分可以为采取安全行动提供支持,例如在检测到高风险消息时允许配送员取消订单。

 

DoorDash 基于第一阶段的大约 1000 万条消息训练了一个内部模型,第二阶段因此能够采用一种双层方案。内部模型为第一层,用于自动清除大多数消息。只有被标记的消息才会进入精确的 LLM 进行详细评分。第一层的响应时间在 300 毫秒之内,而被标记的消息可能需要长达三秒钟。该系统处理了 99.8%的流量,提高了可扩展性并降低了成本。

DoorDash 双层文本审核架构(图片来源:DoorDash技术博客

 

图片审核由计算机视觉模型负责处理,模型的选择依据是吞吐量和粒度。为了减少误报和漏报,他们通过反复的人工审核调整了阈值和置信度分数。该系统每天可以处理数十万张图片,而且延迟可以满足实时互动的要求。

 

语音审核最初以仅观察模式部署,用于校准置信度分数。待阈值验证完成后,系统即可自动执行干预措施,例如中断通话或限制后续通信。

DoorDash 语音审核架构(图片来源:DoorDash技术博客

 

在 LinkedIn 上,作为特性发布公告的一部分,DoorDash 表示:

 

SafeChat 通过 AI 创新和精心设计,使平台上的每个人都建立起信心和信任,为所有用户打造一个更安全顺畅的使用体验。

 

SafeChat 的执行层根据违规的严重性和反复性采取相应的行动。它可以阻止或删除不安全的消息,终止通话,限制通信,或将问题升级给人类安全代理。重复出现或严重的违规行为会触发账户审查或暂停。

 

根据 DoorDash 工程师的报告,通过将分层 AI 模型与人类反馈循环相结合,SafeChat 系统得以实现大规模运行并保持近乎实时的响应速度。按照该公司的说法,该系统自部署以来,已使中低严重程度的安全事件减少了约 50%。

原文链接:

https://www.infoq.com/news/2026/01/doordash-safechat-ai-safety/

整理 | 华卫

 

1 月 26 日,理想汽车 CEO 李想召开了一场两个小时的线上全员会。据多位内部员工反馈,李想强调,2026 年是所有想要成为 AI 头部公司上车的最后一年;最晚 2028 年,L4 一定能落地;最终全球布局基座模型、芯片、操作系统、具身智能等业务的公司不会超过 3 家,理想会努力成为其中一家。

 

“未来,理想会进一步强化具身智能的品牌定位,而不仅仅是创造移动的家。在汽车之外,理想一定会做人形机器人,并会尽快落地亮相。”而接下来,理想为了迎接新一轮的 AI 竞争,公司将对研发进行新一轮的组织变革,将研发团队按照基座模型团队、软件本体团队、硬件本体团队等进行划分,其中汽车、机器人等都归为硬件本体团队。

 

同时,李想表示,要去招聘最好的人,把原来那些去到机器人创业公司的人再招回来。在此之前,已经有不少智驾核心技术人员从该公司离职,去具身智能赛道创业了。2025 年下半年,前理想自动驾驶研发负责人贾鹏、量产负责人王佳佳与前 CTO 王凯等核心高管一起创办了具身智能公司至简动力,且很快就拿到多家头部美元基金和互联网科技公司的投资意向。

 

当前,理想已在官网社招页面放出多个人形机器人研发岗位。从招聘信息可以看出,其研发项目几乎覆盖了人形机器人从核心部件到系统集成的全流程。

 

在 2025 年三季度业绩会上,李想公开表示,现在电动车行业拼参数已经拼到死胡同了,做智能终端又容易变成把手机应用搬到车里,属于重复建设,所以理想选了第三条路:把车定义成“具身智能”产品,让它从单纯的交通工具,变成有感知、有大脑、有神经、有心脏、有身体的“机器人”。

 

事实上,早在 2024 年底的 AITALK 上,李想就说过,理想做人形机器人是肯定的,但还没到合适的时机。然而,此前,因为技术跟不上、人形机器人供应链不成熟等问题,理想暂停了人形机器人自研项目。

 

但理想在泛机器人领域的布局也一直在进行。2025 年 6 月还有消息称,理想成立了“空间机器人”和“穿戴机器人”两个二级部门,都归高级副总裁范皓宇带领的产品部管,智能眼镜 Livis 是首款产品。

 

OpenCost项目——一个由云原生计算基金会(CNCF)托管的开源成本和资源管理工具——发布了一份年终回顾,回顾了项目 2025 年的开发进展,并概要介绍了 2026 年的优先事项。本次更新凸显了活跃的发布节奏、功能扩展(包括支持 AI 的 MCP 服务器)、通过导师计划和贡献推动的社区发展,以及扩展项目数据模型和成本追踪功能的计划。

 

2025 年,OpenCost 社区发布了 11 个版本,增强了可用性并扩展了功能。重要新增特性包括:通过环境变量配置实现无需Prometheus即可运行 OpenCost 的能力;Beta 版 Collector 数据源(一个用于成本数据导出的通用框架);具备健康监测与导出功能的诊断系统。OpenCost 还优化了多云成本追踪能力,在 Oracle 和 DigitalOcean 等供应商的贡献下,扩展了追踪云及多云指标的能力。这些版本旨在让成本透明度在 Kubernetes 环境中更具可操作性,使项目用户和贡献者均能从中受益。

 

2025 年的一个重要里程碑是引入了OpenCost MCP服务器,使 AI 代理能够使用自然语言实时查询成本数据。这种集成有助于自动分析跨命名空间、Pod 和节点的支出模式,使团队不必手动查询即可生成成本报告和建议。MCP 服务器是作为一个默认组件引入的,能够输出清晰、分步骤的成本优化建议,将云计算成本管理与新兴的 AI 生态系统相结合,满足自动化程度更高的 FinOps 工作流程的需求。

 

社区活动同样表现突出。OpenCost 项目通过Linux基金会的LFX计划持续推进导师培训工作,受训者为企业就绪性贡献了集成测试,并推进了 OpenCost 数据模型 2.0(KubeModel)的开发——该模型为跨动态 Kubernetes 资源实现可扩展的精确成本追踪奠定了基础。贡献者们还致力于完善文档、优化用户体验以及扩大社区参与度,进一步强化了 OpenCost 的开发者友好性及其生态系统的成长。

 

展望 2026,项目计划增强对 AI 使用成本跟踪的支持,因为机器学习工作负载对云计算支出的影响越来越大。围绕成本数据的供应链安全改进也是一个优先事项,同时,为了更好地反映 Kubernetes 资源行为的复杂性,项目计划对KubeModel框架进行迭代完善。参加即将到来的 KubeCon+CloudNativeCon 会议仍然是项目策略的一个关键组成部分,目的是提高项目在云原生从业者中间的认知度和采用率。

 

作为 CNCF 孵化项目,OpenCost 在云原生领域的重要性日益凸显,因为成本可视化与资源调度已成为运维和财务治理的核心环节。该项目标准化了 Kubernetes 成本报告并整合了 AI 驱动的工具链,旨在帮助财务运维团队与工程团队应对 2026 年及之后日益复杂的多云工作负载的挑战。

 

原文链接:

https://www.infoq.com/news/2026/01/opencost-roadmap-2026/

空间智能迎来重要开源进展。1 月 27 日,蚂蚁集团旗下具身智能公司灵波科技宣布开源高精度空间感知模型 LingBot-Depth。

 

该模型基于奥比中光 Gemini 330 系列双目 3D 相机提供的芯片级原始数据,专注于提升环境深度感知与三维空间理解能力,旨在为机器人、自动驾驶汽车等智能终端赋予更精准、更可靠的三维视觉,在“看清楚”三维世界这一行业关键难题上取得重要突破。这也是蚂蚁灵波科技在 2025 外滩大会后首次亮相后,时隔半年在具身智能技术基座方向公布重要成果。

 

在 NYUv2、ETH3D 等权威基准评测中,LingBot-Depth 展现出代际级优势:相比业界主流的 PromptDA 与 PriorDA,其在室内场景的相对误差(REL)降低超过 70%,在挑战性的稀疏 SfM 任务中 RMSE 误差降低约 47%,确立了新的行业精度标杆。

(图说:在最具挑战的稀疏深度补全任务中,LingBot-Depth 性能整体优于现有多种主流模型。图中数值越低代表性能越好。)

 

在家庭和工业环境中,玻璃器皿、镜面、不锈钢设备等透明和反光物体物体十分常见,但却是机器空间感知的难点。传统深度相机受制于光学物理特性,在面对透明或高反光材质时,往往无法接收有效回波,导致深度图出现数据丢失或产生噪声。

 

针对这一行业共性难题,蚂蚁灵波科技研发了“掩码深度建模”(Masked Depth Modeling,MDM)技术,并依托奥比中光 Gemini 330 系列双目 3D 相机进行 RGB-Depth 数据采集与效果验证。当深度数据出现缺失或异常时,LingBot-Depth 模型能够融合彩色图像(RGB)中的纹理、轮廓及环境上下文信息,对缺失区域进行推断与补全,输出完整、致密、边缘更清晰的三维深度图。

值得一提的是,LingBot-Depth 模型已通过奥比中光深度视觉实验室的专业认证,在精度、稳定性及复杂场景适应性方面均有良好表现。

 

实验中,奥比中光 Gemini 330 系列在应用 LingBot-Depth 后,面对透明玻璃、高反光镜面、强逆光及复杂曲面等极具挑战的光学场景时,输出的深度图依然平滑、完整,且物体的轮廓边缘非常锐利,其效果显著优于业内领先的 3D 视觉公司 Stereolabs 推出的 ZED Stereo Depth 深度相机。这意味着在不更换传感器硬件的前提下,LingBot-Depth 可显著提升消费级深度相机对高难物体的处理效果。

(图说:搭载 LingBot-Depth 后,奥比中光 Gemini 330 系列在透明及反光场景下深度图的完整性和边缘清晰度明显提升)

(图说:其效果优于业界领先的 ZED 深度相机)

 

LingBot-Depth 的优异性来源于海量真实场景数据。灵波科技采集约 1000 万份原始样本,提炼出 200 万组高价值深度配对数据用于训练,支撑模型在极端环境下的泛化能力。这一核心数据资产(包括 2M 真实世界深度数据和 1M 仿真数据)将于近期开源,推动社区更快攻克复杂场景空间感知难题。

 

据了解,蚂蚁灵波科技已与奥比中光达成战略合作意向。奥比中光计划基于 LingBot-Depth 的能力推出新一代深度相机。

 

各位 V 友 早上好 ^ ^

年底了,考虑到我爹之前用的手机比较久了,想给他买个新的 iPhone ,各位有啥划算的途径推荐嘛

需求:iPhone13-17 均可(之前一直都是用的 iPhone 对年纪大的比较友好,不考虑 Android )
预算:3-5k (主要看性价比,预算可以调整)

或者说各位觉得什么时候 什么平台买划算,都可以发言 我都会看的

PS:iPhone 可以把地区改成新加坡,很多 APP 的开屏广告都会消失哦

在实际落地过程中,智能体并不存在统一的“最佳起点”。
不同规模的使用主体,在资源结构、风险承受能力与目标函数上存在本质差异,因此其从 0 到 1 的实践路径也必然不同。

从行业实践来看,智能体的起步路径大致可以分为个人、团队与企业三类。


一、个人路径:从单点效率到可复用闭环

核心目标:降低认知与执行成本

个人用户的智能体实践,通常从高频、重复、规则相对稳定的任务开始,其价值不在于复杂架构,而在于“是否真正替代了部分脑力劳动”。

1. 实践起点:明确任务边界

个人路径的第一步不是选模型,而是识别可被完整替代的任务单元
典型特征包括:

  • 输入输出清晰
  • 中间判断规则可语言化
  • 错误成本可控

2. 实现方式:提示词驱动的逻辑拆解

在这一阶段,提示词本身承担着“流程编排”的角色。
一个有效的个人智能体,往往具备明确的步骤拆解能力,而非单轮问答能力。

3. 成熟标志:形成最小自动化闭环

当任务能够稳定完成“输入 → 处理 → 输出 → 复用”,个人路径即完成从 0 到 1 的跨越。


二、团队路径:从个人经验到组织能力

核心目标:让经验成为可调用的资产

当智能体进入团队环境,问题不再是“能不能做”,而是“能否被协同使用”。

1. 实践起点:知识结构化与共享

团队智能体的起点,通常是构建统一的知识检索层。
通过将分散在文档、会议纪要、历史项目中的经验进行向量化管理,使其成为可被持续调用的组织记忆。

2. 关键建设:标准化工作流

团队需要的不是“聪明的智能体”,而是行为一致的智能体
这意味着:

  • 输入输出格式标准化
  • 决策逻辑显式化
  • 结果可追溯

3. 演进方向:多智能体分工协作

在成熟阶段,不同角色的智能体开始围绕同一任务进行分工,例如生成、校验、总结等环节的协同。


三、企业路径:从试点验证到系统工程

核心目标:确定性、可控性与可评估性

企业级智能体并非“更大的版本”,而是完全不同的问题域。

1. 实践起点:基础设施与治理框架

企业从 0 到 1 的第一步,往往不是业务,而是:

  • 权限与调用管理
  • 数据隔离与安全策略
  • 成本与性能监控

2. 核心能力:全链路可观测

企业级智能体需要能够解释:

  • 每一步做了什么
  • 为什么这样做
  • 出现问题如何回溯

3. 必要条件:评估与回归机制

任何模型升级、流程调整,都必须通过自动化评估集验证,避免对存量业务产生不可预期影响。


四、路径差异背后的共性趋势

尽管起步方式不同,但从实践结果来看,所有路径最终都会指向同一个目标:

从不稳定的智能表现,走向可重复、可验证的确定性系统。

个人追求效率稳定性
团队追求协作一致性
企业追求系统可靠性

差异存在于阶段,收敛发生在终局。


五、结语

智能体并非“越复杂越先进”。
真正有效的从 0 到 1,始于对自身位置的清醒认知,并止于对技术边界的理性约束。

最近看到家里的老照片,婆婆走的很早,我突然有个想法就是把婆婆的照片 p 到我们家的合照里面,用 ps 的话我也不太会,就想到可以用 ai 把两张照片合成一张,做了一个把逝世的家人添加到照片的工具。

直接上传 2 张照片,等几十秒就可以生成,不需要写复杂的提示词(如果你想写的话也是可以写的)。

优点的话就是快速省钱,效果还是可以的,比我手动 P 的自然多了,光线和颜色基本能对上,不仔细看还真看不出来。但对我这种不会 PS 的人来说,已经属于「够用而且省事」了。

缺点的话就是生成人物的位置可能会随机一点(不过可以输入提示词来固定位置、可以指定穿什么衣服、动作之类的)

需要的话可以试试: https://addlovedonetophoto.com

可以免费试用一次,如果有需要的朋友可以留下注册邮箱,我给你们加一个月的积分额度,麻烦给我提优化建议😁

昨天鹅厂年会上,小马哥安利“元宝派”,引入社交功能:

据界面新闻报道,腾讯旗下 AI 助手“元宝”启动新功能“元宝派”内测。该功能定位为多人社交空间,用户可创建或加入“派”,实现 AI 辅助聊天、共享屏幕、协同观影听音乐等互动玩法。其底层接入了腾讯会议的音视频能力,并打通微信、QQ 的分享链路,支持一键邀请好友加入。与传统单一对话机器人不同,腾讯试图通过社交关系提升 AI 工具粘性。在“元宝派”中,AI 可充当社交润滑剂或效率工具,例如活跃群聊氛围、管理日程任务。此举被视为腾讯将 AI 竞争引入自身优势领域的关键尝试,类似微信红包通过社交场景带动支付业务的成功路径。

还说“春节分 10 亿”希望 重现微信红包时刻 ,大家觉得这次元宝的突围能成么?这个功能跟之前 chatgpt 的群聊看着差不多,刚推出时爆火了一把,现在基本没啥声量了

ps:有体验到的来个派号呗

applepay 里面原来有几张公交卡(有余额),手机上删除后,会自动保存在服务端,以供下次继续添加使用;

这几天想把之前删除的公交卡加回来,发现云端的卡片数量变成 0 了,服务端的卡片都自动消失了???

有什么思路可以找回吗,联系 apple 支持好多天了,一直没结果

TVM 现已更新到 0.21.0 版本,[TVM 中文文档]已经和新版本对齐。

Apache TVM 是一个深度的深度学习编译框架,适用于 CPU、GPU 和各种机器学习加速芯片。更多 TVM 中文文档可访问 →[Apache TVM]

在线运行 TVM 学习教程

链接是:https://hyper.ai/notebooks/48919?utm_source=Distribute&utm_medium=Distribute-TVM&utm_campaign=Distribute-TVM-260126

Relax 与 TVM IR 都包含一系列优化传递(optimization passes),用于改进模型在特定设备上的性能指标,例如推理平均时间、内存占用或功耗。这些优化包括标准优化与机器学习特定优化,如常量折叠(constant folding)、死代码消除、算子布局变换、算子融合、缓冲区处理和循环变换等。每个传递都是基于收集的分析结果进行的 IR-to-IR 转换。

然而,随着 TVM 的快速发展,越来越需要一种系统化且高效的方式来管理这些传递。此外,一个通用的框架能够在 TVM 栈的不同层次(例如 Relax 和 tir)之间管理传递,这为开发者快速原型化和集成新传递铺平了道路。

本文档介绍了这种基础设施的设计,它结合了生产级编译器中用于管理优化传递的方式,以及现代深度学习框架用于构建层次化结构的风格。

例如,许多现有的生产级编译器(如 GCC 与 LLVM) 采用「传递管理器(pass manager)」来高效管理传递执行。最初传递数量较少时管理很简单,但成熟编译器可能包含数百个独立传递。外部用户往往希望添加自定义传递,并能正确调度,而无需手动修改固定顺序。

类似地,现代深度学习框架(如 Pytorch 与 MXNet Gluon)也倾向于通过SequentialBlock实现类似「传递式」层构建机制。 借助这些构造,框架能够轻松将模块或层添加到容器中,从而快速搭建神经网络。

TVM 的传递基础设施设计灵感主要来自 LLVM 的层次化传递管理器 以及流行深度学习框架的模块化容器。 该系统的主要目标包括:

  1. 支持更灵活的优化编排,让用户能自由构建自定义优化流水线。
  2. 提供便捷的调试机制。
  3. 让开发者无需手动解决传递之间的依赖。
  4. 简化新传递的实现方式,例如允许用户直接用 Python 实现一个传递,由系统自动管理其执行。

设计概述

系统重点关注可扩展性,使用户能快速添加新传递而不破坏兼容性。 其结构包括后端与前端:后端实现核心逻辑,前端则提供简单的 API 供用户创建与控制优化流程。

C++ 后端

我们提供 PassInfo对象来存储单个传递所需的基本信息:name为传递名,opt_level指示该传递在哪个优化级别启用,required表示执行该传递前所需的其他传递(详见include/tvm/ir/transform.h)。 在注册传递时,开发者可以指定传递名称、优化级别与依赖。 opt_level可帮助系统在给定优化级别下判断某个传递是否需要执行; required字段用于自动解析传递依赖。

class PassInfoNode : public Object {
  ffi::String name;
  int opt_level;
  ffi::Array<ffi::String> required;
};

PassContext

PassContext 携带优化传递所需的关键信息。例如,它包含错误报告系统,方便优化作者诊断失败原因。 PassContext也取代了旧的 BuildConfig(用于配置编译选项,如优化级别、必需/禁用传递等)。例如,我们可以配置在 opt_level=3 下执行所有传递,并通过disabled_pass=xx 禁用某些传递;系统会聚合该级别的所有传递并排除被禁用的项。PassContext还提供对所有传递进行"检测(instrumentation)"的能力,见 pass_instrument_cpp_backend

该类支持 Python with 语法,便于在给定配置下执行优化。 同时,用户可以通过 PassContext::Current()在线程安全的方式获取当前上下文, 因为系统使用线程本地存储PassContextThreadLocalStore 来保存上下文对象。

class PassContextNode : public Object {
 public:
  int opt_level{2};
  tvm::ffi::Array<tvm::Expr> required_pass;
  tvm::ffi::Array<tvm::Expr> disabled_pass;
  mutable ffi::Optional<DiagnosticContext> diag_ctx;
  ffi::Map<ffi::String, Any> config;
  ffi::Array<instrument::PassInstrument> instruments;
};

class PassContext : public NodeRef {
 public:
  TVM_DLL static PassContext Create();
  TVM_DLL static PassContext Current();
  TVM_DLL void InstrumentEnterPassContext();
  TVM_DLL void InstrumentExitPassContext();
  TVM_DLL bool InstrumentBeforePass(const IRModule& mod, const PassInfo& info) const;
  TVM_DLL void InstrumentAfterPass(const IRModule& mod, const PassInfo& info) const;
  /* 其他字段省略 */

 private:
  // 进入 pass 上下文作用域
  TVM_DLL void EnterWithScope();
  // 离开 pass 上下文作用域
  TVM_DLL void ExitWithScope();

  // 用于支持 Python `with` 语法
  friend class tvm::With<PassContext>;
};

struct PassContextThreadLocalEntry {
  /*! rief 默认 pass 上下文 */
  PassContext default_context;
  /*! rief 当前 pass 上下文 */
  std::stack<PassContext> context_stack;
  PassContextThreadLocalEntry() {
    default_context = PassContext(make_node<PassContextNode>());
  }
};

/*! rief 线程本地存储,用于保存 pass 上下文 */
typedef dmlc::ThreadLocalStore<PassContextThreadLocalEntry>
     PassContextThreadLocalStore;

Pass 构造

传递(Pass)基础设施以分层结构设计,可在 Relax/tir 程序的不同粒度上工作。 系统定义了一个纯虚类PassNode,作为各种优化传递的基类。此类包含多个必须在子类中实现的虚函数,适用于模块级、函数级或顺序传递级别。

class PassNode : Object {
  virtual PassInfo Info() const = 0;
  virtual Module operator()(const IRModule& mod,
                            const PassContext& pass_ctx) const = 0;
};

该函数对象定义了传递的执行方式: 每个传递都在特定上下文 PassContext下作用于一个 IRModule, 并以 Module 到 Module 的方式实现。因此,所有传递都以模块为单位更新整个 IR。

系统实现了多个 PassNode 子类来支持不同类型的优化: 包括函数级传递、模块级传递与顺序传递(sequential pass)。 每个子类本身都可充当一个传递管理器,例如:它们可以收集所需传递并执行,或基于元信息建立依赖图。完整定义见src/ir/transform.cc

模块级传递

模块级传递主要用于全局或过程间优化(IPO),类似于 LLVM 中的模块传递。Relax 中一些典型需要全局视图的优化(如 A-normal form 转换、lambda 提升)就属于此类。 在该级别,用户可以在模块中添加或删除函数。

class ModulePassNode : PassNode {
  PassInfo pass_info;
  std::function<Module(Module, PassContext)> pass_func;
  Module operator()(const Module& mod, const PassContext& pass_ctx) const final;
  // 其他成员/方法省略
};

pass_info 存储模块传递的相关信息,pass_func 定义实际优化逻辑。例如,在模块上执行死代码消除可在 pass_func 中实现,它将删除模块中未使用的函数。 此字段被设计为「打包函数(packed function)」, 因此优化逻辑既可用 C++ 实现,也可用 Python 实现。

函数级传递

函数级传递用于实现 Relax/tir 模块中函数内的优化。它一次提取模块中的一个函数进行优化,输出优化后的 Relax Function 或 tir PrimFunc。多数优化都属于此类,如 Relax 的公共子表达式消除、推理简化,或 tir 的向量化与内存扁平化。

函数级传递仅作用于单个函数(Relax 或 tir),因此无法通过此类传递添加或删除函数,因为其不具备全局信息。

class FunctionPassNode : PassNode {
  PassInfo pass_info;
  std::function<Function(Function, Module, PassContext)> pass_func;
  Module operator()(const Module& mod, const PassContext& pass_ctx) const final;
  bool SkipFunction(const Function& func) const;
  // 其他成员/方法省略
};

pass_info 与模块级传递相同。 pass_func接受函数与模块作为输入,可在函数上执行优化; 函数若被注解为SkipOptimization,将被跳过。

顺序传递(Sequential Pass)

SequentialPass 类似于 PyTorch 的 nn.Sequential,可包含多个顺序执行的传递。

class SequentialPassNode : PassNode {
  PassInfo pass_info;
  // 需要执行的传递列表
  ffi::Array<Pass> passes;
  bool PassEnabled(const PassInfo& info) const;
  Module operator()(const Module& mod, const PassContext& pass_ctx) const final;
};

以下展示顺序传递的执行逻辑:系统会按照传递添加的顺序依次执行。

Module SequentialNode::operator()(const Module& module,
                                  const PassContext& pass_ctx) const {
  Module mod = module;
  for (const Pass& pass : passes) {
    ICHECK(pass.defined()) << "Found undefined pass for optimization.";
    const PassInfo& pass_info = pass->Info();
    if (!PassEnabled(pass_info))  continue;
    for (const auto& it : pass_info->required) {
      const auto* name = it.as<tvm::ir::StringImm>();
      ICHECK(name);
      mod = GetPass(name->value)(mod, pass_ctx);
    }
    mod = pass(mod, pass_ctx);
  }
  return mod;
}

在执行传递前,系统会判断该传递是否启用:首先检查是否被用户禁用,其次查看是否被显式声明为必需。若仍未确定,则根据 opt_level 判断是否执行。

执行时,系统会根据传递名从注册表中获取对应实现:

Pass GetPass(const std::string& pass_name) {
  using tvm::runtime::Registry;
  std::string fpass_name = "relax.transform." + pass_name;
  const std::optional<tvm::ffi::Function> f = tvm::ffi::Function::GetGlobal(fpass_name);
  ICHECK(f.has_value()) << "Cannot find " << fpass_name
                        << "to create the pass " << pass_name;
  return (*f)();
}

系统还提供辅助函数用于创建各类传递,并暴露给 Python 前端:

Pass CreateFunctionPass(
    std::function<Function(Function, IRModule, PassContext)> pass_func,
    int opt_level,
    ffi::String name,
    ffi::Array<ffi::String> required);

Pass CreatePrimFuncPass(
    std::function<PrimFunc(PrimFunc, IRModule, PassContext)> pass_func,
    int opt_level,
    ffi::String name,
    ffi::Array<ffi::String> required);

Pass CreateModulePass(
    std::function<IRModule(IRModule, PassContext)> pass_func,
    int opt_level,
    ffi::String name,
    ffi::Array<ffi::String> required);

Pass Sequential(tvm::ffi::Array<Pass> passes, PassInfo pass_info);

传递注册

前文介绍了不同粒度的传递和编译上下文。 下面展示如何注册一个传递。以常量折叠(constant folding)为例, 它用于在 Relax 函数中折叠常量(实现位于 src/relax/transforms/fold_constant.cc)。

该传递提供了 Expr 到 Expr 的转换 API:

Expr FoldConstant(const Expr& expr);

要将其注册到传递基础设施中,首先需要确定传递的粒度。常量折叠作用于函数级,因此通过 CreateFunctionPass 创建:pass_func 以打包函数形式返回,用于对 [IRModule]{.title-ref} 中的每个函数调用该转换 API。 {} 表示该传递没有前置依赖;若有依赖,开发者需明确列出。

同时,注册名为 "relax.transform.FoldConstant" 的 API 入口,使该传递可被 C++ (例如以上的 GetPass )与 Python 访问:

namespace transform {

Pass FoldConstant() {
  auto pass_func =
      [=](Function f, IRModule m, PassContext pc) { return ConstantFolder::Fold(f, m); };
  return CreateFunctionPass(pass_func, 0, "FoldConstant", {});
}

TVM_FFI_STATIC_INIT_BLOCK() {
  namespace refl = tvm::ffi::reflection;
  refl::GlobalDef().def("relax.transform.FoldConstant", FoldConstant);
}

}  // namespace transform

为方便其他 C++ 模块调用,在include/tvm/relax/transform.h中声明:

TVM_DLL Pass FoldConstant();

传递检测(Pass Instrument)

传递检测机制用于分析传递本身,例如统计执行时间与内存占用,或观察 IR 如何被改变。

我们在 PassContext 生命周期中引入四个检测点:

TVM_DLL void InstrumentEnterPassContext();
TVM_DLL void InstrumentExitPassContext();
TVM_DLL bool InstrumentBeforePass(const IRModule& mod, const PassInfo& info) const;
TVM_DLL void InstrumentAfterPass(const IRModule& mod, const PassInfo& info) const;

InstrumentEnterPassContext 在进入 PassContext 作用域时调用。

InstrumentExitPassContext 在离开 PassContext 或执行发生异常时调用。当通过 :pytvm.transform.PassContextoverride_instruments 覆盖检测器时也会触发,见pass_instrument_overriden

InstrumentBeforePass 在传递执行前调用; 若该传递应执行,则在执行后调用 InstrumentAfterPass。其伪代码如下:

if (pass_ctx.InstrumentBeforePass(ir_module, pass_info)) {
  new_ir_module = run_pass(ir_module, pass_ctx);
  pass_ctx.InstrumentAfterPass(new_ir_module, pass_info);
  return new_ir_module;
}

PassInstrument接口允许你在上述四个阶段插入自定义逻辑。 可向单个PassContext 注册多个检测器实例,它们将按 instruments指定的顺序依次调用。

接口定义如下:

namespace instrument {

class PassInstrumentNode : public Object {
 public:
  ffi::String name;
  virtual void EnterPassContext() const = 0;
  virtual void ExitPassContext() const = 0;
  virtual bool ShouldRun(const IRModule& mod, const transform::PassInfo& info) const = 0;
  virtual void RunBeforePass(const IRModule& mod, const transform::PassInfo& info) const = 0;
  virtual void RunAfterPass(const IRModule& mod, const transform::PassInfo& info) const = 0;
  /* 其他字段省略 */
};

class PassInstrument : public ObjectRef {
 public:
  TVM_FFI_DEFINE_OBJECT_REF_METHODS_NULLABLE(PassInstrument, ObjectRef, PassInstrumentNode);
};

}  // namespace instrument

Python 前端提供了便捷方式来实现 PassInstrument,见pass_instrument_py_frontend

在一个 PassContext 中,某个 PassInstrument 实例的调用顺序如下:

with PassContext(instruments=[pi])  # pi 为某个 PassInstrument 实现
    pi.EnterPassContext()

    if pi.ShouldRun(Pass1):
        pi.RunBeforePass()
        Pass1()
        pi.RunAfterPass()

    if pi.ShouldRun(Pass2):
        pi.RunBeforePass()
        Pass2()
        pi.RunAfterPass()

    pi.ExitPassContext()

以下简述 PassInstrument 与 PassContext 方法之间的关系,详见 src/ir/transform.cc

  • InstrumentEnterPassContext

    • EnterPassContext() 按传入 instruments 的顺序执行。
    • 若执行中抛出异常,PassContext 会清空所有已注册的检测器。
    • 然后对已成功执行 EnterPassContext() 的检测器依次调用 ExitPassContext()
    • 例如,注册了 A、B、C 三个检测器,A 成功,B 抛异常,则 C 不会执行;随后调用 A 的 ExitPassContext()
  • InstrumentExitPassContext

    • 各检测器的 ExitPassContext() 按 instruments 顺序执行。
    • 若发生异常,instruments 会被清空。
    • 抛出异常后注册的检测器不会执行 ExitPassContext
  • InstrumentBeforePass

    • 若该传递未被显式列为"必需",则会调用 ShouldRun
    • 若未被 ShouldRun 阻塞,则按顺序调用 RunBeforePass
    • 该函数返回布尔值,指示该传递是否应执行。
    • 若发生异常,将立即抛出;Python 依靠上下文管理器安全退出(确保各检测器的 ExitPassContext 被调用;C++ 见 include/tvm/support/with.h)。
  • InstrumentAfterPass

    • 按顺序调用 RunAfterPass
    • 若发生异常,将立即抛出;依靠上下文管理器或 With 类(include/tvm/support/with.h)安全退出。

内置检测器

系统内置若干检测器(标注 TODO 的尚未实现):

  • PassTimingInstrument(见 src/ir/instrument.cc

    • 用于分析各传递的执行时间。
  • PrintIRBefore(TODO)

    • 在传递执行前打印 IR。也可通过 :pytvm.transform.PrintIR{.interpreted-text role="func"} 在传递周围插入打印实现;但使用检测器无需修改传递序列。
  • PrintAfter(TODO)

    • 在传递执行后打印 IR。

Python 前端

前端仅需少量 API 即可创建并执行传递(完整实现见python/tvm/relax/transform/transform.pypython/tvm/ir/transform.py)。后端将根据提供的信息决定如何创建 Pass 对象。

PassContext

Python 前端为 PassContext 提供了包装以支持 with 语法,并提供current 静态方法:

@tvm_ffi.register_object("transform.PassContext")
class PassContext(tvm.runtime.Object):
    def __enter__(self):
        _transform.EnterPassContext(self)
        return self

    def __exit__(self, ptype, value, trace, config):
        _transform.ExitPassContext(self)

    @staticmethod
    def current():
        """Return the current pass context."""
        return _transform.GetCurrentPassContext()

PassContext用于配置编译选项(优化级别、必需/禁用传递等),并可传入配置字典,以便不同传递读取需要的数据(如回退设备信息、循环展开步数/深度等)。若要从 config 中获取某项配置,其键名需通过TVM_REGISTER_PASS_CONFIG_OPTION 注册,例如循环展开传递:

TVM_REGISTER_PASS_CONFIG_OPTION("tir.UnrollLoop", UnrollLoopConfig);

详见src/tir/transforms/unroll_loop.cc

Python 中的传递检测

使用装饰器(python/tvm/ir/instrument.py)可以快速实现 PassInstrument。 推荐使用装饰器方式而非继承:

  • enter_pass_ctx:进入 PassContext 时执行;
  • exit_pass_ctx:退出 PassContext 时执行;
  • should_run:在传递执行前调用,返回该传递是否应执行;
  • run_before_pass:传递执行前调用;
  • run_after_pass:传递执行后调用。

可通过 :pytvm.transform.PassContext 的 instruments 参数注册实例。更多示例见use pass instrument教程。

覆盖当前 PassContext 中的检测器

override_instruments 方法可覆盖当前 PassContext 中的 instruments。例如,当未显式创建新 PassContext 而直接运行传递时,仍可将检测器注册到全局上下文:

cur_pass_ctx = tvm.transform.PassContext.current()
# 覆盖 PassInstrument 实例
cur_pass_ctx.override_instruments([pass_inst])
mod = pass_seq(mod)
result = pass_inst.get_result()

注意:调用 override_instruments 时,旧检测器的 exit_pass_ctx会被调用,随后新检测器的 enter_pass_ctx 会被调用。

中国联通又封我副卡,打电话多了封,不打电话也封,反诈变成万能借口,反正上面一句话,下面为了甩锅什么都不管,打着反诈的名号折磨人。

2025 年 9 月,联通内部搞了个清淤行动,以此为由给我卡封了,11 月封卡,没有任何通知,联通说发了短信,我这什么都没有看到。二次复通就要录视频,签保证书,反正就是让你持卡成本变高,我就是用用副卡的流量,不打电话。

12 月投诉协商都没有解决,答复就是自行复通或者去营业厅,不得已我以电信服务合同纠纷为由提起诉讼,1 月审查通过并立案,开庭也在 1 月,但是是工作日,考虑到来回交通、请假等费用,已经很不值了(除非有记者愿意报道,但也没用),我查了判决案例,基本上败诉的多,都是说封卡不通知不妥,但是为了反诈,法庭支持。开庭前两周我问了下能不能网上庭审,法官说要核验电子数据真实性拒绝了网上庭审,然后给我打电话说这种小事,你就签协议,大家都签了,没必要非要起诉。他说我说给你听听,你愿意听就听,不愿意就开庭。我没答应,然后申请延期,从周四延到周五同意了,不同意周六。

考虑再三还是撤诉了,去的话成本高,不去的话缺席审判,算撤诉,对方也可以提起反诉,还是选择撤诉算了。

image

image

在工业4.0与全球供应链重构的背景下,工业/工贸企业的数字化转型核心需求已从“标准化上线”转向“柔性适配”——既要应对复杂业务场景(如非标订单、跨部门协同、跨境贸易),又要快速响应市场变化(如需求波动、流程调整)。

本文选取超兔一体云、 SAP 、Microsoft Dynamics 365、八百客 CRM 、OKKI CRM(原小满)五大主流平台,从 客制化 能力、多端协同能力、工业场景适配性、实施成本四大核心维度展开深度横评,为工业/工贸企业选择适配的数字化体系提供决策参考。

一、核心对比框架与维度定义

1. 对比维度说明

维度子维度工业/工贸企业核心诉求关联
客制化 能力低代码/无代码定制、行业模板覆盖、生态系统集成、复杂流程(如非标订单)定制适配企业独特业务逻辑(如半导体晶圆制造合规、外贸跨境合同),避免“削足适履”
多端协同能力多终端覆盖、内部业务链路协同(销售→生产→物流→财务)、外部生态协同(供应商/客户)、业财一体化消除信息孤岛,提升跨部门/跨企业协作效率,实现“订单驱动生产”的柔性协同
工业场景适配性核心场景覆盖(订单-生产-交付、设备维护、跨境贸易)、行业聚焦(如汽配/半导体/外贸)、柔性应变能力精准解决工业企业痛点(如IATF 16949质量合规、跨境回款风险),支持业务模式调整
实施与成本部署方式(云/本地/混合)、实施周期、总成本(license+实施+维护)、维护难度平衡“定制深度”与“成本效率”,避免“大而全”的高投入陷阱

2. 品牌选择说明

选取标准:聚焦工业/工贸场景+ 客制化 +多端协同”能力明确

  • 超兔一体云:以“客制化+多端协同”为核心定位,适配中小工业企业灵活需求;
  • SAP:全球ERP龙头,覆盖从中小企业(Business One)到大型企业(S/4HANA)的全场景;
  • Microsoft Dynamics 365:依托微软生态,擅长“办公+业务”协同;
  • 八百客CRM:PaaS平台支撑深度定制,适配中大型工业企业复杂流程;
  • OKKI CRM:聚焦外贸工贸场景,解决跨境协同痛点。

二、四大核心维度深度横评

(一)客制化能力:从“标准化”到“精准适配”的关键

客制化是工业/工贸企业数字化的“灵魂”——只有适配企业独特业务逻辑,才能避免系统成为“摆设” 。五大平台的客制化能力差异显著:

维度超兔一体云SAPMicrosoft Dynamics 365八百客CRMOKKI CRM
低代码 /无代码定制支持可视化自定义(三级菜单、工作台、业务表、工作流),无需代码调整流程中小企业(Business One)支持“功能白名单+三级菜单”快速定制;大型企业需依赖实施商开发通过Power Apps低代码平台,业务人员20分钟搭建自定义模块(如非标设备报价单)基于PaaS平台,可视化配置表单/流程/权限,无需代码适配复杂项目管理聚焦外贸场景,AI驱动客户分级/订单流程自定义,支持跨境合同模板配置
行业模板覆盖提供工业/工贸通用模板(订单-生产-仓储协同),支持小步迭代调整内置半导体/汽配/制造业等垂直行业模板(如晶圆制造合规体系、IATF 16949流程)覆盖12大行业(制造业/零售业等),提供“订单-生产-交付”协同模块聚焦光伏/制造等中大型工业企业,提供生产-销售协同模板专属外贸工贸模板(跨境回款规则、国际物流跟踪)
生态系统集成支持RPA插件、对接第三方ERP(如金蝶/用友)可集成WMS/MES/APS/QMS等工业系统,实现“计划-执行-反馈”数据贯通通过Power Platform 300+连接器,对接SAP ERP、IoT设备、第三方CRM对接ERP系统(如SAP/金蝶),实现业财一体化对接金蝶/用友ERP、跨境支付(PayPal)、物流(DHL)系统
复杂流程定制支持自定义工作流+多表聚合BI,适配非标订单/多部门审批等复杂场景大型企业(S/4HANA)支持客户化开发(如半导体成本精准归集);中小企业(Business One)支持固化核心流程支持设备安装记录/预防性维护计划等工业专属流程,通过Power Automate实现自动化适配生产订单关联/多部门协作流程,支持复杂权限配置适配跨境订单全流程(报价-合同-物流-回款),支持多语言合同模板

小结

  • 小步快跑型企业选超兔:可视化自定义降低技术门槛,支持“按需添加功能”;
  • 行业合规型企业选SAP:垂直行业模板覆盖半导体/汽配等强合规场景;
  • 低代码快迭代型企业选Dynamics 365:Power Apps让业务人员主导定制;
  • 复杂流程型企业选八百客:PaaS平台支撑深度流程配置;
  • 外贸型企业选OKKI:专属跨境场景定制。

(二)多端协同能力:从“信息孤岛”到“全链路贯通”的核心

多端协同的本质是数据与流程的“全场景流动” ——让销售在手机上录的订单,实时同步到生产排产系统;让供应商在Web端看到的库存,直接关联到客户的交付计划。

维度超兔一体云SAPMicrosoft Dynamics 365八百客CRMOKKI CRM
多终端覆盖Web/APP/小程序/客户端/RPA插件,适配外勤销售/仓库扫码/财务分析等场景Web/APP/移动端,支持SAP Fiori移动应用(如生产工单审批)Web/APP/小程序/Teams/Outlook,覆盖办公+业务全场景PC/移动端(iOS/Android),支持实时数据同步移动端(iOS/Android)+Web,支持跨境多语言沟通(62个国家)
内部业务协同销售订单→生产计划→采购→仓储→财务全链路数据同步,支持跨部门流程协同集成ERP/WMS/MES/APS,实现“销售订单→生产排产→物流→财务”全链路贯通与Office 365深度融合:Outlook调客户画像、Teams生成跟进任务、Excel转BI报表PC/移动端共享客户数据、分配销售任务,管理层通过数据看板监控全链路移动端邮件聚合/客户动态实时更新,团队协同跟进海外订单
外部生态协同支持供应商/客户小程序端接入,实现订单状态实时共享通过SAP Business Network连接供应商/客户/物流商,提升库存可视性通过Dynamics 365 Supply Chain Management对接供应商,实现计划与库存自动化协同暂未明确支持外部生态协同通过跨境供应链平台连接供应商/物流商,实现国际物流跟踪
业财一体化自定义财务字段(如应收应付),支持多表聚合分析财务数据集成财务模块,实现“订单-生产-财务”数据联动,支持成本精准归集打通销售/供应链/财务流程,内置“应收账期预警”,坏账率控制在1.5%以内对接ERP实现业财数据同步,支持生产-销售财务联动支持跨境回款规则配置,对接支付系统实现实时到账提醒

关键场景验证

  • 超兔:销售人员在APP录入客户订单,生产部门通过Web端实时看到排产需求,仓库用小程序扫码出库,数据全链路同步;
  • SAP:某汽配企业通过Business One集成生产/物流/财务,跨部门协作效率提升40%;
  • Dynamics 365:某汽车零部件企业通过Teams会议纪要自动生成生产任务,数据分析周期从“周级”压缩至“日级”;
  • OKKI:某外贸工贸企业通过移动端实时跟踪跨境物流,交付周期缩短30%。

(三)工业场景适配性:从“通用”到“垂直”的精准度

工业/工贸企业的核心痛点是“业务场景复杂且高度行业化”——半导体企业需要晶圆制造合规,汽配企业需要IATF 16949标准,外贸企业需要跨境回款安全。五大平台的场景适配性差异直接决定了“能否解决真问题”:

1. 核心场景覆盖对比

场景超兔一体云SAPMicrosoft Dynamics 365八百客CRMOKKI CRM
订单-生产-交付协同
设备维护与预防性保养✅(自定义表单)✅(MES集成)✅(Power Apps配置)
跨境贸易(多语言/货币)✅(S/4HANA)✅(Dynamics 365 Commerce)
行业合规(如IATF 16949)✅(Business One汽配模板)✅(制造业解决方案)
非标订单管理✅(自定义工作流)✅(Business One)✅(Power Apps)

2. 典型行业适配案例

  • 超兔:某电子工贸企业通过“功能白名单+自定义工作流”,快速调整订单审批流程,支持小批量非标订单生产,上线周期2周;
  • SAP:杭州某半导体企业通过Business One构建晶圆制造合规体系,支撑新产线快速部署;某汽配企业通过Business One固化18项核心流程,符合IATF 16949标准;
  • Dynamics 365:某机械制造企业通过Power Apps搭建设备维护模块,实现预防性维护计划自动提醒,设备停机率下降25%;
  • 八百客:某光伏企业通过PaaS平台自定义生产订单关联流程,实现“销售需求→生产排产”实时联动;
  • OKKI:某外贸工贸企业通过跨境合同模板+回款预警,将坏账率从5%降至1.2%。

(四)实施与成本:平衡“定制深度”与“投入效率”

工业企业数字化的常见陷阱是“为了定制化投入过高成本”,因此“实施周期”与“总成本”是关键决策因素:

维度超兔一体云SAPMicrosoft Dynamics 365八百客CRMOKKI CRM
部署方式云原生(SaaS)云(S/4HANA Cloud)+本地(Business One)+混合云(Dynamics 365 Cloud)+本地(On-Premises)+混合云原生(SaaS)+本地部署云原生(SaaS)
实施周期小功能调整1-3天,全模块上线2-4周中小企业(Business One)4-8周;大型企业(S/4HANA)3-6个月低代码模块1-2周,复杂集成4-8周复杂流程定制4-8周,通用模块2-4周外贸场景快速上线2-4周
总成本(年)中小工业企业:1-5万(SaaS订阅)中小企业(Business One):25万以内(license+实施);大型企业:100万+中小工业企业:10-30万(SaaS订阅+实施);大型企业:50万+中大型企业:20-50万(PaaS订阅+实施)外贸企业:5-20万(SaaS订阅+实施)
维护难度业务人员通过可视化工具自主调整,无需IT依赖中小企业需依赖实施商,大型企业需专业IT团队业务人员通过Power Platform自主维护,IT仅需支撑集成需IT团队或实施商支撑复杂配置业务人员自主调整外贸流程,IT支撑跨境集成

小结

  • 低成本快上线选超兔:SaaS模式降低初始投入,可视化工具减少维护成本;
  • 中小工业企业选SAP Business One:25万以内的总成本覆盖核心流程,行业模板降低实施风险;
  • 微软生态用户选Dynamics 365:Office融合提升协作效率,低代码降低定制成本;
  • 外贸企业选OKKI:跨境场景快速上线,成本可控;
  • 中大型复杂企业选八百客:PaaS平台支撑深度定制,适配复杂流程。

三、可视化对比工具:Mermaid图表辅助决策

1. 核心能力框架脑图(Mermaid)

mindmap
  root((工业/工贸数字化体系))
    客制化能力
      超兔一体云: 可视化自定义(菜单/工作流/多表聚合)、小步迭代
      SAP: 行业模板(半导体/汽配)、系统集成(WMS/MES)
      Dynamics 365: Power Apps低代码、Office生态融合
      八百客: PaaS可视化配置、复杂流程定制
      OKKI: 外贸场景定制、跨境规则配置
    多端协同能力
      超兔一体云: 多端覆盖(Web/APP/小程序/RPA)、全链路数据同步
      SAP: 内部集成(ERP/WMS/MES)、外部Business Network
      Dynamics 365: Office融合(Outlook/Teams)、多角色终端
      八百客: PC/移动端同步、数据看板监控
      OKKI: 跨境多语言、物流跟踪
    场景适配性
      超兔一体云: 中小工业、非标订单
      SAP: 半导体/汽配、合规场景
      Dynamics 365: 机械制造、设备维护
      八百客: 光伏/制造、生产-销售协同
      OKKI: 外贸工贸、跨境回款

2. 多端协同流程时序图(Mermaid)

以“销售订单→生产排产→物流交付”为例,展示各平台的协同逻辑:

sequenceDiagram
    participant 销售(超兔APP) as S
    participant 生产(Web端) as P
    participant 仓储(小程序) as W
    participant 财务(Web端) as F
    participant SAP系统 as SAP
    participant Dynamics 365 as D365
    participant OKKI as O

    %% 超兔流程
    S->>超兔系统: 录入客户非标订单
    超兔系统->>P: 同步订单需求至生产排产
    P->>超兔系统: 反馈生产周期
    超兔系统->>W: 同步出库指令
    W->>超兔系统: 扫码出库确认
    超兔系统->>F: 同步应收数据

    %% SAP流程
    S->>SAP Business One: 录入订单
    SAP Business One->>MES系统: 触发生产工单
    MES系统->>SAP Business One: 反馈生产进度
    SAP Business One->>WMS系统: 触发出库
    WMS系统->>SAP Business One: 反馈库存
    SAP Business One->>F: 同步财务凭证

    %% Dynamics 365流程
    S->>Outlook: 调取客户画像,发送报价邮件
    Outlook->>D365: 同步邮件至CRM
    D365->>Teams: 生成生产跟进任务
    Teams->>P: 同步任务至生产排产
    P->>D365: 反馈生产状态
    D365->>Excel: 生成BI报表
    Excel->>F: 同步财务数据

    %% OKKI流程
    S->>OKKI移动端: 录入跨境订单
    OKKI移动端->>供应商: 同步采购需求
    供应商->>OKKI: 反馈备货状态
    OKKI->>物流商: 触发国际物流
    物流商->>OKKI: 同步Tracking Number
    OKKI->>F: 同步回款数据

四、总结与建议

在工业 4.0 与全球供应链重构的大背景下,工业/工贸企业数字化转型已成为提升竞争力的必由之路。“客制化 + 多端协同”能力是构建柔性业务数字化体系的核心要素,能够帮助企业精准适配复杂业务场景,实现全链路数据贯通,提升运营效率和市场响应速度。

通过对超兔一体云、SAP、Microsoft Dynamics 365、八百客 CRM、OKKI CRM 五大主流平台在客制化能力、多端协同能力、工业场景适配性、实施与成本四大核心维度的深度横评,我们可以看到每个平台都有其独特的优势和适用场景。企业在选择数字化体系时,应充分考虑自身的业务特点、发展阶段、行业需求以及预算限制,做出最为合适的决策。

对于小步快跑型、追求低成本快上线的中小工业企业,超兔一体云是不错的选择,其可视化自定义功能降低了技术门槛,SaaS 模式减少了初始投入和维护成本;行业合规要求高的企业,如半导体、汽配等行业,SAP 的垂直行业模板和强大的系统集成能力能够确保企业满足严格的合规标准;微软生态用户可以借助 Dynamics 365 的低代码平台和 Office 融合优势,提升协作效率并降低定制成本;外贸企业则可以优先考虑 OKKI CRM,其专属的跨境场景定制和可控的成本能够有效解决跨境协同和回款等痛点问题;而中大型复杂企业,尤其是有深度流程定制需求的企业,八百客 CRM 的 PaaS 平台能够提供强有力的支持。

总之,选择合适的数字化体系是工业/工贸企业实现业务流程柔性化与数字化升级的关键一步。希望本文的分析和建议能够为企业在数字化转型的道路上提供有价值的参考,助力企业在激烈的市场竞争中脱颖而出。

(注:文中功能相关描述均基于公开披露信息,具体功能服务与价格以厂商实际落地版本为准。)

Clawdbot:爆火的开源AI智能体网关,堪称AI助理完全体

最近,你的技术圈子是不是被一只“龙虾”(Clawdbot 的 Logo)刷屏了?甚至听说它让二手的 Mac Mini 价格都应声上涨?

作为一个刚入坑稀土掘金的新人,今天我就带大家扒一扒这个让无数极客彻夜未眠的开源项目——Clawdbot。它到底是什么?为什么它被称为“AI 助理的完全体”?以及,它真的能成为你的 Jarvis 吗?

🧐 什么是 Clawdbot?

简单来说,Clawdbot 是一个开源的 AI 智能体网关(Agent Gateway)。

如果不讲术语,你可以这样理解:
Clawdbot = 大模型的大脑 (Claude/GPT) + 即时通讯软件的嘴巴 (Telegram/WhatsApp) + 本地电脑的手脚 (Terminal/文件系统) + 永久记忆

与我们在网页上用的 ChatGPT 或 Claude 不同,Clawdbot 不是运行在浏览器里的,而是运行在你自己的服务器或电脑(如 Mac Mini、树莓派)上的一个后台程序。它就像一个住在你电脑里的“数字管家”,你通过聊天软件给它发指令,它在你的电脑上直接干活。

🌟 核心特点:为什么它如此特别?

Clawdbot 之所以能爆火,是因为它解决了当前 AI 应用的几个核心痛点:

1. 它是“活”在本地的 (Local First)

目前大多数 AI 都在云端,不仅有隐私顾虑,而且无法操作你的本地文件。Clawdbot 运行在你的本地设备上:

  • 数据隐私:除了与 LLM 对话的内容,你的记忆文件、配置、本地数据都存在自己硬盘里。
  • 本地权限:它可以直接读取你的文档、运行 Python 脚本、甚至执行终端命令(Terminal)。

2. 对话即交互 (ChatOps)

你不需要下载专门的 App。Clawdbot 接入了 WhatsApp, Telegram, Discord, Slack, iMessage 等几乎所有主流通讯软件。

  • 场景:你在外面用手机给家里的 Clawdbot 发微信:“帮我查一下服务器日志,把报错的部分发给我。”
  • 结果:它直接通过 SSH 连上服务器,跑完命令,把结果截图或文本回传给你。

3. 真正的“长短期记忆”

Clawdbot 使用本地的 Markdown 文件(通常是 MEMORY.md)来存储关于你的信息。
它记得你的偏好、你家人的生日、你的服务器密码(需谨慎)、你正在做的项目进度。
这种记忆是持久的,不会因为关闭窗口就消失。

4. 强大的工具调用能力 (Agentic Capabilities)

这是它最“炸裂”的地方。它不仅能陪聊,还能干活。通过 MCP (Model Context Protocol) 或内置工具,它可以:

  • 浏览网页:帮你查资料并总结。
  • 写代码并运行:它可以写一个 Python 脚本来处理 Excel 表格,然后直接在你电脑上运行这个脚本,最后把处理好的 Excel 发给你。
  • 管理日程:读取你的日历,帮你安排会议。

🛠 Clawdbot 能帮我们干什么?

这就是想象力发挥的地方了。目前社区里已经有了很多硬核玩法:

1. 24/7 个人秘书

  • 自动处理邮件:让它监控你的 Gmail,自动归档垃圾邮件,把重要邮件摘要发到 Telegram 给你。
  • 每日简报:每天早上 8 点,它会根据你的日历、关注的新闻源、天气情况,给你发一份定制的“早安简报”。

2. 也是最强的“结对编程”伙伴

  • 代码助手:你可以让它读取你整个项目的代码库(因为它在本地,读取速度极快),然后问它:“utils.py 里的那个函数怎么优化?”
  • 运维监控:当它检测到某个进程挂了,可以自动发消息报警,甚至在你授权下尝试重启服务。

3. 自动化繁琐任务

  • 文件整理:对它说“把 Downloads 文件夹里所有的 PDF 发票整理一下,按月份归档到 Documents/Invoices 目录里”。它会自己写 Shell 脚本瞬间完成。
  • 比价购物:让它去几个电商网站爬取价格,整理成表格给你。

⚠️ 风险提示(必读!)

虽然 Clawdbot 很酷,但它目前更像是一个极客的玩具,而不是普通用户的消费级产品。

  1. 安全风险(高危):你实际上是给了 AI 访问你电脑文件系统和终端(Terminal)的权限。虽然有权限控制,但如果 AI "幻觉"了,或者被提示注入攻击,理论上它能执行 rm -rf /(删库)。建议尽量在沙箱环境或独立的 Mac Mini/虚拟机中运行。
  2. 成本问题:虽然软件免费,但它背后调用的是 API(如 Claude 3.5 Sonnet 或 GPT-4o)。如果你让它处理大量任务,API 账单可能会让你肉疼。
  3. 配置门槛:需要懂一点 Docker、Node.js 或者命令行的知识才能部署起来。

🔚 总结

Clawdbot 代表了 AI 的下一个阶段:从“聊天机器人”进化为“智能代理(Agent)”。它不再是被动等待提问的百科全书,而是有了手脚、能主动帮你解决问题的数字员工。

如果你有一台闲置的电脑,并且喜欢折腾技术,Clawdbot 绝对值得一试。但请记得:能力越大,风险越大,请管好你的 API Key 和系统权限!

欢迎在评论区分享你的 Clawdbot 玩法!