标签 Qwen 下的文章

本地知识库:数据安全与智能管理的新选择

在数字化时代,知识管理已成为个人和企业不可或缺的一部分。传统的云知识库虽然方便,但数据安全问题日益凸显。本地知识库应运而生,成为保护数据隐私的重要解决方案。

什么是本地知识库?

本地知识库是一种在用户本地设备上运行的知识管理系统,主要用于文件内容搜索和文件知识问答。与依赖网络知识的通用大模型不同,本地知识库能够依据个人电脑或企业服务器中的文件内容进行精准回答。

访答本地知识库的核心功能包括:

  • 文件上传:将个人电脑中的各类文件投影到知识库
  • 深度解析:详细解析PDF、Word、图片、Excel等文档内容
  • 智能搜索:直接搜索相关内容在哪些文件中出现
  • 知识问答:依据文件知识进行准确回答

为什么需要本地知识库?

数据安全至关重要

云知识库中的文件数据存在被窃取、被AI白嫖的风险。访答本地知识库作为离线知识库,具有以下安全优势:

  • 一键安装,0代码使用
  • 不会上传任何文件
  • 断网可用,绝对安全
  • 自主可控,可自定义
  • 保护私有知识产权和数据隐私

企业内部数据作为核心资产,更不可能上传到云端。本地知识库确保了数据主权始终掌握在用户手中。

本地知识库的核心功能

深度文件解析能力

访答知识库对各种类型文件的解析能力令人印象深刻:

  • 图片:识别图片中的文字和内容描述
  • PDF/Word:提取文本、图片、公式、表格、印章等
  • Excel:处理表格数据
  • 视频:解析视频中的图片、语音、文字
  • 音频:转写音频文字

多模态搜索与问答

本地知识库支持多种搜索和问答形式:

  • 文本包含和相似搜索
  • 图片、语音、视频相似搜索
  • 多模态搜索(文本搜图片、文本搜语音等)
  • 文件整体相似性比较
  • 智能问答基于Qwen、Deepseek等模型

本地知识库的应用场景

AI智能客服问答

企业可将商品信息沉淀入知识库,在用户询问时搜索相关信息并生成准确回答。支持多模态问答、多级问答和自助客服,显著提升客服效率。

智能商品推荐

依据用户行为和商品特征,从知识库中搜索相似商品进行推荐。支持多样性推荐、冷启动和否推荐功能,实现精准营销。

企业知识管理

打破部门间知识壁垒,方便内部沟通和高效检索。存储员工手册、流程文档和技术资料,助力企业智能化转型。

本地知识库 vs 云知识库

访答本地知识库的所有操作都在用户电脑上进行,不上传任何文件数据,所有AI模型都在本地运行。而云知识库跟随账户,在任意电脑登录即可使用,但存在数据外泄风险。

立即体验安全的知识管理

本地知识库是数据主权时代的刚需选择。访答提供绝对安全的本地知识库解决方案,一键安装,0代码使用,让您的知识管理既智能又安全。

无论您是个人用户还是企业用户,保护文件数据安全都是首要考虑因素。选择本地知识库,就是选择对数据的完全控制权。

作者:江昱

在构建 Agent 应用时,凭证管理是一个容易被忽视但又极其重要的问题。一个典型的 Agent 应用会面临两个方向的凭证需求:向内,用户如何安全地调用你的 Agent?向外,Agent 如何安全地调用外部服务?

传统做法存在诸多问题。硬编码在代码里容易泄露且难以更新,存在配置文件中同样有安全风险,每次都手动传递不仅麻烦还容易出错,让大模型处理凭证更是巨大的安全隐患。更棘手的是,当凭证需要更新时(比如 API Key 过期、权限变更),如何在不重启服务的情况下动态更新?函数计算 AgentRun 的凭证管理系统就是为了解决这些问题而生。

image

入站凭证与出站凭证:双向安全保障

函数计算 AgentRun 的凭证管理分为两个维度,分别解决“谁能调用我”和“我能调用谁”的问题。

入站凭证:控制谁能访问你的 Agent

image

入站凭证用于控制外部用户或系统如何访问你的 Agent 应用。当你创建一个 Agent 并对外提供服务时,需要确保只有授权的用户才能调用。函数计算 AgentRun 提供了灵活的入站凭证管理,可以为不同的调用方生成独立的凭证,设置不同的权限和配额,控制每个凭证能访问哪些 Agent、调用频率限制、有效期等。

由于所有请求都经过函数计算 AgentRun 网关,入站凭证可以实现真正的动态更新。 比如你的 Agent 对外提供客服能力,可以为不同的业务部门生成不同的入站凭证,每个部门只能访问各自授权的 Agent。当某个部门的凭证泄露时,可以立即撤销并重新生成,所有变更在网关层实时生效,不影响其他部门的使用,也无需重启任何服务。

出站凭证:安全调用外部服务

image

出站凭证用于 Agent 访问外部服务时的身份认证。Agent 应用通常需要调用各种外部服务:大模型 API(OpenAI、Claude、Qwen 等)、数据库、第三方工具、企业内部系统等,每个服务都需要相应的凭证。传统方式下,开发者要么把这些凭证硬编码在代码里,要么通过环境变量传递,不仅不安全,更新时还需要重启服务。

函数计算 AgentRun 采用了一套巧妙的定时查询与缓存机制来管理出站凭证。 所有出站凭证统一存储在加密的凭证库中,代码里不再出现任何敏感信息。Agent 启动时会从凭证库拉取所需的所有凭证并缓存到本地,运行过程中直接使用本地缓存,避免频繁的网络请求带来的性能开销。同时,系统会定期进行健康检查,主动查询凭证是否有更新,发现变更时只更新发生变化的凭证。如果健康检查失败,会自动重试,确保凭证始终可用。

image

这种定时查询方案带来了多重价值。 从性能角度看,本地缓存避免了每次调用都查询凭证库,大幅降低了延迟和网络开销;从可用性角度看,即使凭证服务短暂不可用,缓存的凭证仍然可用,不会影响 Agent 的正常运行;从安全性角度看,定时健康检查确保凭证泄露或过期时能在几分钟内完成更新,而不需要等到下次部署。最关键的是,整个更新过程对 Agent 代码完全透明,开发者无需编写任何凭证更新逻辑,专注于业务实现即可。

这种最终一致性的设计在实践中被证明是最优的平衡:既保证了性能和可用性,又实现了凭证的动态更新能力。相比于每次都实时查询(性能差)或者只在启动时加载(更新不及时),定时查询方案在三者之间找到了最佳平衡点。

实际应用:工具和模型的凭证配置

函数计算 AgentRun 的凭证管理在两个关键场景发挥作用,展示了从理论到实践的完整闭环。

场景一:大模型调用的凭证管理

当你的 Agent 需要调用多个大模型时,每个模型都需要各自的 API Key。以前你可能需要在代码里硬编码这些 Key,或者通过环境变量传递,但这样做存在安全风险且更新困难。有了函数计算 AgentRun 的凭证管理,你只需要在平台上配置各个模型的出站凭证,给每个凭证命名(如 openai_key、qwen_key),然后在 Agent 配置中引用这些凭证名称。

运行时系统会自动注入实际的 Key,你的代码里完全看不到任何敏感信息。当某个模型的 Key 过期需要更新时,只需在凭证管理界面更新,几分钟后所有使用该凭证的 Agent 会通过定时健康检查自动获取新的 Key,无需修改代码或重启服务。这种体验就像是有一个智能管家在后台默默地帮你管理所有的钥匙,你只需要告诉他你要开哪扇门。

# Agent 配置示例(伪代码)
models:
  - name: gpt-4
    credential: ${credentials.openai_key}  # 引用凭证名称,不暴露实际Key
  - name: qwen-max
    credential: ${credentials.qwen_key}

场景二:工具调用的凭证注入

回到之前提到的 FunctionQ 案例,这是一个更复杂但也更能体现凭证管理价值的场景。Agent 需要通过 MCP 调用 CLI 工具查询用户的函数计算资源,这些工具需要用户的 AccessKey 和 SecretKey。关键问题是:如何在不暴露凭证给大模型的前提下,让工具能够正确调用 API?

函数计算 AgentRun 通过前置 Hook 实现了优雅的动态凭证注入。 用户在平台上配置自己的出站凭证后,Agent 调用工具时请求中只携带用户 ID,不包含任何凭证信息。前置 Hook 拦截请求,根据用户 ID 从凭证库获取对应的凭证,然后将凭证注入到环境变量或请求参数中。工具使用注入的凭证执行实际操作,后置 Hook 再清理敏感信息并记录审计日志。整个过程中,凭证从未暴露给大模型,也不会出现在 Agent 的代码中,真正做到了安全可控。

image

核心价值:让开发者专注业务逻辑

函数计算 AgentRun 的凭证管理系统带来的价值远不止“管理凭证”这么简单。从安全性角度看,凭证不再出现在代码和日志中,集中加密存储大幅降低泄露风险,即使某个凭证泄露也可以快速撤销和更换。从开发效率角度看,开发者不需要关心凭证如何存储、如何传递、如何更新,只需在配置中引用凭证名称,系统自动处理剩下的事情。从运维角度看,凭证更新不需要修改代码、不需要重新部署、不需要重启服务,在管理界面更新后通过定时机制自动生效。

更重要的是,凭证管理让 Agent 应用从“能用”变成“敢用” 。企业不再担心凭证泄露的风险,不再为凭证更新而头疼,不再因为安全问题而犹豫是否将 Agent 应用部署到生产环境。这种信心的建立,才是凭证管理最大的价值所在——它消除了企业拥抱 AI Agent 的最后一道顾虑,让技术真正为业务创造价值。

立即体验函数计算 AgentRun

函数计算 AgentRun 的无代码到高代码演进能力,现已开放体验:

