深度学习的工程化落地,早已不是纸上谈兵的事。从卷积神经网络到Transformer,从目标检测到大模型私有化部署,技术栈不断延伸,工程师面临的知识体系也越来越庞杂。现根据中际赛威工程师培训老师的一份深度学习进阶的技术路线图,来分析解读一下从基础原理到前沿应用的多个关键节点。
图片
一、从基础到进阶:构建深度学习的完整认知深度学习的起点,是对神经网络基本结构的理解。
BP神经网络、卷积神经网络(CNN)、循环神经网络(RNN)构成了三大支柱。激活函数引入非线性,损失函数衡量预测偏差,优化算法如SGD、Adam则负责更新权重。反向传播算法是训练的核心,梯度从输出层向输入层逐层传递,每一层的参数据此调整。动手构建一个简单的神经网络,是理解上述概念最直接的方式。数据预处理(归一化、增强)和模型评估(准确率、召回率、F1-score)同样不可忽视。
二、卷积神经网络:从图像分类到特征可视化CNN的演进脉络清晰。
AlexNet点燃了深度学习热潮,VGGNet用更深的网络和更小的卷积核提升性能,GoogleLeNet引入Inception模块,在控制计算量的前提下增加网络宽度。ResNet通过残差连接解决了深层网络的梯度消失问题,DenseNet进一步强化了特征复用。理解CNN不能只停留在搭积木的层面。我们会从中发现,掌握“中间隐层特征的可视化”非常关键——它能让人直观看到不同层学到了什么:浅层学习边缘纹理,深层学习语义概念。迁移学习是高效利用预训练模型的技巧,学习率衰减、模型预训练方式等细节直接影响效果。实践项目包括数字图片分类、卷积核特征提取分析、以图搜图、海量蒙文识别等。
三、目标检测:从两阶段到单阶段目标检测的任务是“在哪里”和“是什么”。
RCNN系列开创了候选区域+分类的思路:RCNN生成候选框后逐一分类;Fast-RCNN引入RoI Pooling实现端到端训练;Faster-RCNN加入RPN网络,将候选框生成也纳入网络;Mask RCNN进一步增加了实例分割分支。YOLO和SSD走的是另一条路线——将检测视为回归问题,直接预测边界框和类别,速度更快,适合实时场景。UNet及其与残差网络的结合,在医学图像分割中表现出色。实践项目包括人脸检测、OCR字体定位识别、气象识别、视频分类、政务大厅视频监控等。
四、循环神经网络与序列建模RNN专门处理序列数据,但存在梯度消失或爆炸问题。
数据预处理(序列填充、截断)、数据集划分(训练/验证/测试)是基础。GRU作为LSTM的简化变体,参数更少,训练更快。双向RNN(Bi-RNN)能同时利用过去和未来的上下文信息,适合文本分类等任务。序列到序列(Seq2Seq)模型由编码器和解码器组成,注意力机制通过动态计算输入序列不同位置的权重,大幅提升了长序列的处理能力。
五、自注意力与Transformer架构Transformer是当前大模型的基石。
自注意力机制计算序列中任意两个位置的相关性,多头注意力让模型从不同子空间捕捉信息,位置编码为序列注入位置信息。BERT采用双向预训练,GPT采用单向自回归,前者擅长理解任务,后者擅长生成任务。我们在实战中发现,基于Transformer做分类任务时,数据不平衡和领域适应性是绕不开的问题,需要在模型选择与调优上投入大量精力。
六、本地大模型私有化部署大模型的本地部署已成为企业级应用的刚需。
Deepseek-R1蒸馏版(7B到70B)部署流程包括模型获取、推理服务启动(参数如trust_remote_code、max_model_len)、服务验证与API调用。671B满血版需要16张A100(700G显存)和2T硬盘空间。Llama-3-8B的快速部署涉及FP8量化加速和REST API调用。
七、大模型微调:从数据准备到领域适配微调是让通用大模型适配垂直领域的核心手段。
数据准备是关键——JSONL格式,每条包含instruction/input/output,来源包括财报、券商研报、金融问答等。SentencePiece用于专业术语的tokenization重组。QLoRA等参数高效微调技术,在有限显存下也能完成大模型微调。RAG模式适合知识频繁更新的场景,微调模式适合格式固定、领域特有的任务。
八、知识库建设与RAG实战RAG(检索增强生成)是企业知识库问答的主流方案。
架构设计涵盖数据层(Wind API实时获取宏观指标+PDF解析)、推理层(Deepseek-R1生成核心,Mistral-8x7B事实核查)、评估层(Rouge-L评估一致性,FinBERT检测矛盾)。LlamaIndex构建行业知识图谱,FAISS向量库实现百万级文档秒级检索。记忆管理缓存最近轮次的对话摘要,CoT提示工程增强推理能力。风控拦截通过关键词过滤和置信度阈值设定,在softmax概率<0.7时触发人工接管。
深度学习的进阶之路,不是追逐热点,而是构建从原理到应用的全链路能力。从CNN到Transformer,从目标检测到大模型部署,每一步都需要理论与实践的结合。工程师高培认为,掌握这些关键技术,正是当下AI从业者面临的重要课题。

内部系统日活突破千万后,运维团队发现一个尴尬的问题:每次用户请求都要调用外部IP查询API,不仅每月产生数万元账单,还因为网络抖动导致P99延迟飘到200ms以上。更麻烦的是,安全团队提出“所有IP数据不得出境”,而第三方API的服务器恰好设在海外。几番讨论后,我们决定自建一套私有化IP查询平台。本文完整记录这个项目的技术选型、落地过程和踩坑经验,希望对有类似需求的团队有所启发。

核心结论:自建IP查询平台最经济的路径不是从零采集数据,而是采购成熟的商业IP离线库作为数据基底,结合内存映射(mmap)和轻量级HTTP服务完成私有化部署。整套方案可在一天内跑通,查询延迟稳定在0.2ms以内,单机QPS突破250万,且数据完全闭环,满足内网合规要求。下文将从数据源、建库、API封装到更新机制逐一拆解。
如何自建IP地址查询定位平台?从数据采集到API发布全流程指南

一、数据源选型:自采还是采购?

数据源是平台的根基,主要有三种选择:

数据源类型代表产品优点缺点
免费在线工具IPing完全免费,支持批量查询和 API 调用,适合快速诊断仅支持 IPv4,精度区县级,无离线部署
通用数据服务IPnews支持双栈,提供离线库,免费版每月 10 万次请求,满足中小企业本地化部署定位精度城市级,国内部分地区精度有限
企业级商业库IP数据云街道级精度、日更机制、20+ 维度字段,支持双栈和私有化离线部署需要采购预算

如果追求生产级的稳定性、数据不出域的合规性,以及街道级的高精度,IP数据云是更稳妥的选择。考虑到服务上线后日均查询量可能过亿,且需要在内网环境稳定运行,我们最终采购了IP数据云的离线库作为基底。

二、建库与索引:内存是关键

离线库的本质是一个“IP段 → 属性”的映射表。商业库通常会提供二进制文件,但你需要设计高效的加载和查询机制。

1. 数据结构设计

假设你从商业库导出了IP段列表,可以用定长结构存储:

typedef struct {
    uint32_t start_ip;   // 起始IP(主机字节序)
    uint32_t end_ip;     // 结束IP
    uint16_t geo_id;     // 地理位置索引
    uint8_t net_type;    // 网络类型
    uint8_t is_proxy;    // 是否代理
    uint16_t risk_score; // 风险评分
} ip_record_t;

每条记录仅12字节。若只维护国内常用段(约30万条),总数据量仅3.6MB,完全可以常驻内存。

2. 加载方式:mmap vs 全量读入

全量读入需要malloc然后memcpy,会占用双倍内存。更好的做法是用mmap直接映射文件到进程地址空间:

int fd = open("ipdb.bin", O_RDONLY);
struct stat sb;
fstat(fd, &sb);
void *addr = mmap(NULL, sb.st_size, PROT_READ, MAP_SHARED, fd, 0);
ip_records = (ip_record_t *)addr;
record_count = sb.st_size / sizeof(ip_record_t);

这样多个进程可以共享同一份物理内存,启动速度快,且不消耗额外内存。

3. 查询算法:二分查找

因为记录按start_ip升序排列,可以直接二分:

uint16_t lookup_geo_id(uint32_t ip) {
    int lo = 0, hi = record_count - 1;
    while (lo <= hi) {
        int mid = (lo + hi) >> 1;
        if (ip < ip_records[mid].start_ip)
            hi = mid - 1;
        else if (ip > ip_records[mid].end_ip)
            lo = mid + 1;
        else
            return ip_records[mid].geo_id;
    }
    return 0; // 未找到
}

单次查询约18次比较,耗时可控制在0.1-0.2ms。

三、API封装:让业务系统调用

将上述能力封装成HTTP服务,业务方只需GET /ip/query?ip=xxx即可获取结果。

使用Flask快速搭建(Python示例)

import ipdatacloud
from flask import Flask, request, jsonify

app = Flask(__name__)

# 全局加载一次离线库
db = ipdatacloud.IPDatabase.load("/data/ipdb/ipdata.xdb")

@app.route('/ip/query')
def query():
    ip = request.args.get('ip')
    if not ip:
        return jsonify({'error': 'missing ip'}), 400
    r = db.query(ip)
    if not r:
        return jsonify({'status': 'not_found'}), 404
    return jsonify({
        'ip': ip,
        'country': r.country,
        'province': r.province,
        'city': r.city,
        'net_type': r.net_type,
        'risk_score': r.risk_score
    })

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8080, threaded=True)

部署后测试:单机(4C/8G)轻松支撑2万QPS,P99延迟稳定在1ms以内(含网络开销)。如果使用C++/Go实现,QPS可再提升一个数量级。

四、数据更新:不停机热切换

