2026年3月

IT探险家 ·Java 官方教程深度解读

Java 入门需要掌握的核心知识点不多,但必须准确。本文用最精炼的方式把关键概念讲清楚,适合快速建立认知框架。


一、Java 技术全景速查

维度要点
本质编程语言 + 软件平台(语言和运行环境的组合)
编译产物字节码(Bytecode),存储在 .class 文件中
执行方式JVM 解释执行 + JIT 即时编译(混合型)
跨平台原理字节码平台无关,各平台的 JVM 负责翻译为本机指令
核心口号Write Once, Run Anywhere
语言特性面向对象、强类型、自动内存管理(GC)、多线程内置支持

二、编译运行流程

源文件(.java) → javac编译 → 字节码(.class) → java启动JVM → 执行

对应命令:

# 编译
javac HelloWorld.java

# 运行(注意:不带 .class 后缀)
java HelloWorld

关键细节

问题答案
.class 文件是机器码吗?不是,是 JVM 的指令集(字节码)
字节码能跨平台吗?能,同一个 .class 可在任何 JVM 上运行
JVM 跨平台吗?不跨,每个 OS 需要对应版本的 JVM
Java 11+ 可以直接 java xxx.java 吗?可以,但仅限单文件,底层仍会编译

三、JDK / JRE / JVM 三者关系

┌─────────────────────────────────────────┐
│  JDK (Java Development Kit)              │
│  ┌───────────────────────────────────┐   │
│  │  JRE (Java Runtime Environment)   │   │
│  │  ┌─────────────────────────────┐  │   │
│  │  │  JVM (Java Virtual Machine) │  │   │
│  │  └─────────────────────────────┘  │   │
│  │  + 核心类库 (rt.jar 等)           │   │
│  └───────────────────────────────────┘   │
│  + 开发工具 (javac, jdb, javadoc 等)     │
└─────────────────────────────────────────┘
组件包含内容适用场景
JVM字节码执行引擎所有 Java 程序运行的基础
JREJVM + 核心类库只运行 Java 程序,不开发
JDKJRE + 编译器等开发工具开发 Java 程序(开发者必装)
注意:Java 11 起,Oracle 不再单独发布 JRE,JDK 即包含全部内容。

四、Java 平台两大组件

组件一:JVM

JVM 是 Java 平台的基础。它的核心价值是屏蔽操作系统差异——同一份字节码在 Windows、Linux、macOS 上的 JVM 中都能运行。

现代 JVM(如 HotSpot)还会在运行时做优化:识别热点代码,通过 JIT 编译器将其编译为本机码,性能接近 C/C++。

组件二:Java API

API 是一套庞大的现成类库,按功能分组为包(Package)。涵盖范围:

领域代表性 API
基础数据结构java.util(List, Map, Set)
I/O 操作java.io, java.nio
网络通信java.net
并发编程java.util.concurrent
数据库访问java.sql(JDBC)

开发者不需要从零造轮子,大部分常见功能 API 里都有现成实现。


五、与其他语言的编译方式对比

特性C/C++(编译型)Python(解释型)Java(混合型)
编译产物本机二进制无(逐行执行)字节码 .class
跨平台需重新编译天然跨平台一次编译到处运行
运行速度最快较慢接近本机(JIT 优化后)
启动速度较慢(JVM 启动开销)

六、版本选择指南

Java 从 Java 10 起每 6 个月发布一个新版本,但只有 LTS 版本适合生产环境:

LTS 版本线:8 → 11 → 17 → 21 → 25(即将发布)
场景推荐版本
新项目启动Java 21(当前最新 LTS)
维护老项目跟随项目原有版本(通常 Java 8 或 11)
个人学习Java 21

七、验证你的环境

一段代码验证 JDK 是否安装正确:

public class EnvCheck {
    public static void main(String[] args) {
        System.out.println("Java 版本: " + System.getProperty("java.version"));   // 输出: Java 版本: (如 21.0.x)
        System.out.println("操作系统: " + System.getProperty("os.name"));          // 输出: 操作系统: (你的系统名)
        System.out.println("系统架构: " + System.getProperty("os.arch"));          // 输出: 系统架构: (如 amd64)
        System.out.println("JVM 名称: " + System.getProperty("java.vm.name"));    // 输出: JVM 名称: (如 OpenJDK 64-Bit Server VM)
    }
}

编译运行:

javac EnvCheck.java && java EnvCheck

如果能正常输出版本信息,说明你的 Java 开发环境已经就绪。


八、Java 9+ 实用新特性速览

版本特性说明
Java 9JShell交互式 REPL,命令行输入 jshell 即可逐行执行 Java 代码
Java 11单文件直接运行java Hello.java 省去手动 javac 步骤
Java 11HTTP Client标准库内置 HTTP 客户端,替代 HttpURLConnection
Java 17sealed class限制类的继承层次
Java 21虚拟线程轻量级线程,大幅降低高并发编程复杂度

这些特性在入门阶段了解即可,后续深入学习时会逐一掌握。


关注公众号「IT探险家」,回复「Java入门」获取完整可运行代码和速查手册。深度面试解析和源码分析,尽在 知识星球IT探险家·进阶圈

笔者最近在开发一个产业研究分析的 DeepResearch 智能体,正好看到最近 OpenBMB 开源社区刚刚发布了一款仅 4B 参数的智能体大模型 AgentCPM-Explore 和 8B 参数的 Deep Research 模型 AgentCPM-Report

今天就以这两个小参数开源模型为例,完整记录一下在 AI Max 395 上从模型部署到调用的全流程,也算是给大家提供一个本地算力有限的条件下实现联网搜索问答以及 Deep Research 两个业务场景本地实现的技术方案

AgentCPM-Explore

AgentCPM-Explore 的亮点包括:

  • 首个以 4B 全量参数登上 GAIA、HLE、BrowseComp 等 8 个长程复杂智能体任务榜单的端侧智能体模型。
  • 可实现超过 100 轮的连续环境交互,支持多源信息交叉验证、搜索策略动态调整、实时核验最新信息,持续深度探索直至任务完成。
  • 全流程开源,包括智能体全异步强化学习训练框架 AgentRL、工具沙盒统一管理调度平台 AgentDock、智能体工具学习能力一键测评平台 AgentToLeaP,支持社区共建与自定义扩展。
  • 在 Xbench-DeepResearch 上 AgentCPM-Explore 的表现超越了 OpenAI-o3,Claude-4.5-Sonnet 等闭源大模型,显著超越了不同量级 SOTA 模型的表现趋势线,展现出了更高的能力密度。

img

AgentCPM-Report

OpenBMB 开源社区发布了一款 8B 参数大小的 Deep Research 场景专业模型。实现了比肩顶级闭源系统的报告写作能力。 在 DeepResearch Bench、Deep Consult 以及 DeepResearch Gym 三大主流深度调研评测基准中,AgentCPM-Report 展现了惊人的越级战斗力,综合评分达到甚至超越顶级闭源系统。在最考验深度的洞察性指标上,AgentCPM-Report 力压群雄,排名第一;而在全面性指标上,也仅次于基于 Claude 的复杂写作框架,位居第一梯队。

img

AI Max+ 395

正好我手上最近刚刚入手了搭载了在 2025 年 CES 上 AMD 发布的最新的 AI Max+ 395(代号 Strix Halo)的旗舰级处理器的 mini 主机 GTR9 Pro。

AI Max+ 395是基于 RDNA 3.5 架构打造的 AMD Radeon 8060S 集成显卡。40 个计算单元,显存带宽高达 256GB/s,性能媲美移动版 RTX 4060 独显。

零刻 GTR9 Pro 搭载了频率高达 8000MT/s 的 128GB LPDDR5X 内存,以及出厂标配 2T 容量的固态硬盘。因为 AI Max+ 395 是统一内存架构(致敬 Apple 的 M 系列芯片?),可以在 BIOS 中将 128G 内存中的 96G 分配给显存。

这么大的显存无疑最适合用来本地跑 AI 项目,那么本篇教程就将向各位介绍如何使用 AI Max 395 在本地运行 AgentCPM + DeepResearch 智能体项目

img

img

安装驱动和 ROCm

如果你是刚刚拿到的新机,建议直接放弃 Windows 系统,改用 Ubuntu 系统。因为目前要运行一些 AI 组件依赖,还是 Linux 系统编译安装更为友好,如果实在需要 Windows 系统,那么也建议在 WSL 环境下部署 AI 项目。

首先第一步,我们需要去官网下载驱动:
https://www.amd.com/zh-cn/support/downloads/drivers.html/proc...

如图所示,官网目前提供 Win11,Win10 和 Ubuntu 三个系统版本:

img

我手上这台零刻 AI Max 395 从入手后就直接重置系统删除了自带的 Win11,改成 Ubuntu 24.04 了。因此本篇文章完全是基于 Ubuntu 24.04 来实现的。

根据 AMD 官网的介绍,在使用 Ubuntu 内核 6.12.0-1018 在 AMD Ryzen AI Max 395 系列处理器(gfx1151)上运行 LLM 推理工作负载时,可能会观察到间歇性应用程序崩溃或脚本失败,因此为了避免此类情况出现,我们第一步需要先升级 Linux 内核版本,直接在终端中输入升级命令:

sudo apt update && sudo apt install linux-image-6.14.0-1017-oem

安装完成后,重启系统并启动到 6.14 OEM 内核:

uname -r

然后开始更新系统:

sudo apt upgrade -y

接下来开始下载并安装 amdgpu-install 运行脚本:

sudo apt update
wget https://repo.radeon.com/amdgpu-install/7.1.1/ubuntu/noble/amdgpu-install_7.1.1.70101-1_all.deb
sudo apt install ./amdgpu-install_7.1.1.70101-1_all.deb

运行以下命令来安装 ROCm:

amdgpu-install -y --usecase=rocm --no-dkms

安装完成后设置权限组:

groups

使用下面命令将用户添加到渲染和视频权限组:

sudo usermod -a -G render,video $LOGNAME

添加完成后重启系统:

sudo reboot

重启之后,我们来验证是否安装成功:

groups

输出结果: magicyang adm cdrom sudo dip video plugdev users lpadmin docker render

执行命令验证:

rocminfo

img

类似 NVIDIA 的 nvidia-smi 命令,AMD 的 GPU 可以使用如下命令来监控显卡运行状态:

rocm-smi

img

显存扩容

AI Max 395 分配显存大小有 2 种方案,最简单的方式是通过开机 BIOS 分配显存大小。另外一种则是通过修改 GTT 内存池参数大小。首先来看第一种:

通过 BIOS 进行分配

对于支持该处理器的设备(如 Framework 或特定 AI 工作站),步骤如下:

  • 进入 BIOS:开机时反复按 F2Delete 键进入。
  • 进入高级菜单:使用方向键选择 AdvancedAMD CBS
  • 找到显存配置:路径通常为 iGPU Memory ConfigurationGFX Configuration -> UMA Frame buffer Size
  • 设置数值

    • 将配置模式设为 Custom(自定义)。
    • iGPU Memory Size 中选择所需的显存大小。AI Max+ 395 配合 128GB 内存时,BIOS 通常允许分配最高 96GB 作为固定显存。

通过修改内核参数进行分配

实际上 AMD APU 的 GPU 并没有“固定显存”(CPU + GPU + NPU 被封装在同一个 SOC 上),本质上用的是系统内存 (UMA) 。GPU 显存其实就是系统内存的一部分。因此只要有足够的系统内存(例如 128GB、192GB), 理论上就可以让 GPU 直接用到非常大的“显存”。

而 Linux 上的 AMD GPU 驱动支持 GTT(Graphics Translation Table)内存池,这个扩显存的操作其实就是在扩大 GTT 池,而不是 VRAM。GPU 通过 IOMMU /内存映射直接访问系统 RAM 就像把系统内存当作“显存”使用。

因此除了 BIOS 设置外,还可以通过修改内核参数(如 amdttm.pages_limit)来实现超过 96GB 的极端分配(如 100GB+),需要需要通过 GRUB 命令行工具(如 grubby)进行配置。

sudo nano /etc/default/grub

找到 GRUB_CMDLINE_LINUX_DEFAULT 这一行,改成:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash ttm.pages_limit=27648000 ttm.page_pool_size=27648000 amdttm.pages_limit=27648000 amdttm.page_pool_size=27648000 apparmor=0  amd_iommu=off"

img

这里通过修改内核参数可分配的显存大小不要超过 108G,根据 Jeff Geerling 测试的结果,目前 Linux 内核对 AMD 的兼容性并没有特别好,目前分配大小建议按照 27648000 来设置即可,不宜放得过大。

修改完成后 Ctrl+O 保存,并重启系统:

sudo update-grub
sudo grub-install
sudo reboot

重启后先执行以下命令检查,确认是否生效:

cat /proc/cmdline

设置共享内存大小(可选)

ROCm 使用共享系统内存池,默认配置为系统内存的一半。可以通过更改内核的转换表管理器(TTM)页面设置来增加此数量

安装 pipx

sudo apt install pipx

pipx 安装的 wheels 路径添加到系统搜索路径中:

pipx ensurepath

从 PyPi 安装 amd-debug-tools

pipx install amd-debug-tools

运行 amd-ttm 工具查询当前共享内存设置:

amd-ttm

img

使用 --set 参数重新配置共享内存设置(单位为 GB):

amd-ttm --set 16
注意:这里要共享的内存需要根据你分配给显存之后剩余的内存大小来设置。

重启系统以使更改生效:

sudo reboot

部署 GPUStack

GPUStack 是一个开源的 GPU 集群管理器,专为高效的 AI 模型部署而设计。它通过选择最佳推理引擎、调度 GPU 资源、分析模型架构以及自动配置部署参数,能够在自己的 GPU 硬件上高效运行大模型。

img

GPUStack 内置支持的后端推理引擎包括:

  • vLLM
  • SGLang
  • MindIE
  • VoxBox

并且可以通过添加自定义推理引擎的方式增加对 llama.cpp 的支持。

安装 Toolkit 和 Docker

  1. 在安装之前需要确保至少配备一个 AMD AI Max 395 GPU 节点。
  2. 确保工作节点上安装了 ROCm 驱动程序、Docker 和 AMD Container Toolkit 容器工具。

其中 Docker 版本 ≥ 28.3.0,Docker 的安装方法,请自行查阅教程,这里只给出 AMD Container Toolkit 的安装教程。

首先更新系统:

sudo apt update

添加当前用户到所需的 GPU 设备访问组:

sudo usermod -a -G render,video $LOGNAME

安装所需依赖项:

sudo apt update
sudo apt install vim wget nano gpg

创建密钥目录:

sudo mkdir --parents --mode=0755 /etc/apt/keyrings