查看更多产品详情:https://www.aliyun.com/product/fc/agentrun

  1. 快速创建:访问控制台(https://functionai.console.aliyun.com/cn-hangzhou/agent/explore),60 秒创建你的第一个 Agent
  2. 深度定制:当需要更复杂功能时,一键转换为高代码
  3. 持续演进:利用函数计算 AgentRun 的基础设施能力,持续优化你的 Agent

从想法到上线,从原型到生产,函数计算 AgentRun 始终是你最好的伙伴。欢迎加入“函数计算 AgentRun 客户群”,钉钉群号:134570017218。

快速了解函数计算 AgentRun:

一句话介绍: 函数计算 AgentRun 是一个以高代码为核心的一站式 Agentic AI 基础设施平台。秉持生态开放和灵活组装的理念,为企业级 Agent 应用提供从开发、部署到运维的全生命周期管理。

image

函数计算 AgentRun 架构图

函数计算 AgentRun 运行时基于阿里云函数计算 FC 构建,继承了 Serverless 计算极致弹性、按量付费、零运维的核心优势。通过深度集成 AgentScope、LangChain、RAGFlow、Mem0 等主流开源生态。函数计算 AgentRun 将 Serverless 的极致弹性、零运维和按量付费的特性与 AI 原生应用场景深度融合,助力企业实现成本与效率的极致优化,平均 TCO 降低 60% 。 

让开发者只需专注于 Agent 的业务逻辑创新,无需关心底层基础设施,让 Agentic AI 真正进入企业生产环境。

数据主权时代:为何选择本地知识库

在信息爆炸的今天,我们每天都在产生和接触海量的知识文件。从PDF报告到Word文档,从产品图片到会议视频,这些数字资产构成了个人和企业智慧的核心。然而,当我们将这些宝贵的数据交给云端服务时,是否曾想过:我们的知识安全吗?

云端困境与本地解决方案

传统的云知识库确实提供了便利,但背后隐藏着数据泄露和AI白嫖的风险。企业核心数据、个人研究成果,这些本应受到严格保护的知识资产,在云端面临着不可控的安全威胁。

访答本地知识库的出现,正是对这一困境的回应。它让知识管理回归本地,所有操作都在用户自己的电脑上进行,不上传任何文件数据。这种设计理念体现了对数据主权的尊重——你的知识,应该由你做主。

深度解析:超越传统搜索

与传统搜索工具不同,访答本地知识库具备深度解析能力。它不仅能处理文本内容,还能理解图片中的文字、视频中的场景、表格中的数据关系。这种多模态的理解能力,使得搜索和问答更加精准和智能。

想象一下:当你在海量文件中寻找某个特定印章出现过的所有合同,或者需要找出所有包含某张产品图片的演示文稿时,传统的关键词搜索往往无能为力。而访答的知识库却能通过深度解析,轻松完成这些复杂任务。

安全与智能的平衡

在人工智能时代,我们既渴望智能化的知识管理,又担忧数据安全。访答本地知识库在这两者间找到了平衡。它支持多种AI模型,包括DeepSeek、Qwen等,但这些模型都在本地运行,确保敏感数据不会外泄。

对于政企单位而言,这种平衡尤为重要。内部培训资料、技术文档、销售数据等核心资产,既需要高效的检索和智能问答,又必须保证绝对的安全。本地知识库正是满足这一需求的理想选择。

未来的知识管理方向

随着数据隐私意识的增强,本地化、可控化的知识管理将成为趋势。访答本地知识库不仅是一个工具,更代表了一种理念:在享受AI带来的便利时,我们不应以牺牲数据安全为代价。

无论是个人用户保护自己的知识产出,还是企业守护核心数据资产,选择本地知识库都是迈向智能化管理的明智之举。在这个数据即资产的时代,保护好我们的知识,就是保护我们的未来。

Clawdbot 对接飞书详细教程 手把手搭建你的专属 AI 助手

注意本教程在 Linux 系统下进行

Clawdbot 由于 Claude 的版权问题,已更名为 Moltbot,因此本教程基于最新版本编写。下面进入安装流程

首先准备一台闲置的云服务器或 VPS(推荐使用香港或海外节点)。由于 Clawdbot 运行时权限较大,出于安全考虑,不建议在本地或工作机上安装,推荐在一台独立的空服务器上部署。准备完成后,登录到服务器。

安装

如果你不想安装,可以直接使用阿里云的Clawdbot 一键部署,部署之后可以直接跳到对接飞书

第一步安装 Git

# 安装 Git
sudo apt update
sudo apt install git -y

第二步安装 Node.js

# 安装 NVM
# 国内使用 gitee 的镜像源
curl -o- https://gitee.com/RubyMetric/nvm-cn/raw/main/install.sh | bash

# 国外使用
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash

# 重新加载环境变量
source ~/.bashrc

# 安装 Node.js 22
nvm install 22

# 查看 nodejs 版本
node -v # 输出 v22 即可,版本只要 22 就行

安装 Moltbot (原 Clawdbot)

# 使用官方脚本安装
curl -fsSL https://molt.bot/install.sh | bash
服务器在国内,如果安装失败的话,可能需要解决网络问题

其他平台安装方式请参考Moltbot (原Clawdbot) 安装文档

你会看到如下图输出
Clawdbot 安装过程 - AI 助手部署初始化
如果首次安装,时间会很长,需要耐心等待。
如果最后输出如下内容:

→ npm install failed; cleaning up and retrying...

新的脚本服务器内存要求变高了,据我使用下来 2G 内存,肯定会 OOM,如果出错的话,建议使用 swap 把硬盘空间当作交互内存使用。

成功之后会输出如下图片
Clawdbot 安装成功 - AI 机器人配置向导
第一个选项选择 yes, 就是询问你是否知道风险的。
第二步选择 QuickStart
Clawdbot QuickStart 快速开始选项
第三步选择模型服务商,这里选择 Qwen,免费额度充足,适合入门使用
Clawdbot 选择 AI 模型服务商 Qwen 千问
选择千问模型后,会提供一个链接,复制并在浏览器中打开,如下图
Clawdbot 千问模型授权链接
打开浏览器后,会看到如下界面。由于我已登录过,所以显示账户信息;如果尚未登录,按照提示完成登录即可。
Clawdbot 千问 AI 账户登录页面
登录完成后,会出现以下选项,提示选择对应的千问模型,如下图
Clawdbot 选择千问 AI 模型版本
选择默认模型即可。接下来会提示选择 channel,这里先跳过,后续再添加
Clawdbot channel 渠道配置选项
继续下面选择 skills,也是选择 No,如下图
Clawdbot skills 技能配置选项
继续下面选择 hooks,也是使用空格选择 No,如下图
Clawdbot hooks 配置选项
然后等待安装完成,最后会出现以下选项,这里选择 TUI
Clawdbot 选择 TUI 终端界面
如果看到 TUI 聊天界面,说明安装成功,可以尝试输入 Hello 进行测试。
Clawdbot TUI 聊天界面 - AI 助手对话测试
然后直接使用 ctrl+c 先关闭,后面我们再来设置

查看服务

可以使用下面的命令来查看

clawdbot status

会看到如下图的结果就说明服务启动了
Clawdbot 服务状态检查 - AI 助手运行中

访问 Web UI 面板

如何访问面板?服务监听在 http://127.0.0.1:18789/ 端口上,我们现在通过 ssh 隧道来访问,输入下面的命令

ssh -N -L 18789:127.0.0.1:18789 用户名@服务器IP
# 回车之后
用户名@服务器IP's password: # 输入密码

然后在浏览器打开 http://127.0.0.1:18789/, 你会看到 Dashboard 了,如下图
Clawdbot Web UI Dashboard 未授权页面
图中显示的是未授权状态,回到服务器,输入以下命令

clawdbot dashboard

会看到下面的面板数据
Clawdbot Dashboard URL 获取命令
复制对应的 Dashboard URL 到浏览器打开,即可正常查看聊天记录。
Clawdbot Web UI 管理面板 - AI 助手聊天记录

至此 Clawdbot 已安装完成,可以正常访问了。然后聊天框里面首次输入 Hello, Clawdbot 会询问你他应该叫什么,应该叫你什么。就是你需要给它设置个名字,还有 bot 改叫你什么。你可以在聊天框这么输入

Name: Clawdbot

My Name: Boss

对接飞书

首先安装飞书插件,输入以下命令

clawdbot plugins install @m1heng-clawd/feishu

登录飞书开放平台 https://open.feishu.cn,点击「开发者后台 -> 创建企业自建应用」,如下图
飞书开放平台创建企业自建应用 - Clawdbot 对接
然后点击创建应用,如下
飞书创建应用 - Clawdbot AI 机器人
创建完成后,首先到凭据管理中获取 App ID 和 App Secret,注意保存,后续配置需要使用。
飞书 App ID 和 App Secret 凭据管理
然后添加机器人,如下操作
飞书添加机器人能力 - Clawdbot AI 助手
首先配置个名字
飞书机器人名称配置 - Clawedbot

飞书的其他配置先暂停,回到服务器配置 Clawdbot 的飞书参数

添加飞书配置

clawdbot config set channels.feishu.appId "飞书 app id"

clawdbot config set channels.feishu.appSecret "飞书 app secret"

clawdbot config set channels.feishu.enabled true

# 推荐使用 websocket
clawdbot config set channels.feishu.connectionMode websocket

clawdbot config set channels.feishu.dmPolicy pairing

clawdbot config set channels.feishu.groupPolicy allowlist

clawdbot config set channels.feishu.requireMention true

配置完成之后,重启

clawdbot gateway restart

重启完成后回到飞书,找到「事件和回调」,选择长连接模式,如下图
飞书事件和回调配置 - Clawdbot 长连接模式
如果配置成功,说明连接已建立。继续下面的配置,添加事件,选择「接收消息」事件
飞书添加接收消息事件 - Clawdbot AI 助手
事件添加完成之后,还需要开通权限,有以下权限全部勾选

权限Scope(范围)Description(说明)
contact:user.base:readonly用户信息获取基础用户信息
im:message消息 全部勾选发送和接收消息

如下图
飞书权限配置 - Clawdbot 用户信息权限

飞书消息权限配置 - Clawdbot AI 机器人

以上步骤全部完成后,即可与机器人对话。但在此之前需要先创建一个版本
飞书应用版本发布 - Clawdbot AI 助手上线

注意:每次修改配置后都需要重新发布版本,建议全部配置完成后再统一发布。

发布完成后,回到飞书客户端,可以看到应用已上线,点击打开应用
飞书应用发布成功 - Clawdbot AI 机器人
向机器人发送 Hello,即可收到 Moltbot 的回复
飞书 Clawdbot AI 助手回复测试成功

如有勘误 还请指正

Clawdbot (moltbot) 对接飞书详细教程 手把手搭建你的专属 AI 助手

作者:辰泉

提示:本文是 AgentRun Browser Sandbox 快速上手实践指南的姊妹篇,专注于高级集成方案、生产环境的最佳实践、性能优化和部署策略。如果您还没有完成基础学习,请先阅读《快速上手:LangChain + AgentRun 浏览器沙箱极简集成指南》

前言

在完成了 Browser Sandbox 的基础集成之后,本文将介绍高级集成方案(如 BrowserUse 框架)以及生产环境部署需要考虑的因素:如何管理 Sandbox 生命周期?如何优化性能和成本?如何保证系统的安全性和可观测性?本文将为您提供全面的高级应用和生产环境最佳实践指南。

基于 BrowserUse 集成 Browser Sandbox

image

效果截图

BrowserUse 是一个专门为 AI Agent 设计的浏览器自动化框架,支持视觉理解和智能决策。通过 AgentRun Browser Sandbox,您可以让 BrowserUse 在云端运行,享受 Serverless 架构的优势。

BrowserUse 架构概览

下图展示了 BrowserUse 与 Browser Sandbox 的集成架构:

image

架构特点:

  1. 智能决策循环: Agent 通过 LLM 分析页面截图,基于视觉理解生成操作指令,执行操作后继续循环,直到任务完成
  2. 无头浏览器控制: 通过 CDP 协议远程控制云端浏览器,Playwright 作为底层驱动,所有操作在云端执行
  3. 实时可视化: VNC 提供实时画面监控,方便调试和验证 Agent 行为

快速开始

安装依赖

pip install browser-use python-dotenv agentrun-sdk[playwright,server]

主要依赖说明:

  • browser-use:BrowserUse 核心库,支持多模态 LLM
  • agentrun-sdk[playwright,server]:AgentRun SDK,用于创建 Sandbox
  • python-dotenv:环境变量管理

配置环境变量

创建 .env 文件:

# DashScope API Key(用于 Qwen 模型)
DASHSCOPE_API_KEY=sk-your-dashscope-api-key
# AgentRun 认证信息
AGENTRUN_ACCOUNT_ID=your-account-id
ALIBABA_CLOUD_ACCESS_KEY_ID=your-access-key-id
ALIBABA_CLOUD_ACCESS_KEY_SECRET=your-access-key-secret
# Browser Sandbox 模板名称
BROWSER_TEMPLATE_NAME=sandbox-browser-demo

创建 Sandbox 并使用 BrowserUse

import asyncio
import os
from agentrun.sandbox import Sandbox, TemplateType
from browser_use import Agent, BrowserSession, ChatOpenAI
from browser_use.browser import BrowserProfile
from dotenv import load_dotenv
load_dotenv()
async def main():
    # 创建 Browser Sandbox
    sandbox = Sandbox.create(
        template_type=TemplateType.BROWSER,
        template_name=os.getenv("BROWSER_TEMPLATE_NAME"),
        sandbox_idle_timeout_seconds=3000
    )
    # 配置 Qwen 多模态模型
    llm = ChatOpenAI(
        model='qwen-vl-max',
        api_key=os.getenv("DASHSCOPE_API_KEY"),
        base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"
    )
    # 创建浏览器会话
    browser_session = BrowserSession(
        cdp_url=sandbox.get_cdp_url(),
        browser_profile=BrowserProfile(
            headless=False,
            timeout=3000000,
            keep_alive=True
        )
    )
    # 创建 Agent 并执行任务
    agent = Agent(
        task="访问阿里云官网并总结主要产品分类",
        llm=llm,
        browser_session=browser_session,
        use_vision=True
    )
    result = await agent.run()
    print(f"任务结果: {result.final_result()}")
    # 清理资源
    await browser_session.stop()
    sandbox.delete()
if __name__ == "__main__":
    asyncio.run(main())

BrowserUse 高级配置

自定义浏览器行为

browser_profile = BrowserProfile(
    timeout=3000000,             # 超时时间(毫秒)
    keep_alive=True,             # 保持会话活跃
)

多步骤任务编排

async def complex_task():
    """复杂的多步骤任务"""
    sandbox = Sandbox.create(
        template_type=TemplateType.BROWSER,
        template_name=os.getenv("BROWSER_TEMPLATE_NAME"),
        sandbox_idle_timeout_seconds=3000
    )
    llm = ChatOpenAI(
        model='qwen-vl-max',
        api_key=os.getenv("DASHSCOPE_API_KEY"),
        base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"
    )
    browser_session = BrowserSession(
        cdp_url=sandbox.cdp_url,
        browser_profile=BrowserProfile(keep_alive=True)
    )
    # 任务 1:信息收集
    agent1 = Agent(
        task="访问阿里云官网,收集产品分类信息",
        llm=llm,
        browser_session=browser_session,
        use_vision=True
    )
    result1 = await agent1.run()
    # 任务 2:基于第一步结果继续操作
    agent2 = Agent(
        task=f"基于以下信息:{result1.final_result()},访问每个产品分类并提取关键特性",
        llm=llm,
        browser_session=browser_session,
        use_vision=True
    )
    result2 = await agent2.run()
    # 清理资源
    await browser_session.stop()
    sandbox.delete()
    return result2.final_result()

集成 VNC 实时监控

import webbrowser
import urllib.parse
async def run_with_vnc_monitoring():
    """运行 BrowserUse 并启用 VNC 监控"""
    sandbox = Sandbox.create(
        template_type=TemplateType.BROWSER,
        template_name=os.getenv("BROWSER_TEMPLATE_NAME"),
        sandbox_idle_timeout_seconds=3000
    )
    # 获取 VNC URL 并打开查看器
    vnc_url = sandbox.get_vnc_url(),
    if vnc_url:
        # 修复 VNC URL 路径
        if vnc_url.endswith('/vnc'):
            vnc_url = vnc_url[:-4] + '/ws/livestream'
        # 在浏览器中打开 VNC 查看器
        encoded_url = urllib.parse.quote(vnc_url, safe='')
        viewer_url = f"file://path/to/vnc-viewer.html?url={encoded_url}"
        webbrowser.open(viewer_url)
        print(f"VNC 查看器已打开,可实时监控浏览器操作")
    # 创建并运行 Agent
    llm = ChatOpenAI(
        model='qwen-vl-max',
        api_key=os.getenv("DASHSCOPE_API_KEY"),
        base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"
    )
    browser_session = BrowserSession(
        cdp_url=sandbox.get_cdp_url(),
        browser_profile=BrowserProfile(headless=False, keep_alive=True)
    )
    agent = Agent(
        task="访问淘宝首页并搜索商品",
        llm=llm,
        browser_session=browser_session,
        use_vision=True
    )
    result = await agent.run()
    # 清理资源
    await browser_session.stop()
    sandbox.delete()
    return result.final_result()

BrowserUse 最佳实践

  1. 启用视觉理解: 对于复杂页面,使用 use_vision=True 让 LLM 分析页面截图
  2. 保持会话活跃: 使用 keep_alive=True 避免频繁重建连接
  3. 合理设置超时: 根据任务复杂度调整 timeout 参数
  4. 复用 BrowserSession: 对于多步骤任务,复用同一个 BrowserSession 提高效率
  5. 结合 VNC 调试: 开发阶段启用 VNC 实时查看 Agent 行为

获取完整示例代码

本文中的所有示例代码都可以在以下仓库中找到:

# 克隆示例代码仓库
git clone https://github.com/devsapp/agentrun-sandbox-demos.git
# 进入项目目录
cd agentrun-browseruse-wth-sandbox-demo
# 安装依赖(注意需要安装 server 扩展)
pip install -r requirements.txt

配置环境变量

# 复制环境变量模板
cp env.example .env
# 编辑 .env 文件,填入您的配置信息
# 必需配置项:
# - DASHSCOPE_API_KEY: DashScope API Key(用于 Qwen 模型)
# - AGENTRUN_ACCOUNT_ID: AgentRun 账号 ID
# - ALIBABA_CLOUD_ACCESS_KEY_ID: 阿里云访问密钥 ID
# - ALIBABA_CLOUD_ACCESS_KEY_SECRET: 阿里云访问密钥 Secret
# - BROWSER_TEMPLATE_NAME: Browser Sandbox 模板名称

运行示例(两步运行设计)

本项目采用服务器-客户端的架构设计,需要分两步运行:

第一步:启动 VNC 查看器服务

# 在终端 1 中启动 VNC Web 服务器
python main.py
# 服务启动后会显示:
# VNC 查看器服务已启动: http://localhost:8000
# 访问 http://localhost:8000 可以实时查看浏览器操作

main.py 的作用:

  • 启动本地 Web 服务器,提供 VNC 实时查看界面
  • 提供 WebSocket 代理,连接 AgentRun Sandbox 的 VNC 服务
  • 允许您在浏览器中实时监控 Agent 的操作过程

第二步:运行 BrowserUse 示例

# 在终端 2 中运行示例代码
python examples/01_browseruse_basic.py
# 运行高级示例
python examples/02_browseruse_advanced.py

为什么需要两步运行?

  1. 实时监控: main.py 提供 VNC 查看器,可以实时看到 Agent 在浏览器中的操作
  2. 调试友好: 通过可视化界面,更容易理解 Agent 的决策过程和行为
  3. 服务解耦: VNC 服务和业务逻辑分离,可以同时运行多个示例而共用同一个查看器

运行流程图:

image

仓库内容包括:

  • main.py:VNC Web 服务器,用于实时监控
  • examples/01_browseruse_basic.py:基础集成示例
  • examples/02_browseruse_advanced.py:高级配置示例
  • examples/sandbox_manager.py:Sandbox 生命周期管理
  • vncviewer/:VNC 查看器前端和后端代码
  • 完整的环境配置和最佳实践代码

Sandbox 生命周期管理最佳实践

三种管理模式

根据不同的应用场景,我们推荐三种 Sandbox 管理模式:

image

方案对比:

image

单例模式实现

适合开发调试和多轮对话场景:

class SandboxManager:
    """单例模式 Sandbox 管理器"""
    _instance = None
    _sandbox = None
    def __new__(cls):
        if cls._instance is None:
            cls._instance = super().__new__(cls)
        return cls._instance
    def get_or_create(self):
        """获取或创建 Sandbox"""
        if self._sandbox is None:
            self._sandbox = Sandbox.create(
                template_type=TemplateType.BROWSER,
                template_name=os.getenv("BROWSER_TEMPLATE_NAME"),
                sandbox_idle_timeout_seconds=3000
            )
        return self._sandbox
    def destroy(self):
        """销毁 Sandbox"""
        if self._sandbox:
            self._sandbox.delete()
            self._sandbox = None
# 使用
manager = SandboxManager()
sandbox = manager.get_or_create()  # 首次创建
sandbox = manager.get_or_create()  # 复用现有实例

连接池模式实现

适合高并发生产环境:

from queue import Queue
from threading import Lock
class SandboxPool:
    """Sandbox 连接池"""
    def __init__(self, pool_size=5, max_idle_time=300):
        self.pool_size = pool_size
        self.max_idle_time = max_idle_time
        self.pool = Queue(maxsize=pool_size)
        self.lock = Lock()
        self._initialize_pool()
    def _initialize_pool(self):
        """初始化连接池"""
        for _ in range(self.pool_size):
            sandbox = self._create_sandbox()
            self.pool.put(sandbox)
    def _create_sandbox(self):
        """创建 Sandbox 实例"""
        return Sandbox.create(
            template_type=TemplateType.BROWSER,
            template_name=os.getenv("BROWSER_TEMPLATE_NAME"),
            sandbox_idle_timeout_seconds=self.max_idle_time
        )
    def acquire(self, timeout=30):
        """获取 Sandbox 实例"""
        try:
            sandbox = self.pool.get(timeout=timeout)
            if not self._is_alive(sandbox):
                sandbox = self._create_sandbox()
            return sandbox
        except:
            raise RuntimeError("获取 Sandbox 超时")
    def release(self, sandbox):
        """归还 Sandbox 实例"""
        if self._is_alive(sandbox):
            self.pool.put(sandbox)
        else:
            new_sandbox = self._create_sandbox()
            self.pool.put(new_sandbox)
    def _is_alive(self, sandbox):
        """检查 Sandbox 是否存活"""
        try:
            return hasattr(sandbox, 'sandbox_id')
        except:
            return False
# 使用
pool = SandboxPool(pool_size=5)
sandbox = pool.acquire()
try:
    # 使用 sandbox 执行任务
    pass
finally:
    pool.release(sandbox)

会话状态管理

支持多用户多会话场景:

import time
class SessionManager:
    """会话状态管理"""
    def __init__(self):
        self.sessions = {}  # session_id -> sandbox
    def create_session(self, session_id: str):
        """创建会话"""
        if session_id not in self.sessions:
            sandbox = Sandbox.create(
                template_type=TemplateType.BROWSER,
                template_name=os.getenv("BROWSER_TEMPLATE_NAME"),
                sandbox_idle_timeout_seconds=1800
            )
            self.sessions[session_id] = {
                'sandbox': sandbox,
                'created_at': time.time(),
                'last_used': time.time()
            }
        return self.sessions[session_id]['sandbox']
    def get_session(self, session_id: str):
        """获取会话"""
        if session_id in self.sessions:
            session = self.sessions[session_id]
            session['last_used'] = time.time()
            return session['sandbox']
        return None
    def cleanup_expired_sessions(self, max_idle_time=1800):
        """清理过期会话"""
        current_time = time.time()
        expired_sessions = []
        for session_id, session in self.sessions.items():
            if current_time - session['last_used'] > max_idle_time:
                expired_sessions.append(session_id)
        for session_id in expired_sessions:
            self.destroy_session(session_id)
    def destroy_session(self, session_id: str):
        """销毁会话"""
        if session_id in self.sessions:
            self.sessions[session_id]['sandbox'].delete()
            del self.sessions[session_id]

性能优化

超时时间配置

合理设置超时时间是平衡性能和成本的关键:

# 开发环境(调试用)
sandbox = Sandbox.create(
    template_name="dev-template",
    sandbox_idle_timeout_seconds=7200  # 2 小时
)
# 生产环境(单次任务)
sandbox = Sandbox.create(
    template_name="prod-template",
    sandbox_idle_timeout_seconds=300  # 5 分钟
)
# 长时间任务
sandbox = Sandbox.create(
    template_name="long-task-template",
    sandbox_idle_timeout_seconds=10800  # 3 小时
)

超时策略推荐:

image

Sandbox 复用策略

class SmartSandboxManager:
    """智能 Sandbox 复用管理器"""
    def __init__(self):
        self.sandboxes = {}  # key -> sandbox
        self.usage_count = {}  # key -> count
    def get_sandbox(self, user_id: str, session_id: str):
        """获取或创建 Sandbox(支持复用)"""
        key = f"{user_id}:{session_id}"
        if key not in self.sandboxes:
            self.sandboxes[key] = Sandbox.create(
                template_type=TemplateType.BROWSER,
                template_name=os.getenv("BROWSER_TEMPLATE_NAME"),
                sandbox_idle_timeout_seconds=1800
            )
            self.usage_count[key] = 0
        self.usage_count[key] += 1
        return self.sandboxes[key]
    def should_recreate(self, key: str, max_reuse=50):
        """判断是否需要重建(防止状态累积)"""
        return self.usage_count.get(key, 0) >= max_reuse
    def recreate_if_needed(self, key: str):
        """按需重建 Sandbox"""
        if self.should_recreate(key):
            if key in self.sandboxes:
                self.sandboxes[key].delete()
                del self.sandboxes[key]
                self.usage_count[key] = 0

错误处理和重试机制

使用 tenacity 库实现智能重试:

from tenacity import retry, stop_after_attempt, wait_exponential, retry_if_exception_type
class SandboxError(Exception):
    """Sandbox 操作异常"""
    pass
@retry(
    retry=retry_if_exception_type(SandboxError),
    stop=stop_after_attempt(3),
    wait=wait_exponential(multiplier=1, min=2, max=10)
)
def execute_with_retry(sandbox, operation):
    """带重试的操作执行"""
    try:
        return operation(sandbox)
    except ConnectionError:
        raise SandboxError("连接失败")
    except TimeoutError:
        raise SandboxError("操作超时")
    except Exception as e:
        print(f"操作失败: {e}")
        raise SandboxError(f"操作失败: {e}")
# 使用示例
def navigate_page(sandbox):
    with sync_playwright() as p:
        browser = p.chromium.connect_over_cdp(sandbox.cdp_url)
        page = browser.contexts[0].pages[0]
        page.goto("https://example.com", timeout=30000)
        return page.title()
result = execute_with_retry(sandbox, navigate_page)

安全性最佳实践

环境变量保护

import os
from dotenv import load_dotenv
load_dotenv()
# 验证必需的环境变量
required_vars = ["DASHSCOPE_API_KEY", "AGENTRUN_ACCOUNT_ID"]
missing_vars = [var for var in required_vars if not os.getenv(var)]
if missing_vars:
    raise ValueError(f"缺少必需的环境变量: {', '.join(missing_vars)}")
# 敏感信息不要硬编码
API_KEY = os.getenv("DASHSCOPE_API_KEY")
ACCESS_KEY_ID = os.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
ACCESS_KEY_SECRET = os.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")

URL 白名单

ALLOWED_DOMAINS = [
    'example.com',
    'aliyun.com',
    'alibaba.com'
]
def is_url_allowed(url: str) -> bool:
    """检查 URL 是否在白名单中"""
    from urllib.parse import urlparse
    domain = urlparse(url).netloc
    return any(allowed in domain for allowed in ALLOWED_DOMAINS)
def safe_navigate(page, url: str):
    """安全导航"""
    if not is_url_allowed(url):
        raise ValueError(f"URL 不在白名单中: {url}")
    page.goto(url)

日志脱敏

import re
def sanitize_log(log_text: str) -> str:
    """日志脱敏"""
    # 脱敏 API Key
    log_text = re.sub(r'sk-[a-zA-Z0-9]{20,}', 'sk-***', log_text)
    # 脱敏 Access Key
    log_text = re.sub(r'LTAI[a-zA-Z0-9]{12,}', 'LTAI***', log_text)
    # 脱敏密码
    log_text = re.sub(r'password["\s:=]+[^"\s,}]+', 'password: ***', log_text, flags=re.IGNORECASE)
    return log_text
# 使用
print(sanitize_log(f"使用 API Key: {API_KEY}"))

可观测性与监控

日志记录最佳实践

import logging
from datetime import datetime
# 配置日志
logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
    handlers=[
        logging.FileHandler(f'sandbox_{datetime.now().strftime("%Y%m%d")}.log'),
        logging.StreamHandler()
    ]
)
logger = logging.getLogger(__name__)
class MonitoredSandboxManager:
    """带监控的 Sandbox 管理器"""
    def create_sandbox(self, **kwargs):
        """创建 Sandbox(带日志)"""
        start_time = time.time()
        logger.info(f"开始创建 Sandbox: {kwargs}")
        try:
            sandbox = Sandbox.create(**kwargs)
            duration = time.time() - start_time
            logger.info(f"Sandbox 创建成功: {sandbox.sandbox_id}, 耗时: {duration:.2f}s")
            return sandbox
        except Exception as e:
            duration = time.time() - start_time
            logger.error(f"Sandbox 创建失败: {e}, 耗时: {duration:.2f}s")
            raise
    def execute_task(self, sandbox, task_name: str, operation):
        """执行任务(带日志)"""
        start_time = time.time()
        logger.info(f"开始执行任务: {task_name}, Sandbox: {sandbox.sandbox_id}")
        try:
            result = operation(sandbox)
            duration = time.time() - start_time
            logger.info(f"任务执行成功: {task_name}, 耗时: {duration:.2f}s")
            return result
        except Exception as e:
            duration = time.time() - start_time
            logger.error(f"任务执行失败: {task_name}, 错误: {e}, 耗时: {duration:.2f}s")
            raise