商业库通常每日提供增量包。为了做到更新不中断,我们采用双目录原子切换

  1. 下载新库到/data/ipdb/new/
  2. 校验MD5
  3. 执行ln -snf /data/ipdb/new /data/ipdb/current
  4. 业务进程监控符号链接变化,自动重新加载(或使用inotify

这样旧请求仍使用老库,新请求切换到新库,完美零停机。
双区热切换更新流程图,展示从下载新库、校验、写入备用区、原子切换符号链接到业务进程感知的完整流程,实现零停机更新。

五、成本与收益

自建平台上线后,我们的变化:

指标之前(第三方API)之后(自建)
月成本≈3.5万元0(采购已摊销)
P99延迟80-200ms0.8ms
数据出境
单日调用上限API限流无限制

安全团队终于满意了,运维也再没收到过API超时告警。
私有化IP查询平台整体架构图,展示业务服务通过HTTP API调用内存离线库,下方为每日更新流程(拉取、校验、切换、商业库),所有组件内网部署。

六、总结

自建IP查询平台不是造轮子,而是用合理的工程投入换取性能、成本和合规性三重收益。关键步骤

  • 选择成熟的商业离线库作为数据基底
  • 用mmap + 二分查找实现内存级查询
  • 封装HTTP API供内部服务调用
  • 设计热更新机制保证服务不中断

如果你的团队也被第三方API的延迟、限流或数据出境问题困扰,不妨花一两天时间搭建一个原型。从采购一份离线库开始,你可能很快就会发现:内网毫秒级查询的体验,比想象中更丝滑。

PDF 文档作为一种广泛使用的文件格式,常常包含丰富的内容元素——从简单的文字段落,到复杂的数据表格,再到精美的图片和图表。当我们需要对这些内容进行二次利用或数据分析时,如何高效地从 PDF 中提取这些不同类型的元素就成为了一个关键问题。

本文将介绍如何使用 Python 和 Spire.PDF 库来提取 PDF 文件中的文本、表格和图片,帮助您将静态的 PDF 文档转换为可编辑、可分析的数据资源。

为什么需要提取 PDF 内容?

从 PDF 中提取内容在实际工作中有着广泛的应用场景:

  • 数据再利用:从报告或文档中提取文本内容,用于其他文档或系统
  • 数据分析:提取表格数据进行统计分析或导入数据库
  • 素材收集:提取图片用于演示文稿、网站或其他设计项目
  • 内容归档:将 PDF 内容转换为结构化格式便于检索和管理
  • 自动化处理:批量提取多个文档的内容,提高工作效率

通过 Python 自动化这些提取操作,可以显著减少手动复制粘贴的工作量,并提高数据处理的准确性。

环境准备

首先,需要安装 Spire.PDF for Python 库。可以通过 pip 命令轻松完成安装:

pip install Spire.PDF

安装完成后,即可在 Python 脚本中导入该库并使用其提供的内容提取功能。

提取 PDF 中的文本

提取整页文本

最基础的提取操作是从 PDF 页面中提取所有文本内容。Spire.PDF 提供了 PdfTextExtractor 类来实现这一功能,它能够智能识别页面中的文本布局并保持原有的阅读顺序。

以下代码展示了如何从 PDF 的第一页提取文本并保存到文件:

from spire.pdf.common import *
from spire.pdf import *

def WriteAllText(fname: str, text: List[str]):
    """辅助函数:将文本列表写入文件"""
    fp = open(fname, "w", encoding="utf-8")
    for s in text:
        fp.write(s)
    fp.close()

# 定义输入和输出文件路径
inputFile = "./Demos/Data/PDFTemplate-Az.pdf"
outputFile = "ExtractTextFromParticularPage.txt"

# 创建 PDF 文档对象
doc = PdfDocument()
# 加载 PDF 文件
doc.LoadFromFile(inputFile)

# 获取第一页
page = doc.Pages[0]

# 创建文本提取器并保持空白格式
textExtractor = PdfTextExtractor(page)
option = PdfTextExtractOptions()
text = textExtractor.ExtractText(option)

# 将提取的文本写入文件
WriteAllText(outputFile, text)
doc.Close()

提取 PDF 第一页中的文本

这个示例展示了文本提取的基本流程:

  1. 加载 PDF 文档并获取目标页面
  2. 创建 PdfTextExtractor 对象用于文本提取
  3. 配置 PdfTextExtractOptions 选项(可选)
  4. 调用 ExtractText 方法提取文本内容
  5. 将结果保存到文本文件

PdfTextExtractOptions 允许您自定义提取行为,例如是否保留空白字符、如何处理换行符等,这为不同场景下的文本提取提供了灵活性。

提取特定区域的文本

有时候我们只对 PDF 页面中的某个特定区域感兴趣,比如表单字段、标题部分或某个数据块。Spire.PDF 支持通过定义矩形区域来精确提取指定范围内的文本。

以下示例演示了如何从页面的特定矩形区域提取文本:

from spire.pdf.common import *
from spire.pdf import *

def WriteAllText(fname: str, text: List[str]):
    """辅助函数:将文本写入文件"""
    fp = open(fname, "w", encoding="utf-8")
    for s in text:
        fp.write(s)
    fp.close()

# 定义输入和输出文件路径
inputFile = "./Demos/Data/ExtractTextFromSpecificArea.pdf"
outputFile = "ExtractTextFromSpecificArea.txt"

# 加载 PDF 文件
pdf = PdfDocument()
pdf.LoadFromFile(inputFile)

# 获取第一页
page = pdf.Pages[0]

# 从页面的特定矩形区域提取文本
# RectangleF 参数:x坐标, y坐标, 宽度, 高度
pdfTextExtractor = PdfTextExtractor(page)
pdfTextExtractOptions = PdfTextExtractOptions()
pdfTextExtractOptions.ExtractArea = RectangleF(80.0, 180.0, 500.0, 200.0)
text = pdfTextExtractor.ExtractText(pdfTextExtractOptions)

# 保存文本到文件
sb = []
sb.append(text)
WriteAllText(outputFile, sb)
pdf.Close()

这段代码的关键在于 RectangleF 参数的设置:

  • x坐标和y坐标:定义矩形区域左上角的位置(单位为点,1点=1/72英寸)
  • 宽度和高度:定义提取区域的大小

通过精确控制这些参数,您可以只提取感兴趣的区域,避免获取无关内容。这种方法特别适合处理结构化的 PDF 表单、发票或报表。

提取 PDF 中的图片

PDF 文档中的图片可能是产品照片、图表、Logo 或其他视觉元素。Spire.PDF 提供了高效的方法来提取这些图片,最常用的方式是借助 PdfImageHelper 工具类。

使用 PdfImageHelper 提取图片

以下代码展示了如何遍历 PDF 页面中的所有图片并将其保存为单独的 PNG 文件:

from spire.pdf.common import *
from spire.pdf import *

# 创建 PdfDocument 对象
doc = PdfDocument()
# 加载 PDF 文档
doc.LoadFromFile("输入文档.pdf")

# 创建 PdfImageHelper 对象
image_helper = PdfImageHelper()

image_count = 1
# 遍历文档中的页面
for i in range(doc.Pages.Count):
    # 获取当前页面中的图片信息集合
    images_info = image_helper.GetImagesInfo(doc.Pages[i])

    # 遍历图片信息并保存图片
    for j in range(len(images_info)):
        image_info = images_info[j]
        # 设置输出文件名
        output_file = f"图片-{image_count}.png"
        # 直接通过 Image 对象保存文件
        image_info.Image.Save(output_file)
        image_count += 1

doc.Close()

通过 Python 获取 PDF 中的所有图片

核心步骤说明:

  1. 实例化 PdfImageHelper:这是提取图片的核心辅助类。
  2. 获取图片信息:通过 image_helper.GetImagesInfo(page) 获取包含图片数据及其元数据的集合。
  3. 直接保存:利用 image_info.Image.Save() 方法直接将图片对象导出。Spire.PDF 会自动处理图像解码,确保提取出的图片保持高质量。

同时提取文本和图片

如果需要一次性获取页面中的所有内容,可以将 PdfTextExtractorPdfImageHelper 结合使用。这种方法非常适合需要对文档进行内容索引或归档的自动化任务。

from spire.pdf import *
import os

inputFile = "./Demos/Data/Extraction.pdf"

# 创建 PDF 文档
doc = PdfDocument()
doc.LoadFromFile(inputFile)

# 创建缓冲区存储提取的文本
sbuffer = []
# 定义图片对象数组用于缓存
images = []
# 实例化 PdfImageHelper
imageHelper = PdfImageHelper()

# 遍历文档中的每一页
for i in range(doc.Pages.Count):
    page = doc.Pages.get_Item(i)

    # 创建 PdfTextExtractor 对象并提取文本
    pdfTextExtractor = PdfTextExtractor(page)
    pdfTextExtractOptions = PdfTextExtractOptions()
    sbuffer.append(pdfTextExtractor.ExtractText(pdfTextExtractOptions))
    
    # 获取页面中的所有图片并存入缓存
    imageInfo = imageHelper.GetImagesInfo(page)
    for info in imageInfo:
        images.append(info.Image)

# 保存提取的文本到文件
fileName = "Extraction.txt"
with open(fileName, "w", encoding="utf-8") as fp:
    for s in sbuffer:
        fp.write(s + "\n")

# 保存页面中的所有图片
for index, img in enumerate(images):
    img_path = os.path.join("./Demos/Data", f"Image-{index}.png")
    img.Save(img_path)

# 关闭文档
doc.Close()

这种方法的优势在于可以统一处理文档的各种媒体元素,并能够通过循环结构轻松实现批量提取,是处理复杂 PDF 文档的标准做法。

提取 PDF 中的表格

表格是 PDF 文档中常见的数据结构,但也是最难准确提取的元素之一。Spire.PDF 提供了将 PDF 转换为 Excel 的功能,通过这种方式可以间接提取表格数据。

提取 PDF 表格并保存为数据文件

通过 PdfTableExtractor 类,可以精确识别并提取 PDF 中的表格结构。这种方法允许开发者遍历每一行和每一列,将数据按原样填入 Excel 工作表或保存为 CSV 格式,便于后续的数据处理。

from spire.pdf import *
from spire.pdf.common import *
from spire.xls import *


# 创建 PdfDocument 对象
doc = PdfDocument()

# 加载 PDF 文档
doc.LoadFromFile("E:/Administrator/Python1/input/项目进度.pdf")

# 创建 Workbook 对象
workbook = Workbook()
# 清除默认工作表
workbook.Worksheets.Clear()

# 创建 PdfTableExtractor 对象
extractor = PdfTableExtractor(doc)

sheetNumber = 1

# 遍历 PDF 文件中的页面
for pageIndex in range(doc.Pages.Count):
    # 从当前页面提取表格
    tableList = extractor.ExtractTable(pageIndex)

    # 遍历表格
    if tableList is not None and len(tableList) > 0:
        for table in tableList:
            # 为当前表格添加一个工作表
            sheet = workbook.Worksheets.Add(f"Sheet{sheetNumber}")

            # 获取表格的行数和列数
            row = table.GetRowCount()
            column = table.GetColumnCount()

            # 遍历表格的行和列
            for i in range(row):
                for j in range(column):
                    # 获取当前单元格中的文本
                    text = table.GetText(i, j)

                    # 将文本写入工作表的指定单元格
                    sheet.Range[i + 1, j + 1].Value = text

            sheetNumber += 1

# 将工作簿保存为 CSV 文件
workbook.SaveToFile("E:/Administrator/Python1/output/提取表格.csv", FileFormat.CSV)
workbook.Dispose()
doc.Close()

通过 Python 获取 PDF 中的表格

核心步骤说明:

  • 初始化提取器:使用 PdfTableExtractor(doc) 实例化表格提取对象。
  • 按页提取:通过 extractor.ExtractTable(pageIndex) 获取特定页面的所有表格。
  • 行列遍历:利用 table.GetRowCount()table.GetColumnCount() 确定表格维度,并通过 table.GetText(i, j) 抓取每一个单元格的文本内容。
  • 数据导出:将提取的数据填入 Workbook 单元格,并根据需要保存为 CSV 或其他 Excel 支持的格式。

这种逐单元格处理的方式提供了极高的灵活性,例如你可以在写入数据前对特定文本进行过滤、清洗或重新格式化。

实际应用

PDF 内容提取功能在实际工作中有广泛的应用场景:

批量提取文档内容

当需要处理大量 PDF 文件时,可以编写批处理函数来自动化提取过程。以下是一个实用的批量提取示例:

from spire.pdf.common import *
from spire.pdf import *
import os

def ExtractContentFromPdfFolder(input_folder: str, output_folder: str):
    """从文件夹中的所有 PDF 文件提取文本和图片"""
    
    # 如果输出文件夹不存在则创建
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)
    
    # 遍历输入文件夹中的所有文件
    for filename in os.listdir(input_folder):
        if filename.endswith(".pdf"):
            # 构建完整的文件路径
            input_path = os.path.join(input_folder, filename)
            base_name = os.path.splitext(filename)[0]
            
            # 创建子文件夹存放提取的内容
            content_folder = os.path.join(output_folder, base_name)
            if not os.path.exists(content_folder):
                os.makedirs(content_folder)
            
            # 加载 PDF 文档
            doc = PdfDocument()
            doc.LoadFromFile(input_path)
            
            # 提取文本和图片
            all_text = []
            image_count = 0
            
            for i in range(doc.Pages.Count):
                page = doc.Pages.get_Item(i)
                
                # 提取文本
                textExtractor = PdfTextExtractor(page)
                options = PdfTextExtractOptions()
                text = textExtractor.ExtractText(options)
                all_text.append(f"--- 第 {i+1} 页 ---\n{text}")
                
                # 提取图片
                imageHelper = PdfImageHelper()
                imageInfo = imageHelper.GetImagesInfo(page)
                for info in imageInfo:
                    image_count += 1
                    img_path = os.path.join(content_folder, f"Image-{image_count}.png")
                    info.Image.Save(img_path)
            
            # 保存文本
            text_file = os.path.join(content_folder, "extracted_text.txt")
            with open(text_file, "w", encoding="utf-8") as fp:
                for t in all_text:
                    fp.write(t + "\n\n")
            
            doc.Close()
            print(f"已处理: {filename} (提取了 {image_count} 张图片)")

# 使用示例
input_folder = "./PDF文档"
output_folder = "./提取内容"
ExtractContentFromPdfFolder(input_folder, output_folder)

数据录入自动化

从 PDF 表单或报告中提取特定区域的文本,自动填充到数据库或电子表格中,减少人工录入的工作量和错误率。

素材库建设

设计师可以从大量的 PDF 宣传材料中提取图片资源,建立可重用的素材库,提高设计效率。

文档数字化

将纸质文档扫描成的 PDF 进行内容提取,转换为可搜索、可编辑的数字格式,便于长期保存和检索。

实用技巧

在进行 PDF 内容提取时,以下技巧可以帮助获得更好的结果:

  • 坐标定位:提取特定区域文本时,可以使用 PDF 阅读器查看页面属性来确定准确的坐标值
  • 编码处理:保存提取的文本时务必使用 UTF-8 编码,以正确处理中文等特殊字符
  • 图片格式:根据实际需求选择合适的图片输出格式(PNG 适合图形,JPG 适合照片)
  • 分页处理:对于多页文档,建议在提取的文本中加入页码标记,便于后续定位
  • 异常处理:某些 PDF 可能包含加密或损坏的内容,应添加适当的错误处理机制

总结

通过本文的介绍,我们学习了使用 Python 和 Spire.PDF 库提取 PDF 内容的多种方法:

  • 使用 PdfTextExtractor 提取整页或特定区域的文本
  • 通过 ImagesInfoPdfImageHelper 提取页面中的图片
  • 利用 PDF 到 Excel 的转换功能间接提取表格数据
  • 实现批量提取功能处理多个文档

这些技术为 PDF 文档的内容再利用提供了强大的工具。掌握这些技能后,您将能够高效地从 PDF 文件中提取所需的信息,将静态文档转换为有价值的数据资源,显著提升工作效率和数据处理的灵活性。

Claude Code 这个 AI 神器想必已经不用过多介绍了吧,但是身边有很多朋友都说安装上了,但是总是没办法丝滑的使用,额~由于一些懂得都懂的原因,很多人都卡在网络上,这篇文章就教大家如何一步一步的从安装到能正常使用。

话不多说,直接开撸!

首先,你得有科学上网。还不会的小伙伴们可以翻翻我以前的文章,也有类似的介绍。或者直接问问 AI 有很多成熟的方案,这里就不多说了。

安装 Claude Code

如果你的环境是:macOS, Linux, WSL,你可以直接执行下面的命令一键安装

curl -fsSL https://claude.ai/install.sh | bash

在 macOS 上,你还可以通过 Homebrew 工具进行安装

brew install --cask claude-code

Windows 用户可以通过 WinGet 进行安装

winget install Anthropic.ClaudeCode

Windows 用户也可以通过 Windows PowerShell 进行安装

irm https://claude.ai/install.ps1 | iex

就是如此丝滑,到此为止,就已经成功安装了 Claude Code!

然而,然而,当你满怀期待的去命令行中敲击 claude 命令时,你会发现确实安装成功了,但是随之而来还有其他的问题。

提示网络无法连接

这个问题并不是每一个人都会遇到,但是一旦遇到,你可以参考下面我的解决方案:

  1. clashx 需要开启 增强模式
  2. ~/.claude/settings.json 配置文件中增加命令行代理(需要根据你自身情况而定)比如:
{
  "env": {
    "HTTP_PROXY": "http://127.0.0.1:7890",
    "HTTPS_PROXY": "http://127.0.0.1:7890",
  }
}

免登录配置

当你好不容易解决了网络无法连接的问题,当你再次使用 claude 命令去启动 Claude Code 时,你会发现此时它要你登录,然而,你就是不想要去注册 Anthropic 的账号,但是就是想使用 Claude Code 那,怎么办呢?

开启免登录配置!

为了跳过登录,我们需要在 ~/.claude.json 中,加入设置 "hasCompletedOnboarding": true 然后重新打开终端即可。

其他模型接入 Claude Code

我们也可以使用其他的模型(比如:DeepSeek、Kimi、智谱大模型,包括一些中间模型服务商提供的服务)来接入 Claude Code

使用方式也非常简单

直接编辑 vim ~/.claude/settings.json 配置文件,这里以接入 DeepSeek 为例

{
  "env": {
    "ANTHROPIC_AUTH_TOKEN": "你自己申请的 API key",
    "ANTHROPIC_API_KEY": "你自己申请的 API key",
    "ANTHROPIC_BASE_URL": "https://api.deepseek.com/anthropic",
    "API_TIMEOUT_MS": "3000000",
    "CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1",
    "HTTP_PROXY": "http://127.0.0.1:7890",
    "HTTPS_PROXY": "http://127.0.0.1:7890",
    "ANTHROPIC_MODEL": "deepseek-chat"
  }
}

其中,参数说明

  • ANTHROPIC_AUTH_TOKEN:需要填写你自己申请到的 API Key
  • ANTHROPIC_API_KEY:需要填写你自己申请到的 API Key
  • ANTHROPIC_BASE_URL:模型 api 请求地址
  • CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC:禁用非必要的流量
  • ANTHROPIC_MODEL:指定使用的模型名称

设置成功之后,你可以通过运行 claude 启动 Claude Code 然后输入 /status 来确认模型的状态,如果不是,可以通过输入 /config 来切换模型。

GitHub 已正式将 Copilot CLI 推向全面可用,这标志着其在将生成式 AI 融入整个软件开发生命周期方面迈出了重要一步。这一举措也体现出 GitHub 正在进一步推动,将终端打造为 AI 辅助开发的一等入口。

 

该工具作为GitHub CLI的扩展,提供了两种主要的交互模式,旨在提升开发者的工作效率。开发者可以使用 suggest 功能,将自然语言提示转换为复杂的 shell 命令或 Git 操作。该能力旨在减少开发者为查找不常用任务所需的特定参数和语法而频繁查阅文档的时间。

 

此外,explain 功能允许用户就现有脚本或命令向 AI 发起查询,获取对语法各个部分作用的拆解说明。在实际场景中,这意味着当开发者在 CI 脚本中遇到一个带有链式 -exec 参数的复杂 find 管道命令时,可以直接请求一段通俗易懂的解释,而无需手动进行逆向分析。

 

自最初发布以来,该工具已经逐步演进为一个更具“代理化”(agentic)的环境。GitHub 引入了多个专用代理,例如用于代码库分析的 Explore,以及用于执行构建任务的 Task,同时还推出了全新的 Autopilot 模式。该功能允许 CLI 在多步骤工作流中自主运行,执行命令、评估输出,并在无需每一步确认的情况下动态调整执行策略。相比默认的 suggest 流程(每条命令执行前都需要用户明确批准),Autopilot 更适用于长时间运行的任务,因为中断会破坏整体流程的连续性。此外,新增对 GPT-5.4和 Claude 4.5 的支持,使开发者能够选择在复杂、依赖工具链的流程中表现更优的高推理能力模型。

 

尽管 GitHub 的方案与其现有生态系统高度集成,但 AI 辅助终端这一市场正变得愈发竞争激烈。Amazon Q(原名 CodeWhisperer)也提供了类似的命令行建议功能,而初创公司Warp则通过围绕协作和 AI 驱动特性打造全新终端产品,获得了显著关注。此外,亚马逊在 2023 年收购 Fig,也表明行业对于增强 shell 环境的浓厚兴趣。对于寻求开源或本地优先方案的开发者而言,Shell-GPTOllama集成等工具提供了另一种选择,它们通过本地运行模型来提升对数据隐私的控制能力。

 

要使用该已全面可用的版本,用户需要拥有有效的 GitHub Copilot 订阅,并安装最新版本的 GitHub CLI。该工具支持包括 Bash、Zsh 和 PowerShell 在内的多种 shell 环境,从而覆盖广泛的开发场景。GitHub 表示,通过减少在终端与浏览器之间的上下文切换,开发者可以更长时间保持专注状态。这一点对于经常需要使用复杂 CLI 工具(如云服务提供商工具或容器编排工具)的 DevOps 和基础设施工程师尤为重要。

 

此次发布之前,GitHub 进行了较长时间的公开测试阶段,并基于真实使用场景不断优化建议引擎。如今进入全面可用阶段,意味着该系统已经达到了企业团队所期望的稳定性水平。与此同时,GitHub 还推出了组织级 CLI 使用指标,允许管理员跟踪终端会话中的日活用户数量和 token 消耗情况。针对 AI 可能产生“幻觉”结果的风险,GitHub 通过在执行任何建议命令前强制进行显式审查与确认,将最终控制权牢牢保留在开发者手中。

 

随着软件行业持续探索生成式 AI 的影响,像 Copilot CLI 这样的工具正在成为该技术的实际落地形式。通过聚焦开发流程的“最后一公里”,即执行环境,GitHub 正试图巩固其作为开发者工作流核心枢纽的地位。

上次发了一篇聊 Meows 的开发取舍(V2EX 原帖),收到了一些反馈。这段时间一直在迭代,1.0.146 刚推到 Play Store 没多久,趁热来更新一下进展。

加了两本离线手册

平时 SSH 上去总要查命令参数,手机上翻 man page 体验很差。索性把常用的整理进 App 了。

Linux 命令手册,240 个命令,按分类整理,搜一下就出来,选项和示例都有。

Linux 手册

顺手做了份 C 标准库手册,288 个函数,C11 的 18 个头文件全覆盖了。每个函数带完整代码和运行结果,结果是 gcc 编译出来的不是瞎写的。