安装 GPG 密钥和仓库链接:

wget https://repo.radeon.com/rocm/rocm.gpg.key -O - | gpg --dearmor | sudo tee /etc/apt/keyrings/rocm.gpg > /dev/null

添加 AMD Container Toolkit 仓库:

  • Ubuntu 22.04:
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/rocm.gpg] https://repo.radeon.com/amd-container-toolkit/apt/ jammy main" | sudo tee /etc/apt/sources.list.d/amd-container-toolkit.list
  • Ubuntu 24.04:
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/rocm.gpg] https://repo.radeon.com/amd-container-toolkit/apt/ noble main" | sudo tee /etc/apt/sources.list.d/amd-container-toolkit.list

更新软件包索引并安装工具包:

sudo apt update

安装 Toolkit:

sudo apt install amd-container-toolkit

注册 AMD 容器运行时并重启 Docker 守护进程:

sudo amd-ctk runtime configure
sudo systemctl restart docker

安装 GPUStack

使用 Docker 安装并启动 GPUStack Server 的命令如下:

sudo docker run -d --name gpustack \
    --restart unless-stopped \
    -p 80:80 \
    --volume gpustack-data:/var/lib/gpustack \
    gpustack/gpustack
注意:如果你想把 GPUStack 部署到其他端口(默认为 80 端口)可以修改为 xx:80,xx 即为你想部署的端口号

检查 GPUStack 启动日志:

sudo docker logs -f gpustack

GPUStack 启动后,运行以下命令获取默认管理员密码:

sudo docker exec gpustack cat /var/lib/gpustack/initial_admin_password

在浏览器中打开 http://your_host_ip 访问 GPUStack UI。使用默认用户名 admin 和上面获取的密码登录,登录完成后需要修改登录密码。

img

登录后还需要添加集群和节点信息,在集群管理页面点击集群,选择添加集群。自建环境选择 Docker:

img

基本配置页面填写一个集群名称,然后保存:

img

在添加节点页面的 GPU 厂商中选择 AMD,然后点击下一步:

img

在这个页面会给出一个环境检查的命令,这里主要是需要检查前面已经安装好的 ROCm 驱动和 Docker 还有 AMD Container Toolkit:

img

在终端中输入提示中的命令:

amd-smi static >/dev/null 2>&1 && echo "AMD driver OK" || (echo "AMD driver issue"; exit 1) && sudo docker info 2>/dev/null | grep -q "amd" && echo "AMD Container Toolkit OK" || (echo "AMD Container Toolkit not configured"; exit 1)

正常情况会输出两个 OK,如果没有,请检查 ROCm,Docker 和 amd-container-toolkit 是否成功安装。

img

然后在节点 IP 中输入本机的局域网 IP 地址:

img

然后点击完成。会出现添加节点的命令:

img

复制该命令,在终端中运行,后台会自动拉取 Docker 镜像,启动一个名为 gpustack-worker 的容器。

如果容器启动成功没有报错,回到资源下的 GPUs 页面,就可以看到 AI Max 395 被 GPUStack 成功识别了。

img

部署 AgentCMP-Explore 模型 API 服务

GPU 被成功识别之后,点击模型下面的部署,点击部署模型:

img

在部署模型下拉选框中选择 ModelScope:

img

在搜索框中输入 AgentCPM,选择第一个 AgentCPM-Explore:

img

在右侧弹出的配置信息中后端选择 vLLM,版本选择 0.13.0:

img

然后在高级中,添加两个参数:

img

其中:

--gpu-memory-utilization=0.6 是分配给 AgentCPM-Explore 这个模型 60% 显存资源,大概为60G。

--max-model-len=262144 是设置的模型最大上下文长度,我这里设置了 256k 的最大上下文,如果你不需要这么大的上下文,可以调整这个大小,这样可以显著节省显存开销。

设置完成后点击保存,后台会自动从 ModelScope 拉取模型权重,并且拉取 vLLM 的镜像,用于启动模型。这个过程会比较漫长,需要静静等待,启动时可以打开查看日志按钮来查看启动情况:

img

当日志出现如下接口信息时,代表模型已经启动成功了:

img

当模型完全启动成功之后显示 Running 时,代表模型 API 服务启动成功了!

img

那我们要如何获取接入 AgentCPM 的 API Key ,URL 和模型名称等信息呢?点击右侧的三个点会出现 API 接入信息:

img

在这里会显示接入模型 API 需要填写的参数信息,包括 URL 地址,模型名称:

img

最后我们还需要创建一个 API Key 进行认证,以防止别人盗用模型接口,按照提示点击去创建:

img

然后在 API 密钥添加页面添加一个 API Key 即可:

img

这样我们的模型部署就全部完成了。

使用 AgentCPM-Explore 进行联网搜索任务

在 Cherry Studio 客户端中,在模型服务中找到 GPUStack,然后将刚刚部署好的模型接口信息填入。

img

添加完成之后可以点击检测,如果通过会显示一个✅,这就代表模型接入成功了。

然后回到助手页面,就可以实现问答了:

img

我这里之前有配置了一个投资分析助手的提示词,通过 Cherry Studio 的 Google 搜索插件,就可以实现用 AgentCPM-Explore 结合 Google 搜索,完成类似 DeepResearch 的联网搜索问答任务。

这里只是测试了 Agent 调用搜索引擎的能力,如果要实现完整的 DeepResearch 功能,建议使用 AgentCPM-Report 通过接入开源的 Deep Research 框架项目即可。

从测试的 case 可以看到 AI Max 395 的 AgentCPM-Explore 吞吐速度为首 token prefill 867ms,生成速度大概为 18 tks/s,这个速度对于单用户本群请求完全够用了,以上就是全部内容了。

使用 AgentCPM-Report 进行 DeepResearch 任务

AgentCPM-Report 核心亮点

  • 极致效能,以小博大:通过平均 40 轮的深度检索与近 100 轮的思维链推演,实现对信息的全方位挖掘与重组,让端侧模型也能产出逻辑严密、洞察深刻的万字长文,在深度调研任务上以 8B 参数规模达成与顶级闭源系统的性能对标
  • 物理隔绝,本地安全:专为高隐私场景设计,支持完全离线的本地化敏捷部署,彻底杜绝云端泄密风险。基于我们的 UltraRAG 框架,它能高效挂载并理解本地私有知识库,让核心机密数据在“不出域”的前提下,安全地转化为极具价值的专业决策报告。

接下来我们先在 AI Max 395 上实现用 llama.cpp 来部署 AgentCPM-Report 模型服务。

部署 AgentCPM-Report 模型 API 服务

目前 OpenBMB 开源了 2 个格式的 AgentCPM-Report 模型,一个是标准的 safetensors 格式模型,推理框架可以选择使用 vLLM 进行推理,部署方式和上文中的 AgentCPM-Explore 模型相同,这里不再重复。

另外一个则是 GGUF 格式的模型,这种格式适合在 GPU 资源受限的情况下,使用 CPU+GPU 一起进行推理,特别适合类似 AI Max 395 这种统一内存架构的核显 mini 主机设备。

和 AgentCPM-Explore 部署方式类似,我们仍然选择使用 GPUStack 来完成 AgentCPM-Report 模型服务的部署,和前面的差别是 GGUF 格式需要使用 llama.cpp 的后端推理框架。

因为目前最新的 2.0.3 版本的 GPUStack 已经不再默认内置 llama.cpp,因此我们需要通过配置自定义后端推理框架的方式来实现 llama.cpp 后端的支持。

添加和使用推理后端的操作步骤如下:

如下图所示在推理后端页面,选择添加后端:

img

在添加后端页面选择 YAML 模式。示例:

img

使用如下 YAML 配置文件信息替换为如下代码:

backend_name: llama.cpp-custom
version_configs:
  v1:
    image_name: ghcr.io/ggml-org/llama.cpp:server-vulkan
    run_command: null
    entrypoint: null
    custom_framework: rocm
default_version: v1
default_backend_param: []
default_run_command: '-m {{model_path}} --host 0.0.0.0 --port {{port}}'
default_entrypoint: ''
is_built_in: false
description: null
health_check_path: null
built_in_version_configs: {}
framework_index_map:
  rocm:
    - v1

然后保存,接着在部署页面输入 agentcpm-report,找到 GGUF 格式的模型,然后在后端中选择用户定义分类下的 llama.cpp ,然后部署。

img

然后在高级中配置环境变量与命令行启动参数,详细的环境变量与命令行参数信息可以参考下表:

核心环境变量一览表

环境变量对应参数默认值描述
LLAMA_ARG_THREADS-t, --threads-1生成线程数
LLAMA_ARG_CTX_SIZE-c, --ctx-size4096上下文大小
LLAMA_ARG_N_PREDICT-n, --n-predict-1预测token数
LLAMA_ARG_N_GPU_LAYERS-ngl, --n-gpu-layers0GPU层数
LLAMA_ARG_MODEL-m, --model-模型路径
HF_TOKEN-hft, --hf-token-HuggingFace令牌

配置参数系统化分类

性能调优参数

# CPU配置
LLAMA_ARG_THREADS=8        # 使用 8 个线程
LLAMA_ARG_THREADS_BATCH=4  # 批处理线程数

# 内存管理
LLAMA_ARG_MLOCK=1          # 锁定模型在内存中
LLAMA_ARG_NO_MMAP=0        # 启用内存映射

# GPU卸载
LLAMA_ARG_N_GPU_LAYERS=24  # 24 层卸载到 GPU
LLAMA_ARG_SPLIT_MODE=layer # 分层拆分模式

模型加载参数

# 本地模型加载
LLAMA_ARG_MODEL="/path/to/model.gguf"

# 远程模型下载
LLAMA_ARG_HF_REPO="ggml-org/gemma-3-1b-it-GGUF"
HF_TOKEN="your_hf_token_here"

# 多模态支持
LLAMA_ARG_MMPROJ="/path/to/mmproj.bin"

生成控制参数

# 上下文管理
LLAMA_ARG_CTX_SIZE=8192    # 8K 上下文
LLAMA_ARG_KEEP=512         # 保留 512 个初始 token

# 生成限制
LLAMA_ARG_N_PREDICT=256    # 最大生成 256 token
LLAMA_ARG_TEMP=0.7         # 温度 0.7

# 重复控制
LLAMA_ARG_REPEAT_PENALTY=1.1
LLAMA_ARG_REPEAT_LAST_N=64

介绍完以上参数含义后,根据 AI Max 395 的性能,这里推荐的环境变量参数为:

LLAMA_ARG_THREADS=16
LLAMA_ARG_CTX_SIZE=65536
LLAMA_ARG_N_PREDICT=512
LLAMA_ARG_TEMP=0.1
LLAMA_ARG_MLOCK=1

在 GPUStack 中环境变量和命令行启动参数配置方法,如下图所示:

img

需要注意的是 --ctx-size 65536 这个参数我设置为 64K,也是 AgentCPM-Report 支持的最大上下文长度,实际的参数可以根据你的实际需要来灵活调整。保存完成后,模型后台会自动下载模型文件并启动 API 服务,当出现绿色 Running 图标时,则代表模型启动成功了。

img

部署完成后,就可以将 agentcpm-report 接入到任意的 Deep Research 框架下了。以下为我接入 Dify 构建的 Deep Research 框架测试的效果,后续大家觉得有必要的话欢迎留言,我会更新接入 mirothinker 的效果测试:

img

img

img

加入 GPUStack 社区

GPUStack 社区是一个围绕 AI 基础设施与大模型推理实践展开的技术交流空间。

在这里,你可以看到真实环境下的 AI Infra 与大模型推理的部署经验、问题排查过程,以及围绕推理引擎、算力管理和系统架构的持续讨论。

无论你正处于模型基础设施的评估、试用还是规模化部署阶段,都可以在社区中找到有参考价值的信息。

欢迎扫码加入 GPUStack 社区,与更多关注 AI Infra 与大模型推理实践的伙伴一起交流、学习与分享

社区群二维码

若群聊已满或二维码失效,请访问以下页面查看最新群二维码:
https://github.com/gpustack/gpustack/blob/main/docs/assets/wechat-group-qrcode.jpg

如题,Grok 救我狗命,我得重新苹果 Grok 搜索能力的优势了。

问题归根到底应该就是 Info.plist 没有在修改 appLink 之后自动更新,导致匹配不上。解决方案是清理掉原来的自动生成内容,重新运行 ios init。估计不止这种问题,tauri + iOS 本来能正常跑,改了配置突然运行不了的情况,都可以尝试一下重新 init。这里还有点感悟,一旦出了舒适区,即使有 AI 也要花费不少时间解决这些问题,如果是熟练的 iOS 开发者应该一早就感应到这种问题了吧