指标收集

from dataclasses import dataclass
from typing import Dict, List
import json
@dataclass
class SandboxMetrics:
    """Sandbox 指标"""
    sandbox_id: str
    create_time: float
    destroy_time: float = None
    total_requests: int = 0
    failed_requests: int = 0
    total_duration: float = 0.0
class MetricsCollector:
    """指标收集器"""
    def __init__(self):
        self.metrics: Dict[str, SandboxMetrics] = {}
    def record_creation(self, sandbox_id: str):
        """记录创建"""
        self.metrics[sandbox_id] = SandboxMetrics(
            sandbox_id=sandbox_id,
            create_time=time.time()
        )
    def record_request(self, sandbox_id: str, duration: float, success: bool):
        """记录请求"""
        if sandbox_id in self.metrics:
            metric = self.metrics[sandbox_id]
            metric.total_requests += 1
            metric.total_duration += duration
            if not success:
                metric.failed_requests += 1
    def record_destruction(self, sandbox_id: str):
        """记录销毁"""
        if sandbox_id in self.metrics:
            self.metrics[sandbox_id].destroy_time = time.time()
    def export_metrics(self, filepath: str):
        """导出指标"""
        metrics_data = [
            {
                'sandbox_id': m.sandbox_id,
                'create_time': m.create_time,
                'destroy_time': m.destroy_time,
                'total_requests': m.total_requests,
                'failed_requests': m.failed_requests,
                'success_rate': (m.total_requests - m.failed_requests) / m.total_requests if m.total_requests > 0 else 0,
                'avg_duration': m.total_duration / m.total_requests if m.total_requests > 0 else 0,
                'lifetime': m.destroy_time - m.create_time if m.destroy_time else time.time() - m.create_time
            }
            for m in self.metrics.values()
        ]
        with open(filepath, 'w') as f:
            json.dump(metrics_data, f, indent=2)