编程手册

两份手册加起来 4000 多条字符串,做了中英日韩繁体 5 语言,全走 stringResource ,不联网不用数据库。

加了一些运维小工具

chmod 权限计算、cron 表达式生成、子网计算、密码生成、正则匹配、时间戳转换,都是那种要用的时候去 Google 不如直接算的东西。

权限计算

Cron 生成

子网计算

密码生成

正则匹配

时间戳转换

每个工具底下附了 Shell 写法,毕竟有终端的时候还是命令行更快。

在做的

SSH 隧道和进制转换。隧道本地和远程转发都跑通了,还在磨 UI 细节。进制转换做了个类似 Windows 计算器程序员模式的 bit 位切换面板,64 个位可以逐个点击翻转,四种进制实时联动。


$4.99 买断,不订阅不内购。Google Play 搜 Meows 。

https://play.google.com/store/apps/details?id=com.meows.android

上架地区:日本、美国、新加坡、韩国、香港、台湾、英国、加拿大、澳门、马来西亚、冰岛。Android 14+,支持中英日韩。

有问题继续回帖。

个人觉得写代码这个事情和熟练度有很大的关系, 哪怕架构能力再强, 手生了,实现能力都会下降吧。

现在 ai 来了,都不咋动手写代码了, 过些时间业务能力会不会下降呢。

当然了,以后 ai 只会越来越强,这个就是杞人忧天。

就随便问问,图一乐

简介

Taskasync/awaitC# 异步编程的核心,也是最容易被表面化理解的一组概念。

开发中常见的说法往往是:

  • Task 就是线程;
  • await 会新开一个线程;
  • 只要用了 async,方法就变快了;
  • 代码卡了,包一层 Task.Run 就行。

这些说法并不完全错误,但都不够准确。

如果理解只停留在“会写”这一层,项目一复杂,问题就会马上出现:为什么 await 之后有时回到 UI 线程,有时不会?为什么有的 Task 根本没有长期占用线程?为什么 ResultWait() 有时会卡死?为什么 Task.Run 在服务端经常是负优化?

这篇文章就围绕这些问题,把 Taskasync/await 和它们背后的运行机制串起来讲清楚:

  • Task 到底是什么;
  • async/await 真正解决的是什么问题;
  • 编译器把 async 方法改写成了什么;
  • await 挂起和恢复时,运行时到底在做什么;
  • 什么时候该用异步,什么时候该用 Task.Run
  • 实战里最常见的误区和正确写法是什么。

先把几个最容易混淆的概念拆开

学异步之前,先把几个基础概念拆开,否则后面很容易越看越乱。

1. Task 不是线程

Task 表示的是“一项尚未完成的工作”或者“一个未来的结果”。

它更像一个异步操作的句柄,而不是线程本身。

比如:

Task<int> task = GetUserCountAsync();

这里的 task 表示“用户数量这个结果以后会出来”,但并不等于“已经为它开了一个新线程”。

2. async/await 不是多线程语法

async/await 的本质是异步流程编排语法糖。

它的价值是:把“回调 + 状态保存 + 完成后继续执行”这一套机械工作,交给编译器自动完成。

所以:

  • async 不等于并行;
  • await 不等于开线程;
  • await 更不等于阻塞等待。

3. 异步不等于一定有后台线程

这是最关键的一点。

看这段代码:

await Task.Delay(1000);

这通常不会让某个线程傻等 1 秒,而是:

  • 注册一个定时器;
  • 当前方法先返回;
  • 时间到了以后,再把后续逻辑恢复执行。

也就是说,很多异步操作本质上是“等待某个外部事件完成”,并不是“占着线程慢慢熬”。

Task 到底是什么?

从开发者视角看,Task 有三层意义。

1. 它是异步操作的统一抽象

无论底层是:

  • 线程池执行计算;
  • 操作系统完成异步 I/O
  • 定时器触发;
  • 回调被包装;

最后都可以统一表现成一个 TaskTask<T>

这就是它特别重要的原因:不同来源的异步操作,可以被统一等待、组合、取消、传播异常。

2. 它带着状态

一个 Task 通常会经历这些状态:

  • 等待调度;
  • 运行中;
  • 成功完成;
  • 失败;
  • 被取消。

所以 Task 不只是“未来结果”,它还负责承载:

  • 完成信号;
  • 异常;
  • 取消状态;
  • continuation,也就是后续回调。

3. 它能被组合

例如:

var task1 = GetUserAsync();
var task2 = GetOrdersAsync();

await Task.WhenAll(task1, task2);

组合能力是 Task 相比传统回调最重要的优势之一。

Task 的几种常见来源

理解 Task,最好别只盯着 Task.Run。在现代 .NET 里,Task 的来源其实很多。

1. 真正的异步 I/O API

比如:

await httpClient.GetStringAsync(url);
await File.ReadAllTextAsync(path);
await dbContext.Users.ToListAsync();

这类 Task 的重点通常不是“在线程池里跑”,而是:

  • 发起网络、磁盘、数据库等外部操作;
  • 当前线程不阻塞;
  • 等底层 I/O 完成后再恢复。

这才是服务端异步编程最核心的价值来源。

2. Task.Run

await Task.Run(() => Compute());

这类 Task 更接近:

  • 把委托丢到线程池;
  • 交给工作线程执行;
  • Task 把结果、异常和完成状态包装出来。

它适合 CPU 密集型工作,或者必须临时包装同步阻塞代码的场景。

3. 已完成任务

return Task.CompletedTask;
return Task.FromResult(cacheValue);

如果结果已经有了,没必要真的再调度一个任务。直接返回已完成 Task,才是正确做法。

4. TaskCompletionSource

有时底层是事件、回调或自定义协议,并没有天然的 Task 形式,这时可以自己桥接:

var tcs = new TaskCompletionSource<string>();

socket.OnMessage += message => tcs.TrySetResult(message);
socket.OnError += ex => tcs.TrySetException(ex);

return await tcs.Task;

TaskCompletionSource 的作用不是“执行任务”,而是“手动控制一个 Task 什么时候完成”。

TaskThread 到底是什么关系?

两者有关,但不是一回事。

对比项TaskThread
抽象层级任务抽象操作系统线程
是否直接等于执行载体
是否自带结果/异常/取消语义
创建成本通常较低通常较高
常见用途异步编排、任务组合特殊线程控制

所以更准确的表述是:

  • 有些 Task 会在线程上运行;
  • 有些 Task 主要表示一个等待中的异步 I/O
  • Task 是上层抽象,线程只是某些场景下的执行资源。

asyncawait 到底做了什么?

先看一段最普通的代码:

public async Task<int> GetLengthAsync(HttpClient httpClient, string url)
{
    var html = await httpClient.GetStringAsync(url);
    return html.Length;
}

这段代码表面上很像同步写法,但运行时语义和同步方法并不一样。它实际做了两件很关键的事:

  • await 之前执行当前能执行的同步部分;
  • 如果等待的操作还没完成,就把“后面要继续执行的代码”注册成回调,然后把控制权还给调用方。

所以 await 的本质不是“停在这里堵住线程”,而是:

如果任务未完成,就先返回;任务完成后,再从这里继续往下跑。

一个更准确的执行流程

还是以上面的 GetLengthAsync 为例。

调用开始时

var task = GetLengthAsync(httpClient, url);

方法一进入,不会立刻整段异步执行完,而是先同步跑到第一个 await

执行到 await

编译器和运行时大致会配合做下面这些事情:

  1. 取到被等待对象的 awaiter;
  2. 检查它是否已完成;
  3. 如果已完成,直接继续往下执行;
  4. 如果未完成,就保存当前状态,并注册 continuation;
  5. 方法立即返回一个还没完成的 Task 给调用方。

任务完成以后

GetStringAsync 对应的操作完成后,continuation 被调度执行,方法从断点位置继续向下跑,最后把结果写回返回的 Task<int>

await 的底层协议是什么?

很多人以为 await 只能等待 Task,其实不是。

await 面向的是 awaitable 模式,核心接口可以简化理解为这四步:

var awaiter = value.GetAwaiter();

if (!awaiter.IsCompleted)
{
    awaiter.OnCompleted(continuation);
    return;
}

awaiter.GetResult();

也就是说,await 依赖的是:

  • GetAwaiter()
  • IsCompleted
  • OnCompleted(...)
  • GetResult()

Task 只是最常见的 awaitable 类型而已。

编译器到底把 async 方法改写成了什么?

这是理解原理的核心。

像下面这个方法:

public async Task<int> SumAsync()
{
    var a = await GetNumberAsync(1);
    var b = await GetNumberAsync(2);
    return a + b;
}

编译后不会保留这种高层异步写法,而是会被改写成一个状态机。

这个状态机通常包含几部分:

  • 一个 state 字段,记录当前执行到哪一步;
  • 一个 AsyncTaskMethodBuilder<int>,负责驱动最终返回的 Task<int>
  • 若干 awaiter 字段,用于保存挂起点上的上下文;
  • 一个 MoveNext() 方法,真正承载业务逻辑。

可以把它粗略理解为:

private struct SumAsyncStateMachine : IAsyncStateMachine
{
    public int _state;
    public AsyncTaskMethodBuilder<int> _builder;

    private TaskAwaiter<int> _awaiter;
    private int _a;

    public void MoveNext()
    {
        try
        {
            if (_state == 0)
            {
                goto ResumeAfterFirstAwait;
            }

            var awaiter = GetNumberAsync(1).GetAwaiter();
            if (!awaiter.IsCompleted)
            {
                _state = 0;
                _awaiter = awaiter;
                _builder.AwaitUnsafeOnCompleted(ref awaiter, ref this);
                return;
            }

            _a = awaiter.GetResult();

        ResumeAfterFirstAwait:
            if (_state == 0)
            {
                _a = _awaiter.GetResult();
            }

            // 第二个 await 也会有类似逻辑
            // 最后调用 _builder.SetResult(...)
        }
        catch (Exception ex)
        {
            _builder.SetException(ex);
        }
    }
}

你不需要背这段结构体代码,但要抓住结论:

async/await 的本质是编译器生成状态机,await 是状态机的挂起点。

为什么说 await 不会阻塞线程?

因为挂起的是“方法的后续执行”,不是“线程本身”。

比如:

await Task.Delay(3000);

更接近下面的语义:

  • 告诉运行时:3 秒后通知我;
  • 当前方法先返回;
  • 当前线程去干别的事;
  • 3 秒后,再把 continuation 调回来。

如果这里真是阻塞线程,那 async/await 就几乎没有存在价值了。

await 之后为什么有时回到原线程,有时不会?

这里就涉及两个经常被混淆的东西:

  • SynchronizationContext
  • TaskScheduler

先说结论:

  • UI 应用里,await 默认通常会尝试回到原来的上下文;
  • ASP.NET Core 里,通常没有传统 SynchronizationContext,因此不存在“必须切回请求线程”这件事;
  • 在库代码里,如果不需要回到原上下文,通常会考虑 ConfigureAwait(false)

UI 场景为什么会“切回来”?

因为 WinFormsWPFMAUI 这类框架有线程亲和性。

比如你在 UI 线程里:

private async void Button_Click(object sender, EventArgs e)
{
    label.Text = "加载中...";
    await Task.Delay(1000);
    label.Text = "完成";
}

第二次修改 label.Text 必须在 UI 线程做,所以默认 continuation 会被安排回原来的 SynchronizationContext

ConfigureAwait(false) 是干什么的?

await SomeAsyncOperation().ConfigureAwait(false);

它的意思不是“强制在线程池运行”,而是:

  • 不要求恢复到当前捕获的上下文;
  • continuation 可以由运行时用更直接的方式调度。

它最常见的意义是:

  • 库代码里减少不必要的上下文切换;
  • 避免某些老式上下文中的死锁风险。

但也别把它神化:

  • ASP.NET Core 中,收益通常没有老 ASP.NETUI 框架里那么显著;
  • 在需要回到 UI 线程的地方,不能乱用。

Task.Runasync/await 到底是什么关系?

这是最容易说混的一组概念。

一句话概括就是:

  • Task.Run 解决的是“把工作扔到线程池去跑”;
  • async/await 解决的是“如何优雅地等待异步结果并继续往下写代码”。

它们不是替代关系,而是两个维度。

例如:

await Task.Run(() => Compute());

这里同时发生了两件事:

  • Task.RunCompute() 调度到线程池;
  • await 负责等待这项工作结束,并在结束后恢复方法。

如果换成真正的异步 I/O

await httpClient.GetStringAsync(url);

这里通常根本不需要 Task.Run,因为底层已经是异步操作了。

什么时候该用 Task.Run,什么时候不该用?

这个问题必须分场景来看。

适合用 Task.Run 的场景

1. CPU 密集型工作
var result = await Task.Run(() => RenderLargeImage(data));

比如:

  • 图像处理;
  • 大量压缩、加密、解析;
  • 复杂数学计算;
  • 桌面应用里不想卡住 UI 线程。
2. 临时包装无法改造的同步阻塞代码
var result = await Task.Run(() => LegacyService.DoWork());

这不是最理想的方案,但在旧代码迁移阶段,有时是现实做法。

不适合用 Task.Run 的场景

1. 本来就有异步 API 的 I/O

错误写法:

await Task.Run(() => File.ReadAllText(path));

正确写法:

await File.ReadAllTextAsync(path);

前者只是把阻塞式 I/O 挪到线程池,不是真正的高效异步。

2. ASP.NET Core 里把普通异步调用再套一层 Task.Run

错误写法:

var result = await Task.Run(() => _repository.GetUsersAsync());

如果仓储方法本来就是异步 I/O,这样做通常只会:

  • 多一次调度;
  • 多一点线程池压力;
  • 不带来任何实际收益。
3. 粒度特别小的工作
await Task.Run(() => x + y);

这种写法经常得不偿失,因为调度开销比计算本身还大。

异常在异步方法里是怎么传播的?

这是 Task 模型设计得非常好的地方。

看一个例子:

public async Task<int> FooAsync()
{
    await Task.Delay(100);
    throw new InvalidOperationException("boom");
}

调用端:

try
{
    await FooAsync();
}
catch (Exception ex)
{
    Console.WriteLine(ex.Message);
}

这里异常不会在创建 Task 的那一刻直接同步抛出,而是:

  • 被记录到返回的 Task 上;
  • 调用方 await 这个 Task 时,再重新抛出。

这也是为什么:

  • await 能像同步代码一样写 try/catch
  • 但如果你拿到 Task 后根本不等它,异常就可能被悄悄遗漏。

Task.WhenAll 的异常要特别注意

await Task.WhenAll(task1, task2, task3);

如果多个任务都失败了:

  • WhenAll 返回的任务会失败;
  • 内部会聚合多个异常;
  • await 时对外表现为抛出异常,但完整异常集合仍可从任务对象上获取。

实战里要记住一点:WhenAll 是“全都跑完再汇总”,不是“谁一错就把其他任务都停掉”。

取消为什么是“协作式”的?

很多人刚接触 CancellationToken 时,会误以为它像 Thread.Abort() 一样能强制把任务打断。

不是。

.NET 的取消模型是协作式取消,也就是:

  • 调用方发出取消信号;
  • 被调用方自己检查;
  • 在合适的位置主动停止。

例如:

public async Task ProcessAsync(CancellationToken cancellationToken)
{
    foreach (var item in items)
    {
        cancellationToken.ThrowIfCancellationRequested();
        await ProcessItemAsync(item, cancellationToken);
    }
}

调用方:

using var cts = new CancellationTokenSource(TimeSpan.FromSeconds(10));
await ProcessAsync(cts.Token);

好的异步方法,应该把 CancellationToken 继续往下传,而不是在中间层截断。

几个最常见的误区

下面这些问题,比“不会写异步语法”更常见。

误区一:把 await 当成阻塞等待

错误心智模型是:

跑到 await 就停住了,线程在原地等。

正确理解是:

跑到 await,如果任务没完成,就先把方法挂起,线程可以去处理别的工作。

误区二:顺序 await 本来可以并发,却写成串行

比如:

var user = await GetUserAsync();
var orders = await GetOrdersAsync();

如果两个操作互不依赖,这其实是串行。

更合适的写法是:

var userTask = GetUserAsync();
var ordersTask = GetOrdersAsync();

await Task.WhenAll(userTask, ordersTask);

var user = await userTask;
var orders = await ordersTask;

误区三:在异步代码里调用 .Result.Wait()

例如:

var result = GetDataAsync().Result;

这类写法的问题是:

  • 会阻塞线程;
  • 在某些上下文中可能形成死锁;
  • 破坏整条调用链的异步优势。

await 就不要同步阻塞。

误区四:滥用 async void

async void 基本只适合事件处理器:

private async void Button_Click(object sender, EventArgs e)
{
    await SaveAsync();
}