1. “appLink”: false 的正确含义和用法

  • appLink: false(或省略) = 自定义 URI Scheme(如 myapp://xxx),不需要服务器、不需要 .well-known 文件。
  • 插件会在构建时自动往 Info.plist 里写入 CFBundleURLTypes
  • appLink: true(默认) = Universal Link / App Link(https + host),需要苹果验证文件。

正确配置(tauri.conf.json)

{
  "plugins": {
    "deep-link": {
      "mobile": [
        {
          "scheme": ["myapp"],        // ← 必须有这个,数组形式,方案名建议全小写
          "appLink": false            // 自定义 scheme 必须显式 false 或省略
        }
        // 如果你还想同时支持 Universal Link,可以再加一个对象
        // {
        //   "host": "yourdomain.com",
        //   "pathPrefix": ["/open"]
        //   // appLink 默认 true,可不写
        // }
      ]
    }
  }
}

常见写错导致闪退的几种情况

  • appLink: false 直接写在有 host 的对象里(混合使用)。
  • 只写 appLink: false 却没写 scheme(插件生成空/无效的 CFBundleURLTypes)。
  • 用错字段名:老版本可能是 "schemes",新版是 "scheme"(注意单数)。
  • appLink 写在 deep-link 顶层而不是 mobile 数组里的对象里。

2. 为什么会闪退?

  • Info.plist 生成出错(空 array、重复 key、XML 格式坏掉)。
  • iOS 系统在启动时解析 plist 失败,直接 kill 进程。
  • 之前用 Universal Link(appLink true)时 Xcode 已经加了 com.apple.developer.associated-domains entitlement,切换到 false 后 entitlement 和 provisioning profile 不匹配,也会导致启动失败。

3. 立即修复步骤(必做)

  1. 修正配置 为上面正确的格式(只保留 scheme + appLink: false)。
  2. 彻底清理构建缓存

    tauri ios clean          # 如果有这个命令
    # 或者手动
    rm -rf target/ src-tauri/target src-tauri/gen/apple
  3. 删除 Xcode DerivedData(最重要):

    rm -rf ~/Library/Developer/Xcode/DerivedData
  4. 重新生成/运行:

    tauri ios dev            # 或 tauri ios build
  5. 如果还是闪退,打开 Xcode 项目(target/ios 里生成的 .xcodeproj),找到 Info.plist,搜索 CFBundleURLTypes,确认里面有你的 scheme,且没有空数组。

4. 验证是否成功

  • 构建成功后,用模拟器测试:

    xcrun simctl openurl booted myapp://test
  • App 应该正常启动并收到 deep-link 事件。

总结:99% 是配置写错了(少了 scheme 或混用了 host),导致 Info.plist 坏掉。改对配置 + 清理缓存基本就能解决。如果清理后还闪退,把你的 plugins.deep-link 那段完整配置贴出来,我再帮你看。

各位感兴趣可以给点意见,目前支持基本功能(网格模式,详情,递归等。并不兼容标准的 ls 参数)。

本工具基于 zig 0.16dev 构建。

仓库地址: https://github.com/here-Leslie-Lau/zlist

预览:

Preview1

Preview2

如果图片出不来,可以点进 github 内查看

我观察到这门语言热度还是不及其他语言,可能是还没有出 1.0 的原因。导致每次小版本升级,项目或工具大概率编译失败,需要自行翻标准库文档来修复。不过有时折腾的乐趣也是如此(自我安慰)

开发者朋友们大家好:

这里是 「RTE 开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的技术」、「有亮点的产品」、「有思考的文章」、「有态度的观点」、「有看点的活动」,但内容仅代表编辑的个人观点,欢迎大家留言、跟帖、讨论。

本期编辑:@koki、@瓒an、@鲍勃

01 有话题的技术

1、德国电信联合 ElevenLabs 推出首个运营商级别语音助手,支持实时翻译和 AI 助手

在巴塞罗那 MWC 大会,Deutsche Telekom 基于 ElevenLabs 的 ElevenAgents 平台发布 Magenta AI 呼叫助手,将 AI 语音代理直接嵌入运营商网络基础设施,实现任意通话的实时智能化。

该语音助手,是全球首款将实时 AI 功能(包括实时翻译和管理支持)引入日常通话的解决方案,可在任何设备上使用,无需额外应用程序。

用户只需在通话中说「嘿,Magenta」,即可激活由 ElevenLabs 提供的专用 AI 助手。所有参与者都会在助手启动时立即收到通知,AI 处理仅在明确激活后才会开始。

该助手实时运行,旨在消除语言障碍,并通过以下方式使对话更高效、更易于理解:

  • 实时翻译:参与者可以用自己的母语进行发言和聆听,实现无缝、低延迟的翻译。
  • 智能助手:集成的 AI 助手可以在通话期间回答问题并采取行动,包括推荐附近的餐厅、比较旅行方案、检查预约可用性以及完成预订。
  • 智能摘要:自动捕捉关键信息、预约和待办事项。通话结束后,助手会立即提供简洁明了的摘要,确保不会遗漏任何细节,从会议时间到具体地址,无一遗漏。

通过将这些功能嵌入到常规通话中,ElevenLabs 和德国电信正在消除语言障碍,让所有网络用户都能更轻松地使用人工智能。

Magenta AI 通话助手将于今年晚些时候在德国面向德国电信用户推出,并计划在未来 12 个月内支持多达 50 种语言。

( @elevenlabsio\@X)

2、Qwen 3.5 小模型系列全面上线,最小 0.8B 可端侧部署

Ollama 现已支持 Qwen 3.5 系列小模型(0.8B/2B/4B/9B),所有模型均原生支持工具调用、思维推理和多模态能力,可直接通过 ollama run 命令使用。

这批小尺寸模型性能更强,算力更省,同样基于 Qwen3.5 架构打造——原生多模态、架构深度优化,并经过了大规模强化学习的打磨:

• 0.8B / 2B 版本: 极致轻巧,响应极快,非常适合跑在端侧设备上。

• 4B 版本: 综合实力强悍的多模态基座,是开发轻量级智能体的理想选择。

• 9B 版本: 虽是紧凑型身材,但在性能上已经在追赶那些体量大得多的模型了。

与此同时,基座版本也会同步发布。

HuggingFace:
https://huggingface.co/collections/Qwen/qwen35

( @Alibaba\_Qwen\@X)

3、编程进入「对讲机」时代!Claude 抢发语音写代码,转录 Token 全免费

Claude Code 正式上线语音模式:输入 /voice,长按空格说话,松开即完成输入。语音转录实时流入光标位置,和键盘无缝切换,转录 Token 完全免费。编程的下一个战场不是模型智商,而是交互方式。

跟对讲机一模一样。

目前灰度测试阶段,大约 5%的用户先尝鲜,接下来几周逐步放开。如果账户有权限,打开 Claude Code 时欢迎界面会提示你。

这种语音模式不是简单的语音转文字。语音转出来的文字,会直接在光标位置实时流式输出。

类似下面网友分享的这样:

也就是说,用户可以先手打一半提示词,遇到复杂逻辑懒得打字了,长按空格切到语音,语音输入那段难以描述的逻辑,松手,再继续打字。

无缝衔接。不覆盖。不替换。

这才是关键——它不是替代键盘,是补充键盘。

与此同时,还有一个大利好:语音转录的 Token 完全免费。 不计费。不扣额度。想说多少说多少。

有意思的是,OpenAI 的 Codex 几乎在同一时间也加了类似功能。Codex 0.105.0 版本更新日志写得明明白白——按住空格录音,松开转录,文字直接输入到终端界面。

用的是 Wispr 语音引擎,目前支持 macOS 和 Windows,尚不支持 Linux,并且该功能需要手动开启:在配置文件里设置 features.voice\_transcription=true。

两家几乎同时出招。这不是巧合,是共识。

编程工具的下一个战场,不在模型有多聪明,而在交互有多自然。

(@新智元)

02 有亮点的产品

1、高通推出可穿戴设备新芯片,支持 Linux 系统,适合 AI PIN、AI 眼镜等

今天,高通公司在西班牙举行的 MWC 上发布了新款骁龙 Wear Elite 芯片。

在新闻发布会上,高通表示,他们将 Elite 芯片定位为「腕戴增强版」芯片。它并不会取代之前的 W5 Plus,而是与之并存。该公司表示,预计 Elite 芯片将吸引那些希望打造 AI 可穿戴设备(例如吊坠、胸针以及可能无需显示屏的智能眼镜)的厂商。

除了升级到 3nm 工艺外,Elite 芯片还配备了 eNPU 和 Hexagon NPU 用于 AI 处理。前者负责处理低功耗 AI 功能,例如关键词识别和活动检测,而后者则可以处理计算密集型任务。高通表示,Hexagon NPU 可以在设备端处理 20 亿个参数,每秒可处理多达 10 tokens。

虽然 Wear Elite 的协处理器架构与 W5 Plus 类似,但高通表示其能效更高,因此主芯片可以处理更多功能。例如,GPS 定位所需的功耗降低了 40%。电池方面,Elite 支持 9V 快充,这意味着大约 10 分钟即可充电至 50%。高通还预计其整体电池续航时间可延长 30%。

Elite 还新增了对卫星连接、5G、超宽带和蓝牙 6.0 的支持。CPU 性能提升了约五倍,GPU 现在支持 1080p 分辨率、60fps 的动画播放。

除了 Android 和 Wear OS 系统外,Elite 还将支持 Linux 系统,以便更好地支持那些希望使用专有软件开发 AI 徽章或吊坠的初创公司。

骁龙 Wear Elite 是首个同时集成六种连接技术的可穿戴平台,高通称之为「六重连接」。以下是它所包含的功能:

  • 5G RedCap 为您的可穿戴设备提供独立的蜂窝网络连接,无需像完整的 5G 调制解调器那样消耗大量电量。
  • 低功耗 Wi-Fi (802.11ax / Wi-Fi 6) 让您能够以最小的电池消耗连接到本地网络和云端 AI 服务。
  • 蓝牙 6.0 可实现更精准的设备查找,并与您的生态系统无缝配对。
  • UWB (超宽带)可处理安全的近距离交互,例如数字车钥匙和智能家居门禁。
  • GNSS 可在多个卫星星座中提供精准的定位追踪。
  • 而 NB-NTN (窄带非地面网络)则意味着,即使您身处没有电网覆盖的区域,您的手表也能与 Skylo 合作收发卫星消息。

其中本次新增的卫星通讯功能,对于徒步旅行者、旅行者以及任何需要前往手机信号覆盖范围之外的人来说非常有需求。高通公司表示,「首批搭载骁龙 Wear Elite 处理器的商用设备预计将在未来几个月内上市」

( @AI vision)

2、追觅生态链入局教育硬件:耀墨科技发布「问方」及「AI 闹钟」系列

一家名为耀墨科技(苏州)有限公司(下称「耀墨科技」)的企业在近日推出两款儿童硬件产品——口袋机类型的儿童智能学伴\&AI 闹钟。两款产品的释出海报中,机身都印有追觅 DREAME 的 logo。

2026 年 2 月春节期间,YOOMO 小红书账号的春节倒计时海报中露出了「追觅问方 X1」和「追觅 AI 闹钟 S20」两款产品。据其官方账号中的信息,问方 X1 是一款面向青少年的便携口袋机产品,AI 闹钟 S20 则主要提供智能时间管理,AI 辅助学习等功能和课内外资源,比如科学时间规划和智能唤醒;AI 口语练习;官方小初中教材解读;熏听资源等等。

区别于传统的查题机,YOOMO 的产品逻辑侧重于 SLM(小型语言模型)的端云协同应用与多模态感知:

  • 启发式交互逻辑(Non-Direct Answer): 问方 X1 内置「启发性 AI」,算法层过滤直接答案输出,转而采用多角色 AI 主动提问引导。其技术核心在于 Prompt Engineering 的约束,旨在培养独立解题能力而非单纯的检索。
  • SEL 智能情感系统: 系统集成了社交情感学习(Social Emotional Learning)管家,通过多模态输入识别用户情绪,并提供针对性的引导策略,强化 AI 交互中的情感反馈质量。
  • 边缘侧环境感知预警: 利用后置摄像头与视觉算法,问方 X1 支持实时危险场景识别(如水域、高处边缘),在边缘侧完成图像推理并触发安全预警。
  • 桌面端资源聚合: S20 侧重于时间管理与语音交互,支持教材解读、口语练习及科学唤醒算法,本质上是将传统的智能音箱功能垂直化为「AI 助学终端」

功能上,问方 X1 和市面上同类青少年便携机型相近,覆盖百科对话、陪伴互动、健康提醒、成长管家、安全定位等等,其中:问方 X1 内置了 SEL 成长管家,搭载智能情感系统,在理解和读懂孩子情绪的同时,引导和培养孩子孩子倾听、表达等能力。问方 X1 强调「智能启发学习」,其官方强调「并不是直接给答案,而是通过多 AI 角色主动提问+引导」。其内置启发性 AI,用以引导孩子主动思考,培养独立解决问题的能力。

在安全方面,问方 X1 实时识别水域、高处等场景并发出预警,另有 4G 通话和全天定位功能。

目前官方暂未发布定价等信息,也未在官方及三方电商平台上线。

(@多知)

3、GEO 服务商「PureblueAI 清蓝」完成数千万元天使轮融资,发布新 AI 营销数字员工平台

北京清蓝智汇科技有限公司(简称 PureblueAI 清蓝)正式宣布完成数千万元人民币天使轮融资。本轮融资由祥峰中国(Vertex China)领投,老股东英诺基金及一村淞灵、36 氪跟投。

在这轮融资发布之际,PureblueAI 清蓝也同步发布了新产品—— AI 营销数字员工平台 mkter.ai,以及 AI 口碑营销数字员工「Mark」。

不同于行业内传统功能型 SaaS 工具,Mark 能够提供从用户意图挖掘到效果监控优化的 AI 口碑营销全流程,覆盖诊断、执行到复盘优化的环节。

Mark 能够覆盖的范围也很广,比如可适配中小企业自运营、大型企业定制化服务、营销服务商代理合作等多元需求。同时,Mark 兼容豆包、DeepSeek、千问、元宝等主流 AI 平台。

具体来说,Mark 可提供六大核心能力服务,实现 AI 口碑营销全流程智能化闭环管理:通过专业意图挖掘锁定高转化用户需求;根据多维品牌诊断输出全维度优化方案;一键专属知识库搭建帮助生成高可信内容;精准效果预估提前锁定投放价值;全域智能发布匹配高权重可信信源;实时效果监控实现 7×24 小时动态监测分析等等。

无论是 AI 营销数字员工平台 mkter.ai,还是 AI 口碑营销数字员工「Mark」,背后都是基于清蓝自研的混合模型架构与优化算法,通过先进的生成引擎优化技术,助力企业提升品牌的 AI 推荐率和影响力。

这系列能力,会让 Agent 去学习 AI 平台的推荐规律,替代过往的人工去「猜测」平台投放测录的过程

在过程中,PureblueAI 的系统将持续分析那些在 AI 搜索中被成功推荐的内容,让模型找出这些内容背后共有的「特征因子」,让模型知道什么样的内容结构和特征,能拿到 AI 平台更高的采信权重,用以指导企业客户的内容生成策略、监测模型反馈等等。

比如,当客户提出优化需求(如优化「超混架构车型推荐」这个搜索意图)时,清蓝的模型不仅会生成一篇营销稿件,还会计算出权重最高的发布平台组合。

(@智能涌现)

03 有态度的观点

1、Bill Gurley:不热爱工作的人最容易被 AI 取代

据《商业内幕》报道,知名风险投资人 Bill Gurley 近日在播客节目「On with Kara Swisher」中表示,在今年快速演进的 AI 浪潮下,那些对工作缺乏热情、缺乏明确目标、长期「机械式」履行职责的从业者,将最容易被 AI 取代。

Gurley 指出,许多年轻人沿着「大学 — 稳定工作」的路径前进,最终进入自己并不热爱的行业,成为「流水线上的齿轮」。

在他看来,这类岗位最容易被 AI 重塑,因为从业者缺乏内在驱动力,也缺乏持续提升技能的动力。他认为,AI 的发展已经促使多家大型科技公司放缓招聘或提前裁员,以应对未来更高效的数字劳动力

他引用巴菲特「每天都在跳着踢踏舞去上班」的说法,指出当一个人真正喜欢自己的工作时,「精进是免费的」,因为学习与提升会自然发生。

他进一步表示,AI 对职场人的意义类似「喷气燃料」,能显著放大个人能力。

员工若能成为团队中「最懂 AI 的那个人」,不仅能更快学习,也能在组织中获得更高的不可替代性。

如果你能把 AI 用好,你会成为他们最不想裁掉的人。

(@APPSO)

04 社区黑板报

招聘、项目分享、求助……任何你想和社区分享的信息,请联系我们投稿。(加微信 creators2022,备注「社区黑板报」)

1、活动推荐:3 月 7 日深圳 Data for AI Meetup ,5 位开源专家聊 AI 数据基础设施实战

本次 Meetup 围绕 AI 时代的数据基础设施,从不同视角展开:

  • 数据湖元数据与治理如何支撑 AI 场景
  • 多模态数据湖在真实业务中的架构实践
  • 云原生数据平台的设计演进
  • 半结构化数据与 No-ETL 实时分析解法
  • 开源、AI 和 Data 技术社区生态的趋势和共建

分享嘉宾来自腾讯、OPPO、Datastrato、ScopeDB 等团队,以及 Apache 软件基金会、LF APAC AI & Data 和开源社等知名社区。既有大规模业务实践,也有开源基础设施经验,将从不同角度呈现 AI 数据层的真实挑战与解决思路。

📅 时间:2026 年 3 月 7 日(周六)下午 13:00-17:30

📍 地点:深圳·深国际华南数字谷 H 栋 4 楼

🎟 报名:免费参加,需通过审核(请完整填写报名信息)

报名链接

https://www.huodongxing.com/event/4850156431800

阅读更多 Voice Agent 学习笔记:了解最懂 AI 语音的头脑都在思考什么

写在最后:

我们欢迎更多的小伙伴参与 「RTE 开发者日报」 内容的共创,感兴趣的朋友请通过开发者社区或公众号留言联系,记得报暗号「共创」。

对于任何反馈(包括但不限于内容上、形式上)我们不胜感激、并有小惊喜回馈,例如你希望从日报中看到哪些内容;自己推荐的信源、项目、话题、活动等;或者列举几个你喜欢看、平时常看的内容渠道;内容排版或呈现形式上有哪些可以改进的地方等。

作者提示: 个人观点,仅供参考

Matrix 首页推荐

Matrix 是少数派的写作社区,我们主张分享真实的产品体验,有实用价值的经验与思考。我们会不定期挑选 Matrix 最优质的文章,展示来自用户的最真实的体验和观点。

文章代表作者个人观点,少数派仅对标题和排版略作修改。


我的日常阅读习惯,是阅读一篇文章后,使用 Obsidian Web Clipper 浏览器插件将文章剪藏到 Obsidian 仓库的 Clippings 文件夹中,同时在当天的日记中添加剪藏文章的双链,以及对于文章的简要总结和阅读后的思考。

为了解决手动记录的繁琐并保持记录的连贯性,我通过一套自动化方案实现了如下效果:Clippings文件夹中新增剪藏文件时,自动获取文章标题和description(即文章总结)属性值,以- 18:09 [[文章名称]] 文章总结的格式自动添加到当天日记的底部。

录屏.gif|500

上述的自动化流程可以拆解为四个核心步骤:

  1. 剪藏文章,使用 Obsidian Web Clipper 浏览器插件剪藏文章,添加到 Clippings 文件夹中;
  2. 监控新文件,通过快捷指令自动化监控 Clippings 文件夹,当有新文件创建时,触发指定的快捷指令;
  3. 调用 Capture 模板,通过快捷指令获取新文件的 文件名称,添加到剪贴板中,并执行 Obsidian URI(指向 QuickAdd 插件的 Capture 模板);
  4. 插入笔记,通过 Capture 模板捕获剪贴板的内容(即 文件名称 ),根据文件名获取 description 属性,并以固定格式添加到当日笔记中。

基础版本

由于并不是所有人都使用了 Obsidian Web Clipper 插件的解释器功能,因此我将上述流程拆解为基础和进阶两个版本。

在基础版本中,只会自动获取文件名称,并在日记中添加双链,省去了 AI 总结和获取 description 属性这两个相对复杂的步骤。最终添加到日记中的笔记格式如下:

  • 20:06 [[十大最佳AI编码工具:2026年开发者的终极工具包]]

创建 QuickAdd 插件的 Capture 模板

上述的四个核心步骤是自动化流程的执行过程,但在创建自动化流程时,顺序是颠倒的。第一步要先创建 Capture 模板,来实现将文本插入到每日日记文件底部的功能。

我的日记都保存在 journals 文件夹中,文件名格式为 yyyy-MM-dd,因此我在模板中将要插入的文件路径配置为 journals/{{date}},比如当天是 2026 年 2 月 22 日,那么指向的文件路径就是 journals/2026-02-22

image.png|500

借助 JS 脚本,我们可以获取剪贴板中的 文件名称,添加双链格式,并和时间拼接在一起,组合成我想要添加到日记中的笔记格式。

image.png|500

具体的脚本实现逻辑如下:

// 获取剪贴板内容
let text = await this.quickAddApi.utility.getClipboard();

// 获取当前时间
let date = moment().format("HH:mm");

// 拼接时间和文本,并设置为双链格式
return `- **${date}** [[${text}]]`;

为模板创建全局链接

Capture 模板创建完成后,点亮配置页面的闪电形状符号,就会新增一个可执行的 command。

image.png|500

利用 Advanced URI 插件,可以为模板对应的可执行 command 创建一个全局性的链接,以便于在快捷指令中调用。

具体的设置方式是:

  1. 使用 command + P 打开命令面板,搜索 Advanced URI: Copy URI for command 命令并执行;
  2. 选择 Don't specify a file
  3. 搜索并选择刚刚在 QuickAdd 中创建的 command;
  4. 这样就获取了可全局运行的 command URI,它会自动保存在剪贴板中。
20250904-202208.gif|800

创建快捷指令

有了可全局执行的 Capture 命令,就可以在快捷指令中调用。同时,还要将剪藏文件的文件名称添加到剪贴板,以便于 Capture 模板中的脚本获取。依次执行步骤为:

  1. 获取 Clippings 文件夹内容
  2. 筛选「创建日期」最新的文件;
  3. 获取文件名称;
  4. 将文件名称拷贝至剪贴板;
  5. 运行 Shell 脚本调用 Capture 模板。
image.png|500

创建自动化流程

配置好快捷指令后,同样在快捷指令 app 中新建自动化流程:选择「文件夹」作为快捷指令的触发项,并设置为当 Clippings 文件夹添加任意项目时,触发刚刚创建的快捷指令。

image.png|500

至此我们就完成了全部的设置流程,每当我们剪藏文章并添加到Clippings文件夹时,快捷指令就会自动启动,在当天的日记中添加该剪藏笔记的双链。

进阶版本

Obsidian Web Clipper 插件的「解释器」功能,支持预设 prompt,在剪藏时调用大模型 API 处理属性值。

比如我在剪藏模板的 description 属性中添加了这样的 prompt:{{"使用中文,一句话总结当前 web page 的内容"}},每次使用插件剪藏文章时,大模型就会总结文件内容,并填充到 description 属性中。

借助这一功能,上述的流程可以升级为:Clippings文件夹添加新文件时,获取文件名称和description属性值,以- 18:09 文章名称 description的格式添加到当天日记的底部。 最终添加到日记中的笔记格式如下:

  • 20:06 [[十大最佳AI编码工具:2026年开发者的终极工具包]],本文深入介绍了 2026 年十大最佳 AI 编码工具,比较了它们的功能、优缺点及适用场景,以帮助开发者选择最适合其工作流程的 AI 编程助手。

配置 Obsidian Web Clipper 插件解释器

首先在插件的解释器页面,添加 AI 模型的提供商,并配置具体的模型编号。

比如我这里配置了 BigModel(智谱)、DeepSeek 和 Google 三家提供商,以及对应的模型。其中 glm-4.5-flash 免费但响应慢,Google 模型免费但需要科学上网,DeepSeek 需要充值不过费用极低,各位可以自行选择。

image.png|500

解释器配置完成后,还需要在模板中设置 prompt。可以为不同的属性设置不同的 prompt,比如:

  1. description 属性,可以设置为 {{"使用中文,一句话总结当前 web page 的内容"}}
  2. cover 属性,可以设置为 {{"使用页面中的第一个图片 URL,如果页面中没有图片 URL,则使用 [[../assets/文章剪藏.png]]"}}

注意,prompt 需要使用英文双引号包裹,否则无法识别。

image.png|500

上述两步完成后,使用插件剪藏文章时,就可以让 AI 使用一句话总结当前文章的内容,并填充到 description 属性中了。

20260222-220502.gif|300

优化 Capture 模板的 JS 脚本

在基础版本中,我们已经从剪贴板中获得了 文件名称,并且知道文件被保存在 Clippings 文件夹中,就可以拼接出文件路径来精准查询文件,并获取文件的 description 属性。

将基础版本中的脚本替换为下方的脚本即可:

let text = await this.quickAddApi.utility.getClipboard();
let date = moment().format("HH:mm");
let description = "";

// 拼接文件路径
let queryName = text.trim();
let fileName = queryName.endsWith(".md") ? queryName : `${queryName}.md`;
let filePath = `Clippings/${fileName}`;

// 根据文件路径查询文件
let targetFile = app.vault.getAbstractFileByPath(filePath);

// 获取文件的 description 属性
if (targetFile && targetFile.path) {
    let metadata = app.metadataCache.getFileCache(targetFile);
    let frontmatter = metadata?.frontmatter;
    if (frontmatter && frontmatter.description) {
        description = `,${frontmatter.description}`;
    }
}

return `- **${date}** [[${text}]]${description}`;

小结

得益于此前对于个人工作流的探索积累,这套自动化流程从出想法到落地只花了 1 个小时的时间。它帮助我省去了「在日记中添加阅读记录及摘要」的重复性流程,让我能够专注记录阅读后的想法和思考。

这套流程的本质是:监控事件→触发自动化→抽取元数据→按固定格式写入文件,实际上还有很大的扩展空间。比如:

  1. 自动添加稍后读待办。我当前是在阅读完成后剪藏,也可以先剪藏文章,并在日记或指定文件中添加阅读待办;
  2. 素材管理。当素材文件夹,比如 assets,新增文件时,自动归类并写入「素材管理库」中;
  3. 项目日志自动化。当项目文件夹新增「会议纪要/方案」时,自动把链接追加到项目主页的「时间线」区块。

欢迎各位读者大开脑洞,创建属于自己的工作流。

> 学习心流管理,让自己成为效率大师 ⏲️

> 实用、好用的 正版软件,少数派为你呈现 🚀

    100%纯净离线的电脑语音输入法,支持把手机当麦克风

    我平时经常需要输入大量的文字,比如向大模型输入复杂的指令,或者是写小说的初稿、整理文章等等。对于常用的指令,其实是可以通过自定义词组来快速替换的,但我之前尝试过微软拼音自定义词组、Ditto 剪贴板等工具,发现在词组数量和句子长度上都有很大局限。而面对写小说这种需要大段输出的场景,纯靠打字实在太慢了。

    为了解决这些问题,我也去试了一些热门的语音输入法,希望能解决我的问题。但我发现,大多数的语音输入法,不仅安装门槛不低、需要自己配 API 、下模型,最关键的是,我最需要的自定义规则替换功能并不好用。

    另外,我们在使用以前各家输入法的时候,可能都担忧过安全隐私问题。现在的语音输入法也是一样,甚至更变本加厉,都在拼命做加法:恨不得把所有时髦的 AI 功能都往里塞。最让我不能忍受的是,它们都要求实时联网。这意味着你毫无隐私可言,安全和信任无从谈起。

    在我看来,好的输入法应该是纯粹的。我需要的只是一个输入法工具,只需要它有完整的词库、方便的打字方式、够快的速度和准确的文字。更重要的是本地、安全、没有隐私顾虑。

    既然市面上找不到这种纯粹的工具,所以我自己做了这个语音输入法 Zian 。

    这款输入法最大的特点也是我最核心的理念,就是:完全离线。
    下载解压包之后直接就能用,完全不需要在线再去下载什么环境和模型。更重要的是,这个软件再也不会联网,为了达到纯粹的离线目标,我甚至连在线检测版本更新的功能都没加。除了你第一次去下载它需要用到网络,日常使用根本不需要网,这是我作为一个互联网遗民对保护隐私和纯净单机工具的一种执念。由于底层用的 C++直接实现,所以速度上比大部分同类产品常用的 ONNX 方案要快一些,准确度上表现也非常不错。

    第二个我觉得比较有趣的点是:手机可以当电脑麦克风。我做了一个配合 PC 端的安卓端 Zianlink 。跟 PC 端在局域网连接后,你就能直接对着手机说话,然后在电脑上无延迟打出字来。当然也可以在手机上直接输出文字,因为手机端能直接调用 PC 端的模型。

    另外,很多人感觉在办公室用语音输入会觉得尴尬,其实还好。Zian 用手机当麦克风,平时拿起手机说话,就像在发微信语音一样,是非常自然的动作,这比起对着电脑屏幕或者戴着耳麦自言自语要正常的多。再有,Zian 支持耳语模式,无论是 PC 端还是手机端,你都可以用极小的声音说话,所以就是使用耳麦,也不会“社死”。

    作为我初衷的文本替换功能当然也有,利用规则文件,你可以把你设置的特定短语或者字母替换成大段文字,或者当遇到人名时依靠热词纠正,还能自动清洗掉“嗯、啊”这类的口语语气词。因为我之前写过转写软件,所以里面顺带也集成了一个纯本地的音频文件转写功能。

    这个软件是买断收费款,但我也提供了试用版。试用版功能完全具备,只是在文件转写和手机连接时长上有限制。如果你只是在电脑上把它当纯输入法用,功能和正式版完全一样。

    如果你跟我一样,极度不喜欢实时联网,讨厌被窃取隐私,喜欢纯净的本地小工具,欢迎去我的网站 ziansoft.com 下载体验,也可以去我的 GitHub (github.com/sipeter/zian_public) 下载绿色版。有问题也可以加 QQ 交流群 1034895071 找我。 大家有意见随时向我提,谢谢!

    带 AFF 链接,楼下互助下,大家一起薅羊毛。
    备:
    - 300 代金券需要创建 apikey 调用后,人工审核
    - 邀请后下家实名后,我有 200 代金券
    - 有多个手机号,自己邀请自己,小号也可以一次,试过第三个手机号实名没有了,这个不知道是 bug 还是 feat

    邀请链接:
    https://ai.baishan.com/auth/login?referralCode=xe7ByN7Hx3





    首先定义一下支持 AI coding 和 反对 AI coding 的:

    • 支持者:绝大部分工作使用 AI 工具完成(百分之 90 以上),自己只是驾驶员。
    • 反对者:完全拒绝 AI ,或者 AI 只是作为辅助开发;

    有这个疑问是我最近在面试,我的岗位是 agent 开发,在其他帖子里有介绍,面试的结果,还算不错,年前虽然一直没结果,但是年后成功获得了两个我都比较满意的 offer ,目前已经在考虑入职的问题。

    可能和我的工作内容天然以大模型为基础有关系,在面试的过程中,我遇到的公司,都会要求 vibe coding 的能力,这没有任何问题,可是我在和面试官讨论的时候,我发现好几个公司,模型用了国内的 glm 、minimax 、kimi ,IDE 用字节的 trea 啊或者其他不知名的,并且公司也没有明确的标准,就是把 AI coding 工具用起来了,他们就觉得自己 vibe 了。

    但是据我高强度,使用 AI 来看,真正能合理在真实工作场景中使用 AI coding ,至少得是以下工具的组合:
    IDE:cursor 、caulde code 、codex (这个我自己没体验过,但是听使用的人说很好用);
    model:claude opus4.5+、GPT5.0+、gemini 系列我自己觉得差点意思,但是可以作为候补,前两个模型弄不好,问一下会有奇效;

    在使用上,有注意使用细节吗?

    • 先 plan 模式生成计划,通过多轮沟通将计划变成合理是最基础的
    • 还需要增加 claude.md 或者 product.md 之类的 AI 沟通文件,记录每次更新的变化, 以及 AI coding 的注意事项等等细节问题。
    • 在 Prompt 上姿势正确吗?模糊的需求,自己也说不清楚,是否与 AI 多次沟通;清楚的需求,是否交代清楚了细节;
    • 在 debug 上有正确发挥工具的 debug 能力吗?主流工具都是支持,输入多个问题原因,工具会自动打 log 找原因,解决后会自动取消 log 。
    • 一个模型解决不了的细节问题,有更换模型吗?实际使用中 claude 、gpt 、gemini 混合用 是很有必要的,它们可以互相互补,一个解决不了的问题,可能另一个就解决了。

    还需要叠个甲的是,本帖没有贬低国内外其他模型工具的意思。实际上,从我的使用来看,其他模型工具与我上面列的几个差距并不大。

    但是,如果你想在实际工作中使用,微小的差距,可能就是能用与不能用的区别,函数写错一个字母都运行不了,一个函数报错,整个功能就运行不了,一个功能运行不了,可能整个项目就崩溃。

    也许其他工具,能做对百分之 90 的场景,但是剩下百分之 10 可能要消耗掉百分之 90 的工作时间,甚至更多,而恰恰这无法解决的百分之 10 ,让很多反对者觉得“你们怎么敢说 AI 能做百分之 80 的工作的?”

    除此之外,X 刷到某个言论,我也比较认同,比较强硬的反对者(完全拒绝 AI )可能是经验非常丰富的老开发,已经工作 20 年 30 年这种,他们不是因为顽固、固执,而是对于开发 对于写代码,基于多年的经验,有自己的理解,而 AI 是没有他们这种理解力的。

    本帖不引战奥,支持者和反对者 都聊聊你们是怎么用 AI coding 的,工作都是什么应用场景

    BookletAI - 基于 Agent 的 AI 小册子生成器技术分享

    大家好!今天给大家分享一个我们最近开发的项目 - BookletAI,一个基于 AI Agent 的小册子生成器。本文将从创作过程、技术实现原理和作品展示三个方面进行介绍。


    一、创作过程

    1.1 项目背景

    在内容创作领域,制作一份精美的小册子/电子书通常需要:

    • 收集和整理大量资料
    • 设计排版和视觉风格
    • 编写和润色文案
    • 制作或寻找配图

    这个过程往往需要数小时甚至数天。我们希望通过 AI 技术,将这个过程缩短到几分钟。

    1.2 开发流程

    Phase 1: 需求确认

    • 用户输入主题和阅读时间
    • Agent 自动分析并确认创作方向
    • 明确目标受众和内容风格

    Phase 2: 素材收集

    • 使用 web_search 工具搜索相关资料
    • 使用 web_scrape 工具抓取高质量网页内容
    • 提取关键数据、案例和权威观点

    Phase 3: 大纲规划

    • 基于收集的素材生成详细大纲
    • 使用 booklet_update 工具展示大纲给用户
    • 等待用户确认后再进入下一阶段

    Phase 4: 页面生成

    • 使用 page_upsert 工具逐页生成内容
    • 支持并行生成( 3-5 页同时处理)
    • 实时更新进度(通过 TodoWrite 工具)
    • 智能配图( 70% 真实图片 + 30% AI 生成图片)


    二、技术实现原理

    2.1 整体架构

    前端表单 → Java 后端 → Python AI 服务 → Claude API
        ↓           ↓              ↓
      SSE 连接 ← 消息推送 ← Agent 工具调用
    

    核心技术栈:

    • 前端: Vue 3 + SSE (Server-Sent Events)
    • 后端: Java Spring Boot
    • AI 服务: Python + Claude Agent SDK
    • AI 模型: Claude Sonnet 4

    2.2 Agent 工作流

    BookletAI 基于 Claude Agent SDK 构建,通过 MCP (Model Context Protocol) 工具系统实现复杂的内容生成流程。

    核心工具集:

    1. web_search - 网络搜索
    2. web_scrape - 网页抓取
    3. image_search - 图片搜索
    4. text_to_image - AI 图片生成
    5. booklet_update - 更新小册子信息
    6. page_upsert - 创建/更新页面

    2.3 消息流转机制

    SSE 实时通信:

    前端建立 SSE 连接
        ↓
    Java 后端创建 Agent 会话
        ↓
    Python AI 服务调用 Claude API
        ↓
    Claude 返回流式响应( think/tool/text )
        ↓
    Java 后端解析并转换消息格式
        ↓
    通过 SSE 推送给前端
        ↓
    前端实时渲染(思考过程、工具调用、内容更新)
    

    消息类型:

    • think - AI 思考过程
    • tool - 工具调用( running → completed )
    • text - AI 文本回复
    • error - 错误信息

    2.4 并行优化

    为了提升生成速度,我们实现了多项并行优化:

    1. 并行网页抓取 - 同时抓取 3-5 个网页
    2. 并行页面生成 - 同时生成 3-5 个页面
    3. 进度实时同步 - 使用 TodoWrite 工具实时更新进度

    2.5 智能配图策略

    图片来源比例:

    • 70% 真实图片(通过 image_search
    • 30% AI 生成图片(通过 text_to_image

    图片验证机制:
    搜索图片后必须验证可下载性,如果下载失败则尝试其他图片或使用 AI 生成。


    三、作品展示

    3.1 示例作品

    《北京故宫·紫禁城旅游指南》

    在线预览: https://bookletai.org/product-detail.html?contentId=01bdb85e9a294f65861d7b874bb94df9

    作品特点:

    • 📖 4 页精美排版
    • 🎨 专业设计,图文并茂
    • 📝 内容丰富,涵盖历史、建筑、文物、游览攻略
    • 🌐 支持 HTML5 预览和 PDF 下载

    内容结构:

    1. 封面 - 故宫太和殿全景,标题"皇城遗韵"
    2. 第 2 页 - 六百年紫禁城历史与建筑介绍
    3. 第 3 页 - 百万珍藏(珍宝馆、书画馆、钟表馆、瓷器馆)
    4. 第 4 页 - 游览攻略(入园须知、开放时间、交通建议、推荐路线)

    3.2 产品特点

    • 完全免费 - 无需注册,无需登录
    • 多语言支持 - 支持 26 种语言
    • AI 驱动 - 自动生成高质量内容
    • 多种导出格式 - PDF 、HTML5
    • 适用场景广泛 - 教育、营销、非营利组织

    3.3 使用场景

    1. 教育工作者 - 快速制作课程材料、学习指南
    2. 内容创作者 - 制作电子书、知识付费内容
    3. 营销团队 - 制作产品手册、客户提案
    4. 个人用户 - 整理知识、分享经验


    四、技术亮点总结

    1. Agent 驱动 - 基于 Claude Agent SDK ,实现复杂的多步骤工作流
    2. 工具生态 - 丰富的 MCP 工具集(搜索、抓取、图片、内容生成)
    3. 实时通信 - SSE 推送,前端实时渲染 AI 创作过程
    4. 并行优化 - 网页抓取和页面生成支持并行处理
    5. 智能配图 - 真实图片 + AI 生成图片的混合策略
    6. 进度可视化 - TodoWrite 工具实时同步创作进度


    五、体验地址

    官网: http://bookletai.org/

    示例作品: https://bookletai.org/product-detail.html?contentId=01bdb85e9a294f65861d7b874bb94df9

    欢迎大家试用并提供反馈!如果对技术实现有任何问题,欢迎在评论区讨论。

    在跨境电商、社媒矩阵营销、自动化采集等场景中,动态代理已经成为必不可少的工具。很多用户在选择代理服务的时候,总会面临一个问题:

    动态代理是否真正稳定?在多账号运营或长时间运行时,会不会频繁掉线会被识别为异常?

    本文IPDEEP小编将为大家详细分析下,希望对大家有帮助。
    动态代理也能稳定?多账号运营的最佳选择

    一、动态代理的核心痛点

    动态代理的最大优势是 IP会自动轮换,可以规避封禁和风控限制。然而,这也带来了几个用户最关心的问题:

    1.会话长度短

    动态IP如果频繁更换,后台登录或自动化程序可能中断,导致任务失败或账号异常。

    2.切换机制不智能

    低质量代理服务切换IP过快或过慢,容易被目标网站识别异常访问。

    3.高峰期稳定性差

    当业务并发量高时,如果代理服务器无法承载,成功率下降,影响采集和运营效率。

    如果这些问题处置不当,会直接影响电商店铺、社媒账号的安全和业务效率。

    二、多账号运营的挑战与解决方案

    在多账号运营中,无论是电商还是社媒矩阵,用户常遇到以下问题:

    同时登录多个账号时,IP重复导致账号被限制

    不同业务场景需要不同类型的IP(如动态住宅、静态住宅或移动IP)

    解决方案:

    1.选择支持多类型IP的服务

    根据任务类型选择不同IP类型,灵活调度

    2.长会话支持

    对于后台操作或自动化任务,长会话IP能减少异常。

    3.智能轮换机制

    系统会自动切换IP,保证成功率并降低识别风险。

    三、稳定性如何衡量

    选择动态代理时,用户可以通过以下几个指标判断稳定性:

    IP粘性/会话长度:是否支持长时间会话,减少频繁切换带来的风险。

    成功率与高峰表现:在大量访问或自动化采集任务中,是否能维持高成功率。

    资源类型与纯净度:是否为真实住宅IP,减少账号被识别异常的概率。

    四、动态代理适用的场景

    五、如何选择可靠的动态代理服务

    选择动态代理服务时,可以从以下角度评估:

    1.资源纯净度:是否提供高比例的真实住宅IP。

    2.会话稳定性:是否支持长会话和自动轮换。

    3.技术支持与稳定:是否提供详细文档和及时响应的技术支持。

    4.套餐灵活性:是否支持按需购买和不同类型IP自由组合。

    六、总结

    动态代理并非天生不稳定。选择合适的服务提供商,注重会话长度、智能轮换、高纯度资源,可以让动态代理在多账号运营中表现得既稳定又高效。

    对于跨境电商、社媒矩阵运营或自动化采集团队来说,稳定的动态代理不仅是业务安全保障,也是提高效率的关键工具。

    简介:整数在内存中的存储;大小端字节序和字节序判断;浮点数在内存中的存储

    1 整数在内存中的存储(回顾)

    整数的2进制表示方法有三种,即原码、反码和补码

    有符号的整数,三种表示方法均有符号位和数值位两部分。符号位都是用0表示“正”,用1表

    示"负",最高位的一位是被当做符号位,剩余的都是数值位。

    正整数的原、反、补码都相同。

    负整数的三种表示方法各不相同。

    原码:直接将数值按照正负数的形式翻译成二进制得到的就是原码。

    反码:将原码的符号位不变,其他位依次按位取反就可以得到反码。

    补码:反码+1就得到补码。

    对于整形来说:数据存放内存中其实存放的是二进制的补码。

    为什么?

    在计算机系统中,数值一律用补码来表示和存储。

    原因在于,使用补码,可以将符号位和数值域统一处理;

    同时,加法和减法也可以统一处理(CPU只有加法器)此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。

    为什么char范围是127 ~ -128

    10000000时,直接认为其等于-128

    2 大小端字节序和字节序判断

    2.1 什么是大小端?

    当超过一个字节的数据在内存中存储的时候,就有存储顺序的问题,按照不同的存储顺序,我们分

    为大端字节序存储和小端字节序存储,下面是具体的概念:

    大端(存储)模式:是指数据的低位字节内容保存在内存的高地址处,而数据的高位字节内容,保存在内存的低地址处。

    小端(存储)模式:是指数据的低位字节内容保存在内存的低地址处,而数据的高位字节内容,保存在内存的高地址处。

    举个例子:

    a = 0x223344550x表示这是一个16进制数。数据的低位字节内容55保存在内存的低地址处,而数据的高位字节内容22保存在内存的高地址处,所以这个环境下是小端(存储)模式。

    2.2 为什么有大小端?

    这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8 bit位,但是在C语言中除了8 bit的char之外,还有16 bit的short型,32 bit的long型(要看具体的编译器),另外,对于位数大于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如何将多个字节安排的问题。因此就导致了大端存储模式和小端存储模式。

    我们常用的X86结构是小端模式,而KEIL C51则为大端模式。很多的ARM, DSP都为小端模式。有些ARM处理器还可以由硬件来选择是大端模式还是小端模式。

    2.3 字节序判断

    int check_sys()
    {
        int a = 1;
        //00000000 00000000 00000000 00000001(2进制)
        //00 00 00 01 - 大端存储(16进制)
        //01 00 00 00 - 小端存储(16进制)
        return *(char*)&a;
    }
    
    int main()
    {
        int ret = check_sys();
        if(ret == 1)
        {
            printf("小端\n");
        }
        else
        {
            printf("大端\n");
        }
        return 0;
    }

    3 浮点数在内存中的存储

    3.1 浮点数的存储规定

    根据国际标准IEEE(电气和电子工程协会)754,任意一个二进制浮点数V可以表示成下面的形式:

    举例来说:

    十进制的5.0,写成二进制是101.0,相当于1.01 * 2^2

    可以得出S=0,M=1.01,E=2。

    IEEE 754规定:

    对于32位的浮点数(float),最高的1位存储符号位S,接着的8位存储指数E,剩下的23位存储有效数字M;对于64位的浮点数(double),最高的1位存储符号位S,接着的11位存储指数E,剩下的52位存储有效数字M。

    3.2 浮点数存的过程

    IEEE 754对有效数字M和指数E,还有一些特别规定。

    前面说过,1<M<2,也就是说,M可以写成1. xxxxxx的形式,其中xxxxxx表示小数部分。

    IEEE 754规定,在计算机内部保存M时,默认这个数的第一位总是1,因此可以被舍去,只保存后面的xxxxxx部分。比如保存1.01的时候,只保存01,等到读取的时候,再把第一位的1加上去。这样做的目的,是节省1位有效数字。以32位浮点数为例,留给M只有23位,将第一位的1舍去以后,等于可以保存24位有效数字。

    至于指数E,情况就比较复杂

    首先,E为一个无符号整数(unsigned int

    这意味着,如果E为8位,它的取值范围为0~255;如果E为11位,它的取值范围为0~2047。但是,我们知道,科学计数法中的E是可以出现负数的,所以IEEE 754规定,存入内存时E的真实值必须再加上一个中间数,对于8位的E,这个中间数是127;对于11位的E,这个中间数是1023。比如,2^10的E是10,所以保存成32位浮点数时,必须保存成10+127=137, 即10001001。

    3.3 浮点数取的过程

    E不全为0或不全为1(常规情况)

    这时,浮点数就采用下面的规则表示,即指数E的计算值减去127(或1023),得到真实值,再将有效数字M前加上第一位的1。

    比如:0.5的二进制形式为0.1,由于规定正数部分必须为1,即将小数点右移1位,则为1.0*2 ^(-1),其阶码为-1+127(中间值)=126,表示为01111110,而尾数1.0去掉整数部分为0,补齐0到23位00000000000000000000000,则其二进制表示形式为:

    0 01111110 00000000000000000000000

    E全为0

    这时,浮点数的指数E 直接 等于1-127(或1-1023)即为真实值,有效数字M不再加上第一位的1,而是还原为0.xxxxxx的小数。这样做是为了表示±0,以及接近于0的很小的数字。

    E全为1

    这时,如果有效数字M全为0,表示±无穷大(正负取决于符号位s)

    1)GPU带宽分析中GPU Non-Base Level Textures过低是什么意思
    2)为什么不建议用LoadFromMemory接口


    这是第465篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面地掌握和学习。

    UWA社区主页:community.uwa4d.com
    UWA QQ群:793972859

    From UWA AI 问答

    Q:GPU带宽分析中GPU Non-Base Level Textures过低是什么意思?

    A:GPU Non-Base Level Textures指标过低解析:
    在GPU带宽分析中,GPU Non-Base Level Textures指标统计的是GPU采样非Mipmap第0层(即经过缩小处理的层级)纹理的次数。该指标“过低”通常意味着绝大多数纹理采样都强制使用了最高分辨率的第0层(Base Level)。

    这并非性能优异的标志,反而往往暗示了潜在的带宽浪费和缓存命中率低的风险,具体分析与优化策略如下:

    1. 核心含义与风险

    Mipmap未生效或使用不当:正常情况下,随着物体远离摄像机,GPU应自动采样更低分辨率的Mipmap层级。若该指标过低,说明场景中的纹理即便在远处也被强制以最高精度采样。

    带宽压力剧增:采样第0层意味着每次像素着色都需要读取更多数据。对于远距离或小面积物体,这不仅浪费了宝贵的显存带宽,还增加了GPU Memory Bus的负载,直接导致功耗上升和设备发热。

    Cache Miss率升高:过大的纹理数据难以完全放入L1/L2缓存,导致频繁的Cache Miss,进一步引发GPU Stall(读写停滞),降低帧率。

    2. 常见成因排查

    未开启Mipmap:检查关键纹理资源是否在导入设置中关闭了"Generate Mip Maps"选项。

    各向异性过滤(Anisotropic Filtering)强制开启:若在Quality Settings中将各向异性过滤设为"Forced On",或在特定纹理上设置了过高等级,GPU为了修正视角倾斜带来的拉伸,会倾向于采样更高层级甚至混合多层,但在某些统计口径下,过度追求清晰度可能导致非基础层采样逻辑异常或实际仍大量依赖基础层数据。

    Shader编写问题:检查是否有Shader代码强制指定了LOD层级(如tex2Dlod固定取0),或使用了不支持Mipmap采样的特殊算法。

    UI纹理误用:UI元素通常不需要Mipmap,但如果3D场景中的大量贴图被错误地当作UI处理而未开启Mipmap,也会导致此现象。

    3. 优化建议

    合理开启Mipmap:对3D场景中的大部分纹理开启Mipmap生成。这能显著降低远处物体的采样带宽。

    分级设置各向异性过滤:避免全局强制开启。建议在Project Settings中设为"Per Texture",仅对地面、墙面等需要高质量斜视效果的纹理单独开启,并尽量使用较低等级(如2x或4x)。

    控制纹理分辨率:结合渲染距离,对远景物体使用低分辨率纹理。若高分辨率纹理的Mipmap 0层采样率极低(如小于5%),说明其高分辨率部分从未被使用,应直接缩小源图尺寸。

    检查RenderTexture:确认动态生成的RenderTexture是否必要开启了Mipmap,避免不必要的内存与带宽占用。

    通过提升非基础层纹理的采样比例,可有效降低单次采样的数据量,从而在保证视觉质量的前提下,显著优化GPU带宽与能耗表现。


    From UWA AI 问答

    Q:为什么不建议用LoadFromMemory接口?

    A:不建议大规模使用LoadFromMemory(含同步/异步版本)主要基于以下三方面性能缺陷,已在真实移动端项目中验证:

    一、显著更高的CPU与内存开销

    • 同步阻塞主线程:LoadFromMemory是完全同步调用,强制在主线程解压并构建AssetBundle对象,导致帧率卡顿,尤其在加载较大包(如含10张1024×1024纹理)时,耗时可达数十毫秒(对比LoadFromFile的零点几毫秒)。
    • 双倍内存驻留:需先将完整AssetBundle字节数组(如几十MB)全部载入内存,再解压/解析;而LoadFromFile仅加载头部(KB级),资源按需流式读取,内存占用极低。

    二、丧失底层IO优化能力

    • LoadFromFile在真机上利用系统文件句柄缓存、预读机制及OS磁盘缓存,对LZ4压缩包可直接映射解压,避免全量解压。
    • LoadFromMemory绕过文件系统,强制走内存拷贝+解压路径,无法享受任何OS级IO优化,且破坏Unity内部PreloadManager的加载队列与速率控制。

    三、加密需求存在更优替代方案

    • 若为防破解而加密AssetBundle,LoadFromMemory会引入额外解密内存副本(如解密后字节数组+AssetBundle对象),加剧内存压力。
    • 更佳实践:
      ✅ 对关键配置/脚本单独加密,资源文件(纹理、模型等)免加密(实际防护效果有限);
      ✅ 使用LoadFromFile+自定义偏移加载(offset参数)实现轻量混淆;
      ✅ WebGL等平台可先解密至内存再调用LoadFromMemoryAsync,但需严格复用byte数组避免内存膨胀。

    结论:除非必须动态解密或跨平台兼容性受限,否则应优先选用LoadFromFile(LZ4压缩+合理分包策略,兼顾加载速度、内存效率与热更新可行性。

    分享链接:
    https://www.uwa4d.com/main/uwa-shared.html?shareId=116ff3ca-b...

    无论是社区里开发者们的互助讨论,还是AI基于知识沉淀的快速反馈,核心都是为了让每一个技术难题都有解、每一次踩坑都有回响。本期分享分别来自UWA AI问答和UWA问答社区,希望这些从真实开发场景中提炼的经验,能直接帮你解决当下的技术卡点,也让你在遇到同类问题时,能更高效地找到破局方向。

    封面图来源于网络


    今天的分享就到这里。生有涯而知无涯,在漫漫的开发周期中,我们遇到的问题只是冰山一角,UWA社区愿伴你同行,一起探索分享。欢迎更多的开发者加入UWA社区。

    UWA官网:www.uwa4d.com
    UWA社区:community.uwa4d.com
    UWA学堂:edu.uwa4d.com
    官方技术QQ群:793972859

    原文: https://www.ivanturkovic.com/2026/02/25/ai-made-writing-code-easier-engineering-harder/

    核心观点

    AI 让“写代码”更容易,但让“做工程”更难。

    代码产出变快 → 期望值上升 → 工程师承担更多非编码工作 → 复杂度与压力同步上升。

    行业的“基线”悄悄提高,没人通知工程师。

    AI 提升速度后,组织默认你能做更多、更快、更广,但没有增加时间、资源或支持。

    工程师的职业身份被动重塑。

    从“创造者/工匠”变成“审阅者/监督者”,核心技能被边缘化,导致身份认同危机。

    AI 生成代码带来“监督悖论”:审阅比编写更难。

    AI 代码缺乏上下文与推理链 → 审查、调试、维护成本更高 → 认知负荷上升。

    角色范围膨胀、节奏加速、训练路径断裂,导致系统性倦怠。

    工程师承担更多产品、架构、测试、部署职责;新人失去练习场;组织误以为生产力提高。

    2025年5月,某头部社交平台安全团队监测到异常数据波动:某IP段12小时内注册153个新账号,注册设备、地理位置高度集中,指向境外云服务商弹性IP。这些账号注册后24小时内批量发布虚假投资广告,48小时内被封禁。过去6个月,该IP段注册账号超8000个,89%涉及违规——以“IP池+AI自动化”为核心的养号黑产产业链正加速迭代。
    面对黑产“动态IP池+生成式AI脚本”的组合攻击,传统风控手段(如单IP注册限制、静态验证码)逐渐失效。某社交平台安全负责人称,通过接入IP数据云实时查询接口,结合账号行为分析模型,构建“事前防御+事中监控+事后溯源”三重防线,注册账号违规率降低72%。

    一、黑产养号:低成本暴利,IP池与AI成核心武器

    黑产团伙养号模式标准化,IP资源池与AI自动化工具是核心基础设施:

    • IP来源多样化隐蔽化:利用代理服务器、云主机弹性IP、家庭宽带劫持、秒拨IP技术,快速切换攻击节点,规避风控规则。
    • AI自动化注册与孵化:生成式AI脚本生成虚假信息绕过验证,深度伪造行为模拟真人操作,实现账号全生命周期自动化管理。
      据行业权威研究机构发布的报告显示,单个黑产账号注册成本从2024年的0.1元降至0.08元。黑产通过广告、诈骗或刷量等手段可获利数元至数百元,利润率高达3500%。另据相关市场调研机构统计,2025年全球社交平台因虚假账号损失预计超220亿美元。

      二、传统风控困境:“单IP限制”为何失效?

      面对黑产规模化、智能化攻击,传统风控手段暴露三大短板:

    • 规则简单粗暴:单IP注册数量限制易被动态IP绕过;静态黑名单滞后,且易误伤正常用户。某直播平台曾因“单IP注册限制”误判35%的正常用户。
    • 无法应对AI伪造行为:AI可模拟“符合规则”的异常行为,设备指纹篡改使传统识别技术失效。
    • 全球化攻击溯源难:黑产使用境外云服务商IP,传统风控系统覆盖不足,加密通信与虚拟货币支付切断追踪路径。

      三、技术破局:IP数据云实现“动态风险评估”

      精准打击养号黑产,需从“静态封禁”转向“动态风险评估”,IP数据云的核心价值在于:

    • 实时查询:从“孤立IP”到“关联风险画像”:聚合全球IP历史行为数据,构建多维风险画像,标注风险等级、类型、关联账号数等。
      案例:某社交平台接入IP数据云接口后,发现某IP过去7天注册62个账号,51个因发布广告被封禁,关联设备90%使用云手机,注册与登录地理位置跨3个国家,系统自动拦截并触发人工复核。
    • 数据覆盖广:全球IP库+实时更新:覆盖全球220+国家/地区IP资源,与主流云服务商数据同步,新上线IP快速识别,历史行为追溯,动态风险评分。
      对比传统方案:

      四、实战效果:某社交平台“清朗行动2025”

      2025年Q2,某头部社交平台开展专项治理,通过“IP数据云+行为分析”联动打击养号黑产:

    • 注册环节:动态拦截高风险IP,对“高风险IP”直接封禁,“中风险IP”触发二次验证,“低风险IP”放行但限制初始功能。
    • 账号孵化期:行为分析模型实时监控,对异常账号限制功能,追溯关联信息,利用图计算技术发现隐蔽攻击链。
    • 数据成果:注册账号违规率下降72%,平台日均举报量减少48%,用户因诈骗导致的损失降低1.2亿元,成功溯源并打击3个境外黑产平台,封禁黑产账号超2000万个。
      平台安全负责人表示,IP数据云解决了“看得全”(全球IP覆盖)和“看得准”(结合历史行为数据区分正常用户与黑产IP)的问题,使风控系统更精准拦截攻击,减少对正常用户的干扰。

      五、未来挑战:AI养号与全球化黑产的双重威胁

      尽管当前技术提升风控效率,但黑产仍在迭代:

    • AI养号:从“规则绕过”到“行为模拟”,利用生成式AI模拟真人对话、朋友圈内容,深度伪造技术降低账号异常行为检测概率。
    • 全球化IP:从“集中攻击”到“分散渗透”,通过境外云主机、代理服务器分散攻击,利用隐私计算技术隐藏设备信息,虚拟货币支付、加密通信工具规避追踪。
      应对策略:
    • 技术层面:推广“IP数据云+联邦学习”,构建账号、IP、设备关联图谱,利用区块链技术实现风险账号不可篡改记录。
    • 合规层面:结合法规要求实现风险账号自动处置,推动国际执法合作打击跨境黑产基础设施。
    • 生态层面:与云服务商、运营商建立黑产IP实时共享机制,联合行业协会制定打击标准。

      结语:风控的本质是“成本博弈”

      黑产“低成本暴利”模式决定其不会停止攻击,但社交平台可通过IP数据云的“溯源能力”与行为分析的“预测能力”,抬高攻击成本。当黑产养一个账号成本从0.08元升至1元,而获利仅0.5元时,自然会转向其他目标。
      未来,随着AI、区块链、隐私计算等技术发展,社交平台与黑产的攻防战将进入“智能化、全球化、生态化”新阶段。唯有持续创新、协同治理,才能守护数字世界的清朗与安全。

    想起大学时期做过的恐怖梦中梦,让 AI 改编成了一篇文章,还挺有意思的,AI 甚至还附带着生成了一张图,场景还挺还原梦中场景的 😅

    这是我依据梦境记录的:
    1、这是个恐怖的梦,是双重梦境,就是梦中梦。
    2、背景是大学时期,在宿舍做的梦。
    3、梦境:某天晚上在宿舍入睡之后,梦到自己和舍友从学校周变不知不觉走到一个村子附近,村子不大,但周围都是荒草。我们从村子一边进入走过一排人家,没看到人,只看到很多人家门口有散落在地上的荒草,又绕到村子后面的公路上。这时候感觉起雾了,走着走着隐约听到唢呐的声音,再往前走就发现迎面走来的是一队送葬的队伍,他们身穿鲜红色衣服,都不是活人,而是纸扎的人,中间的棺材涂着黑色且光亮的漆,双方并没有发生任何交集,我拉着舍友快步走过去了。我们走出村子,接下来走到不认识的地方,从一座跨江大桥上走过去了,这大桥既能走车也能走人,两个人都发现天快黑了(不知道天为什么黑的这么快),就在过了桥不远处发现一个废弃的小木屋,门没有锁,两个人便走进去了,房间很小,分为里屋和外物屋,由于门不能锁,一直有风,就没有住外屋,两个人都住里屋,里屋有木床和土炕,一高一低,两个人便各自躺下睡着了。睡着之后我又开始做梦了,梦里第一个场景就是发现我们住的小木屋,竟然就是白天遇到送葬的队伍,他们下葬棺材的正上方,而且恐怖的是,那口棺材里的东西正在试图撑破棺材,然后爬出墓地,这时候我从第二重梦境里吓醒了,回到了第一层梦境,但知道那口棺材里的东西就快要出来了,就赶紧叫舍友,但他睡得很死,怎么也醒不过来。这时候棺材里那个东西已经破土而出了,跑到桥边跳进了江水里,我赶紧追出去在桥头看,忽然这东西在江水离似乎变身了,穿着黑色盔甲,浑身冒火跳上岸边要攻击我,此时我手里不知道从那里拿到类似三叉戟的武器(可能是从小木屋什么地方拿的)跟他打了起来,但一直打不过,我很着急,没想到这时候在宿舍我被舍友叫醒要去上课了,终于跳出了梦境。

    这里是让 AI 生成的:

    梦魇层级:红衣与焦土
    第一重:迷途的红白事
    大学宿舍的冷气似乎开得太足了,我翻了个身,意识却坠入了一个荒凉的午后。

    我和舍友阿强走在学校后山的小径上,不知为何,周围的景物变得陌生。视线所及之处,野草疯长,遮蔽了原本熟悉的校舍。穿过一片半人高的荒草地,一个死寂的村落突兀地出现在眼前。

    村子不大,家家户户门窗紧闭,门槛处散落着枯萎的乱草,像是一场盛大祭典后留下的残骸。我们绕过村后的公路,浓雾毫无征兆地漫了上来。

    “嘀——呐——”

    凄厉的唢呐声刺穿雾气。那一幕让我终生难忘:一支送葬队伍迎面走来,他们通体穿着鲜红色的寿衣。走近了才发现,那些抬筐、撒纸的“人”,全都是面色惨白、腮红如血的纸扎人。

    队伍中央,是一口黑得发亮的漆木棺材,在红衣的映衬下黑得深不见底。我们屏住呼吸,与这支寂静的队伍擦肩而过。奇怪的是,那些纸扎人仿佛无视了我们的存在,只有唢呐声在雾中回荡。
    image

    第二重:棺上的守墓人
    天色暗得诡异,像是被某种力量强行拽入了黑夜。穿过一座跨江大桥后,我们在荒野中发现了一座废弃的木屋。

    “凑合一晚吧,总比在外面淋雾强。”阿强说。

    木屋分里外两间,门栓早已腐朽。为了安全,我们挤在里屋,他睡土炕,我睡木床。疲惫排山倒海而来,我沉沉睡去。

    然后,我再次入梦。

    在梦里的梦中,我以“上帝视角”俯瞰着这座木屋。我惊恐地发现,这座木屋竟然精准地盖在白天那口黑棺的正上方!

    地底深处,那口漆黑的棺材正在剧烈颤动,指甲抓挠木板的声音穿透泥土,棺盖正在被一股蛮力撑开。某种“东西”正要破土而出,而它的出口,就是我们睡觉的床底!

    惊醒与厮杀:桥头的业火
    “快醒醒!阿强!”

    我猛地从二重梦境中惊醒,回到了木屋的现实。我大声嘶吼,拼命摇晃阿强,但他像是被梦魇住了一般,呼吸沉重却毫无反应。

    此时,地面开始震颤。我听到木屋底下的泥土崩裂声,那个东西出来了!它没有攻击木屋,而是发出一声令人胆寒的咆哮,冲向了大桥,纵身跃入滚滚江水中。

    我鬼使神差地追了出去,手里不知何时多了一柄沉重的三叉戟。

    江心之中,水流沸腾。那个东西从水中缓缓站起,它已不再是腐尸,而是披着一套墨黑色的重型盔甲,暗红色的火焰从盔甲的缝隙中喷涌而出,将江面映照得通红。

    它拖着火焰跳上岸,向我冲来。我挥动三叉戟迎敌,每一次碰撞都火星四溅,震得我虎口发麻。我感到绝望,那种无力感像潮水一样淹没了我,我根本打不过它……

    现实的回响
    “喂,别叫了!再睡这节课真要挂了!”

    阿强的一记闷拳砸在我的肩膀上。我猛地坐起身,发现自己正坐在宿舍的床位上,阳光透过窗帘缝隙照进来,有些刺眼。阿强正忙着收拾书包,一脸嫌弃地看着满头大汗的我。

    我下意识地看了看自己的手掌,那种紧握三叉戟的粗糙触感竟然还没完全消散。

    “阿强,”我心有余悸地问,“你昨晚梦见红衣服了吗?”

    他愣了一下,随即笑骂道:“我梦见漂亮学妹了。赶紧走,再晚没座了!”

    我背起书包出门,在踏出宿舍门的一瞬间,我忽然闻到,空气中隐约飘过一丝草木灰被烧焦的味道。

    单元格边框是指可以添加在单个单元格或一组单元格周围的线条。通过设置边框,可以实现多种效果,例如划分工作表中的不同区域、突出显示重要数据,或让报表整体看起来更加清晰美观。

    本文将介绍如何使用 Spire.XLS for .NET,在 C# 和 VB.NET 中实现为 Excel 添加或删除单元格边框的操作方法。

    安装 Spire.XLS for .NET

    在开始之前,需要先将 Spire.XLS for .NET 安装到您的 .NET 项目中。您可以将该产品包中的 DLL 文件手动添加为项目引用,也可以通过 NuGet 进行安装。

    DLL 文件可通过官网下载获取,或者直接在 NuGet 包管理器中搜索并安装。

    PM> Install-Package Spire.XLS

    在 C# 和 VB.NET 中为 Excel 添加单元格边框

    Spire.XLS for .NET 支持为 Excel 单元格添加多种类型的边框,包括左边框、右边框、上边框、下边框、对角线边框、内部边框和外部边框等。

    您既可以为单个单元格设置某一种边框,也可以为一个单元格区域批量添加多种边框。同时,还可以自定义边框的线条样式和颜色,以满足不同的排版需求。

    下面是为单元格或单元格区域设置不同类型、不同样式和不同颜色边框的主要步骤:

    1. 创建 Workbook 类的实例。
    2. 通过 Workbook.Worksheets[int] 属性,根据索引获取指定的工作表。
    3. 通过 Worksheet.Range[string] 属性,根据单元格名称获取指定的单元格区域。
    4. 通过 CellRange.Borders[BordersLineType] 属性,从单元格区域的 Borders 集合中获取指定类型的边框(如左、右、上、下或对角线边框)。
    5. 使用 IBorder.LineStyle 属性设置指定边框的线条样式。
    6. 使用 IBorder.Color 属性设置指定边框的颜色。
    7. 如需为单元格区域添加外部或内部边框,可调用 CellRange.BorderAround(LineStyleType, Color) 方法(添加外部边框)或 CellRange.BorderInside(LineStyleType, Color) 方法(添加内部边框)。需要注意,内部边框不能应用于单个单元格。
    8. 也可以通过 BordersCollection.LineStyle 和 BordersCollection.Color 属性,为整个单元格区域统一设置边框样式和颜色,然后再单独设置对角线边框的样式和颜色。
    9. 最后,使用 Workbook.SaveToFile() 方法保存结果文件。

    按照以上步骤,即可灵活地为 Excel 单元格添加各种边框效果。

    示例代码如下:

    using Spire.Xls;
    using Spire.Xls.Core;
    using System.Drawing;
    
    namespace AddCellBorders
    {
        class Program
        {
            static void Main(string[] args)
            {
                // 创建 Workbook 实例
                Workbook workbook = new Workbook();
                // 获取第一个工作表
                Worksheet sheet = workbook.Worksheets[0];
    
                // 为单元格 B2 设置左、右、上、下边框以及左上到右下的对角线边框
                CellRange range = sheet.Range["B2"];
                IBorder leftBorder = range.Borders[BordersLineType.EdgeLeft];
                leftBorder.LineStyle = LineStyleType.MediumDashDotDot;
                leftBorder.Color = Color.Red;
    
                IBorder rightBorder = range.Borders[BordersLineType.EdgeRight];
                rightBorder.LineStyle = LineStyleType.MediumDashed;
                rightBorder.Color = Color.Red;
    
                IBorder topBorder = range.Borders[BordersLineType.EdgeTop];
                topBorder.LineStyle = LineStyleType.Medium;
                topBorder.Color = Color.Red;
    
                IBorder bottomBorder = range.Borders[BordersLineType.EdgeBottom];
                bottomBorder.LineStyle = LineStyleType.Medium;
                bottomBorder.Color = Color.Red;
    
                IBorder diagonalUpBorder = range.Borders[BordersLineType.DiagonalUp];
                diagonalUpBorder.LineStyle = LineStyleType.Thin;
                diagonalUpBorder.Color = Color.Red;
    
                // 为单元格 C4 设置对角线边框
                range = sheet.Range["C4"];
                diagonalUpBorder = range.Borders[BordersLineType.DiagonalUp];
                diagonalUpBorder.LineStyle = LineStyleType.Double;
                diagonalUpBorder.Color = Color.Blue;
    
                IBorder diagonalDownBorder = range.Borders[BordersLineType.DiagonalDown];
                diagonalDownBorder.LineStyle = LineStyleType.Double;
                diagonalDownBorder.Color = Color.Blue;
    
                // 为单元格 D6 设置外边框
                range = sheet.Range["D6"];
                range.BorderAround(LineStyleType.Double, Color.Green);
    
                // 为单元格区域 E8:F10 设置内部边框
                range = sheet.Range["E8:F10"];
                range.BorderInside(LineStyleType.MediumDashed, Color.DarkGray);
    
                // 为单元格区域 F12:G14 同时设置内部和外部边框
                range = sheet.Range["F12:G14"];
                range.BorderInside(LineStyleType.MediumDashed, Color.Pink);
                range.BorderAround(LineStyleType.Medium, Color.Magenta);
    
                // 为单元格区域 G16:H18 设置所有边框
                range = sheet.Range["G16:H18"];
                range.Borders.LineStyle = LineStyleType.Thick;
                range.Borders.Color = Color.Cyan;
    
                // 为 G16:H18 区域设置对角线边框的线型和颜色
                diagonalUpBorder = range.Borders[BordersLineType.DiagonalUp];
                diagonalUpBorder.LineStyle = LineStyleType.Dotted;
                diagonalUpBorder.Color = Color.DarkGray;
    
                diagonalDownBorder = range.Borders[BordersLineType.DiagonalDown];
                diagonalDownBorder.LineStyle = LineStyleType.Dotted;
                diagonalDownBorder.Color = Color.DarkGray;
    
                // 保存结果文件
                workbook.SaveToFile("AddBorders.xlsx", ExcelVersion.Version2013);
            }
        }
    }

    在 C# 和 VB.NET 中删除 Excel 单元格边框

    如果需要移除某个单元格或单元格区域的所有边框,可以将 CellRange.Borders.LineStyle 属性设置为 LineStyleType.None,即可清除该区域的边框样式。

    具体操作步骤如下:

    1. 创建 Workbook 类的实例。
    2. 使用 Workbook.LoadFromFile() 方法加载需要处理的 Excel 文件。
    3. 通过 Workbook.Worksheets[int] 属性,根据索引获取指定的工作表。
    4. 通过 Worksheet.Range[string] 属性,根据单元格名称获取目标单元格或单元格区域。
    5. 将 CellRange.Borders.LineStyle 属性设置为 LineStyleType.None,以移除该区域的所有边框。
    6. 使用 Workbook.SaveToFile() 方法保存结果文件。

    按照以上步骤,即可快速删除 Excel 中指定单元格或区域的边框。

    示例代码如下:

    using Spire.Xls;
    
    namespace RemoveCellBorders
    {
        class Program
        {
            static void Main(string[] args)
            {
                // 创建 Workbook 实例
                Workbook workbook = new Workbook();
                // 加载 Excel 文件
                workbook.LoadFromFile("AddBorders.xlsx");
    
                // 获取第一个工作表
                Worksheet sheet = workbook.Worksheets[0];
    
                // 移除单元格区域 G16:H18 的所有边框
                CellRange range = sheet.Range["G16:H18"];
                range.Borders.LineStyle = LineStyleType.None;
    
                // 保存结果文件
                workbook.SaveToFile("RemoveBorders.xlsx", ExcelVersion.Version2013);
            }
        }
    }

    申请临时许可证

    如果您希望去除生成文档中的评估提示信息,或解除功能限制,可以申请一份为期 30 天的试用许可证。

    导读: 想象一下,只需要一段普通手机拍摄的单目视频,AI 就能瞬间为你构建出一个可交互、可编辑、可全视角观看的 4D 世界。

    近日,来自中科院自动化所(CASIA)与 CreateAI 的研究团队联合发布了最新的​通用 4D 世界模型​——​NeoVerse​。该模型彻底打破了以往 4D 建模对专业多视角数据或复杂位姿预处理的依赖,​通过学习互联网上 100 万条“野外”单目视频​,实现了从视频重建到高保真生成的跨越式进化。

    一、论文概述

    论文名称:NeoVerse: Enhancing 4D World Model with in-the-wild Monocular Videos

    论文链接:https://arxiv.org/pdf/2601.00393

    项目地址:https://neoverse-4d.github.io/

    👇 扫码阅读论文,领 H800GPU 算力

    NeoVerse 的思路是把这件事做成一条可规模化的训练范式,让模型能够利用海量野外视频持续变强。

    论文在 图 1 给出清晰的流程:先前向重建动态 4D 高斯表示(4DGS),再从新视角渲染得到低质量的退化渲染,将其作为条件输入生成模型;训练时以原视频作为目标,使生成模型学会从低质量新视角渲染生成高质量的新视角结果。

    二、为什么需要 NeoVerse

    4D 世界模型是融合 3D 空间维度(长、宽、高)与 1D 时间维度的场景建模技术,核心是对动态场景进行时空一体化表征,既还原三维空间结构,又捕捉时间维度的运动变化,实现对真实世界的动态数字化复刻。

    ​为什么之前的 4D 世界模型很难利用到海量野外视频?​论文认为有两大原因:

    1. ​数据可扩展性有限:​不少工作依赖难采集的多机位动态数据,导致泛化与能力上限被数据类型锁死。
    2. ​训练可扩展性有限:​另一类方法需要繁重的离线预处理(例如离线深度、离线重建、额外 3D 检测等),这会导致计算负担重、训练方案僵化。

    NeoVerse 的核心思路就是针对这两点“对症下药”:把整条从重建到生成的训练pipeline​​设计为可扩展、可端到端的形式​,使模型能够直接利用“廉价且多样”的野外单目视频持续学习,而不是被数据形态或离线流程拖住。

    三、核心技术

    1. ​ 总体框架

    如果只靠生成模型直接从单目视频“脑补”新视角,为什么容易漂、闪、细节虚?

    NeoVerse 的策略是把任务拆成两步:先用重建端给出一个几何上自洽的动态世界骨架(4DGS),再用生成端把“骨架渲染出来但有缺陷的画面”提升成高质量视频。

    图 2 讲的就是这条链路:重建端是 pose-free、feed-forward 的 4DGS 重建;生成端把 4DGS 在新视角渲染得到的 degraded renderings(退化渲染)作为条件输入扩散模型;训练时用“退化条件 → 原视频帧”为监督对,使模型学会从低质量渲染生成高质量结果。

    1. 为什么要“双向运动建模”

    很多人会直觉认为:动态重建只要“逐帧估”就行。但单目视频里最难的是时间一致性:既要让物体在 t→t+1 连贯,也要让它在 t→t−1 同样合理,否则中间帧插值会抖、会错位。

    论文解释得很明确:他们显式区分​ t→t+1 ​t→t−1 的瞬时运动,用双向预测来服务“时间插值”(而不只是为了多一个分支)。 公式 (1) 表明,把帧特征沿时间切成两段,分别做一次 Cross-Attention,得到前向 motion feature 和后向 motion feature,分别刻画“往前一帧怎么动”和“往后一帧怎么动”。

    公式 (2) 表明,每个高斯点不只是“位置/旋转/尺度/颜色”这种静态属性,还带着双向线速度

    $$
    v_i^+,\ v_i^-
    $$

    ,双向角速度

    $$
    w_i^+,\ w_i^-
    $$

    ,以及一个生命周期$$\tau\_i$$。这意味着:模型不仅知道“点在哪里”,还知道“它往前/往后会怎么走”,并且知道“这个点在时间上该持续多久”。

    1. 训练为什么能更快

    这里的关键不是“少算几帧”,而是:​少算的同时还要保证时序正确​。论文里说得很清楚:长视频若逐帧在线重建会成为训练瓶颈,所以只取 K 个关键帧做重建输入,但渲染覆盖全部 N 帧,因为渲染比网络计算高效。

    那非关键帧怎么来?公式 (3)(4)(5) 的意义是:用双向速度/角速度把关键帧的高斯“平移/旋转”到任意时间戳(默认短时间内运动近似线性)。

    尤其公式 (5) 里的

    $$
    \tau_i
    $$

    很重要:它控制 opacity 的衰减,让高斯点在时间上​自然淡入淡出​,避免某些点突然出现/消失造成闪烁;论文中同时解释了 $$\tau\_i-1$$时衰减几乎没有,否则,$$\tau\_i$$ 衰减迅速。

    1. 没有多视角真值,训练对从哪来?

    单目视频没有多视角 GT,生成模型凭什么学会“把新视角渲染变好”?

    生成模型需要学习“从低质量新视角渲染到高质量新视角”的映射,因此必须构造这种训练对;多视角数据好办,但野外单目视频就得自己模拟退化。

    图 3 画的三类退化不是随便挑的,它们基本对应单目重建/渲染最常见的错误形态:

    ​遮挡缺失(图 3 - a):​用深度判断从新轨迹看哪些高斯不可见,直接裁剪掉再渲染回原视角,得到“该缺的地方缺掉”的遮挡退化。

    ​飞点与畸变(图 3 - b、c):​先在新轨迹渲染深度并做平均滤波,再按滤波深度调整高斯中心;渲染回原视角会出现边缘飞点,滤波核更大还能模拟更宽的畸变。

    这一步的价值在于:它让模型见过“野外单目重建真实会出现的坏条件”,训练就不再依赖昂贵的多机位数据,从而更可规模化。

    1. 生成端为什么“既听镜头指挥、又能修伪影”

    要让扩散模型真正“听懂镜头轨迹”,仅有 RGB 远远不够。论文把条件做成多模态:RGB、Depth、由 opacity 二值化的 Mask(指示空洞区域),并额外计算 Plücker embedding 来显式提供 3D 相机运动信息。

    然后引入一个控制分支来注入这些条件,并且训练时只训练控制分支、冻结原视频生成模型——这样做一方面为了训练效率,另一方面让整个方案能接入更强的蒸馏/LoRA 加速生成。

    四、实验与应用

    1. 重建效果

    先明确一点:这里的重建指标其实在回答同一个问题——你从视频里还原出来的 3D/4D 世界,渲染回去像不像、稳不稳、有没有“假细节”。

    PSNR/SSIM 越高​,通常表示画面更接近真实、结构更一致;​LPIPS 越低​,表示从“人眼感知”角度更接近真实,更少“看起来不对劲”的伪影。

    如表 1(静态),与 VRNeRF 与 Scannet++ 相比,论文的 PSNR/SSIM 更高、LPIPS 更低,说明它不仅更清晰,也更“像真”。

    如表 2(动态),动态场景对重建更具挑战:场景中存在物体运动与频繁遮挡,模型不仅要还原几何结构,还要保证时间上的连续一致,因此更容易出现伪影或指标下降。但在 ADTDyCheck 两个动态数据集上,NeoVerse 仍取得了表中最优结果。更关键的是,表注中 †​ 标明部分对比方法需要额外输入​相机位姿​,而 NeoVerse 在 pose-free(无需位姿输入) 的设定下依然优于这些“输入条件更强”的基线,从而凸显其方案在真实野外单目视频场景中的竞争力。

    1. 生成效果

    一个现实痛点是:​镜头一大幅移动,新视角生成要么轨迹飘,要么画质糊/闪。​论文中提到:​相关工作通常存在“生成质量 vs 轨迹可控性”的权衡​。

    图 4 就是权衡的直观证据:Trajectory Crafter 更像“重建驱动”,轨迹可控性好,但生成质量更差;ReCamMaster 更像“纯生成”,画质好但轨迹控制不精确;NeoVerse 试图两者兼得,实现了更好的生成质量,黄色框标出其他方法的伪影/问题区域。

    表 3(VBench)则把“好看不好看、稳不稳”量化了:包括主观一致性、背景一致性、时间闪烁、运动平滑等维度,并且很有用的一点是——把推理时间拆成 Reconstruction / Generation / Total。生成端时间基本稳定在 18s,而关键帧越多,重建端耗时越长;这使得“质量 vs 速度”可以通过关键帧数直接调节。

    1. 哪些设计真的在贡献效果

    表 4(消融)不是简单“去掉模块看掉点”,它在回答两件事:

    双向运动建模有没有必要? 去掉它(w/o Bidirectional Motion)性能下降,论文还明确解释了做法:跳过 公式(1) 直接从帧特征预测 motion,会带来掉点,从而证明 motion 建模机制有效。

    正则有没有必要? 去掉 regularization 会更差,论文解释这是为了防止模型学“透明高斯走捷径”。

    纯重建(Reconstruction part) vs 全流程(w/ Generation),后者在 DyCheck 上从 11.56 提升到 14.59(PSNR),说明“生成阶段不是锦上添花,而是在系统层面显著拉升最终质量”。

    图 7 表明:如果不训练模拟退化样本,生成模型会“相信条件里的几何伪影”,导致 ghosting 或模糊;加入退化模拟后,模型学会抑制伪影,并在遮挡/扭曲区域“补出更真实的细节”。

    1. 下游应用

    因为 NeoVerse 有一个“随时间变化的 4D 表示”,所以它不仅能渲染,还能做空间与时间上的操作。

    3D tracking(图 9):用预测的 3D flow 在相邻帧之间关联最近的高斯点,从而实现 3D 跟踪可视化。

    Video editing(图 10):因为生成端有二值 mask 条件 + 文本条件,所以可以在分割模型辅助下做视频编辑,示例是“白车改红车”“茶壶变透明”。

    Video stabilization / super-resolution(图 1):稳定的核心是“平滑预测相机轨迹”;超分的核心是“4D 高斯渲染分辨率可灵活提高,再用生成端出更高分辨率视频”。

    1. 它为什么更“像能做成产品”的路线?

    NeoVerse 不只是提出一个结构,而是把“数据—训练—评测”按可规模化路线补齐了,这也是它能在大镜头运动下同时做到“轨迹可控 + 画质稳定”的重要前提。

    五、结论

    1. 三点启发

    • “单目 + 大规模”可行的关键不在网络多大,而在训练对怎么造:在线退化模拟把“无 GT”的问题变成“可监督”。
    • 时间一致性要服务“插值与效率”:双向运动不仅是精度点,更直接支撑“稀疏关键帧重建 + 全帧渲染”的训练提速策略。
    • 生成模型不一定要全量重训:用控制分支注入多模态条件,冻结主干,效率与可迁移性更好。
    1. 边界与局限

    论文明确写了局限:NeoVerse 要求数据具备正确的底层 3D 信息,因此不适用于 2D 卡通等缺乏 3D 几何线索的数据;此外作者也承认 1M 片段 仍不算“特别大”,未来希望继续扩数据。

    GitLink 开源创新服务平台与 Lab4AI 大模型实验室联合发起​「论文头号玩家」论文复现计划​。寻找百万「论文头号玩家」计划 | 首批复现体验官开放申请,最高可获 500 元算力金!本计划开放​高性能 H800 GPU 算力​,旨在降低复现门槛,推动学术成果的实践转化。

    参与活动您将获得:

    本文由 AI 深度解读,转载请联系授权。关注“大模型实验室 Lab4AI”,第一时间获取前沿 AI 技术解析!

    https://www.lab4ai.cn/paper/detail/reproductionPaper?utm_sour...

    🔗 官网: http://bookletai.org/

    🎁 完全免费使用,登录即赠送积分,无需付费!


    📖 产品介绍

    BookletAI 是一个 AI 驱动的小册子生成器,只需输入主题,3 分钟自动生成精美的电子书/小册子。

    核心功能:

    • ✅ AI 自动生成内容 - 无需手动编写
    • ✅ 智能配图 - 自动搜索真实图片 + AI 生成插图
    • ✅ 网络搜索 - 自动搜集权威资料
    • ✅ 多语言支持 - 支持 26 种语言
    • ✅ 在线编辑 - 支持二次修改
    • ✅ 多种导出 - PDF 、HTML5 格式
    • ✅ 一键分享 - 生成分享链接


    💡 解决的问题

    传统方式制作小册子的痛点:

    • ❌ 收集资料耗时 - 需要几小时搜索整理
    • ❌ 设计排版困难 - 不会设计软件
    • ❌ 配图麻烦 - 找不到合适的图片
    • ❌ 内容编写费力 - 不知道怎么写

    BookletAI 的解决方案:

    • ✅ 3 分钟完成 - AI 自动完成所有工作
    • ✅ 专业排版 - 自动生成精美设计
    • ✅ 智能配图 - AI 自动搜索和生成图片
    • ✅ 高质量内容 - AI 自动编写专业文案

    适用场景:

    1. 教育培训 - 快速制作课程讲义、学习资料
    2. 营销推广 - 制作产品手册、宣传资料
    3. 知识分享 - 制作电子书、教程指南
    4. 旅游攻略 - 制作旅行指南、景点介绍
    5. 企业培训 - 制作员工手册、培训材料


    🎯 效果展示

    示例作品:《北京故宫·紫禁城旅游指南》

    📱 在线预览: https://bookletai.org/product-detail.html?contentId=01bdb85e9a294f65861d7b874bb94df9

    这是一份 4 页的故宫旅游指南,包含:

    第 1 页 - 封面

    • 故宫太和殿全景大图
    • 标题"皇城遗韵"
    • 副标题"探寻六百年皇家文明"

    第 2 页 - 历史与建筑

    • 故宫历史沿革介绍
    • 建筑规模数据( 72 万平方米,8700 余间房屋)
    • 布局特色说明(中轴线对称,三大殿、后三宫)
    • 配图:太和殿、故宫平面图

    第 3 页 - 珍藏文物

    • 珍宝馆介绍(红珊瑚狮子、东珠朝珠)
    • 书画馆介绍(《清明上河图》)
    • 钟表馆介绍(中外钟表千余件)
    • 瓷器馆介绍(宋元明清精品瓷器)

    第 4 页 - 游览攻略

    • 入园须知(午门入、神武门出)
    • 开放时间(旺季/淡季)
    • 交通建议(地铁、公交)
    • 推荐路线(中轴线游览路线图)

    作品特点:

    • 📖 排版精美,图文并茂
    • 🎨 配色专业,视觉效果出色
    • 📝 内容详实,信息丰富
    • 🌐 支持在线预览和 PDF 下载


    🔧 技术说明

    基于 Claude Agent SDK 构建,通过 AI Agent 自动化完成搜索、内容生成、配图、排版全流程。前端 Vue 3 + SSE 实时通信,后端 Java + Python AI 服务。


    🚀 立即体验

    🔗 官网: http://bookletai.org/

    📱 示例作品: https://bookletai.org/product-detail.html?contentId=01bdb85e9a294f65861d7b874bb94df9

    🎁 完全免费,登录即送积分,无需付费即可体验完整功能!


    欢迎大家试用并提供反馈!大家好!

    今天给大家分享一个免费的 AI 工具 - BookletAI,可以一键生成精美的小册子/电子书。

    主要特点

    • 完全免费:无需注册,无需登录
    • 多语言支持:支持 26 种语言,包括中文、英文、日文等
    • AI 驱动:自动生成高质量内容
    • 多种导出格式:支持 PDF 、HTML5 等格式
    • 适用场景广泛:教育、营销、非营利组织等

    使用场景

    1. 教育工作者 - 快速制作课程材料、学习指南
    2. 内容创作者 - 制作电子书、知识付费内容
    3. 营销团队 - 制作产品手册、客户提案
    4. 个人用户 - 整理知识、分享经验

    网站地址

    http://bookletai.org/

    欢迎大家试用并提供反馈!