# 使用
collector = MetricsCollector()
collector.record_creation(sandbox.sandbox_id)
# ... 执行任务 ...
collector.export_metrics('metrics.json')

成本优化

按需创建与销毁

class CostOptimizedManager:
    """成本优化的管理器"""
    def __init__(self, idle_threshold=300):
        self.idle_threshold = idle_threshold
        self.sandboxes = {}
        self.last_used = {}
    def get_sandbox(self, key: str):
        """获取 Sandbox(懒加载)"""
        if key not in self.sandboxes:
            self.sandboxes[key] = Sandbox.create(
                template_type=TemplateType.BROWSER,
                template_name=os.getenv("BROWSER_TEMPLATE_NAME"),
                sandbox_idle_timeout_seconds=self.idle_threshold
            )
        self.last_used[key] = time.time()
        return self.sandboxes[key]
    def cleanup_idle(self):
        """清理闲置 Sandbox"""
        current_time = time.time()
        to_remove = []
        for key, last_time in self.last_used.items():
            if current_time - last_time > self.idle_threshold:
                to_remove.append(key)
        for key in to_remove:
            if key in self.sandboxes:
                self.sandboxes[key].delete()
                del self.sandboxes[key]
                del self.last_used[key]
                logger.info(f"清理闲置 Sandbox: {key}")