其他情况下,优先返回 TaskTask<T>

因为 async void 的问题很明显:

  • 调用方无法等待;
  • 异常处理困难;
  • 很难组合和测试。

误区五:fire-and-forget 随手乱丢

例如:

_ = SendEmailAsync();

如果这样写,至少要明确三件事:

  • 异常谁负责处理;
  • 生命周期谁负责管理;
  • 应用关闭时任务是否会丢。

Web 服务里,很多“顺手丢后台跑”的代码,最后都会变成线上隐患。真正需要后台任务时,往往应该用:

  • 队列;
  • BackgroundService
  • 专门的任务调度框架。

误区六:以为异步一定更快

异步的主要收益通常不是“单次调用变快”,而是:

  • 提升吞吐;
  • 减少阻塞;
  • 更高效利用线程资源;
  • 改善响应性。

一个纯计算方法改成 async,通常不会凭空更快。

几个很实用的异步编程模式

1. 并发等待多个任务

var tasks = urls.Select(DownloadAsync);
var contents = await Task.WhenAll(tasks);

适合彼此独立、可以并发执行的任务。

2. 限制并发度

很多场景不是“越并发越好”,而是要控制上限。

var semaphore = new SemaphoreSlim(5);

var tasks = urls.Select(async url =>
{
    await semaphore.WaitAsync();
    try
    {
        await DownloadAsync(url);
    }
    finally
    {
        semaphore.Release();
    }
});

await Task.WhenAll(tasks);

这类模式在:

  • 批量请求外部接口;
  • 文件处理;
  • 消息消费;

都很常见。

3. 超时和取消结合使用

using var cts = new CancellationTokenSource(TimeSpan.FromSeconds(5));
await DoWorkAsync(cts.Token);

如果底层 API 支持取消,优先传 CancellationToken,而不是自己写各种轮询超时逻辑。

4. 缓存命中时直接返回已完成任务

public Task<string> GetNameAsync(int id)
{
    if (_cache.TryGetValue(id, out var name))
    {
        return Task.FromResult(name);
    }

    return LoadNameAsync(id);
}

这种写法比“明明同步就能拿到结果,还强行 async/await 一遍”更干净。

ValueTask 要不要顺手一起用?

可以知道,但不要滥用。

ValueTask<T> 的意义主要是:

  • 在高频、且经常同步完成的场景里减少 Task 分配;
  • 常见于底层库和高性能组件。

但它的使用约束也更多:

  • 不能像普通 Task 一样随意重复等待;
  • 组合和缓存时更容易踩坑;
  • 对业务代码来说,复杂度通常大于收益。

所以经验上:

  • 普通业务代码优先 Task
  • 性能敏感、经过度量确认有收益时,再考虑 ValueTask

一张决策表:到底该怎么选?

场景推荐做法
数据库、HTTP、文件等 I/O优先使用原生异步 API + await
CPU 密集型计算视场景使用 Task.Run 或并行方案
桌面应用避免卡 UITask.Run 处理计算,await 等待结果
服务端已有异步 API直接 await,不要额外包 Task.Run
旧同步阻塞库无法改可临时 Task.Run 包装,但要清楚代价
结果已知Task.FromResult / Task.CompletedTask

用一句话重新串起来

到这里,其实可以把整套模型压缩成一句话:

Task 是异步操作的结果载体,async/await 是操作这个载体的语言级语法糖,而真正决定是否占线程、怎么调度、何时恢复执行的,是底层操作类型、上下文和运行时调度机制。

这也是为什么异步编程从来不是背完语法就算真正理解了。

真正要搞懂的是:

  • 这是不是异步 I/O
  • 这是不是 CPU 计算;
  • continuation 会被调度到哪里;
  • 当前代码到底是在减少阻塞,还是只是把阻塞换了个地方。

总结

  • Task 不是线程,而是对异步工作和未来结果的统一抽象。
  • async/await 不是多线程语法,而是编译器生成的状态机语法糖。
  • await 不会阻塞线程,它做的是挂起方法、注册回调、等待恢复。
  • 真正的异步 I/OTask.Run 是两类完全不同的来源,不能混着理解。
  • Task.Run 适合 CPU 密集型工作,不适合给本来就异步的 I/O 再套壳。
  • CancellationToken 是协作式取消,不是强制中断。
  • 少用 .Result.Wait()async void 和随意的 fire-and-forget。

如果你把这些点真正想透,后面再去看:

  • TaskScheduler
  • 线程池
  • ConfigureAwait
  • ValueTask
  • IAsyncEnumerable

就会顺很多,因为底层那条线已经接上了。

4 月 16 至 18 日,由极客邦科技旗下 InfoQ 中国主办的 QCon 全球软件开发大会·北京站(2026) 圆满落地。为期三天的盛会共吸引了 超过 2000 位 开发者、技术专家与行业从业者齐聚一堂,共话前沿技术趋势与产业落地实践,现场交流热烈、思想碰撞不断。

本次大会邀请到来自腾讯、阿里巴巴、蚂蚁集团、火山引擎、字节跳动、快猫星云、华为、百度、地瓜机器人、北银金科、白海科技、哔哩哔哩、菜鸟集团、滴滴出行、阶跃星辰、京东、科大讯飞、快手、蓝耘科技、乐享科技、良仓孵化器、联想、美团、美图、小米、网易、平安科技、去哪儿旅行、清程极智、智谱、云深处科技、腾讯云、容联云、58 同城、无问芯穹、小雨机器人、蔚来、趣丸科技、小红书、好未来、亚马逊云科技、易点天下、质变科技 (MemoryLake)、记忆张量、Agents 特区、Bosch 集团、ColaOS 、Dify.AI、eBay、Elastic、EvoMap、MongoDB、PayPal 、Shopee、Snowflake、TiDB、Toco、VAST、vivo、Ubiquiti、Zilliz、哈尔滨工业大学、清华大学、北京科技大学、北京邮电大学、中科院软件所等 60 余家海内外知名企业与科研机构的 120 余位专家与实践者同台分享。他们围绕热门智能体体系、底层支撑体系、工程实践与产业场景落地等主题展开深入探讨,共同勾勒未来软件与智能共生的发展图景。

洞察前沿趋势 释放 AI 价值

在大会开场致辞中,极客邦科技总编辑赵钰莹表示,当下已进入超级智能体时代,企业 AI 应用正迈入规模化落地关键阶段,需聚焦五大高价值场景、依托工程化与多智能体架构实现落地,并通过适配组织人才变革,推动 AI 成为产业重构与业务增效的核心生产力。

她表示,AI 正从被动对话机器人,升级为可自主设定目标、调用工具、协同完成任务的超级智能体,成为产业落地与业务重构的核心执行者。企业 AI 应用已进入规模化落地的关键分水岭,选对场景是成败核心。她基于近千份案例总结出 效率提升、风险管控、精准决策、全链路协同、合规保障 五大高成功率场景,均具备刚需、数据可及、价值可量化、落地门槛低的共性。金融、零售、能源、制造等行业已有标杆实践,单点 AI 改造效果有限,全链路协同才能放大价值。

她进一步提炼出可复用的落地范式:场景层面围绕降本、增效、增收、控险建立量化指标;智能体平台采用多智能体架构,遵循感知—规划—执行—反思闭环,以知识图谱等抑制幻觉;工程化是 AI 从演示走向生产力的关键,企业必须夯实数字化基建;数据层面多模态数据与反馈闭环支撑持续迭代;合规上坚持本地部署、数据不出域,兼容国产软硬件。

在组织与人才方面,她基于调研指出,AI 正重构工程团队与职业路径:团队规模收缩、人效提升,测试、UI 等岗位缩减,智能体架构师、算法与架构人才价值凸显;技能重心转向架构、AI 调优、数据治理与业务理解,全栈复合化成为标配。组织走向扁平化、小型化、AI 专项化,AI 暂未大规模替代人才,主要替代低价值执行工作,未来一人 + 多智能体将降低创业门槛,推动行业在技术平权中重构格局。

主题演讲精彩回顾

黄东旭:The Age of Autonomous Systems 自主系统的时代

TiDB 联合创始人兼 CTO 黄东旭在《自主系统的时代》主题演讲中表示,大模型带来 载体级变革,代码从思考载体变回执行载体,软件构建转向 目标 - 上下文 - 约束 框架,人机协同与多 Agent 成为主流,软件形态从静态走向意图驱动、市场向 人机两极 分化,未来将迎来低门槛、高灵活的软件 “寒武纪大爆发”。

黄东旭认为,传统软件构建模式已发生根本性转变,Coding 问题已基本解决,Software 重构才刚刚开始。过去软件围绕代码展开思考与设计,而未来软件生产将以 目标、上下文、约束 为核心框架,人类应专注定义目标与规则,把执行与迭代交给智能体。当前行业普遍存在目标思考不清晰的问题,而优化上下文、管控约束边界,正成为软件生产效率提升的关键方向。

他将人与机器的协同模式总结为:人类负责高熵低频决策,Agent 承担低熵高频执行。他强调,单一 Agent 难以完成复杂工程,必须构建多智能体网络,通过明确规范与标准保障代码质量,并选用高智商模型支撑长程复杂任务。实践已证明,纯黑盒、无人工介入的百万行级基础软件开发已成为现实,传统软件工程中的复杂性管理、需求分析等核心思想依然有效。

更进一步地,软件形态正从 静态固定 走向 意图驱动,UI 与交互不再是核心接口,用户意图 才是新一代软件的真正入口。黄东旭提到,UNIX 哲学与体系正迎来复兴,其灵活组合、动态生成软件的特性,与 Agent 时代的需求高度契合。

他指出,未来软件市场将从纺锤形结构向两极分化,创新与资本将集中在 靠近人 与 靠近机器 两大方向。在靠近人的一端,软件将更注重情绪价值、交互体验与传播能力,以结果为核心评价标准;在靠近机器的一端,基础软件将从面向人类开发者转向 面向 Agent 设计,并诞生全新的 Agent 体工程学,追求最小工具摩擦、最大化信息密度、充分信任模型能力。

韦韬:智能革命时代:自主智能体兴起与安全范式重塑

蚂蚁集团副总裁兼首席技术安全官韦韬博士在主题演讲中指出,从通用智力引擎到自主智能体闭环,生产力已完成代际跃迁。但原生架构漏洞引发系统性风险,传统安全体系根本性失效。唯有构建基于 HOP、NbSP、OVTP、ARCP 四大原生安全范式的全栈纵深防护体系,才能实现 AI 安全的确定性收敛,支撑自主智能体产业的健康可持续发展。

韦韬表示,当前我们已正式跨过自主智能体的质变奇点,进入 “AI 机车时代”。大模型作为人类首个通用智力引擎,结合自主编码、纠错、修正的闭环能力,将带来百倍级生产力跃升,推动生产模式从 “手工艺开环” 转向 “工业化闭环”。但同时,自主智能体已暴露出系统性安全危机,主流 AI 工具接连发生生产环境删库事件,去年已有 1/8 的全球数据因 AI 泄露。传统零信任、RBAC 等安全模型全面失效,无法应对开放动态命令执行、无边界上下文暴露两大 AI 原生超危漏洞。

他进一步将 AI 原生安全重构归纳为四大核心范式:NbSP 零越范式筑牢全栈机制防线,解决内存安全根源问题;OVTP 可溯范式推行任务级工单体系,实现操作全链路管控;HOP 高阶程序范式用业务规约约束 AI 行为,实现输出确定性收敛;ARCP 攻击回报范式通过 “-1Day 防御” 重塑攻防经济平衡。

此外,韦韬还提到,四大范式依托安全平行切面技术与星绽 OS 落地,前者可无侵入式管控系统数据流,后者在编译时消除高危漏洞。目前 AOTA 平行切面联盟已有 31 家企业参与,金融、运营商等行业已完成实战验证。

阎栋:模型之外

Bosch 集团首席 AI 科学家阎栋博士在主题演讲中引用维特根斯坦的著名论断“世界是事实的总和,而非事物的总和”来阐述模型跟外部世界的分界线。

今天的 LLM,仅掌握可符号化的“事物”,无法锚定组合的 / 动态的“事实”。因此,LLM 想要对现实世界产生影响,“模型之外”的脚手架不可或缺。未来世界是 LLM 与代码、基础设施、制度、人类共同构建的完整系统。他将大模型工程方法论归纳为三个并行阶段:Prompt Engineering 依赖“魔法词”、Context Engineering 通过 RAG、记忆系统解决信息注入,当前版本的 Harness Engineering 则构建了包含上下文管理、工具调用、流程编排、状态维护、反馈评估、故障回滚的六层脚手架,将大模型从 “黑箱问答机” 转化为可管控的生产系统。

近年来,基于 CHC 理论(人类智商测试的理论基础)的测试发现,虽然 LLM 的晶体智能表现突出,但流体智能还差强人意。这是表现在,虽然 LLM 虽然凭借海量人类数据(既包括训练时用来更新权重的,也包括推理时用来填充上下文的)在依赖知识 / 技能的各类任务上表现突出,但在面对人类尚无解决经验的全新问题上常常一筹莫展。这种表现,部分可能是由于 LLM 作为一种跟跟自然进化的人类完全不同的智能物种,“训推分离”的范式使其在面对全新问题时,无法通过快速的试探和观察获得对底层规律的认知,从而严重的限制了其性能。

更进一步地,阎栋探讨了 Scaling Law 受阻之后,通向 AGI 的另外两条可能得技术路径:LLM+ 遗传算法和世界模型。LLM+ 进化算法方兴未艾,未来如何发展还充满了不确定性;而世界模型自 2018 年被正式提出以来,已历经五波浪潮,技术范式仍未收敛,在自动驾驶、机器人领域的应用也面临其他技术路线的强力竞争。未来想要通向 AGI 还要解决“规划 - 动作”合一的挑战。

最后,他希望大家都更深入的思考个体自身和 AI 的关系,不应因为自己不掌握模型的训练,就简单的把这种深刻思考交给模型公司掌舵人,这对于人类的未来是非常危险的。

圆桌对话:圆桌对话|OpenClaw 之后:AI 系统正在“失控”还是“进化”?

大会首日,在主论坛的压轴圆桌环节中,围绕“OpenClaw 之后:AI 系统正在“失控”还是“进化”?”主题,TiDB 联合创始人兼 CTO 黄东旭、蚂蚁集团开源技术委员会副主席王旭博士、 Agents 特区创始人马驰(瑞典马工)、 蚂蚁集团天宸实验室主任刘焱四位嘉宾围绕 AI 发展、应用、安全与责任等议题展开深入交流。

在讨论中,黄东旭认为,“那个我们所围绕的、作为核心思考载体的“代码时代”已经结束了。软件的生产实现民主化”。王旭针对当前大模型发展提出:“Agent 之间的代码协作,是"Agentic Open Source” 还是「硅基软件工程学」?” 马驰(瑞典马工)谈到,“智能体是我的同事和下属,我的职责是应用工程管理学让他们在预算和时间限制下完成复杂任务。刘焱也从开发者管理视角,对 AI 应用给出建议:“给大模型足够的工具,它会比你想象的还要能干。”

最后,嘉宾们认为,Agent 所带来的生产力提升,在大幅推动软件能力发展的同时,也带来了潜在的失控风险。面对安全合规要求与关键行业的高可靠性需求,我们不能简单排斥 Agent 技术的演进,而应同步构建与之适配的治理与工程体系。面向 Agentic 时代,软件工程需要系统性进化,预计未来 12–36 个月内,随着模型能力持续成熟,软件工程将迎来新一轮范式升级与发展新阶段。

全栈专题呈现 洞见技术未来

分论坛方面,本次大会共策划了 25 个覆盖 AI 工程化全链路的深度专题,内容覆盖热门智能体体系、核心 AI 技术、底层基础设施,涵盖各类工程实践与多行业场景落地。您所关心的每一个工程化议题,几乎都能在这里找到答案。

专题体系涵盖:AI for SRE、具身智能与物理世界交互、Agent Infra 架构设计、AI 时代的“超级团队”、下一代交互架构:LUI 与 GUI 的融合、智能体安全实践:可控与可靠、“企业级 OpenClaw”来了!解锁 Snowflake Cortex AI 超能力 Lean Coffee 实战工坊、Agentic Engineering、AI 重塑数据生产与消费、AI 时代的用户界面之争、Agent 可观测性与评估工程、AI 驱动的技术债治理、从软件工程到 AI 工程、企业级 Agent 知识检索与平台工程实践解决方案专场、大模型算力优化、智能化测试与质量内建、记忆觉醒:智能体记忆系统的范式重塑与产业落地、AI 原生基础设施、Coding Agent 驱动的研发新范式、AIGC 视觉生成技术的产业级应用、OpenClaw 生态实践、Agent Ops:运维新生产力、小模型与领域适配模型、Agent in Practice:千行百业的 Agent 实践、多模态理解与生成的突破。