批量任务处理

async def batch_process_tasks(tasks: List[str], pool_size: int = 5):
    """批量处理任务(复用 Sandbox)"""
    pool = SandboxPool(pool_size=pool_size)
    results = []
    for task in tasks:
        sandbox = pool.acquire()
        try:
            # 处理任务
            result = await process_task(sandbox, task)
            results.append(result)
        finally:
            pool.release(sandbox)
    return results

生产环境部署

环境配置

开发环境 (.env.dev):

# 开发环境配置
BROWSER_TEMPLATE_NAME=dev-browser-template
SANDBOX_IDLE_TIMEOUT=7200
POOL_SIZE=2
LOG_LEVEL=DEBUG

生产环境 (.env.prod):

# 生产环境配置
BROWSER_TEMPLATE_NAME=prod-browser-template
SANDBOX_IDLE_TIMEOUT=300
POOL_SIZE=10
LOG_LEVEL=INFO
ENABLE_METRICS=true
METRICS_EXPORT_INTERVAL=300

高可用架构

image

健康检查

from flask import Flask, jsonify
app = Flask(__name__)
manager = SandboxManager()
@app.route('/health')
def health_check():
    """健康检查端点"""
    try:
        # 检查 Sandbox 是否可用
        sandbox = manager.get_or_create()
        # 简单的健康检查
        is_healthy = hasattr(sandbox, 'sandbox_id')
        if is_healthy:
            return jsonify({
                'status': 'healthy',
                'sandbox_id': sandbox.sandbox_id,
                'timestamp': time.time()
            }), 200
        else:
            return jsonify({
                'status': 'unhealthy',
                'error': 'Sandbox not available'
            }), 503
    except Exception as e:
        return jsonify({
            'status': 'unhealthy',
            'error': str(e)
        }), 503
@app.route('/metrics')
def metrics():
    """指标端点"""
    collector = MetricsCollector()
    # 返回当前指标
    return jsonify({
        'total_sandboxes': len(collector.metrics),
        'timestamp': time.time()
    })

故障排查与常见问题

连接问题

问题:无法连接到 Sandbox

排查步骤

def diagnose_connection(sandbox):
    """诊断连接问题"""
    print(f"1. 检查 Sandbox ID: {sandbox.sandbox_id}")
    print(f"2. 检查 CDP URL: {sandbox.cdp_url}")
    # 测试 CDP 连接
    try:
        with sync_playwright() as p:
            browser = p.chromium.connect_over_cdp(sandbox.cdp_url)
            print("✓ CDP 连接成功")
            browser.close()
    except Exception as e:
        print(f"✗ CDP 连接失败: {e}")
    # 测试 VNC 连接
    print(f"3. VNC URL: {sandbox.vnc_url}")
    print("提示: 可以在浏览器中打开 VNC URL 测试连接")

超时问题

问题:任务执行超时

解决方案

def handle_timeout(sandbox, operation, max_retries=3):
    """处理超时(带重试)"""
    for attempt in range(max_retries):
        try:
            return operation(sandbox, timeout=30000)
        except TimeoutError:
            logger.warning(f"任务超时(尝试 {attempt + 1}/{max_retries})")
            if attempt == max_retries - 1:
                # 最后一次尝试失败,重建 Sandbox
                logger.error("多次超时,重建 Sandbox")
                sandbox.delete()
                sandbox = Sandbox.create(
                    template_type=TemplateType.BROWSER,
                    template_name=os.getenv("BROWSER_TEMPLATE_NAME")
                )
                return operation(sandbox, timeout=60000)

性能问题

问题:响应速度慢

优化建议

  1. 使用连接池:预先创建多个 Sandbox 实例
  2. 启用 keep_alive:保持浏览器会话,避免重复建立连接
  3. 合理设置超时:根据任务复杂度调整超时时间
  4. 并发控制:限制并发请求数,避免资源竞争
# 性能优化配置示例
browser_session = BrowserSession(
    cdp_url=sandbox.cdp_url,
    browser_profile=BrowserProfile(
        timeout=30000,          # 30秒超时
        keep_alive=True,        # 保持连接
        disable_security=False  # 保持安全检查
    )
)

错误码参考

image

总结

通过本指南,您已经掌握了:

  1. BrowserUse 集成: 如何使用 BrowserUse 框架实现智能浏览器自动化
  2. 生命周期管理: 三种 Sandbox 管理模式的选择和实现
  3. 性能优化: 超时配置、复用策略、错误重试机制
  4. 安全实践: 环境变量保护、URL 白名单、日志脱敏
  5. 可观测性: 日志记录、指标收集、监控告警
  6. 成本优化: 按需创建、闲置清理、批量处理
  7. 生产部署: 高可用架构、健康检查、故障排查

关注「阿里云云原生」公众号,后台回复:BrowserUse

获取参考代码

立即体验函数计算 AgentRun

函数计算 AgentRun 的无代码到高代码演进能力,现已开放体验:

  1. 快速创建:访问控制台(https://functionai.console.aliyun.com/cn-hangzhou/agent/explore),60 秒创建你的第一个 Agent
  2. 深度定制:当需要更复杂功能时,一键转换为高代码
  3. 持续演进:利用函数计算 AgentRun 的基础设施能力,持续优化你的 Agent

从想法到上线,从原型到生产,函数计算 AgentRun 始终是你最好的伙伴。欢迎加入“函数计算 AgentRun 客户群”,钉钉群号: 134570017218

快速了解函数计算 AgentRun:

一句话介绍:函数计算 AgentRun 是一个以高代码为核心的一站式 Agentic AI 基础设施平台。秉持生态开放和灵活组装的理念,为企业级 Agent 应用提供从开发、部署到运维的全生命周期管理。

image

函数计算 AgentRun 架构图

AgentRun 运行时基于阿里云函数计算 FC 构建,继承了 Serverless 计算极致弹性、按量付费、零运维的核心优势。通过深度集成 AgentScope、LangChain、RAGFlow、Mem0 等主流开源生态。函数计算 AgentRun 将 Serverless 的极致弹性、零运维和按量付费的特性与 AI 原生应用场景深度融合,助力企业实现成本与效率的极致优化,平均 TCO 降低 60% 。 

让开发者只需专注于 Agent 的业务逻辑创新,无需关心底层基础设施,让 Agentic AI 真正进入企业生产环境。

推荐阅读:

这里记录每周值得分享的科技内容,周五发布。

本杂志开源,欢迎投稿。另有《谁在招人》服务,发布程序员招聘信息。合作请邮件联系[email protected])。

封面图

刚刚运营的北京通州站位于地下,为了充分利用自然光,屋顶采用了透光的膜结构,上方还有一个风帆形状的保护架。(via

中国 AI 大模型领导者在想什么

上周六(1月10日),北京有一场"AGI-Next 前沿峰会",由清华大学基础模型实验室主办。

中国顶尖的 AI 大模型领导者,很多都出席了。

  • 唐杰:清华大学教授,智谱创始人
  • 杨植麟:月之暗面 Kimi 创始人
  • 林俊旸:阿里 Qwen 技术负责人
  • 姚顺雨:OpenAI 前核心研究者、腾讯 AI 新部门负责人

他们谈了对大模型和中国 AI 发展的看法,网上有发言实录

内容非常多,有意思的发言也很多,下面是我摘录的部分内容。

一、唐杰的发言

1、智谱的起源

2019年,我们开始研究,能不能让机器像人一样思考,当时就从清华成果转化,在学校的大力支持下,成立了智谱这么一家公司,我现在是智谱的首席科学家。

那个时候,我们实验室在图神经网络、知识图谱方面,在国际上做的还行,但我们坚定地把这两个方向暂停了,暂时不做了,所有的人都转向做大模型。

2、泛化和 Scaling

我们希望机器有泛化能力,我教它一点点,它就能举一反三。就和人一样,教小孩子的时候,我们总希望教三个问题,他就会第四个、第十个,甚至连没教过的也会。怎么让机器拥有这种能力?

目前为止,我们主要通过 Scaling(规模化)达到这个目标,在不同层面提高泛化能力。

(1)我们最早期用 Transformer 训练模型,把所有的知识记忆下来。训练数据越多、算力越多,模型的记忆能力就越强,也就是说,它把世界上所有的知识都背下来了,并且有一定的泛化能力,可以抽象,可以做简单的推理。比如,你问中国的首都是什么?这时候模型不需要推理,它只是从知识库里拿出来。

(2)第二层是把模型进行对齐和推理,让它有更复杂的推理能力,以及理解我们的意图。我们需要持续的 Scaling SFT(Supervised Fine-Tuning,监督式微调),甚至强化学习。通过人类大量的数据反馈,不断 Scaling 反馈数据,可以让模型变得更聪明、更准确。

(3)今年是 RLVR(强化学习与可验证奖励)爆发年。这里的"可验证"是什么意思?比如,数学可以验证、编程可能可以验证,但更广泛地,网页好不好看,就不大好验证了,它需要人来判断。

这就是为什么这个事情很难做,我们原来只能通过人类反馈数据来做,但人类反馈的数据里面噪音也非常多,而且场景也非常单一。

如果我们有一个可验证的环境,这时候我们可以让机器自己去探索、自己去发现这个反馈数据,自己来成长。这是我们面临的一个挑战。

3、从 Chat 到做事:新范式的开始

大家可能会问,是不是不停地训练模型,智能就越来越强?其实也不是。

2025年初,DeepSeek 出来,真是横空出世。大家原来在学术界、产业界都没有料到 DeepSeek 会突然出来,而且性能确实很强,一下子让很多人感到很震撼。

我们当时就想一个问题,也许在 DeepSeek 这种范式下,Chat(对话)差不多算是解决了。也就是说我们做得再好,在 Chat 上可能做到最后跟 DeepSeek 差不多。或许我们可以再个性化一点,变成有情感的 Chat,或者再复杂一点,但是总的来讲,这个范式可能基本到头了,剩下更多的反而是工程和技术的问题。

那么,AI 下一步朝哪个方向发展?我们当时的想法是,让每个人能够用 AI 做一件事情,这可能是下一个范式,原来是 Chat,现在是真的做事了。

当时有两个方向,一个是编程,做 Coding、做 Agent;另一个是用 AI 来帮我们做研究,类似于 DeepResearch,甚至写一个复杂的研究报告。我们现在的选择是把 Coding、Agentic、Reasoning 这三个能力整合在一起。

二、林俊旸的发言

4、千问是怎么开源的

千问的开源模型比较多,很多人问这是为什么?

这起源于2023年8月3日,我们开源了一个小模型,它是我们内部用来做实验的 1.8B 模型。我们做预训练,资源毕竟有限,你做实验的话不能通通用 7B 的模型来验,就拿 1.8B 的来验。

当时我的师弟跟我说,我们要把这个模型开源出去。我非常不理解,我说这个模型在2023年几乎是一个不可用的状态,为什么要开源出去?他跟我说 7B 很消耗机器资源,很多硕士生和博士生没有机器资源做实验,如果 1.8B 开源出去的话,很多同学就有机会毕业了,这是很好的初心。

干着干着,手机厂商跑来跟我们说 7B 太大,1.8B 太小,能不能给我们干一个 3B 或 4B 的,这个容易,没有什么很难的事情。一路干下来,型号类型越来越多,跟服务大家多多少少有一点关系。

5、我们的追求是多模态模型

我们自己内心追求的,不仅仅是服务开发者或者服务科研人员,而是能不能做一个 Multimodal Foundation Agent(多模态基础智能体)。

我特别相信这件事情,2023年的时候大模型是一个大家都不要的东西,多多少少有那么几分大炼钢铁的成分,多模态是我们从那时就一直想做的事情。

为什么呢?我们觉得如果你想做一个智能的东西,天然的应该是 Multimodal(多模态),当然带有不同看法,各个学者都有一些看法,多模态能不能驱动智力的问题。我懒得吵这个架,人有眼睛和耳朵可以做更多的事情,我更多的考虑是 Foundation(基础智能体)有更多的生产力,能不能更好地帮助人类,毫无疑问我们应该做视觉,我们应该做语音。

更进一步,我们要做什么东西呢?Omni 的模型(全模态模型)不仅仅是能够理解文本、视觉、音频,我们可能还让它生成文本、音频。今天我们已经做到了,但是我们还没有做到把视觉生成结合在一起。如果做到三进三出,我觉得至少是我个人喜欢的东西。

三、姚顺雨的发言

6、To C 和 To B 的差异

我的一个观察是 To C(消费者模型)和 To B(商业用户模型)发生了明显的分化。

大家一想到 AI,就会想到两个东西,一个是 ChatGPT,另外一个是 Claude Code。它们就是做 To C 和 To B 的典范。

对于 To C 来说,大部分人大部分时候不需要用到那么强的智能,可能今天的 ChatGPT 和去年相比,研究分析的能力变强了,但是大部分人大部分时候感受不到,更多把它当作搜索引擎的加强版,很多时候也不知道该怎么去用,才能把它的智能激发出来。

但对于 To B 来说,很明显的一点是智能越高,代表生产力越高,也就越值钱。所以,大部分时候很多人就是愿意用最强的模型。一个模型是200美元/月,第二强或者差一些的模型是50美元/月、20美元/月,我们今天发现很多美国的人愿意花溢价用最好的模型。可能他的年薪是20万美元,每天要做10个任务,一个非常强的模型可能10个任务中八九个做对了,差的是做对五六个,问题是你不知道这五六个是哪五六个的情况下,需要花额外精力去监控这个事情。

所以,在 To B 这个市场上,强的模型和稍微弱点的模型,分化会越来越明显。

7、垂直整合和模型应用分层

我的第二点观察是,基础模型和上层应用,到底是垂直整合,还是模型应用分层,也开始出现了分化。

比如,ChatGPT Agent 是垂直整合,Claude(或者 Gemini)+ Manus 是模型应用分层。过去大家认为,当你有垂直整合能力肯定做得更好,但起码今天来看并不一定。

首先,模型层和应用层需要的能力还是挺不一样的,尤其是对于 To B 或者生产力这样的场景来说,可能更大的预训练还是一个非常关键的事情,这个事情对于产品公司确实很难做。但是想要把这么一个特别好的模型用好,或者让这样的模型有溢出能力,也需要在应用侧或者环境这一侧做很多相应的事情。

我们发现,其实在 To C 的应用上,垂直整合还是成立的,无论 ChatGPT 还是豆包,模型和产品是非常强耦合、紧密迭代的。但是对于 To B 来说,这个趋势似乎是相反的,模型在变得越来越强、越来越好,但同样会有很多应用层的东西将好的模型用在不同的生产力环节。

8、需要更大的 Context

怎么让今天的大模型或者 AI 能够给用户提供更多价值?我们发现,很多时候需要的是额外的 Context(上下文)。

比如,我问 AI 今天该去吃什么?其实,你今天问 ChatGPT 和你去年问或者明天问,答案应该会差很多。这个事情想要做好,不是说你需要更大的模型、更强的预训练、更强的强化学习,而是可能需要更多额外的输入,或者叫 Context。如果它知道我今天特别冷,我需要吃些暖和的,我在今天这样的范围活动,可能我老婆在另一个地方吃什么等各种各样的事情,它的回答就会更好。

回答这样的问题,更多需要的是额外的输入。我和老婆聊了很多天,我们可以把聊天记录转发给元宝,把额外的输入用好,会给用户带来很多额外的价值。这是我们对 To C 的思考。

四、圆桌对话:中国 AI 的未来

李广密(主持人):我想问大家一个问题,在三年和五年以后,全球最领先的 AI 公司是中国团队的概率有多大?我们从今天的跟随者变成未来的引领者,这个过程到底还有哪些需要去做好?

9、姚顺雨的回答

我觉得概率还挺高的,我挺乐观的。目前看起来,任何一个事情一旦被发现,在中国就能够很快的复现,在很多局部做得更好,包括之前制造业、电动车这样的例子已经不断地发生。

我觉得可能有几个比较关键的点。

(1)中国的光刻机到底能不能突破,如果最终算力变成了瓶颈,我们能不能解决算力问题。

(2)能不能有更成熟的 To B 市场。今天我们看到很多做生产力或者做 To B 的模型和应用,还是会诞生在美国,因为支付意愿更强,文化更好。今天在国内做这个事情很难,所以大家都会选择出海或者国际化。这和算力是比较大的客观因素。

(3)更重要的是主观因素,我觉得中国想要突破新的范式或者做非常冒险事情的人可能还不够多。也就是说,有没有更多有创业精神或者冒险精神的人,真的想要去做前沿探索或者范式突破的事情。我们到底能不能引领新的范式,这可能是今天中国唯一要解决的问题,因为其他所有做的事情,无论是商业,还是产业设计,还是做工程,我们某种程度上已经比美国做得更好。

10、林俊旸的回答

这个问题是个危险的问题,理论上这个场合是不可以泼冷水的,但如果从概率上来说,我可能想说一下我感受到的中国和美国的差异。比如说,美国的 Compute(算力)可能整体比我们大1-2个数量级,但我看到不管是 OpenAI 还是什么,他们大量的算力投入到的是下一代研究当中去,我们今天相对来说捉襟见肘,光交付可能就已经占据了我们绝大部分的算力,这会是一个比较大的差异。

这可能是历史上就有的问题,创新是发生在有钱的人手里,还是穷人手里。穷人不是没机会,我们觉得这些富哥真的很浪费,他们训练了这么多东西,可能训练了很多也没什么用。但今天穷的话,比如今天所谓的算法 Infra(基础设施)联合优化的事情,如果你真的很富,就没有什么动力去做这个事情。

未来可能还有一个点,如果从软硬结合的角度,我们下一代的模型和芯片的软硬结合,是不是真的有可能做出来?

2021年,我在做大模型,阿里做芯片的同学,找我说能不能预测一下,三年之后这个模型是不是 Transformer,是不是多模态。为什么是三年呢?他说我们需要三年时间才能流片。我当时的回答是三年之后在不在阿里巴巴,我都不知道!但我今天还在阿里巴巴,它果然还是 Transformer,果然还是多模态,我非常懊悔为什么当时没有催他去做。当时我们的交流非常鸡同鸭讲,他给我讲了一大堆东西,我完全听不懂,我给他讲,他也不知道我们在做什么,就错过了这个机会。这个机会有没有可能再来一次?我们虽然是一群穷人,是不是穷则思变,创新的机会会不会发生在这里?

今天我们教育在变好,我属于90年代靠前一些的,顺雨属于90年代靠后一点的,我们团队里面有很多00后,我感觉大家的冒险精神变得越来越强。美国人天然有非常强烈的冒险精神,一个很典型的例子是当时电动车刚出来,甚至开车会意外身亡的情况下,依然会有很多富豪们都愿意去做这个事情,但在中国,我相信富豪们是不会去干这个事情的,大家会做一些很安全的事情。今天大家的冒险精神开始变得更好,中国的营商环境也在变得更好的情况下,我觉得是有可能带来一些创新的。概率没那么大,但真的有可能。

三年到五年后,最领先的 AI 公司是一家中国公司的概率,我觉得是20%吧,20%已经非常乐观了,因为真的有很多历史积淀的原因在这里。

11、唐杰的回答

首先我觉得确实要承认,无论是做研究,尤其是企业界的 AI Lab,和美国是有差距的,这是第一点。

我们做了一些开源,可能有些人觉得很兴奋,觉得中国的大模型好像已经超过美国了。其实可能真正的情况是我们的差距也许还在拉大,因为美国那边的大模型更多的还在闭源,我们是在开源上面玩了让自己感到高兴的,我们的差距并没有像我们想象的那样好像在缩小。有些地方我们可能做的还不错,我们还要承认自己面临的一些挑战和差距。

但我觉得,现在慢慢变得越来越好。

(1)90后、00后这一代,远远好过之前。一群聪明人真的敢做特别冒险的事,我觉得现在是有的,00后这一代,包括90后这一代是有的,包括俊旸、Kimi、顺雨都非常愿意冒风险来做这样的事情。

(2)咱们的环境可能更好一些,无论是国家的环境,比如说大企业和小企业之间的竞争,创业企业之间的问题,包括我们的营商环境。

(3)回到我们每个人自己身上,就是我们能不能坚持。我们能不能愿意在一条路上敢做、敢冒险,而且环境还不错。如果我们笨笨的坚持,也许走到最后的就是我们。

科技动态

1、载人飞艇

1月9日,湖北制造的载人飞艇祥云 AS700,完成了荆门至武汉往返航程。这是全国首次载人飞艇商业飞行,可能也是目前世界唯一运作的商业载人飞艇。

飞艇总长50米,最大载客量9人。由于载客量太小,不可能用作常规的交通工具,只能做一些观光飞行。

2、鼻子触控

一个英国发明家想在洗澡时使用手机,结果因为手指带水无法触控。

他灵机一动,发明了戴在鼻子上的触控笔。

它的结构很简单,就是一个石膏纤维的鼻管,里面插着一支触控笔。

这个发明看上去很有用,可以解放双手,也适合戴手套的情况和残疾人士。

3、越南禁止不可跳过的广告

越南近日颁布第342号法令,禁止不可跳过的广告,将于2026年2月15日起生效。

法令规定,视频广告的等待时间必须在5秒以内,否则观众可以选择跳过。而且,关闭方式应该是清晰简便的,禁止使用迷惑用户的虚假或模糊符号。

这明显针对 Youtube 等视频平台的片头广告。这让人第一次感到,越南互联网值得叫好。

文章

1、我所有的新代码都将闭源(英文)

作者是一个开源软件贡献者。他感到,自己的开源代码都被大模型抓取,导致仓库访问者减少,进而也没有收入,所以他后面的代码都要闭源。

2、网站的视觉回归测试(英文)

本文介绍如何使用 Playwright,对网页进行视觉测试,看看哪里出现变动。

3、我用 PostgreSQL 代替 Redis(英文)

Redis 是最常用的缓存工具,作者介绍它的痛点在哪里,怎么用 PostgreSQL 数据库替代。

4、如何用 CSS 修复水平滚动条(英文)

一篇 CSS 初级教程,介绍四个简单的技巧,让网页不会出现水平滚动条(即避免溢出)。

5、消息队列原理简介(英文)

本文是初级教程,介绍消息队列(mesage queue)的概念和作用。

6、macOS Tahoe 的圆角问题(英文)

macOS 最新版本 Tahoe 加大了圆角半径,造成调整窗口大小时经常失败。作者认为,从操作角度看,圆角面积最好超过端头的50%。

工具

1、whenwords

本周,GitHub 出现了一个奇特的库,没有一行代码,只有一个接口文档。

用户需要自己将接口文档输入大模型,并指定编程语言,生成相应的库代码再使用。

以后会不会都是这样,软件库没有代码,只有接口描述?

2、Hongdown

Markdown 文本的格式美化器,根据预设的规则,修改 Markdown 文本的风格样式。

3、VAM Seek

一个开源的网页视频播放器,会自动显示多个时点的视频缩略图,便于快速点击跳转。

4、kodbox

开源的网页文件管理器。

5、Nigate

让 Mac 电脑读写 NTFS 磁盘的开源工具。(@hoochanlon 投稿)

6、Flippy Lid

一个实验性软件,把 macbook 铰链开合作为输入,可以玩 Flippy Lid,也可以作为密码解锁。(@huanglizhuo 投稿)

7、Jumble

nostr 网络的开源 Web 客户端,专门用来浏览以 feed 内容为主的 relay 节点。(@CodyTseng 投稿)

8、Clash Kit

一个基于 Node.js 的 Clash 命令行管理工具。(@wangrongding 投稿)

9、SlideNote

开源的 Chrome 浏览器插件,在侧边栏做笔记,支持跨设备自动同步。(@maoruibin 投稿)

10、NginxPulse

开源的 Nginx 访问日志分析与可视化面板,提供实时统计、PV 过滤、IP 归属地、客户端解析。
@likaia 投稿)