共筑生态共赢,展区联动亮点纷呈

除高质量技术分享外,大会展区同样人气高涨,众多技术厂商带来 AI 应用、开发工具、云服务平台等最新成果展示与互动体验,让前沿技术可感可及。

本届 QCon 北京的成功举办,离不开众多合作伙伴的鼎力支持。

大会特别感谢 Snowflake、MongoDB、Elastic、快递 100、Cloudflare、容联云、IPIP 对本届大会的倾情赞助,同时感谢众多社区和媒体伙伴的支持。正是因为有这样一群与开发者同行的伙伴,QCon 才能持续成为推动技术创新与工程落地的核心舞台。

携手再出发,6 月 AICon 上海见

随着 2026 QCon 北京站顺利收官,技术探索的热度将接力至 6 月上海 AICon。期待与更多开发者再相聚,共赴智能时代的下一程探索。

我自己的新加坡 id 最近一直提示让我绑定支付方式,奈何没有新加坡的虾皮或者电话,导致之前充到账户里的余额直接 G 了,无奈需要订阅一些外区的少儿教育 app ,折腾了一个目前还行的路子。
1 ,注册港区 appleid
2 ,下载 alipayHK ,可以使用内地支付宝进行账户注册和绑定
3 ,在 alipayHK 里绑定内地信用卡,任意就行,无需双币卡。
4 ,港区 appleid 下绑定 alipayHK 支付

齐活,现在就能自由订阅大部分外区 app 了。

哈哈,前两天大失败,就一个金币,看到评论区有朋友说自己整了 600 金币。 想不到今天咱也整上了,发个帖子炫耀一下:

image

感觉现在的“科技公司”非常有创始人/CEO 的个人风格。短期来看是好的,但是长期看总会有担心。库克在任的这几年,还是非常稳的,虽然错过了一些,但产品还算过得去,销量也非常好。只是还是会怀念乔布斯领导下的苹果,会更有期待。

苹果的未来?且看吧。

在如今互联网电商商业时代,多商户商城成为了一种极具吸引力和发展潜力的商业模式。而利用 C#编程语言来搭建多商户商城,更是为开发者和企业提供了强大的技术支持。同时,C#多商户商城免费源码的出现,进一步降低了进入门槛,激发了更多的创新和发展机遇。

图片

OctShop大型多用户商城系统总体简介: https://pc.opencodetiger.com/OctShop/TechOperDetail_810059.html

一、C#多商户商城的独特魅力

C#作为一种广泛应用的编程语言,在构建多商户商城方面具有诸多优势。强大的面向对象特性C#的面向对象编程理念使得商城的架构设计更加清晰、合理,便于管理和扩展各种功能模块。高效的性能能够快速处理大量的交易和数据请求,确保商城在高并发情况下依然能够稳定运行。丰富的类库和工具提供了丰富的类库和开发工具,让开发者能够更高效地实现各种功能,如数据库操作、网络通信等。二、C#多商户商城免费源码的价值C#多商户商城免费源码为开发者和创业者提供了宝贵的资源和机会。降低开发成本无需从零开始开发整个商城系统,节省了大量的时间和精力,同时降低了开发成本。快速启动项目可以基于免费源码快速搭建起一个基本的多商户商城框架,加速项目的启动和上线。学习和实践的平台对于初学者和开发者来说,是一个很好的学习和实践 C#编程以及商城开发技术的机会。

图片

三、C#项目搭建商城的步骤与要点

搭建一个 C#多商户商城需要经历一系列的步骤和考虑众多要点。需求分析明确商城的功能需求、用户群体、业务流程等,为后续的设计和开发提供指导。架构设计构建合理的系统架构,包括前端界面、业务逻辑层、数据访问层等,确保系统的可扩展性和稳定性。数据库设计设计高效的数据库结构,以存储商户信息、商品信息、订单信息等关键数据。功能模块开发逐步实现商城的各个功能模块,如商户管理、商品管理、订单管理、支付管理等。安全保障确保商城的安全性,包括用户数据保护、防止恶意攻击等。测试与优化进行全面的测试,发现并解决潜在的问题,同时对系统性能进行优化。

四、C#多商户商城的发展前景

随着电子商务的持续发展和创新,C#多商户商城具有广阔的发展前景。适应多样化的商业模式能够满足不同类型商户的需求,为消费者提供更丰富的商品和服务选择。技术不断升级C#语言和相关技术也在不断发展和进步,为商城的功能提升和性能优化提供了有力支持。与新兴技术融合可以与人工智能、大数据、物联网等新兴技术结合,创造出更智能、个性化的购物体验。

五、挑战与应对策略在构建和运营

C#多商户商城的过程中,也会面临一些挑战。技术更新换代快需要开发者不断学习和更新知识,以适应新的技术趋势和要求。竞争激烈多商户商城市场竞争激烈,需要不断创新和提升用户体验来脱颖而出。数据安全和隐私保护随着数据量的增加和安全威胁的多样化,必须加强数据安全和隐私保护措施。应对这些挑战,需要开发者和企业保持敏锐的市场洞察力,加强技术研发和团队建设,同时注重用户需求和体验,不断提升商城的竞争力。

图片

总之,C#多商户商城、C#多商户商城免费源码以及通过 C#项目搭建商城,为电子商务领域带来了新的活力和机遇。通过充分利用 C#的优势和免费源码的价值,结合合理的设计和开发流程,能够打造出功能强大、性能卓越的多商户商城。在未来的发展中,我们有理由相信 C#多商户商城将继续发挥重要作用,为消费者和商户带来更多的价值和便利。让我们共同期待 C#多商户商城在电子商务舞台上绽放更加绚丽的光彩。源码下载: https://pc.opencodetiger.com/OctShop/SourceDown开发文档: https://pc.opencodetiger.com/OctShop/DevelopDoc

不止于“拦与放”,更要用加密锁住每一道“门”

在零信任架构普及的今天, “内网是安全的”  这一旧观念早已过时。横向移动、内部越权、恶意软件扩散……大量安全事件始于内网。而基于内网IP的精细化访问控制,正是第一道防线。
但只靠IP“拦”或“放”远远不够——如果流量本身是明文,再细的IP策略也防不住嗅探与伪造。真正的精细化访问控制,必须将IP规则SSL/TLS加密认证结合。

一、内网IP精细化控制的三个核心维度

  1. IP段划分
    按部门/角色分配独立内网段(如10.10.1.0/24给财务,10.10.2.0/24给研发),避免混用。
  2. 端口级白名单
    例如:仅允许运维IP访问数据库的3306端口,其他IP直接拒绝。
  3. 时间/状态动态策略
    结合LDAP或零信任网关,临时开放IP权限,用完即收回。

二、没有加密的访问控制,形同虚设

假设你已配置好防火墙:只允许192.168.1.100访问内部财务系统。如果:

  • 攻击者通过ARP欺骗将流量引向自己,并伪造IP192.168.1.100
  • 你的内部API使用HTTP明文传输,敏感数据(包括token、cookie)被直接嗅探。

那么,IP策略瞬间失效

解决方案:对所有内网敏感服务启用HTTPS,并使用客户端证书双向认证(mTLS) 。这样,攻击者即使伪造IP,没有合法证书也无法建立连接;即使嗅探流量,看到的也是加密乱码。

三、内网IP场景下,SSL证书如何落地?

很多IT负责人误以为“内网用自签名证书就行”,但自签名证书存在两大风险:

  • 无法防中间人:客户端不验证证书身份,攻击者可自签一个假证书替换。
  • 管理混乱:到期时间、密钥强度无统一标准,容易留下安全隐患。

推荐做法
使用受信任的CA签发的内网专用SSL证书——例如支持内网IP地址的证书(部分CA提供)、或为内网域名申请通配符/普通证书。

国内可信任CA机构:JoySSL,注册时填写注册码230970,即可获取技术支持。

  • 在反向代理(Nginx、Apache)上强制HTTPS;
  • 开启双向认证(mTLS),用证书替代IP作为第二身份因子;
  • 结合IP白名单,形成“IP + 证书”双重校验。

四、你的内网安全,还差一张可信证书

基于内网IP的精细化访问控制是“骨架”,而SSL/TLS证书则是“血肉”——没有加密和强认证,再细的规则也是裸奔。
我们提供全系列SSL证书,包括:

  • 内网IP专用证书(支持10.0.0.0/8192.168.x.x等);
  • 通配符/多域名证书,完美适配内部微服务架构;
  • 企业级私有CA托管,一键下发内网客户端证书。

Anthropic 推出了最新的 Claude Code 桌面应用。

 

CLI 当然有它的价值,但如果真要把 agentic coding 推向更大规模、更高频、更接近日常开发的使用场景,图形界面几乎是绕不过去的。尤其是在你同时处理多个任务、多个线程、多个上下文的时候,一个慢、卡、状态又不透明的命令行界面,确实很难说是“最终形态”。从这个意义上说,Claude Code 桌面版的发布,本来是一个值得期待的节点。

 

Anthropic 显然也对它寄予厚望,官方账号亲自下场发推,外界预热已经持续了几个月,整个发布姿态都在传递一个信号:他们终于要把 Claude Code 从一个“能用的 CLI 工具”,推进成一个更完整的正式产品了。

 

但真正的问题在于,这个桌面版一旦开始上手,给人的感受并不是“终于成熟了”,而是“怎么会烂成这样”。

 

新桌面版烂到根本没法用

 

这个版本上线才两天,就在社区里迅速积累起一波密集吐槽。

 

用户提到,iOS 下,键盘会突然卡住。有时连最核心的输入框都会频繁消失,而且几乎每次会话都会遇到,必须退出再重新进入聊天才能恢复。

 

Windows 版本也一样会经常卡顿和崩溃。

 

界面层面的问题也很明显:按钮位置不符合预期,聊天框还频繁闪烁,整体交互体验不稳定。

 

另一个明显问题是,一些原本最该体现效率价值的自动化功能,本身就不太稳定。比如用户想用 Routines 跑一个简单的数据库内容处理流程,结果不管怎么折腾,始终连不上数据库。

 

不少人吐槽 bug 多到实际上没法用。

上手一小时,直接撞出 40 多个 bug

 

网上很快就有人晒出了一份 bug 清单,里面列了 40 多个问题。更夸张的是,这 40 多个问题,都是 Theo 在一个小时的试用过程中集中撞出来的。

 

这 40 多个 bug,大致可以分为三类。一类是快捷键和标签页逻辑混乱,很多快捷键只在主标签页生效,切换标签时操作对象还会乱跳;一类是侧边栏和项目管理彼此割裂,项目列表、recent projects、线程拖拽、菜单展开方式彼此对不上,用户很难搞清楚当前到底在操作什么;还有一类更直接,属于一些基础功能本身就不成立,比如“打开文件”并不会真正打开文件,创建 fork 会连带生成 worktree 却没有任何提示...

 

这些问题写在列表里还只是观感不佳,放进真实任务里,很快就会变成一连串的实打实的使用障碍。

 

比如在一个再普通不过的场景里,让它去分析一个应用可能存在的性能问题,本来只是一个起手测试,还没涉及真正改代码,系统就已经开始不稳定。任务一启动,就先卡住了将近一分钟,随后 agent run 随机停住,线程直接冻结,界面上的图标却还挂在那里,像是在告诉你它仍然在运行。

 

但实际上,它已经不动了。UI 没有任何提示,也没有报错,没有结束,也没有失败。你眼前看到的是一个仿佛还活着的线程,实际面对的却是一个已经死掉的流程。

 

这个问题,本质上可以说是它出错的门槛太低了。不是在长链路任务里失手,也不是在高复杂度项目里崩掉,而是在一个本该最容易跑通的基础场景里,把任务执行、线程状态和界面反馈三件事一起做乱了。这种状态错乱,放在聊天产品里都不算小问题,放在开发工具里就更致命,因为开发者最依赖的,恰恰是系统状态的清晰、反馈的准确,以及操作结果的可预期。

 

接着往下操作,在界面这一层,又会遇到更多问题。比如分屏时,你明明在右侧窗口里操作,打开 terminal 后,它却出现在左侧分屏上;而且 terminal 一旦开出来,Tab 键会被当作输入键使用,也就没法再顺手切回其他窗口。

 

与此同时,terminal 右上角的关闭按钮旁边又贴着 拖拽区域,结果那个 X 很难点中。也就是说,terminal 一旦开出来,输入会受影响,想关又不那么容易关掉。

 

还有些极其荒谬、莫名其妙的 bug:

  • 比如语音模式下,所有输入框都会自动输入文字,而不是只输入你当前选中的那个。

  • “v more”下拉菜单根本不是下拉,而是往侧边展开的(但箭头是向下的)。

  • “打开文件”会执行大约 15 种不同的操作,但没有一种操作是真正打开文件。

  • 可以拖拽线程,但实际上永远不能改变它们的顺序,任何情况下都不行。

  • 可以在 diff 视图里套娃式地嵌套可折叠侧边栏。

  • diff 视图里的“x”按钮会关闭整个标签页,而不是只关闭 diff 视图。

......

 

他吐槽说,“我不太相信那些说自己已经用这个应用用了好几周的人,真的认真用过它。我甚至还没开始用它干活、改代码,就已经连续撞上了五六个这样的 bug,感觉自己都快疯了。”

 

“现在的问题是,很多人只是接受了这种质量。”即便存在大量更稳定、功能更完整、甚至开源的替代方案,用户仍然在使用 Claude Code,仅仅因为它绑定了模型入口。“他们不是在为这个界面付费,他们是为模型付费,但结果却要忍受这个界面。”

 

100%AI 编写,落地质量堪忧

 

对此,还有其他网友吐槽:“一个整天说‘软件开发已经被解决了’的公司,现在做成这样,确实挺好笑的。”不过,也因此至少说明开发者的饭碗还没丢。

 

毕竟 Anthropic 过去这一年的对外叙事一直很激进,核心就一句话:代码越来越多是 AI 写的,而且比例还在一路往上抬。从“80% 到 90%”,到“90%”,再到“100%”,数字一次比一次高。到了 2026 年初,“内部大多数产品基本已经是 100% AI 编码”的说法,也已经被他们反复讲了很多次。

 

  • 2025 年 3 月,CEO Dario Amodei 在美国外交关系委员会上说:“再过 3 到 6 个月,AI 就会写出 90% 的代码。”

  • 2025 年 5 月,Boris Cherny 在播客《Latent Space》中表示:“整体来看,大概 80% 到 90% 的代码是 Claude 写的。”

  • 2025 年 9 月,Amodei 再次发声,但开始收口:“在 Anthropic,70%、80%、90% 的代码是 Claude 写的。”注意这个区间——70% 和 90% 是两回事,但媒体只抓了 90%。

  • 2025 年 10 月,Amodei 在 Dreamforce 与 Marc Benioff 同台时说:“我之前预测过,六个月内 90% 的代码会由 AI 完成,现在已经实现了。”但被追问后,他又补了一句:“也不是所有情况都这样。”

  • 2025 年 12 月,Boris Cherny 发推:100%。

  • 2026 年 2 月,CPO Mike Krieger 在 Cisco AI Summit 上表示:“目前在 Anthropic,大多数产品基本可以说是 100%。”

  • 2026 年 3 月 7 日,Boris Cherny 再次确认:“Claude Code 是 100% 由 Claude Code 写的。”

 

问题在于,这个“100%”一旦真正落到产品上,用户就能立马体验出差别。Claude Code 桌面版给人的感觉,不像一个打磨完成的正式产品,更像一个边写边补、一路 vibe 出来的半成品。

 

有人算了笔账:这些工程师一天能拿到一千万到一千五百万 token,最后做出来的就是这个效果。更让人困惑的是,从什么时候开始,行业默认“能大规模生成高质量 token”就等于可以为了速度把编程质量一起扔掉?

 

这种不满,其实不只是针对桌面版这一次翻车。回头看,之前的代码泄露,已经提前把问题暴露得很彻底了。

 

其中一个反复被提到的文件:print.ts。里面只有一个函数,但这个函数足足写了 3167 行代码,包含 486 个分支判断,嵌套深度达到 12 层。有人专门把这个函数里塞的东西列了一遍:agent 的运行循环、SIGINT 中断处理、限流逻辑、AWS 认证、MCP 生命周期管理、插件加载、通过 while(true) 轮询“team lead”、模型切换、以及对中断的恢复机制……几乎所有核心逻辑,都被硬塞进了这一个函数里。而实际上,这至少应该拆成 8 到 10 个独立模块。

 