AI 相关

1、Auto Paper Digest (APD)

一个 AI 应用,自动从 arXiv 抓取每周的热门 AI 论文,通过 NotebookLM 生成视频讲解,并能发布到抖音。(@brianxiadong 投稿)

2、CC Switch

一个跨平台桌面应用,一键切换 Claude Code / Codex / Gemini CLI 的底层模型,以及完成其他的管理设置。(@farion1231 投稿)

3、网易云音乐歌单 AI 分析

使用 AI 分析用户的网易云音乐歌单,进行总结。(@immotal 投稿)

资源

1、EverMsg

这个网站可以查看 BTC 区块链的 OP_RETURN 字段,该字段记录了一段文本,只要发上区块链就永远不会删除和修改。(@blueslmj 投稿)

2、DeepTime Mammalia

沉浸式 3D/2D 网页可视化项目,交互式哺乳纲演化树,探索哺乳动物2亿年的演化。(@SeanWong17 投稿)

图片

1、冰下修船

俄罗斯有一个船厂,位于北极圈附近。每年冬天,船坞都要结冰。

为了冬天也能修船,船厂会把冰层凿掉一块,露出船底。

冰层通常不会那么厚,不会结冰到船底,必须分层凿开。工人先用电锯,锯开最上层的冰层,然后等待下面的河水结冰,再用电锯向下切割,反复多次,直到船底结冰。

有时,需要凿开一条很长的冰槽。

下图是工人进入冰层下方,检修船底,由于冰下工作条件恶劣且有危险性,工人的工资都较高。

言论

1

我对自己的代码被大模型吸收感觉如何?

我很高兴这样,因为我把这看作是我一生努力的延续:民主化代码、系统和知识。

大模型让我们更快编写更好、更高效的软件,并让小团队有机会与大公司竞争。这和 90 年代开源软件所做的事情一样。然而,这项技术太重要,绝不能只掌握在少数公司手中。

-- Antirez,Redis 项目的创始人

2、

即使你不相信 AI,但跳过它对你和你的职业都没有帮助。

以前,你熬夜编程,看到项目顺利运行时,心潮翻滚。现在,如果你能有效利用 AI,可以建造更多更好的项目。乐趣依旧存在,未受影响。

-- Antirez,Redis 项目的创始人

3、

如果你不写作,你就是一个有限状态机。写作时,你拥有图灵机的非凡力量。

-- 曼纽尔·布卢姆(Manuel Blum),图灵奖得主

4、

人们陷入困境有三个主要原因:(1)行动力不足,(2)行动方向错误,(3)等待天上掉馅饼(幻想问题会缓解而拒绝采取行动)。

-- 《当你想摆脱困境》

往年回顾