类似的情况,不止这一处。网传泄露代码中,QueryEngine.ts被描述为一个约 4.6 万行的超大文件,Tool.tscommands.ts也分别达到约 2.9 万行和 2.5 万行。这个数字在多篇分析文章和镜像仓库介绍里都被反复引用。

 

在 userPromptKeywords.ts 里,这家公司用来判断用户是否“情绪崩溃”的方式,是这样一段正则:/\b(wtf|shit|fuck|horrible|awful|terrible)\b/i,也就是说,这家号称拥有最先进大语言模型的公司,在做情绪识别时,用的还是最原始的关键词匹配。这就像一家卡车公司,结果还在用马来拉零件。也有人解释,说正则更快、更便宜,不需要额外的推理调用,这在工程上是合理的。这话当然没错。但这恰恰说明这是一个“能跑就行”的工程选择。便宜优先,速度优先,先上线再说。

 

工程文化是没有开关的。一个能写出 12 层嵌套、把所有逻辑塞进一个函数里的团队,不会在写模型训练代码、写桌面应用的时候突然变得严谨起来。

 

这家公司一边卖 AI 编程工具,一边却没法用自己的 AI 编程工具做出一个质量过关的产品。那些百分比,从一开始就是用来讲故事的,而不是用来交付产品的。80、90、95、100——在源码被看见之前,没有人真正问过,“100%”到底产出了什么。

 

AI 只是把原本的东西放大。原本有工程纪律,就会被放大成更好的产出;原本没有纪律,就会以机器的速度放大成技术债。Anthropic 选了一条路:更快一点,让 Claude 去检查 Claude。出了问题,就再快一点。

 

如果在一家“构建未来”的公司里,“100% AI 编写”意味着一个包含 486 个分支、3167 行代码的函数,一个桌面应用包含无数 bug 就能上线,那这个未来需要的不是更快的工程,而是更好的工程。

 

如果这就是一家正在把行业往前带的公司所代表的质量标准,那这个方向本身是有问题的。

 

参考链接:

https://x.com/theo/status/2044680030706663726

一个还没发布的新模型,已经让 Anthropic 内部感受到了“断层式”的变化。

在最新的播客对话里,Claude Cowork 工程负责人 Felix Rieseberg 提到,他们内部正在用的一款新模型 Mythos Preview,带来的不是常规提升,而是一次明显的“断层式跃迁”。对工程师来说,这种差别很直观:同样是读代码、找漏洞、写实现,这一代模型的理解深度和解题方式,已经和上一代拉开了一截。

但变化不只在模型本身。随着执行成本被压到很低,Anthropic 内部已经可以同时跑上百个产品原型。以前一个想法要排期、评审、验证,现在有人提一句,十分钟就能做出一个能用的版本。在这种节奏下,Claude Code、Claude Cowork 这些产品,更像是从一堆原型里筛出来的结果,而不是按部就班“做出来”的项目。

更有意思的是,连他们自己也没完全预料到哪些东西会真正起作用。比如 skills——本质上只是一些写清楚“该怎么做事”的文本文件——却成了最有效的杠杆之一。

近日,Anthropic 的 Claude Cowork 工程负责人 Felix Rieseberg 在播客节目中,与主持人 Matt Turck 一起,讲清了这一切是怎么发生的。本文基于该播客视频整理,经 InfoQ 编辑。

  

核心观点如下:

  • 模型能力的增长速度,已经开始超过我们把它变成产品的能力。

  • 最终真正成功的产品,往往不是“加了什么”,而是“去掉了什么”。它更关乎一种感觉:用起来是什么体验。

  • 现在有一个全新的变化:执行成本几乎为零。如果你带着 10 个想法来找我,我现在的反应是:那我们就把 10 个全做出来试试,看看哪个更好。

  • 以前是你必须精通“计算机的语言”,而未来,你会更倾向于做一个精通“人类语言”的人,软件将真正地“为人而造”。

  • 现在的 AI 产品就像是移动电话刚出现的“傻瓜机时代”。运气好的话,我们现在做的可能只是“诺基亚 3310”,它是个好手机,但它还不是智能手机,更不是 iPhone。

阶跃式变迁的新模型

Matt:我们从刚刚公布的 Project Glasswing 和你在推特上提到的 Claude Mythos preview 聊起,你说这个模型在 Anthropic 内部带来了“很难被夸大的阶跃式变化”,这是什么意思?

Felix:Mythos 是一个还没发布的 frontier model,本质上是一个通用模型,并不是专门为 cyber security、coding 或软件开发某个单一场景训练的。但我们发现,它在 cyber security 这个方向上的能力“异常突出”,而且这种能力很可能会对软件和基础设施安全产生深远影响。

我的那条推文里其实想表达两点。首先,这个模型我们内部已经用了有一段时间了。作为软件工程师,过去几年大家大概都有类似的经历:第一次接触 AI 时,其实并没有那么惊艳。我第一次用 AI 还是 2013 年,那时候还没有大语言模型。我当时在 Microsoft,内部有个叫 project Oxford 的项目,本质上是一个 n-gram 模型。你给它一个 token,比如 “world”,它可能返回 “worldwide web”,那在当时已经算是语言模型的前沿能力了。

而这几年,大家逐渐会有那种“哦,这个模型比我想象中更强”的时刻。Mythos preview 对我们这些工程师来说,是一个明显的跃迁,相比过去几代模型,它的提升是那种“断层式”的。举个例子,这个模型在发现代码里的安全漏洞方面,表现得非常出色。它分析问题更深入,思路更聪明,写代码的能力也更强,让我们的工作效率大幅提升。但与此同时,看着一个明显比上一代模型“聪明很多”的系统,也会让人隐隐有点不安。

训练模型其实是一件很有意思的事。我们常说,模型更像是“长出来的(grown)”,而不是“被构建出来的(built)”。所以你事先并不完全知道它会特别擅长什么,也不一定知道它会在哪些地方表现一般,这两点都常常带来惊喜。而在这个案例里,它最突出的能力之一,就是发现现有软件里的安全问题,Project Glasswing 其实也是围绕这个能力展开的一个响应。

Matt:这会对 Cowork 产生什么影响吗?

Felix:我认为它很可能会显著改变我们在公司内部构建软件的方式。不过,对于一直关注 AI 发展的人来说,这种能力的持续提升,其实并不算意外。我们一直是在“往上爬”的过程,模型能力和可用性不断增强。

几年前,模型可能只是帮你做一些小任务;现在我们给它的任务规模在变大,时间跨度在变长,复杂度也在提升,这次只是又向这个方向迈进了一步。当然,这一步可能比我们内部预期的更大一些,对外界来说就更是如此。

但在 AI 研究者群体里,其实一直有个共识:这种“更大的跃迁”迟早会出现,而且跃迁本身也会越来越大。从这个角度看,我们其实是在按预期前进。但当你真的看到这些能力被“演示出来”时,还是会有点让人不寒而栗。

比如我们公开过一个例子:研究人员把模型放进一个沙盒,给它一个“尝试逃出去”的任务,然后研究员去吃午饭了。就在他吃三明治的时候,模型给他发了一封邮件,说:“我已经逃出来了。”而这个模型本来是不应该拥有互联网访问能力,也没有邮箱账户。

Matt:目前官方的说法是,这个模型至少在短期内会完全封闭,不对公众开放,未来可能只会提供给企业客户,对吗?

Felix:是的。Project Glasswing 的目标,是把这个模型优先提供给那些构建和维护我们数字基础设施的人和组织,比如 Linux Foundation。我们的想法是:这些人维护着我们每天使用电脑、手机时所依赖的底层系统,我们希望给他们一个“领先优势”,让他们先用这个模型去加固防御,在大众还无法使用类似能力之前,就提前发现并修复潜在的安全漏洞。

Matt:所以它并不属于 Sonnet 系列?不是 Sonnet 4.7 的延续?

Felix:对,目前它是一个独立分类下的 preview 模型。

Matt:听起来确实像是一个“断层式”的时刻。而你刚才提到“有点可怕”,也不仅仅是修辞。

Felix:是的。我觉得 Anthropic 一直以来的立场都很明确:AI 可以非常强大、非常有益,但同时也存在风险,必须严肃对待。而这一次,我们算是第一次真正在实践中看到这种情况。当你拥有一个很擅长攻破软件系统的模型时,你就必须认真思考:这意味着什么?我们该怎么使用它?如何负责任地处理它?

对我个人来说,这反而让我挺有成就感的,我很自豪公司在这件事上的处理方式非常克制、负责。而且,这并不是我们突然“偶然发现”一个强大模型,其实我们已经掌握它一段时间了。如果是一个更激进的公司,可能早就把它推向市场,定个高价,然后迅速变现。

Matt:在 Anthropic 这种公司内部,新模型发布时是怎么运作的?因为在行业里,每次有新模型出来,harness 制定者、应用团队都会迅速适配。你们内部也是这样吗?需要重新跑所有 eval?

Felix:某种程度上是的,但方式稍微不一样。我们在训练模型时,本来就会把产品需求考虑进去。产品会影响研究方向,研究反过来也会塑造产品,这是一个双向过程。

一方面,我们会尝试让模型具备那些真正能为人类创造价值的能力;另一方面,就像我刚才说的,我们也无法完全预知模型会擅长什么,所以这更像是一种“共舞”。我们通过产品去观察:用户真正受益的是什么;同时,如果模型突然展现出某种意料之外的能力,那可能就是我的工作去思考:我们如何把这个能力转化成一个用户真正能用的东西。

不过随着模型越来越强,我反而觉得“产品侧的滞后”比模型更明显。换句话说,模型能力的增长速度,已经开始超过我们把它变成产品的能力。

如果你看整个行业,不只是 AI 原生公司,而是整个软件行业、知识工作领域,甚至制造业、科研、医疗,你会发现,现在的模型已经非常强大了。它们可以处理长周期任务,也能处理非常复杂的问题。但我们还处在一个阶段:努力弄清楚如何“包装”这些能力,以最好的形式交付给用户。同时,整个行业也在摸索:在这样一个“模型驱动”的世界里,工作该如何重新组织,才能最大化利用这些能力。

我经常去见客户,很少有那种情况是我走出他们办公室时觉得:“我们需要把模型在某个能力上再训练得更强一点。”更常见的情况是:我会被他们组织工作的方式惊到,原来可以这样用模型;或者我很确信,他们的问题其实现在的模型就能解决,只是我们还没有提供合适的 UI、合适的能力封装、或者足够顺滑的 onboarding,让他们轻松用起来。

10 天做出 Claude Cowork

Matt:外界一直流传一个说法,说 Cowork 基本是在 10 天左右“写出来的”。真实情况是什么?那 10 天到底发生了什么?Cowork 真的是完全靠 Claude Code 搭出来的吗?

Felix:我能理解为什么这个说法会在软件圈传开,毕竟现实是没有任何软件是“从零开始”的。

当时大家引用的是我说过的一句话:“我的团队在最后大概 10 天时间里做了一次冲刺”,这句话本身是准确的。我们确实是在发布前 10 天左右聚在一起,我当时跟团队说:“我们差不多该发点东西了,那我们到底要发什么?长什么样?叫什么名字?能做什么?”

但任何做过软件的人都知道,你不会从 0 和 1 开始写起。你会用各种已有的 library,也会基于过去积累的 research。在 Anthropic 内部,关于我当时想解决的核心问题——“如何让 Claude Code 的能力更容易在非编程场景比如更广义的知识工作中使用”,其实已经有很多非常聪明的人思考了很久。

所以说 Anthropic 之前没有考虑过这个问题,是不准确的;但说我完全是“空降”这个问题、没有受益于之前的积累,也同样不对。

Matt:这个产品的起源是什么?你们一开始已经有 Claude Code,那是什么时候开始意识到需要做 Cowork?是用户使用方式带来的变化吗?

Felix:我真正形成这个判断,其实是在 2025 年 12 月。

我在社交媒体上开始看到越来越多“非开发者”在用 Claude Code,有人写新闻稿,有人做教程,教完全不会编程的人:“我教你怎么打开终端,怎么用 Claude Code,它会帮你做很多事情。”

确实有一小部分非开发者,用它来“直接做软件开发”,但那只是其中一种用法。我还注意到我们原本的开发者用户,那些每天用 Claude Code 写代码的人,始用它做一些完全不是软件开发的事情。这其实释放出一种非常强烈的“潜在需求”。

有个我很喜欢的判断标准:如果用户愿意“爬玻璃也要用你的产品”,哪怕这个产品还很不好用,那基本说明这是一个值得投入的方向。

真正的起点是,我的同事 Boris Cherny 跑来跟我说:“我觉得你应该做点东西,而且最好这周五之前上线。”我把 ddl 从周五谈判到了周一,给自己多争取了一个周末。然后我们拉了一个小团队,快速验证一个想法:如何让 Claude Code 在“非编程场景”下也变得非常高效。

从构成上来说,Cowork 其实很简单。我们做的事情是:给 Claude Code 加了一台“虚拟机”,让 Claude 可以在里面运行自己写的代码。

这台虚拟机带来了几个关键好处。第一,它提供了非常强的安全边界。作为用户,你不再需要时刻盯着它,因为它被关在一个沙盒里,和你的电脑、文件、网络都是隔离的,只能访问你明确授权的域名和文件。

第二,为了让 Claude Code 发挥最大效能,它其实是需要 developer tooling 的。Claude 很擅长解决各种任务,但它经常的做法是:写一些非常定制化的小程序来完成目标。给它一台“自己的电脑”之后,它就可以自己搭建开发环境,而不会影响你的系统。再加上一些 UI 层的优化,让使用更顺手、更优雅,简化那些原本更偏开发者的流程,最后我们得到的,就是一个可以很好支持知识工作的工具。

Matt:那在 Cowork 里面,“skills” 扮演什么角色?

Felix:skills 本质上就是一些 Markdown 文件,用来告诉模型“该怎么做事”。而让我一直觉得很神奇的是:这种方式居然这么有效。我对所有人的建议都是一样的:就把 Claude 当成你的 coworker(同事)。

一个 skill,说白了就是一个文本文件,里面写清楚某件事该怎么做。比如我最常举的例子是订机票。在 Anthropic,我们有指定的差旅供应商,所以你不能直接去 Google Flights,而是要用内部指定的系统,还要遵守各种规则。

这件事我怎么教同事,就可以怎么教模型。我只需要写一个文件:“这是订机票的流程,去这个网站,注意这些规则……”然后再加一点个人偏好,比如:不要红眼航班;如果要从旧金山飞纽约,尽量订下午 4 点的航班。把这些写进去之后,模型就能非常好地理解并执行。

Matt:那整个系统的“intelligence layer(智能层)”还是在模型本身,对吧?比如 Cowork 如何把一个任务拆解成多个子任务,这些都是模型在做?

Felix:是的,不过是“模型 + 人”的协作。我们比较满意的一点,是任务列表的设计方式。模型会被引导去把一个项目拆解成多个任务,而你可以随时介入:编辑任务列表、点开某个子任务、补充更多上下文。所以智能确实在模型里,但 skills 给它加了一层非常关键的实用性。

这里有个挺有意思的变化。我们过去习惯用“标准化”的技术产品,大家用一样的手机、一样的电脑。但模型不一样,模型其实非常依赖一点点指导。就像一个很聪明的人入职新公司,通常也需要 onboarding,需要有人告诉他:这里事情是怎么做的。

再举个更贴近的例子,比如做 presentation 或写文档。如果你有 PowerPoint 或 Google Slides 的模板,你就应该告诉 Claude;如果你对字体有偏好,比如喜欢 serif font 或不喜欢某种风格,也都可以写进去。只要你把这些偏好用简单的指令写下来,模型在实际帮你做事时的表现会好很多,你也不需要反复修改、盯着它“带娃式”纠正。

Matt:那 Cowork 的记忆是怎么实现的?它是存在模型里,还是在外层的 harness 里?

Felix:在 harness 这一层。所谓“记忆”,本质上就是文本文件。就是模型被明确指示:如果你觉得有一些信息未来可能还会用到,那就把它写下来。我们会在这个基础上帮模型做一点点组织,比如你可以设置项目级别的独立记忆,也可以有全局记忆。但整体来说,这套叠加在模型之上的机制,并不是什么复杂炫技的数据库系统,它其实非常朴素。

Matt:那 Cowork 是怎么接入各种信息源或应用的?是通过 connectors?MCP(Model Context Protocol)?还是多种方式组合?

Felix:是组合使用的。

我一直有个很强的判断:你工作所需的数据,基本分布在两个地方。第一类是在你本地电脑上。作为做产品的人,我们必须认真对待这一点:用户是在用电脑,而不是只用 iPad。并不是所有东西都在云端,文件夹依然很重要。这是一类上下文来源。你可以直接拖文件进来,或者给 Claude 访问某个文件夹、甚至多个文件夹的权限。

第二类,是云端或互联网里的数据,比如 data warehouse、analytics 系统、SharePoint 等等。针对这些,我们提供多种接入方式,其中 MCP connectors 是一个很强大的方式。

另外,因为 Claude 本身“有一台电脑”,如果你允许,它也可以直接访问互联网。当然你可以精细控制:哪些网站能访问,哪些不能。但总体来说,只要资源在外部存在,而且你授权了,Claude 基本都能找到办法去使用它。

本地、云端和信任

Matt:为什么 Cowork 要运行在本地电脑上,而不是完全在云端?

Felix:Cowork 现在提供的两个最大价值,其实就是:访问你的本地电脑,以及访问你的本地文件。那问题是,这些不能在云端实现吗?比如说一个很典型的例子是 Chrome。如果你授权,Claude 可以用你的 Chrome,可以帮你回邮件、总结邮件,或者操作你公司内部的工具。

很多人会问:那为什么不直接在云端做?

第一是 session。Claude 如果能直接使用你已经登录过的账号,价值是完全不一样的。比如 Gmail,本身没什么用,但“带着你登录态的 Gmail”,对 agent 来说就非常有价值。第二点更多是工程实现层面。理论上,我们确实可以把你的本地 Chrome 打包、上传到云端,甚至让你输入密码,在云端复刻整个环境。

但我反对这种做法,主要有两个原因。第一是安全性。我不认为我们应该教育用户,把所有密码都交给某一家公司,这不是一个好的方向。第二是现实世界的限制。比如银行,如果它检测到你同时在两个地方登录,一个是你的电脑,一个是数据中心,它很可能会直接锁定你的账户,然后要求你带着护照去线下网点验证。这类长尾问题非常多,而且用户体验很差。

对我来说,这种风险是不可接受的。所以在现阶段,我更希望 Claude 能“在你工作的地方工作”。你在本地电脑上,它就应该在那里。

Matt:那 Computer Use 的出现,会改变这个判断吗?你们最近收购了 Vercept,也推出了相关能力。假设从云端就能看到整台电脑的内容,那为什么还需要本地?

Felix:如果我给你一个“神奇按钮”,按下去之后,我就把你整台电脑的数据都吸到云端,你会按吗?目前我的观察是,大多数人不会。也许大家会信任 Anthropic,但要把“全部数据”交出去,还是一件非常重的决策。

从技术上讲,其实确实没有什么“必须在本地运行”的硬性限制。我们完全可以把整套系统都搬到云端,甚至远程操作你的电脑。但至少在当前阶段,让 Claude 在你工作的地方运行,不仅更符合用户习惯,也让我们可以更快迭代,同时在安全性上做得更严格。

AI 发展很快,这个判断未来可能会变。但就现在来说,我对“本地优先”这件事还是挺有信心的。

Matt:你刚才提到了“信任”,这是生成式 AI 里一个很核心的话题。一方面是你不会乱访问文件,另一方面是我把越来越重要的工作交给你,你能不能做好、不会让我出丑。作为产品负责人,你是怎么建立这种信任的?

Felix:我觉得在 2026 年做 AI 产品,有一个很有意思的变化:你做的大多数按钮,其实是“给人用的”,而不是“给机器用的”。过去我们设计界面,是为了让计算机更好地工作,人只是输入信息的角色;但现在反过来了,我们是在帮助人理解、控制、信任这个系统。

举个例子,我们最近上线了一个叫 dispatch 的功能,可以让你用手机和电脑上的 Claude 对话。我们当时有意识地“少放按钮”。但上线之后,我每天在社交媒体上能收到大概 50 条反馈,说:“能不能加一个按钮,让 dispatch 直接访问我的本地文件?”

为什么纠结这个?因为现在的逻辑是:Claude 本来就能访问你的文件,但它会先问你:“我可以访问你的 downloads 文件夹吗?”你授权之后它才会去做。

所以问题变成:我们要不要加一个按钮,让用户“显式知道”这个能力存在?这就回到你问的信任问题。我们的思路,其实不是让 Claude 去“证明自己”,而是一步步带着用户成长,让他们逐渐理解系统的能力。

比如 Cowork 刚上线时,其实已经能做很多很复杂的事情,比如写 200 页的 VC 报告、做蛋白质建模、设计复杂架构图等等。但真正打动用户的,是一句简单的:“帮我整理桌面。”这是一个对 AI 来说很简单、甚至有点“没必要”的任务,但它是一个很好的起点。

另一个例子是“定时任务”。从技术角度讲,这也不新鲜,延迟执行函数早就有了。但这里的关键是:我们在教用户一件事:你可以不盯着它。你可以让 Claude 每天帮你总结会议、写报告,然后它完成后发邮件给你,你不需要坐在电脑前盯着它执行。这个过程其实是在逐步建立信任:先从小任务开始,用户看到结果可靠,然后自然会把更重要的事情交给它。

所以信任的本质,是 Claude 承诺一个结果,最终交付的结果是好的,而且你不需要“带娃式”监督或频繁介入,信任就是这样一点点积累起来的。

AI Agent 时代怎么做产品?

Matt:在 AI agent 的成功里,UX 和底层技术一样重要吗?比如说,如何把用户一步步带入,让他们真正用起来、用得好。你在做 AI agent 的过程中,有哪些 UX 层面的经验?

Felix:UX 非常重要。Claude Code 的起点其实就是一个 UX 的变化:同样是 Claude,但不再只是“在云端对话”,而是运行在你本地电脑的终端里。这背后几乎完全是体验层的改变,模型本身没有变,核心能力也没有变。很多价值,其实就是从“你怎么和模型交互”里产生的。

那些真正被用户喜欢的 AI 产品,很少是“原始能力最强”的那一类。这不仅仅适用于 AI,而是整个软件行业的普遍规律。比如说邮箱,市面上肯定有不少产品,功能比 Gmail 更多、更复杂,很多公司总是试图靠“加功能”“多按钮”来领先。

这让我想到智能手机之前的那段时间,出现的各种奇怪手机:带投影仪的、带游戏手柄的、有全键盘的、没键盘的……大家不断往上“堆功能”。但最终真正成功的产品,往往不是“加了什么”,而是“去掉了什么”。它更关乎一种感觉:用起来是什么体验。说实话,我不太相信大多数人是看参数表来买手机的,人们做决定的原因往往不是芯片性能这些指标。

AI 其实很类似。当然,更强的模型确实会带来优势。我在 Anthropic 工作,可以直接和研究团队合作,拥有很强的模型,这是一个客观优势。但如果有一天有人在产品上打败我,我很怀疑那是因为他们做出了“更强的模型”。更可能的原因是:他们做出了更好的用户体验。

Matt:在实践层面,你们是怎么优化用户体验的?你们会不会非常精细地追踪用户行为?比如什么好用、什么不好用,然后重点投入?

Felix:我们的方法其实并不算特别独特。有一件事对我来说比较新:对用户的极致关注。去和真实的人交流,优先做快速迭代,而不是长期规划。我们基本不会规划超过一个月的 roadmap,Cowork 的整个产品路线图,最长也就是一个月。我们更关注的是:下周做什么?下下周做什么?至于一年后的产品长什么样,说实话,我们没什么信心。任何人如果告诉我,他知道 AI 一年后会是什么样,我也不会太信服。

我过去做过的所有成功产品,之所以变好,都是因为我有很多次“纠偏”的机会,可以犯点小错、比较不同方案、不断调整方向。但现在有一个全新的变化:执行成本几乎为零。如果你带着 10 个想法来找我,我现在的反应是:那我们就把 10 个全做出来试试,看看哪个更好。

我们尽量在内部测试这些东西,而不是把用户当成免费的 beta tester。但大多数时候,你其实很快就能判断一个方向对不对。现在公司规模也不小了,很容易验证:这个东西是不是至少能打动 5 个人。真正“新”的,是这种执行速度。哪怕是两年前,如果你想快速迭代,也必须非常克制,因为资源有限,一次只能做少数几件事。但现在,执行变得极其便宜,你可以同时“做深”和“做广”。

Matt:你们真的会同时做 10 个版本甚至 10 个产品,然后让内部的人测试,最后再决定走哪个方向?

Felix:实际上不止 10 个,我们现在公司内部,可能有 100 个不同的原型在跑。当然,这些原型大多数还没达到可以给用户看的程度。但能在内部快速做出来的数量,远远超过我过去任何时候的经验。

以前最大的限制是执行成本。比如你有一个好点子,来找我,我可能会说:“我们下个月排期,这个要做三周,在那之前你先去找用户验证一下。”但现在,你可以走过来说:“我有个想法。”我会说:“给我 10 分钟,我给你一个版本。”这种变化,有点像从“绘画”进入“摄影时代”。

Matt:当你有 100 个原型之后,真正的瓶颈是什么?总要有人做选择,这一步是不是会变慢?

Felix:是的,我觉得“alignment(对齐)”依然很难,而且一直都很难。公司里有不同的人、不同的想法,你选谁?怎么选?怎么把不同方案里的优点组合起来?这些问题依然存在,而且这部分仍然高度依赖人。换句话说,这正是“人类判断”和“taste(品味)”发挥作用的地方。

Matt:品味是不是正在成为一种更核心的能力?

Felix:是的,品味的重要性在上升。

Matt:但这又和刚才说的数据驱动有点冲突?一方面你会测试、看数据,但另一方面又有一些更难量化的判断。

Felix:对。数据驱动的价值在于:帮你验证你的“品味”是否真的被用户认可,帮你判断方向是不是对的。即使是那些我们认为“品味很好”的人,比如早期做出 iPhone 的团队,他们也非常强调持续迭代和测试。Ken Kocienda 在《Creative Selection》这本书里写得很好:你需要品味,但你也必须不断验证。我觉得这两者是同时存在的。

而从更大的视角来看,我甚至在想:软件会不会越来越像时尚行业?现在手机其实已经有点这个趋势了。会有一个“基础性能”和“基础能力”的下限,但真正决定差异的,可能是:你讲了什么样的故事、你的 onboarding 做得怎么样、用户在使用时的感受如何。这些因素,很可能会比“模型本身有多强”更重要。

Matt:在 Cowork 的业务背景下,这种“品味”是如何运作的?你需要服务极其广泛的专业群体,有做营收运营的,有做市场营销的,甚至还有律师和会计。当受众如此宽泛时,“品味”意味着什么?你又是如何去测试它的?

 

Felix:我反复提到“手机”的类比。我们所有人拿到手的可能都是同款手机,但世界上没有两部手机是完全一样的。你安装的 App 组合让你的手机像指纹一样独一无二。我们从同样的设备出发,但它融入我们生活的方式却各不相同,非常个性化。

 

对于 Cowork 来说,我们的思路很像:我们希望打造一种通用性极强的东西,可以应用在生活的方方面面。拿我自己的生活来说,我最近正在搬家,涉及 500 多页写满复杂术语的合同,很多词我根本看不懂,这时候 Cowork 就非常有用了。同时,它在医疗场景下也帮了我大忙,我女儿今年刚出生,处理那些堆积如山的医疗账单和表格时,它也发挥了巨大作用。

 

一边是房贷申请、和搬家公司谈判、处理财务申请,另一边则是纯粹的医疗文书。从理论上讲,这是同一种底层技术的两个完全不同的应用。但我发现,我脑子里思考的那些 primitives(基本原语)其实是一样的。有些原语打磨得更好,手感更顺滑。

 

我认为,作为一个产品缔造者,如果你密切关注并深度使用自己的产品,你能感觉到那种“撞在软件墙上”的生涩感。那种感觉很不爽,它没有让你起飞,而我想要创造更多能让人“飞起来”的时刻。即使客户所在的行业我完全不懂,我也可以从他们的故事中听出:哪些功能让他们如虎添翼,哪些环节让他们觉得被拖累。如果你能敏锐地捕捉并激进地去优化这些点,让用户进入那种“flow(心流)”状态,感觉讨厌的繁琐工作被自动接管了,那这里面就蕴含着巨大的价值。

 

Matt:打造 Claude Cowork 最难的部分是什么?

 

Felix:我在想,如果重新来一遍,换个产品,什么是最难被“复刻”的?我觉得是那种“时机感”。我之前提到过,Cowork 的诞生是因为我们一直紧贴地面,敏锐察觉到了潜在需求。这种潜在需求是上天的馈赠,你很难凭空创造它。

 

软件行业其实一直存在大量的潜在需求,只要你有心去找,总能发现。所以,如果说构建 Cowork 的核心难点,我倒不觉得有什么技术细节特别难。做出一款好产品该有的难点它都有,比如所谓的“成长的烦恼”:如果你开了一家咖啡馆,原本准备接待 10 个人,结果来了 2000 万人,你该怎么办?这对我们来说有时确实挺难的。Anthropic 的产品需求量实在太惊人了,当然,作为产品负责人,我也没资格抱怨大家太爱用我的产品。

 

Matt:如果有人正在构建某种 AI Agent,关于开发流程、构建 Harness、专业化定制、或者是加装 Guardrails 和行业深耕,有什么经验可以分享吗?

 

Felix:我首先会建议不要自己去造太多的底层轮子,可以试试我们刚推出的 Claude Managed Agents,它在很多场景下非常管用。

 

关于构建自定义 Agent,有正反两个维度的思考。反对过度定制的理由是:随着模型能力越来越强,我发现我们在产品开发中需要考虑的 Edge Cases(边界案例)反而变少了。我之前说过,记忆其实就是一个文本文件,如果 Claude 需要数据库,它自己就能造一个。所以,如果你想做一个超垂直、超专业化的产品,逻辑前提可能是模型还没强到能随时随地“现造”这些功能。如果模型以后能即时搞定一切,那你的专业化门槛可能就不存在了。

 

但是,支持投入这个领域的理由也很充分:整个行业要真正发挥出这种力量,还有很长的路要走。大家总喜欢用各种闪亮的类比来定义 AI,说它是像互联网、蒸汽机那样的发明。我觉得互联网带给我们的教训是:一项技术真正转化并重塑经济逻辑,需要几十年的时间。从第一个浏览器问世,到 Amazon 成为零售巨头,中间隔了太久。

 

所以,我的观点是:你应该深入进去,寻找那些独特且新颖的应用场景。不过,你提供的价值可能并不在于 Agent 本身,也不在于模型的智商,而在于你如何帮助人们组织工作。如何让它变得真正“好用”,这才是关键。

SaaS 的末日?

Matt:几周前,你们发布了一个看似寻常的公告,结果市场反应剧烈,媒体甚至称之为“SaaS-Pocalypse(SaaS 启示录)”。当时你们只是增加了 10 到 11 个关于法律和 CRM 之类的文件支持。显然,无论市场情绪如何波动,这都反映出你们所构建的 Cowork 以及 Anthropic 整体所具备的影响力。

 

你们做了 Claude Code,解决了开发者的痛点;做了 Cowork,服务了所有人;现在又推出了 Managed Agents。当你们不断往技术栈的上层走,软件行业还有什么空间留给后来者吗?

 

Felix:我经历过好几轮这种“民主化”浪潮,也就是构建事物的门槛越来越低,不再需要那些晦涩的专业知识。

 

举个例子:多年前我在 Microsoft 工作,参与了一个叫 Electron 的项目,这是一种让应用能在 Windows 和 macOS 上跨平台运行的技术。我们当时第一个应用案例就是 Visual Studio Code,这是一款后来在开发者中变得非常流行的代码编辑器,像 Cursor 这样的产品也是在它之上构建的。当年 VS Code 在公司内部刚推出时,很多人觉得这就是个“玩具”,觉得真正的开发者需要的是 Visual Studio 这种功能复杂、工具高级的大家伙。

 

但结果呢?你不再需要钻研得那么深了。对于做软件的听众来说,我这周感触很深:今年我查看 Assembly(汇编语言)的次数是零。而在过去五年里,这个数字从来不是零。

 

最近作家 Margaret Atwood 写了一篇非常精彩的文章,讲她如何使用 Claude。我在想,如果让 Margaret Atwood 来写软件,那个软件会是什么样?我肯定非常有兴趣装一个来试试。

 

所以我的预测是:未来我们将拥有更多的软件,而且会更加专业化。并不是说每个人都会亲手写软件,人们依然会创造并分享,大家也依然喜欢好用的工具,只是所需的技能点变了。以前是你必须精通“计算机的语言”,而未来,你会更倾向于做一个精通“人类语言”的人,软件将真正地“为人而造”。

 

Matt:这是否意味着一切最终都会归结为 UX 的问题?

 

Felix:20 年前成功的软件开发者是“计算机专家”,而未来的成功者将是那些深度理解人类和用户需求的人。这一直是一个渐进的过程,10 年前写软件就比 30 年前容易得多,AI 则是另一个阶跃式的变化。

 