年终笔记四则(#334)

YouTube 有多少个视频?(#284)

AI 聊天有多强?(#234)

政府的存储需求有多大?(#184)

(完)

今年的 CES,中国硬件又一次成为主角。活跃在拉斯维加斯展台上的诸多出海产品,背后依托的是深圳的研发效率与供应链能力,而其智能化核心,则越来越多建立在以 Qwen 为代表的多模态、全尺寸的大模型基础上。

与沙漠赌城的 CES 同期,在深圳蛇口,阿里云也举办了一场智能硬件展。这场展会面向公众免费开放,选址于本地居民日常散步、观海和看展的滨海文化地标,却意外成为 AI 硬件从实验室走向真实市场的缩影。1000 余款智能硬件在这里集中亮相,其中超过 200 款与 CES 同款甚至首发。这里既有来自北京、杭州的创新团队,也有来自义乌、华强北等产业带的制造与渠道力量——他们对技术趋势的嗅觉,向来快过任何市场报告。

技术验证与市场反馈在同一空间同时发生。在这里你可以听到合作方直接询价“多少钱,做 OEM 吗,能做多少套”,也可以看到消费者直接下单,把 399 元的 AI 玩具带回家。许多普通家庭第一次在这里集中体验到能对话的毛绒玩具、教用户跳舞的镜子、能翻跟头的机器狗,和具备实时提醒能力的 AI 眼镜。

早在 2024 年云栖大会上,阿里云董事长吴泳铭就明确指出,未来 AI 最大的想象力会来自于物理世界:“我们不能只停留在移动互联网时代去看未来,深层次 AI 最大的想象力绝对不是在手机屏幕上做一两个超级 APP,而是接管数字世界,改变物理世界。”

但在这轮 AI 硬件浪潮中,阿里云没有选择去做终端硬件的制造者,而是以软硬一体的融合理念,向产业提供底层模型能力、云基础设施与生态支持。

数据显示,通义大模型的多模态能力已深度赋能超过 15 万家智能硬件厂商。

从雷鸟的 AI 眼镜、听力熊的儿童 AI Pin,到优必选机器人、趣丸科技的生成式 AI 吉他,这些走进全球家庭的产品背后,都能看到以通义为代表的阿里云基础设施的支撑。而它们从概念到量产、从深圳到世界的惊人速度,也再次印证了深圳这座“硬件硅谷”在研发、供应链与商业化效率上的独特优势。

For everyone, by everyone 的 AI 硬件

逛完阿里云通义智能硬件展,一个强烈的感受是,这是我经历过为数不多,能让普通人玩得开心、让创业者看到机会、让厂商验证商业模式,同时清晰传递主办方战略意图的展会。

阿里云租下深圳海上世界文化艺术中心三层空间,用一种近乎“生活化”的方式,向公众展示:AI 能长在玩具里、眼镜上、健身镜中,甚至成为家庭一员的日常存在。向企业展示:你能快速依托阿里云的生态,快速做出能进入全球家庭的产品。

展会围绕两条主线展开:一是呈现阿里云的底层能力,二是展示其赋能下的千款智能硬件成果。

一楼以“智能中枢”为核心,展示通义大模型的能力:观众上传一张照片,就能生成一段短视频;走过一段互动迷宫,便能直观感受多模态 AI 如何理解图像、语音和动作。

智能中枢周围环绕着“创造有 AI”“生活有 AI”“AI 实训营”等主题区,OPPO、理想、影石等品牌在此展示手机、智能座舱和 AI 影像设备,而像趣丸科技的 AI 吉他、Looki 这样的新奇产品,则让人看到 AI 如何重塑音乐、娱乐等日常互动。

趣丸科技与阿里云合作推出的全球首款生成式 AI 吉他 TemPolor Melo-D,在通义大模型的支持下,重新定义了人与音乐的交互方式,提供了个性化的 AI 音乐创作体验。

三楼聚焦陪伴、健康与安防,专设义乌厂商展区;四楼覆盖家居、教育、健身等提效场景,华强北的硬件老板们也把“一米柜台”搬到了现场。

通义联合听力熊为青少年定制随身 AI 对话智能体,打造国内首款儿童 “AI Pin” Mooni M1,提供多种角色选择。经过通义千问大模型加持,用户的 AI 使用时长提升 40 分钟。

阿里云想让大家知道,AI 有能力在所有场景里带来更好的体验。它同时也呈现出一种可能——不管是软件应用还是硬件产品,每个人都可以在这个时代搭建些什么。

阿里云 AI 实训营的 Agent 硬件搭建小课堂

对于普通人来说,硬件展是一个游戏体验。孩子和 AI 毛绒玩具对话,年轻人跟着镜子学舞,有人让 AI 解读运势、推荐香水,还有中学生在阿里云 AI 实训营中搭建了自己的第一个交互硬件。我们这代人仍然处于有“AI 硬件”概念的时期,而对于下一代人来说,可能已经不存在“AI 硬件”。当生活总所有一切都有 AI,AI 之于人,阿里云之于硬件和应用产品,就是水之于人的存在。

对创业者和企业主而言,展会成了高效的信息源。有用户的直接提问和反馈,也有工程师在展位前递上简历。采购顾问带着非洲、拉美的客户穿梭其间,现场询价、谈订单。

TCL、影石、安克创新的案例,更是为想要入局 AI 硬件和出海的企业打气——依托阿里云全球全栈 AI 基础设施,大型制造企业可实现研发、服务、出海一体化,新锐品牌也能快速站稳全球舞台。

刚在 CES 获得 Best of Innovation 奖项的影石,依托 Qwen-VL 实现视频与图片的分类打标和场景识别,结合 Qwen-Plus 生成剪辑脚本,赋能全球百万视频创作者。

安克创新依托阿里云“全球一张网”,实现跨境资源调度与合规部署,核心系统互访提速 30%,并将 Qwen 与 Wan 深度融入语音助手、多模态交互等产品功能。

TCL 则基于通义大模型打造了半导体显示专家系统 X-Intelligence,支撑其全球研发体系。

同时,阿里云把义乌、华强市场这些产品背后的“制造和分发网络”呈现在大家面前。在他们的摊位上,你可以看到很多产品尽管“粗糙”,却仍然有市场。在很多欠发达国家,AI 硬件需要的不是精致,而是先以成本最低的方法被用上。很多义乌玩具、小 3C 产品的批发商,嗅到 AI 风潮后,已经在深圳有了自己的硬件工厂。华强科技生态园等孵化器,也开始重点招募 AI 硬件的创业公司。

正如阿里云智能集团通义大模型业务总经理徐栋所说:“这样一个平台(以通义多模态交互开发套件为代表的 AI 硬件赋能平台)是我们非常重要的业务的选择,我们需要更多贴近阿里云的智能硬件开发伙伴。很多场景是碎片化的,只有做更贴近实际的生产环节、消费环节,每个人对 AI 硬件的体验才能更深。

AI 硬件,正在成为 for everyone, by everyone 的日常现实。而阿里云的角色,不是站在台前造产品,而是站在幕后,让创新更快实现。

阿里云,在 AI 硬件变革前夜

AI 硬件从极客圈层走向大众日常,标志着市场已从“启蒙期”进入“挑剔期”。当用户开始为 AI 服务付费、并将设备融入日常生活,产品的成败就不再取决于功能数量,而在于能否持续兑现可感知的价值——这要求厂商必须拥有一套覆盖模型、工程、服务与生态的系统性能力。

AI 硬件,特别是在消费级市场,正经历着一场根本性的转型。从传统的联网设备到如今的“端侧智能体”,AI 不再只是硬件的附加功能,而是直接决定产品核心价值的引擎。这一转变的核心标志在于:AI 不再作为附加功能嵌入硬件,而是成为产品定义、体验构建与价值交付的底层引擎。

早期智能硬件以“连接+控制”为基本范式,其智能化主要体现在远程操作与数据回传;而新一代 AI 硬件则要求设备具备持续感知、上下文理解、自主决策与协同执行的能力,成为一个能在真实场景中与用户形成闭环互动的“智能体”。

这一转变正在重塑硬件的设计逻辑、用户的价值预期与厂商的技术路径。

用对 AI 硬件的认知早已超越“新奇感”,转而关注端到端体验是否流畅、可靠、有用。更重要的是,用户开始愿意为持续服务付费。例如按月订阅儿童 AI 陪伴内容,或为高级健身指导功能续费。这催生了“硬件+服务”的新商业模式,但也带来新挑战,如果 AI 不能提供可感知的显性价值,订阅就难以为继。

技术架构也随之重构。端云协同的逻辑发生了变化。之前的端云协同更多指向算力分工,即端上承载不了的算力放在云上,但现在的端云协同是指能力互补。安全、延时、功耗的问题必须在端上解决,而生态打通这些能力可能在云上做。同时,交互方式正走向“无感化”——不是让用户察觉不到 AI 存在,而是让使用门槛足够低,无需学习就能自然融入原有生活节奏。

然而,对大多数硬件厂商而言,这场转型并不轻松。模型迭代速度远超硬件研发周期,而一个产品往往需要组合多个模型才能实现完整功能,集成复杂度陡增。与此同时,Agent 架构、工具链和工程平台快速演进,传统硬件团队难以跟上软件层的节奏。更棘手的是,许多厂商擅长制造和渠道,却缺乏用户运营、数据闭环和订阅服务能力,难以构建可持续的商业模型。

面对这些系统性挑战,阿里云提供了 AI 硬件的全链路支持体系。

在基础设施层面,阿里云面向 AI 应用场景全面升级计算、存储与网络能力,为高并发、低延迟的智能硬件业务提供稳定底座。

在模型层面,通义大模型家族(包括 Qwen3、Qwen-VL、QwQ 等)全面开源,并提供闭源高阶版本,同时接入第三方优质模型,帮助厂商一站式、低成本调用全球先进 AI 能力。针对多模态交互场景,阿里云还推出专有优化模型,降低端到端语音和视频交互时延。

阿里云的模型能力,已经获得顶尖手机、汽车、具身智能、智能配件品牌的认可和验证:

  • 目前,全球 Top 10 手机厂商已都在使用阿里云的大模型能力。例如,OPPO 利用阿里云人工智能平台 PAI 对 Qwen 开源模型进行后训练,以支持其 AI 多场景应用;荣耀则联合阿里云百炼打造 VQA 端到端方案,图片细分场景识别率提升近 40%,延迟降低 30%。荣耀 Magic V5 接入飞猪旅行、高德地图两个垂直 Agent 两个月即斩获百万级用户好评。基于“模型+工程+生态”三位一体的战略,阿里云正持续加速手机行业的 AI 功能创新与规模化落地。

  • 理想汽车基于阿里云 MindGPT 大模型,整合高德、飞猪、支付宝等生态,实现全球首个“车机 AI 扫码支付”;

  • 雷鸟创新联合阿里云推出行业首个面向智能眼镜的 AI 大模型,意图识别准确率达 98%,搭载该模型的雷鸟眼镜出货量领跑 AR 行业。

    • 优必选的萌 UU 陪伴机器人,搭载通义千问与自研情感智能体“点灵”,且具有长期记忆

    特别值得注意的是,阿里云此次还推出了全模态智能交互开发套件,将上述能力封装为标准化工具。该套件适配 30 多款主流 ARM、RISC-V 和 MIPS 架构芯片,覆盖市面上绝大多数终端设备。未来,通义大模型还将与玄铁 RISC-V 实现软硬全链路协同优化,进一步提升在国产芯片上的部署效率与推理性能。

    这套开发套件不仅提供基础能力,还预置十余款 MCP 工具和 Agent,覆盖生活、工作、娱乐、教育等高频场景。例如,基于出行规划 Agent,用户可直接调用路线规划、旅行攻略、本地探索等功能。同时,套件深度集成阿里云百炼平台生态,支持开发者添加社区模板,或通过 A2A 协议兼容第三方 Agent,极大扩展了应用边界。

    无论是 OPPO、理想这样的品牌厂商,还是华强北的创客、义乌的出海团队,甚至“一人公司”,都能借助阿里云的解决方案快速验证想法、打造产品,并参与全球竞争。

    正是阿里云“基础设施先行”的思路,让展会上那些看似天马行空的产品,得以从概念走向量产。

    有趣的是,阿里云大模型能力的升级节奏,与 AI 硬件的集中爆发高度同步。

    2023 年 8 月,阿里云开源 Qwen-VL 视觉语言模型,首次让中小厂商能免费调用工业级多模态能力;2024 年,Qwen-Audio、Qwen2-VL 等模型集中发布,补齐了语音、图像与文本融合交互的关键拼图;到 2025 年初,原生端到端的 Qwen3-Omni 模型的发布,以及 Qwen-Agent,进一步支持硬件端构建任务型智能体。这一连串技术释放,恰好为 AI 硬件创新提供了可落地的底层支撑。

    从 2024 年下半年起,阅读器、眼镜、耳机、学习机等细分品类迎来 AI 功能的规模化落地:文石、闪极、AIxFU、听力熊、云希谷等能纷纷接入阿里云大模型能力。

    这些产品的共同点,是都受益于通义的“全谱系开源”策略——0.5B 到 480B 的模型全覆盖,文本、语音、视觉、视频能力一应俱全。无论是大型企业,还是华强北的硬件作坊,都能找到适合自己的解决方案。

    正是这种低成本接入到快速验证的正向循环,让 AI 硬件从概念走向规模化落地。阿里云没有造 AI 硬件产品,却通过持续开源和能力迭代,成为这场硬件浪潮背后最坚实的推手。