至于市场表现,我不是经济学家,我是个软件工程师。我从来没搞懂过市场是怎么运作的,我也建议其他工程师不要把自己的行动指南完全建立在市场波动上。

 

我觉得还有堆积如山的事情等着我们去自动化,还有无数的工作可以变得更轻松。只要人类还有问题和麻烦,软件就会是一个合理的答案。

 

Matt:跳出具体的产品细节,你认为两三年后 Agent 的能力未来会走向何方?

 

Felix:这对我来说挺难回答的,因为我原则上不喜欢在功能还没真正做出来之前就开空头支票。我的营销哲学一直都是:先做出酷炫的东西,再展示给人看。

 

大家似乎总是很快就忘记了 AI 已经走了多远,反而开始预期所谓的“Plateau(平台期)”会很快到来。我想这可能是科技史给人的刻板印象,就像 iPhone 刚出来那几年,每年的更新都是巨变,但最近几年更新幅度就变小了。

 

但作为一个 AI 观察者,我没有任何理由认为 AI 会在短期内进入平台期。我想提醒大家,AI 学会说出像样的人话其实也就这几年的事,而现在它已经能构建完整的应用、解决复杂的问题了。对我来说,这远非巅峰,我们还在半山腰呢。这段旅程正在加速,步子会迈得越来越大。Claude Mythos Preview 其实就是一个很好的证明:模型会越来越聪明,而且目前完全看不到上限。

 

Matt:你们是否会让受规管行业更轻松地接入 Cowork?作为一家风险投资机构,我们目前在工作场景下还用不了 Cowork,但我私下里一直在用。这在你们的计划中吗?

 

Felix:你绝不是唯一一个在为特定受规管行业申请 Cowork 的人。作为产品人,用户的需求就是我们的风向标,我们会非常认真地倾听。

 

到了 2026 年,最让我激动的依然是:如何帮助人们重新组织工作,从而最大限度地发挥 AI 的能力。我曾在 Slack 工作过五年,那时候我们觉得自己在帮公司变革办公方式。虽然我们不是第一个做聊天工具的,也不是第一个提出“打破信息孤岛”的人。但我们卖给用户的不仅是一个聊天 App,而是一种更透明、更开放的办公文化。对于 AI 来说,这种变革是相似的:只有当你重新审视自己的工作流程,思考哪些部分可以交给模型,哪些部分需要完全掌控时,工具才最有效。

 

另一个让我兴奋的领域是:目前使用 AI 的人分为两类。一类是我们所说的“AGI Pilled(深受 AGI 浸染的人)”,他们全身心投入,研究怎么设置 Claude、开放什么工具权限、安装什么 MCP connectors。他们用得飞起,效率极高。而另一类人可能没那么多时间或兴趣去钻研。如何缩短这两类人之间的距离,让普通用户也能秒变 Power User,这其中的潜力巨大。在实践中,Cowork 的用户会发现我们几乎每周都会发布意义重大的更新,这件事目前看不到终点。

快问快答

Matt:哪一个想法被严重低估了?

 

Felix:MCP connectors。包括我在内,大家现在都在关注 CLI(命令行界面),但将数据与“执行引擎”分离,这件事本身有着巨大的内在价值,是一个非常技术硬核的观点。去年秋天 MCP 爆火过一阵,现在讨论变少了,但我认为到今年年底或明年,它会变得极其有用。就像 WebSocket 对 Amazon 或 TikTok 的用户来说是不可或缺的底层协议一样,用户不需要关心它,但工程师们目前对 MCP 的重视程度还远远不够。

 

Matt:哪一个想法被过度神化了?

 

Felix:我认为:并不是每个产品都需要一个 Chat(聊天框)。在 2026 年的 AI 圈,这听起来可能有点叛逆。很多同行都有一种膝跳反应,一说要把 AI 引入产品,就立刻在右边加个侧边栏,底下放个聊天框。我鼓励 AI 开发者们多想一层:如何让 AI 以更自然、更有用的方式存在,而不仅仅是对话。

 

Matt:如果你今天白手起家,你会做什么?

 

Felix:我可能会去关注这个行业的“长尾部分”。比如,世界上还有大量运行着 Windows 7 的旧设备,它们处理着琐碎的任务,却在社会中扮演着承重墙的角色。想想挺吓人的,这些处于现代 AI 触角之外的电脑,却在支撑着重要的社会功能。

 

另一个方向是,如果你相信 AI 的本质是计算机不再只是执行预设的功能,而是能非确定性地做出决策并代你执行,那我建议去攻占物理世界,这也是我对年轻人的建议。我们真的还处于非常早期的阶段,现在的 AI 产品处于就像是移动电话刚出现的“傻瓜机时代”。运气好的话,我们现在做的可能只是“诺基亚 3310”,它是个好手机,但它还不是智能手机,更不是 iPhone。真正属于 AI 的“iPhone 时刻”,正等着某个人去创造。

访谈视频原链接:

https://www.youtube.com/watch?v=9MEJ4syOVrQ&t=2s

华为举办 Pura 系列及全场景新品发布会

4 月 20 日,华为 Pura 系列及全场景新品发布会在广州举行,发布 HUAWEI Pura 90 系列等多款新品。

HUAWEI Pura 90 系列包括 Pura 90、Pura 90 Pro、Pura 90 Pro Max 三款,全系支持 IP68 与 IP69 防尘抗水。HUAWEI Pura 90 Pro Max 有橘子海、霞光紫、翡翠湖、晨曦金、曜石黑五款配色,屏幕 6.9 英寸,采用抗反光耐刮昆仑玻璃。机器采用麒麟 9030S 处理器,电池容量 6000 mAh,支持 100 W 超级快充与 80 W 华为无线超级快充。后置摄像头为 5000 万像素主摄(F1.4-F4.0,OIS 光学防抖)、4000 万像素超广角摄像头(F2.2)、1/1.28 英寸 2 亿像素长焦摄像头(F2.6,OIS 光学防抖,长焦微距)与第二代红枫原色摄像头。定价 6499 元(12GB+256GB)至 8499 元(16GB+1TB)。

HUAWEI Pura 90 Pro 有粉红芭乐、橘子汽水、椰青白、桑果黑四款配色,屏幕 6.6 英寸,采用第二代昆仑玻璃。机器采用麒麟 9030S 处理器,电池容量 6000 mAh,支持 66 W 超级快充与 50 W 华为无线超级快充。后置摄像头为 5000 万像素主摄(F1.4-F4.0,OIS 光学防抖)、1250 万像素超广角摄像头(F2.2)、5000 万像素长焦摄像头(F2.1 ,OIS 光学防抖)与第二代红枫原色摄像头。定价 5499 元(12GB+256GB)至 7499 元(16GB+1TB)。

HUAWEI Pura 90 有罗兰紫、丝绒黑、雪域白三款配色,屏幕 6.8 英寸,采用昆仑玻璃。机器采用麒麟 9010S 处理器,电池容量 6500 mAh,支持 100 W 超级快充与 50 W 华为无线超级快充。后置摄像头为 5000 万像素主摄(F1.8,OIS 光学防抖)、1250 万像素超广角摄像头(F2.2)、5000 万像素超聚光潜望长焦摄像头(F2.2 光圈,OIS 光学防抖)与红枫原色摄像头。前置摄像头为 5000 万像素超聚光人像摄像头(F2.0)与红枫原色摄像头。定价 4699 元(12GB+256GB)至 5699 元(16GB+512GB)。

HUAWEI Pura X Max 为华为首款大阔折手机。Pura X Max 外屏 5.4 英寸,内屏 7.7 英寸,电池容量 5300 mAh,外屏采用第二代昆仑玻璃,搭载麒麟 9030 Pro 处理器。机身支持 IP58、IP59 防尘抗水,后置摄像头采用 5000 万像素主摄(F1.4-F4.0,RYYB,OIS 光学防抖)、1250 万像素超广角摄像头(F2.2,RYYB)、5000 万像素长焦微距摄像头(F2.2,RYYB,OIS 光学防抖)与第二代红枫原色摄像头。Pura X Max 有幻夜黑、零度白、星际蓝、橄榄金、活力橙五色可选,售价 10999 元(12GB+256GB)至 13999 元(16GB+1TB 典藏版)。另有 HUAWEI M-Pen 3 Mini 可配合使用。

同时,HUAWEI Pura X 追加型格紫、型格橙两款新配色,仅 16GB+512GB 配置,售价 7999 元。

可穿戴设备方面,华为 AI 眼镜正式发布,整机重量 35.5 g,镜腿薄至 6.25 毫米,支持 HDR Vivid 标准;搭载 1200 万超感光摄像头,配备 1/2.8 英寸传感器与高透光 6P 光学镜片,搭载超澎湃水滴单元,采用三麦克风通话降噪系统,搭配算法可实现 80dB 双向清晰通话。华为 AI 眼镜配合搭载 HarmonyOS 6.0 及以上版本系统的 Mate、Pura、nova 系列手机使用。眼镜综合续航 12 小时,连续语音通话 8 小时,连续音乐播放 9 小时。钛丝半框光学镜与经典全框光学镜售价 2499 元,经典全框太阳镜售价 2899 元。

HUAWEI WATCH ULTIMATE DESIGN 非凡大师星钻绽放款发布,重量 91g,带有 99 颗天然钻石。售价 29999 元。

HUAWEI WATCH FIT 5 系列有 FIT 5 Pro 与 FIT 5 两款机型。FIT 5 Pro 有丹霞橙、冰川白、雅丹黑三色可选,采用 1.92 英寸 AMOLED 屏,峰值亮度达 3000 尼特,表镜为 2.5D 蓝宝石玻璃,机身采用钛合金与铝合金材质。支持 IP6X 级别防尘抗水,潜水最大深度 40 米。系列首发腕上微运动功能。FIT 5 有光织银、风信紫、向新绿、悦动白、韵律黑五色可选,屏幕为 1.82 英寸 AMOLED,峰值亮度 2500 尼特,采用铝合金材质,支持 IP6X 级别防尘抗水。FIT 5 Pro 售价 2099 元起,FIT 5 售价 1099 元起。

HUAWEI WATCH Buds 2 采用手表耳机二合一设计。表体采用钛合金,屏幕为 1.5 英寸超窄边柔性屏,峰值亮度 3000 尼特。耳机左右耳自动识别,单只净重 4 g,支持广域耳廓触控。整机综合续航约 3 天。有琥珀棕、曜石黑、钛空银三色可选,售价 3488 元起。

HUAWEI MateBook 14 鸿蒙版采用圆形键盘设计,搭载 2.8K OLED 云晰柔光屏(可选),支持 P3 广色域。机器采用麒麟 X90 芯片,40W TDP 散热设计,支持 Wi-Fi 7,整机重量 1.33 kg,接口包括一个 USB-C、两个 USB 3.2 Gen 1 Type-A 接口、一个 HDMI 与一个 3.5mm 耳机孔。有原野绿、樱粉金、深空灰三色可选,售价 6599 元(24GB+512GB)起。

华为智慧屏 S7 Pro 采用 Super MiniLED 黑晶屏,机身 49mm 薄,支持 288 Hz 高刷,搭载三分频 2.1 声道音响。售价 7999 元(65 英寸)起。此外还有 HUAWEI Sound X5 音响,定价 2199 元。


徕卡与长光辰芯联合开发下一代 CMOS

4 月 20 日,徕卡与高性能 CMOS 图像传感器供应商长光辰芯(Gpixel)宣布展开新一阶段的战略合作。双方将为下一代徕卡相机定制一款 CMOS 图像传感器芯片,提升徕卡相机图像质量、动态范围、色彩还原及弱光性能等。双方还将在芯片验证、图像调校及量产准备等方面密切协作。来源


微软 AI 数据中心 Fairwater 投入使用

4 月 16 日,微软 CEO Satya Nadella 发布推文,确认在威斯康星州建设的 Fairwater AI 数据中心已提前投入使用。该中心于 2025 年 9 月官宣,将配备超十万张 NVIDIA Blackwell GB200 GPU,设施采用闭路液冷设计,集群内光纤基础设施可绕地球 4.5 圈。微软称 Fairwater 将采用可再生能源满足电力需求。微软已在波蒂奇县投资新建一座 250MW 的太阳能电厂。来源


Apple 宣布一系列人事变动

当地时间 4 月 20 日,Apple 发布新闻稿,宣布自 2026 年 9 月 1 日起,任 Apple 首席执行官 15 年的 Tim Cook 将任董事会执行主席,参与公司政府公关等事务;现任硬件工程高级副总裁 John Ternus 将出任 Apple 首席执行官;任 Apple 非执行董事长 15 年的 Arthur Levinson 将成为首席独立董事,John Ternus 将加入董事会。Tim Cook 在任 CEO 期间,Apple 市值从约 3500 亿美元增长到 4 万亿美元,增幅超过 1000%,年收入几乎翻两番,从 2011 财年的 1080 亿美元增长到 2025 财年的超过 4160 亿美元。John Ternus 自 2013 年起任硬件工程高级副总裁,在 iPad 与 AirPods 等新品类,与 iPhone、Mac 与 Apple Watch 的多代产品推出中起重要作用。来源

同时,Apple 硬件技术高级副总裁 Johny Srouji 即日起任 Apple 首席硬件官。来源


月之暗面发布并开源 Kimi K2.6 模型

4 月 20 日,月之暗面发布并开源 Kimi K2.6 模型,模型已已上线网页版、最新版 Kimi 应用、Kimi API 和 Kimi Code 编程助手。Kimi K2.6 的通用 Agent、代码、视觉理解等综合能力得到全面提升,其中在博士级难度的完整版人类最后的考试(Humanity's Last Exam)、在考察模型真实软件工程能力的 SWE-Bench Pro、评估 Agent 深度检索能力的 DeepSearchQA 等基准测试中均取得行业领先的成绩,持平或优于 GPT-5.4、Claude Opus 4.6 和 Gemini 3.1 Pro 等闭源模型。其长程编码能力也得到显著提升,并大幅增强了 Agent 自主化执行能力。来源


第十一届中国高校计算机大赛-移动应用创新赛报名启动

4 月 20 日,由 Apple 与浙江大学联合承办的第十一届「中国高校计算机大赛-移动应用创新赛」报名启动。大赛开设「启明」「启迪」「启航」三大赛道,鼓励中小学、高职、大学及毕业五年内的年轻开发者,以及对编程感兴趣的非专业背景参赛选手。启明与启迪赛初赛作品提交截止日期为 2026 年 6 月 30 日晚 23:59,启航赛道初赛作品提交截止日期为 2026 年 7 月 31 日晚 23:59。同时,去年 Apple 捐款 3000 万用于支持在华编程教育,基于此资金设立的 Apple 移动孵化器正式面向社会招募首批独立开发者、天使轮及之前的早期创业团队入驻,入围者将获得包括技术培训、商业辅导等在内的多方面支持。来源

关联阅读:十年移动应用创新赛落幕,Apple 移动应用孵化基金「启航」


Adobe 发布面向企业的客户体验设计工具

4 月 20 日,Adobe 发布 Adobe CX Enterprise。这是一款面向企业的客户体验编排(Customer Experience Orchestration, CXO)解决方案,由内容供应链、客户参与及品牌知名度三大核心维度构建,旨在以智能体系统的形式,让组织将 AI 融入商业流程,帮助品牌从以往渠道为中心的营销模式转向全流程用户体验编排。Adobe CX Enterprise 系统支持混合界面(Hybrid Experiences)交互,兼顾传统与对话式接口;具备目标驱动的决策优化能力,可针对收入与客户生命周期价值进行持续优化;提供可扩展的智能体互操作性,允许接入 Adobe 及第三方生成式 AI 模型。该工具现已上线 Adobe Experience Cloud。来源


不妨一看的简讯

  • Google 开发中的无屏幕运动手环目前已由 NBA 球星斯蒂芬·库里公开佩戴,手环略薄于其主要竞争对手 WHOOP MG。9to5Google 称该手环可能定名为 Google Fitbit Air,配合的订阅服务可能从 Fitbit Premium 更名为 Google Health。来源
  • 4 月 20 日,爱奇艺于 2026 年世界大会宣布 117 位艺人签约其「纳逗 Pro 艺人库」,称其肖像、声音数据将用于 AI 影视制作。CEO 龚宇在会上提出「真人实拍或成非遗」言论。随后,多位艺人或艺人工作室发出声明否认签约。爱奇艺于当日下午发布微博称进入 AI 艺人库仅「代表艺人有接洽 AI 影视项目的意愿」。来源


少数派的近期动态

你可能错过的文章

> 下载 少数派 2.0 客户端、关注 少数派公众号,解锁全新阅读体验 📰

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