包含关键字 typecho 的文章

​在多元算力时代,大模型的性能不仅取决于计算密集型的算子,更取决于那些随处可见的 Element-wise(逐元素)与 Reduction(规约)算子。它们虽然逻辑简单,却往往决定了整个模型的吞吐上限。

在 FlagGems 的日常开发中,我们反复验证一个问题:大部分的性能瓶颈,不出现在计算密度上,而出现在访存组织里。FlagGems 是基于 Triton 的高性能通用算子库,作为 FlagOS 开源生态的核心组件,FlagGems 目前支持超过 400 个算子,基本覆盖大模型需求,82% 以上的算子性能可与 CUDA 原生算子平齐甚至实现超越,成为全球最大的 Triton 单一算子库。更重要的是,它支持多款硬件后端,完成了对 28 种主流 AI 芯片的适配支持,做到“多芯片运行、处处高性能”。

本文将从工程实践角度,拆解 FlagGems 在 Element-wise 和 Reduction 两类基础算子上的优化方法。所有结论均来自真实 Profile 数据和实际的测试结果。

Element-wise 算子的性能上限在哪里?

Element-wise 算子(如 add、mul、gelu)是典型的访存密集型(Memory-bound)任务,特点是:计算量小,访存密度高。因此,其性能瓶颈通常不在计算,而在内存带宽。

计算公式:理论带宽上限 = 内存带宽 × (有效负载字节数 / 总传输字节数)。

在实际开发中,开发者常常发现即使逻辑写对了,带宽利用率(DRAM Utilization)也往往只有 30% 左右。那如何判断一个算子是否“足够快”呢?在 FlagGems 的工程实践中,我们通过两个硬指标来衡量:

  • L2 Hit Rate > 92%:说明 Cache Line 的复用合理。
  • DRAM Utilization > 75%:说明访存通路已接近硬件物理极限。 例如,经过 FlagGems 优化后的算子,在特定国产 GPU(HBM2e,1.6 TB/s)上,实测吞吐利用率可从原生的 28% 跃升至 79%。

如果低于任一值,则存在优化空间——不是算力不够,而是数据没送到位。

高效 Element-wise 的关键要素

  1. 内存访问连续性:对齐 vs 非对齐,差的不只是一点

GPU 的性能核心在于访存合并(Coalesced Access),以 Cache Line(通常是 128 字节)为单位,一次访问会读取整个 Cache Line 的数据。如果你的内存访问是对齐的,一次就能读满数据;但如果是非对齐的,一次访问就会跨两个 Cache Line,需要两次内存事务,数据搬运开销直接翻倍。

在 Triton 中最优的访存模式是用 tl.arange(0, BLOCK_SIZE) 生成连续偏移,这样相邻线程访问相邻地址,GPU 会自动合并访存;

但如果张量本身是非连续的,例如转置后的张量,stride[1] = H,访问就会变成“步长为 H 的跳跃式访问”。这种情况下,GPU 的访存合并机制完全失效,每次加载可能只拿到 1 个元素,这是硬件架构决定的,没有通用的软件优化方法。

FlagGems 的解法不是“优化非连续访问”,而是让 kernel 能够正确支持非连续输入,避免因错误计算地址而出错。在 kernel 中传入每个维度的 stride 参数,计算偏移时使用 stride 而非假设连续。

优化建议:对于非对齐访问的场景,可以用 padding 的方式,把输入数据补到对齐的大小,再去掉 mask,减少额外的内存事务;对于跳跃式访问,可以使用 FlagOS 新语言Triton-TLE 中的 tle.gpu.alloc 分配 SMEM,把数据连续加载到 SMEM 中,再从 SMEM 跳跃式访问,从而提高 GMEM 的访问效率。

  1. 向量化加载的 mask 策略 

Triton 里的 tl.load 支持 mask 参数,用来处理边界外的访问(比如输入大小不是 BLOCK_SIZE 的整数倍),mask 策略的选择,直接影响着算子的性能。

常见的 mask 策略有两种,一是边界检查 mask:直接用 offsets < n 作为 mask,这是最直观的写法,但会导致 Warp 内出现分支,产生 Warp Divergence,同时还会增加额外的指令开销;二是Padding 后无 mask:先把输入数据补到 BLOCK_SIZE 的整数倍,加载的时候不用 mask,计算完再截断。这种方式虽然多了一点数据拷贝的开销,但去掉了分支,整体性能反而更高。

mask = pid * BLOCK_SIZE + offsets < n 是常见写法。但当 n % BLOCK_SIZE ≠ 0 时,末尾 warp 会因 mask 分支导致指令发射效率下降。FlagGems 则改用 padded load + conditional store:


x = tl.load(ptr, mask=True)  # padding to BLOCK_SIZE multiple
y = compute(x)
tl.store(out_ptr, y, mask=offsets < n)  # store mask 更轻量

Nsight 显示:warp instruction issue slot utilization 从 63% → 89%。在 FlagGems 的测试中,去掉 mask 后的算子,性能大大提升,尤其是在输入大小不固定的场景下,提升非常明显。

  1. Mixed Precision 处理技巧  

现在很多大模型训练会用混合精度(FP16/BF16 做计算,FP32 做累加),很多人在实现算子时,会频繁使用 tl.cast 做类型转换,但处理不好,这部分操作会成为新的性能瓶颈。

  • 错误做法:x_f32 = x_f16.to(tl.float32) → 触发 scalar conversion,吞吐暴跌;
  • 正确做法:用 tl.math.fma 或 tl.math.exp 等 native FP16-aware 指令,或批量 pack/unpack:
x_u32 = tl.load(ptr_u32)  # load two FP16 as one u32
x_f16_a, x_f16_b = tl.math.ubf16_to_f32(x_u32)  # hardware-accelerated unpack

Reduction 的效率陷阱与优化

  1. 两阶段 vs 单阶段:不是越“规整”越好  

Reduction 算子(如 sum、mean、max)将一组数据通过规约运算合并为一个或多个结果。在大模型中,Reduction 出现在 LayerNorm、Softmax、Loss 计算等多个关键路径上。

许多开发者在写Reduction 算子时,会用单阶段实现:让所有线程块同时对全局数据做 Reduction,最后只有一个线程块输出结果。这种写法的问题非常明显,只有最后一个线程块在工作,前面的线程块都在闲置,GPU 的并行度根本没利用起来;多线程块访问全局内存时,会出现写冲突,需要原子操作,性能开销比较大。

FlagGems 默认采用 two-phase + grid-stride loop:

  • Phase 1:每个 warp 内部归约(warp-level reduce_add),零 divergent branch
  • Phase 2:block 内归约(shared memory + atomic add),控制 occupancy ≤ 50%

实测结果显示:(2^20,) shape 下,两阶段比单阶段快 1.8×,且 L2 traffic ↓ 44%。

  1. Block Size 与 Occupancy 的隐式契约

Reduction 算子的 BLOCK_SIZE 选择,直接决定了每个 SM 的 Occupancy(活跃线程块数),而 Occupancy 太低,就会导致 GPU 的算力闲置。

BLOCK_SIZE=1024不一定比512 快。主要原因在于:天数 GPU warp scheduler 最多并发 32 warp / SM;若 kernel register usage 高,1024 可能压到 16 warp/SM,occupancy 仅 50%  。

最佳实践参考:

  • 线程块数量应达到 SM 数量的数倍以上;
  • 线程块大小建议 128-1024;
  • FlagGems 建立 BLOCK_SIZE 查表:根据 register pressure 自动 fallback(FP32 reduction 选 512,FP16 选 1024)。
  1. Warp Divergence:最隐蔽的减速器  

Reduction 算子的实现中,很容易出现 Warp Divergence,尤其是在 Block 内 Reduction 的循环里,如果分支处理不当,同一个 Warp 里的线程会执行不同的路径,导致整个 Warp 的执行效率大幅下降。

优化技巧在于:

  • 用 Warp 级指令替代分支:比如用 tl.reduce_sum、tl.reduce_max 这类 Triton 内置的 Warp 级 Reduction 指令,它们是硬件原生支持的,没有分支开销。
  • 消除不必要的分支:把条件判断移到循环外面,或者用位运算、掩码操作替代 if-else 分支。
  • 对齐 Reduction 的步长:让 Reduction 的步长是 Warp 大小(32)的整数倍,这样同一个 Warp 里的线程都执行相同的操作,避免 Divergence。

FlagGems 中的工程实践案例

讲了诸多理论,不如看一个 FlagGems 的案例。

问题:原始 GELU kernel Profile 显示 sms__inst_executed_op_fadd 占比异常低,而 sms__inst_executed_op_fmul 高达 68% ,推断存在冗余乘法链。

原因:PyTorch 风格 0.5 x (1 + tanh(...)) 引入 3 次标量乘,未利用 tl.math.fma 合并。

优化动作:

  • 替换为 tl.math.fma(x,0.5,0.5 x tl.math.tanh(...))(等价但单指令);
  • 将 tanh 输入预缩放,避免内部 overflow guard 分支 ;
  • 对输入做 ubf16 → fp32 显式转换(tl.extra.cuda.libdevice.ubf16_to_f32,已验证存在于 Triton 3.0.0+)。

结果:
4f9790cd-d36e-4e40-8194-a7a187e846c7.png

结语:性能优化不是玄学,是有章可循的工程实践

很多人觉得算子优化是“碰运气的玄学”,但 FlagGems 的实践告诉我们:所有高性能算子的背后,都是对硬件原理的深刻理解,和对每一个细节的打磨。

在编写或优化算子时,可以对照以下清单参考:

  • [ ] tl.load 地址是否 16-byte 对齐?(FP16)或 32-byte(FP32);
  • [ ] mask 是否仅用于 tl.store?tl.load 尽量 pad + unconditional;
  • [ ] mixed precision 路径是否绕过 to () ?优先用 tl.math.* 和 pack/unpack;
  • [ ] reduction 是否分两阶段?warp-level 先归约,再 block-level 合并
  • [ ] BLOCK_SIZE 是否匹配 register pressure?查 occupancy 表而非直觉;
  • [ ] 所有 if 是否可被 tl.minimum/tl.maximum 或 predicated store 替代?

从判断性能上限,到优化内存访问,再到解决 Reduction 的并行度问题,每一步都有清晰的方法论和可落地的技巧。目前,FlagGems 已完成对英伟达、华为、摩尔线程、海光、天数等 28 种主流 AI 芯片的适配支持,在 40 个主流 AI 模型上的推理任务算子覆盖度达到 90%~100%,为开发者提供了极致的开发体验。

如果你想深入了解 FlagGems 里的更多算子实现,可以前往https://github.com/flagos-ai/FlagGems查看源码,也欢迎大家一起参加“FlagOS 开放计算全球挑战赛”算子开发和优化赛道(https://flagos.io/RaceDetail?id=296flq8k⟨=cn),使用 Triton 语言开发大模型常用算子,深入探索芯片体系结构,挑战算子极致性能!

关于众智FlagOS社区

为解决不同 AI 芯片大规模落地应用,北京智源研究院联合众多科研机构、芯片企业、系统厂商、算法和软件相关单位等国内外机构共同发起并创立了众智 FlagOS 社区。成员单位包括北京智源研究院、中科院计算所、中科加禾、安谋科技、北京大学、北京师范大学、百度飞桨、硅基流动、寒武纪、海光信息、华为、基流科技、摩尔线程、沐曦科技、澎峰科技、清微智能、天数智芯、先进编译实验室、移动研究院、中国矿业大学(北京)等多家在 FlagOS 软件栈研发中做出卓越贡献的单位。

FlagOS 是一款专为异构 AI 芯片打造的开源、统一系统软件栈,支持 AI 模型一次开发即可无缝移植至各类硬件平台,大幅降低迁移与适配成本。它包括大型算子库、统一AI编译器、并行训推框架、统一通信库等核心开源项目,致力于构建「模型-系统-芯片」三层贯通的开放技术生态,通过“一次开发跨芯迁移”释放硬件计算潜力,打破不同芯片软件栈之间生态隔离。

官网:https://flagos.io

GitHub 项目地址:https://github.com/flagos-ai

GitCode 项目地址:https://gitcode.com/flagos-ai

SkillHub:https://skillhub.flagos.io

SOLIDWORKS TolAnalyst 插件的使用方法和应用场景

文章来源:卓盛信息(400-696-5950)

TolAnalyst 是 SolidWorks Professional 和 Premium 版本中集成的公差分析工具,专门用于研究公差和装配方法对装配体两个特征间尺寸累积(公差层叠)的影响。它能够自动计算尺寸链,帮助工程师在设计阶段预测和解决公差累积问题。

使用前提条件

1. 版本要求:需要SolidWorks Professional或Premium版本网页

2. 插件启用:在插件管理中勾选启用TolAnalyst

3. DimXpert标注:所有参与分析的零件必须使用DimXpert工具进行三维尺寸和公差标注网页

四步使用方法详解

第一步:创建测量

定义需要分析的尺寸,即两个DimXpert特征之间的直线距离

选择装配体中的两个面或特征作为测量起点和终点

例如:分析两个安装孔之间的中心距

第二步:定义装配体顺序

选择参与公差研究的零件,并按实际制造装配顺序排列

所选零件构成"简化装配体"

装配顺序对计算结果有重要影响

第三步:应用装配体约束

定义每个零件如何放置或约束到简化装配体内

约束按顺序应用,应用顺序对结果产生重大影响

模拟实际制造车间的装配约束关系

第四步:分析结果

系统自动计算并显示分析结果

主要输出包括:

  • 名义值(Nominal)
  • 最小/最大最坏情况公差层叠
  • 最小/最大和方根(RSS)公差层叠
  • 基值特征和公差列表

典型应用场景

1.非标设备设计验证

在非标设备设计中,公差累积可能导致装配干涉、功能失效或性能下降。TolAnalyst可帮助预测多来源误差累积,包括:

  • 零件加工误差
  • 焊接变形误差
  • 热处理变形
  • 装配调整误差

2.复杂装配关系分析

适用于多层级装配、非线性尺寸链、柔性与刚性混合装配等复杂情况,特别是:

  • 精密运动机构(要求高精度)
  • 静态结构(要求相对较低)
  • 外观件(有特殊要求)

3.装配可行性验证

通过计算最坏情况和统计情况,验证零件在公差范围内能否顺利装配。例如:验证螺钉是否能顺利穿过安装孔。

4.公差优化设计

识别对公差累积影响最大的关键特征和公差值,帮助工程师:

  • 优化公差分配
  • 降低制造成本
  • 提高产品质量

与传统手工计算的对比优势

图片

实际应用示例

案例:脚轮轴支撑装配分析

研究目标:验证顶盘安装孔(11mm)与脚轮轴连接螺钉的装配可行性

分析过程:

  1. 孔之间的名义安装尺寸为105mm
  2. 通过TolAnalyst计算最糟情形条件
  3. 确定顶盘安装孔的实际距离范围

第四步:分析结果

  • 名义值:105mm
  • 最小值:104.4mm(最坏情况)
  • 最大值:105.6mm(最坏情况)
  • RSS最小值:104.654mm
  • RSS最大值:105.346mm

注意事项

  1. 模型完整性:所有零件必须完全定义,装配配合正确无误
  2. 简化处理:可简化不相关特征以提高分析效率
  3. 结果导出:分析结果可导出为Excel文件进行进一步处理
  4. 即时更新:编辑公差后点击"重新计算"可查看即时更新的结果

总结

TolAnalyst 是 SolidWorks中强大的公差分析工具,通过自动化的四步流程,能够有效解决传统手工公差分析的局限性。它特别适用于复杂装配体的公差累积分析,帮助工程师在设计阶段发现问题、优化公差分配,从而降低产品成本、提高产品质量。对于需要进行精密装配验证的产品设计,TolAnalyst是不可或缺的分析工具。

阿里云 Coding Plan Pro 频繁遇到 429 usage allocated quota exceeded 报错。

套餐里已有“5 小时”和“周用量”的限制,现在又增加动态限流(具体规则模糊不清),一旦触发 直接暂停服务 1 小时。这两天多次被限流暂停,代码根本没法写。

与客服沟通无果,敷衍答复。阿里随意调整规则,拿老用户当韭菜割,真恶心!

V 站有老哥遇到同样的情况吗?

图片 1

图片 2

图片 3

引言
随着企业数字化转型迈入深水区,“数据驱动决策”虽已成为行业共识,但理想与现实之间仍存在一道鸿沟。在大多数企业的日常经营中,这种“数字尴尬”随处可见:

销售团队每天录入海量客户数据,却没有人能快速分析出成单规律;运营同学整理了整月的活动数据,面对 Excel 却无从下手;管理者想要一份实时报表,却总要等 IT 部门排期开发……

💡 痛点一:「表格易填,分析难」
数据越积越多,但能从中挖出价值的人却寥寥无几。

💡 痛点二:「工具门槛高」
SQL 不会写,Python 不会用,Excel 透视表也搞不定。

💡 痛点三:「协作效率低」
分析结果导出后,还要手动整理成报告,跨部门分享更是困难重重。

今天,这个困扰企业多年的难题,终于有解了。

01 Data Agent:你的专属数据分析智能体

阿里云瑶池 Data Agent钉钉 AI 表格正式达成深度合作,推出 Data Agent 数据分析智能体插件,为所有钉钉 AI 表格用户提供"一键式"专业级数据分析服务。

什么是 Data Agent ?

它是阿里云瑶池数据库团队推出的面向企业用户的数据分析智能体。能够根据自然语言描述进行需求分析,自动完成数据理解、提出分析需求、扩展分析思路,最终通过调用工具交付分析结果。

它能同时覆盖传统 BI 分析(描述性、诊断性)和高级分析(预测性、规范性),既可以作为自然语言到 SQL 查询的转换工具(NL2SQL),也可以生成预定义报表的聊天式 BI(包括 ChatBI),是一个具备理解分析意图、规划分析路径、执行复杂任务、并生成深度洞察的自主智能系统,能稳定完成复杂、多步骤的数据分析任务。

简单来说:你只需用一句话提问,它就能帮你完成从数据洞察到报告生成的全流程。
图片
现在,这一强大能力正式接入钉钉 AI 表格!

02 七大核心能力,覆盖全场景分析需求

Data Agent 可直接读取钉钉 AI 表格中的结构化数据,支持自然语言交互,实现:
图片

用户无需编写公式或代码,只需用中文提问即可获得精准洞察。

03 六大核心优势,让数据分析零门槛
图片
 
✅ 零门槛:人人都能做分析
普通员工也能像数据分析师一样使用,告别复杂的 Excel 公式和 SQL 语句。

⚡ 实时高效:秒级响应
数据更新后秒级响应,无需导出导入,分析结果即时呈现。

🔒 安全合规:数据隔离有保障
每个用户独立沙箱环境,数据安全有保障。Agent 不会使用您的数据进行模型训练。

Data Agent 构建了“身份-环境-管控”三位一体的安全体系:
访问控制:通过“安全托管”实现账号密码不落地;支持细粒度权限、自动脱敏与全程审计。
环境隔离:采用内核级沙箱与 VPC 闭环隔离,确保数据交互在闭环内完成,阻断外网威胁。
管控安全:租户级会话隔离,任务结束即销毁环境并清除数据,杜绝数据残留。

该方案实现了“账号不落地、环境全隔离、操作可审计、数据无残留”的全链路安全保障。

🔄 AI 生态打通:钉钉闭环体验
与钉钉生态紧密协作,不用申请权限,不用导出 Excel,钉钉 1 分钟超快速启用,钉钉用户可闭环实现数据分析。

🆓 免云账号登录:降低使用门槛
无需登录阿里云账号,钉钉用户即可开启免费体验(每天 30min 免费体验)。

📤 钉钉分享报告:让洞察流动起来
分析报告直接生成钉钉文档,支持跨群分享、深度协作,让数据洞察在团队中流动起来。

04 免费试用,三步开启智能分析

Step 1:打开钉钉 AI 表格
在钉钉中打开任意 AI 表格。

Step 2:搜索 Data Agent 插件
点击顶部插件搜索 → 输入「Data Agent」。

Step 3:开始对话式分析
用自然语言描述你的分析需求,坐等专业报告生成。
图片

05 长期记忆:让 Agent 越用越懂你

您是否担心每次分析都要重复背景?Data Agent 的「长期记忆」功能让这些繁琐化为乌有。

Data Agent 不仅仅是一个工具,它更像一位具备持续学习能力的资深助理,在每一次交互过程中,会自动“做笔记”,将您的业务偏好、特定术语和历史逻辑沉淀为专属知识。这些记忆将在你后续的交互中被智能召回和应用,从而显著提升 Agent 对你业务需求的理解准确性。
图片

为了让这种“记忆”透明且可控,我们提供了全方位的记忆管理中心:

溯源链路:支持查看记忆来源,一键追溯对话上下文,让每一条结论都有据可依。
热度洞察:通过热度值算法识别高频、核心信息,自动筛选出最懂你业务的“黄金记忆”。
精准修正:赋予用户主动干预权,支持手动编辑与订正,确保 Agent 的认知与实际业务逻辑严丝合缝。
隐私闭环:灵活的删除与遗忘机制,在提供个性化服务的同时,严守数据边界与隐私安全。

06 让数据真正成为生产力
图片
不仅是技术上的强强联手,更是对企业数字化办公模式的一次重塑。它以极简的操作逻辑,解决了高成本、低效率、门槛高、转化难等长期困扰企业的痛点,完成了从“人工搬运报表”到“智能自动洞察”的跨越式升级。让每位用户都能在指尖释放数据潜能,将海量信息转化为驱动业务增长的精准指引,让数据真正成为驱动企业提质增效的硬核生产力。

在数字化转型的浪潮中,数据是企业最宝贵的资产。阿里云瑶池数据库与钉钉的这次深度合作,正是为了让每一位员工都能轻松驾驭数据,让智能分析能力普惠到每一个工作场景。

现在,打开你的钉钉 AI 表格,搜索「Data Agent」,开启你的智能数据分析之旅吧!

了解更多

产品详情:https://help.aliyun.com/zh/dms/data-agent-for-analytics
免费试用(每天可享 30min 免费试用):https://agent.dms.aliyun.com/
欢迎钉钉搜索群号“105130018526” 或扫码加入钉群交流
图片

在数字化转型的浪潮中,政企单位的办公效率得到了质的飞跃,但随之而来的安全风险也日益复杂。2026年,信息安全已不再是单一的防火墙问题,而是涉及数据主权、链路加密、身份认证及国产化适配的系统工程。对于政企单位而言,通讯系统不仅是办公工具,更是核心机密的承载流转平台。

如何在高频的日常沟通中守住安全红线?本文将从底层架构到应用层面,结合主流私有化解决方案实事求是地展开讨论。

一、 私有化部署

在讨论安全之前,必须先明确一个核心概念:数据归谁所有。

公有云办公产品虽然便捷,但其数据存储在服务商的机房中。对于政企单位,尤其是军工、金融及政府部门,这种“托管”模式天然存在数据受控权缺失的隐患。

1. 物理层面的完全掌控

真正的安全始于物理隔离。政企单位首选的通讯方案必须支持私有化部署。以喧喧为例,其核心逻辑就是将服务器程序直接安装在单位自有的机房或私有云中。这意味着所有的聊天记录、文件资料、组织架构信息都存储在单位内部的磁盘上。

这种部署模式解决了两个核心问题:一是规避了公有云服务商可能存在的内部人员越权查看风险;二是确保了在极端情况下(如外部断网),内部通讯系统依然能够依靠内网环境正常运行,保障指挥调度的连续性。

2. 闭环管理的数据留痕

在私有化环境下,数据审计不再受制于第三方接口。政企单位可以根据审计要求,对所有的通讯历史进行自助式的管理与备份。实事求是地讲,这种管控力是任何公有云产品通过协议保障都无法完全替代的。

二、 不透明与高强度的双重护航

在数据传输过程中,如何防止“中间人攻击”或包嗅探?

1. 闭源协议的防御价值

目前市面上很多开源通讯协议虽然灵活,但也意味着其漏洞对全世界公开。喧喧在设计上采取了底层通讯协议不开放的策略。这种设计在政企安防中具有实际意义:它极大地提高了外部攻击者通过扫描特定协议漏洞进行渗透的难度。

2. 高级加密标准(AES)的实战应用

在2026年的安全语境下,我们必须摒弃那些未经广泛验证的特种加密方式,回归到国际公认的稳固算法。政企通讯系统应统一采用高级加密标准(AES)对传输链路进行加固。

喧喧在处理每一条消息、每一个文件分片时,都会进行高强度的加密处理。即使数据包在传输路径中被截获,由于缺乏密钥,攻击者拿到的也只是一堆毫无意义的乱码。这种基于标准算法的严谨性,比宣传噱头更能保障政企单位的长治久安。

三、 身份与权限

安全风险往往源于内部,尤其是身份冒用或权限越界。

1. 严格的准入机制

政企系统不应支持开放注册。所有的账号必须通过后台统一分配,并与组织架构深度挂钩。喧喧支持与禅道等项目管理系统的组织架构同步,这意味着人员的入职、调岗、离职能实时反映在通讯权限上,从源头上杜绝了离职人员长期逗留在内部群聊的风险。

2. 功能层面的权限隔离

并非所有的沟通都需要被所有端看到。政企单位往往需要针对不同级别的人员设置不同的功能权限。例如:

  • IP登陆限制: 按照 IP 段限制用户登录来源 IP,只有在预设的IP地址范围内的用户才能登录系统,提升服务安全性,有效阻止外部攻击者的尝试。
  • 通讯全加密: 所有通话均采用高级加密标准,确保聊天消息和文件在传输过程中得到安全加密,防止数据泄露,保障您的通信隐私。
  • 消息审计: 在符合保密规定的前提下,系统应具备可追溯的消息审计能力,确保每一句指令、每一份文件都有据可查。

四、 国产化适配

对于政府机关和事业单位,信息安全与国产化替代(信创)密不可分。如果通讯软件只能跑在特定国外的操作系统或芯片上,那么这种安全性本身就是不完整的。

1. 全栈适配的重要性

一套合格的政企通讯系统,必须能够完美兼容国产化的基础设施。 在实际应用案例中(如市财政信息管理中心、国家统计局调查总队等),喧喧展示了其对国产计算平台的高度适配。无论是麒麟、统信等操作系统,还是龙芯、鲲鹏等国产处理器,通讯软件必须做到低功耗、高响应,且无兼容性漏洞。

2. 软硬件一体化的协同

安全不是孤立的软件。喧喧支持专网部署,并能与内部已有的复杂办公系统进行一体化集成。通过将零散的业务系统集成到一个受控的平台,减少了员工在多个系统间切换导致的信息泄露风险。

五、 团队能力与实事求是的稳定性

安全不仅是代码问题,更是研发团队的责任心问题。

政企单位在选择IM系统时,应考察产品背后的研发底蕴。喧喧所属的禅道团队在管理软件领域积累了十余年经验,这种经验体现在软件的“稳”上。对于军工、金融行业而言,软件崩溃一次可能导致重大的决策延误。

1. 轻量化带来的高稳定性

很多政企通讯软件为了追求功能丰富,集成了大量的冗余模块,导致系统臃肿、内存泄漏。喧喧反其道而行之,采用轻量化架构,即使在配置较低的国产服务器上也能稳定带起数千人的并发请求。这种对性能的克制,本质上是对安全和稳定性的另一种守护。

六、 2026年政企安全防范的新挑战

随着人工智能和量子计算的发展,政企通讯安全面临新的挑战:

  1. AI欺诈防御: 系统需要集成更先进的身份验证(如动态密钥、多重因子认证)。
  2. 大数据的安全脱敏: 在进行通讯数据分析时,如何确保个人隐私与单位机密的剥离。

结语

政企内部通讯的安全保障,没有捷径可走。它需要单位从“租房者”心态转变为“房东”心态,通过私有化部署夺回数据主权;它需要研发团队摒弃花哨的噱头,在协议层、加密层、权限层做扎实的苦功夫。

喧喧在这一领域的表现,实事求是地为我们提供了一个范本:不张扬,但足够稳固;不开放底层协议,但支持灵活的应用扩展。对于追求极致安全与国产化适配的政企单位而言,回归私有、回归受控,才是信息安全的长久之道。

为什么企业上线工单系统后,反而更忙了?

在很多企业推进IT服务管理的过程中,工单系统被视为“基础能力”。通过统一入口收集需求、记录处理过程,理论上可以提升效率与透明度。但在实际落地中,不少IT团队却发现一个问题:工单数量迅速增长,处理压力反而更大。ManageEngine卓豪 将为您解答这些问题!

例如,以前通过微信或电话沟通的问题,现在全部转化为工单;用户更容易提交需求,但处理能力并没有同步提升;一些原本可以快速解决的小问题,也被流程“放大”。这些变化,使IT团队陷入持续被动应对的状态。

这种情况并不意味着工单系统本身存在问题,而是使用方式存在偏差。

问题根源:工单系统只是“记录工具”,而不是“管理工具”

在一些企业中,工单系统的作用仅限于记录问题与处理过程,而缺乏对流程、优先级与资源的管理。这种情况下,系统只是将原本分散的需求集中起来,并没有优化处理方式。

例如,所有工单都进入同一队列,没有清晰的分类与优先级;分配依赖人工判断,容易出现不均衡;重复问题不断出现,但缺乏沉淀与复用机制。这些问题都会导致效率下降。

当工单系统无法提供管理能力时,就很难真正改善现状。

用户体验变化:为什么“提交更容易”反而带来压力?

工单系统的一个重要特点,是降低了用户提交需求的门槛。用户可以随时随地提交问题,这在提升体验的同时,也会增加需求数量。如果没有相应的筛选与分类机制,IT团队很容易被大量低价值请求淹没。

例如,一些简单问题本可以通过知识库解决,但用户仍然选择提交工单;重复问题没有被有效识别,导致重复处理。这些情况都会增加不必要的工作量。

因此,在提升入口便捷性的同时,也需要建立有效的分流机制。

ServiceDesk Plus 如何帮助企业“管住工单”?

通过ServiceDesk Plus,企业可以从流程、自动化与知识管理等多个方面优化工单处理。例如,通过分类与优先级规则,实现自动分配;通过知识库减少重复问题;通过SLA与报表分析提升整体效率。

这种综合能力,使工单系统从“记录工具”转变为“管理平台”,从而真正帮助IT团队减轻压力。

在下一部分中,我们将深入分析:如何从源头减少无效工单,让IT从“被动处理”走向“主动管理”。

从源头减少工单:为什么“少做工单”比“快做工单”更重要?

在多数企业中,IT团队往往将重点放在“如何更快处理工单”,例如提升响应速度、增加人手或优化分配机制。但如果不从源头减少无效需求,工单数量只会持续增长,最终形成恶性循环。因此,真正有效的策略,是在提升处理效率的同时,减少不必要的工单。

例如,通过分析历史数据,可以发现大量重复问题,如密码重置、基础软件安装或常见故障处理。这些问题如果通过知识库或自助服务解决,就无需进入工单流程,从而显著降低工作量。

这种“前移处理”的思路,是工单管理从被动走向主动的重要一步。

常见问题(FAQ)

  1. 工单系统是否会增加工作量?
    如果缺乏优化机制,可能会出现这种情况。
  2. 如何减少重复工单?
    通过知识库与自助服务实现。
  3. 自动化是否可以解决所有问题?
    不能,需要与流程与数据结合使用。
  4. 如何进一步了解工单管理优化?
    可以参考ITSM解决方案获取更多信息。

Photoshop(简称PS)是Adobe公司开发的专业图像编辑软件,它的主要功能是进行数字图像处理、照片修饰、图形设计和创意合成。如果你需要进行照片后期处理、平面设计、网页设计、数字绘画或任何与图像相关的工作,那Photoshop绝对是你必须掌握的专业工具。

Photoshop提供了全面的图像编辑工具和强大的创意功能,让用户能够实现从简单的照片调整到复杂的视觉特效的各种需求。软件支持图层、蒙版、滤镜、调整图层等核心概念,这些功能组合使用可以创造出无限可能的视觉效果。无论是专业设计师、摄影师、艺术家,还是普通用户,Photoshop都能提供相应的工具和解决方案。

Photoshop在创意产业中占据主导地位,广泛应用于广告设计、出版印刷、影视后期、游戏美术、UI设计等领域。软件的学习资源丰富,有大量的教程、插件和社区支持。

PS下载

Photoshop安装包下载地址(Windows+MacOS 安装包,另含多套 PS 使用教程,全是干货):
https://pan.quark.cn/s/be38afdc9026
https://pan.xunlei.com/s/VOq4vUVV5p5m-HXpN_DjKYjWA1?pwd=ussx#

PS安装

Photoshop的安装过程非常简单,全程只需要傻瓜式操作,下面我详细说明一下安装步骤,我安装的是 Photoshop 2025:
1)下载  Photoshop 2025.rar 压缩包文件,解压后得到下图的文件夹:

2)找到 Set-up.exe 可执行程序,双击启动安装。

3) 选择安装位置,默认安装路径通常是"C:\Program Files\Adobe"。如果你想安装到其他磁盘,可以点击文件夹按钮自定义安装路径。建议安装到非系统盘,比如D盘,以避免占用系统盘空间。

4)等待安装完成,当提示"Photoshop 2025 已经成功安装"时,表示安装完成。你可以点击"启动"按钮立即启动Photoshop,或者稍后从开始菜单或桌面快捷方式启动。

PS基础使用

安装完成后第一次启动Photoshop,你会看到主界面包含菜单栏、选项栏、工具栏、面板和工作区等部分。

1)基本操作

要开始工作,首先需要创建新文档或打开现有图像。在"文件"菜单中选择"新建"可以创建空白画布,设置尺寸、分辨率、颜色模式等参数。选择"打开"可以导入各种格式的图像文件,如JPEG、PNG、TIFF、RAW等。

Photoshop的核心概念是图层。每个图层可以包含不同的图像元素,图层之间可以独立编辑而互不影响。图层面板显示了所有图层的堆叠顺序,你可以通过拖动调整图层顺序,通过眼睛图标控制图层可见性。

2)主要工具

工具栏包含了Photoshop的所有主要工具,按功能分组:

  • 选择工具:矩形选框、椭圆选框、套索工具、快速选择工具、魔棒工具等,用于选择图像中的特定区域。
  • 裁剪和切片工具:裁剪工具、切片工具等,用于调整画布大小和分割图像。
  • 修饰工具:修复画笔、仿制图章、橡皮擦、模糊工具等,用于修复照片缺陷和进行局部调整。
  • 绘画工具:画笔工具、铅笔工具、渐变工具等,用于绘制和填充颜色。
  • 文字工具:横排文字、直排文字等,用于添加和编辑文本。
  • 形状工具:矩形工具、椭圆工具、多边形工具等,用于创建矢量形状。

    3)调整功能

    Photoshop提供了多种图像调整功能,可以通过"图像"菜单或调整图层应用:

  • 色阶和曲线:调整图像的整体色调和对比度。
  • 色相/饱和度:调整图像的颜色属性。
  • 色彩平衡:调整图像的颜色平衡。
  • 亮度/对比度:调整图像的明暗和对比。

这些调整可以创建为调整图层,这样调整效果是非破坏性的,可以随时修改或删除。

对于新手用户,建议先从简单的照片调整开始练习,如裁剪、亮度调整、颜色校正等,Photoshop提供了丰富的学习资源。

PS常见使用问题

Photoshop运行缓慢或卡顿怎么办?这个问题通常与硬件配置或软件设置有关。首先检查电脑是否满足Photoshop的最低系统要求,特别是内存和显卡。在Photoshop的"首选项"中,可以调整性能设置:增加内存使用量,设置合适的暂存盘(建议使用SSD),启用图形处理器加速。关闭不必要的面板和文档,减少同时打开的文件数量。定期清理Photoshop的缓存文件和历史记录。

Photoshop无法打开某些图像文件怎么办?首先确认文件格式是否受支持,Photoshop支持大多数常见图像格式。如果文件损坏,尝试使用其他软件打开或修复。检查文件扩展名是否正确,有时文件可能被错误命名。对于RAW格式照片,确保安装了最新的Camera Raw插件。某些特殊编码的文件可能需要额外的解码器或插件。

Photoshop的工具或功能无法使用怎么办?首先检查当前工作模式,某些工具在特定模式下不可用。检查图层状态,某些操作需要选择正确的图层或创建选区。查看工具选项栏的设置,某些工具可能有特殊限制或模式。如果问题涉及特定功能,检查是否安装了必要的插件或扩展。尝试重置Photoshop首选项:在启动时按住Alt+Ctrl+Shift(Windows)或Option+Command+Shift(macOS)。

Photoshop的字体显示不正常怎么办?首先检查字体是否已正确安装在系统中。在Photoshop的"文字"菜单中,可以查看可用字体列表。如果字体显示为灰色或缺失,可能需要重新安装字体。某些字体可能有特殊授权限制,只能在特定应用程序中使用。检查字符编码设置,特别是处理多语言文本时。还可以尝试清除字体缓存:在Creative Cloud应用程序中修复Photoshop安装。

PS下载安装教程总结

Photoshop作为行业标准的图像编辑软件,在数字创意领域发挥着不可替代的作用。通过系统学习Photoshop的使用方法,用户可以实现从基础照片调整到复杂视觉创作的各种需求。

对于摄影师,Photoshop提供了专业的照片后期处理工具,可以提升图像质量、修复缺陷、创造艺术效果。对于设计师,软件的图层、蒙版、矢量工具支持复杂的设计项目和创意表达。对于艺术家,数字绘画和合成功能开启了新的创作可能性。对于普通用户,基础编辑功能可以满足日常的图像处理需求。

掌握Photoshop的使用技巧需要时间和实践,但投入是值得的。一个熟练的Photoshop用户可以在更短的时间内完成更高质量的工作,实现更复杂的创意构想。无论是职业发展还是个人兴趣,Photoshop技能都能带来显著的价值和满足感。

本文图文并茂记录购买Vultr供应商的VPS,通过shell脚本的方式,快速部署一个属于自己的VPN,从而实现逛GitHub自由...

1. 什么是VPS?和现在的云服务器的区别

VPS就是Virtual Private Server,虚拟专用服务器

  • 对比于现在的火山引擎、腾讯云、阿里云等云服务器而言,VPS可以理解为迷你版的云服务器
  • 依托于服务器虚拟化技术,可以把一个配置高的服务器,虚拟切割成好几台配置低的服务器 比如16核32G的可以切成两台8核16G,这样就可以卖给两个用户,减少资源闲置多挣米
  • 但是对比云服务器和VPS,前者可以智能灵活调度(成百上千台服务器组成的服务器资源池子) 而VPS就是一台物理服务器的切割,相当于我们租赁了一个小单间
  • 所以,云服务器挂了,智能调度会立刻新启用一台虚拟服务器,备份并重新启动相关服务 但是,VPS要是挂了,因为是小单间模式嘛,高可用是无法做到位的
  • 所以,学习Linux、搭个小网站、个人VPN购买便宜的VPS就够用了
  • 不过公司业务、需要高可用、随时要扩容,就得选真正的云服务器了
无论VPS还是云服务器,都是物理意义上的服务器上的一部分,不存在两个物理服务器各出一半

2. 买VPS服务器做相应配置

VPS服务器供应商不少,不赘述,笔者买的是Vultr,还不错

官网:https://www.vultr.com/zh/

至于购买步骤流程,可以参考这个文章:https://zhuanlan.zhihu.com/p/701057606

建议,提前准备好一个VISA信用卡哦

服务器配置如下图参考

第一步——选配置

第二步——选择操作系统(防火墙规则【相当于云服务器的安全组概念】)

第三步——创建实例,等待一会

第四步——有了自己的公网ip了,可以ssh链接了

第五步——防火墙组设置

使用udp搭配443端口(要放开哦,要不然无法连接VPN服务)

3. 执行一键部署VPN脚本

部署脚本是setup-hysteria.sh这个文件,名字无所谓,主要是内容如下:

PASSWORD="password123" 是示例,实际上可以设置复杂一些,在搭配fail2ban这样可以保证服务器安全不被爆破

#!/bin/bash
set -e

# 注意,要赋予此脚本执行权限:chmod +x setup-hysteria.sh
# 然后在执行:./setup-hysteria.sh

# ==================== 配置变量(按需修改) ====================
PASSWORD="password123"
LISTEN_PORT="443"
MASQUERADE_URL="https://www.bing.com"
CERT_DAYS="365"
HY_VERSION="v2.8.1"
# ============================================================

RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'

echo -e "${GREEN}========================================${NC}"
echo -e "${GREEN}   Hysteria ${HY_VERSION} VPN 服务器安装   ${NC}"
echo -e "${GREEN}          Ubuntu 22.04 专用           ${NC}"
echo -e "${GREEN}========================================${NC}"

if [[ $EUID -ne 0 ]]; then
    echo -e "${RED}错误:请使用 root 用户执行此脚本 (sudo ./script.sh)${NC}"
    exit 1
fi

echo -e "${YELLOW}[1/7] 更新系统并安装依赖...${NC}"
apt update -qq
apt install -y -qq wget curl openssl ufw

echo -e "${YELLOW}[2/7] 创建目录结构...${NC}"
mkdir -p /etc/hysteria /etc/ssl/hysteria

echo -e "${YELLOW}[3/7] 生成 SSL 证书(有效期${CERT_DAYS}天)...${NC}"
openssl req -x509 -newkey rsa:4096 -nodes \
    -keyout /etc/ssl/hysteria/key.pem \
    -out /etc/ssl/hysteria/cert.pem \
    -days ${CERT_DAYS} \
    -subj "/CN=www.bing.com"

chmod 644 /etc/ssl/hysteria/key.pem
chmod 644 /etc/ssl/hysteria/cert.pem
echo -e "${GREEN}✓ 证书权限已设置为 644${NC}"

echo -e "${YELLOW}[4/7] 创建配置文件 /etc/hysteria/config.yaml ...${NC}"
cat > /etc/hysteria/config.yaml << YAML
listen: :${LISTEN_PORT}

tls:
  cert: /etc/ssl/hysteria/cert.pem
  key: /etc/ssl/hysteria/key.pem

auth:
  type: password
  password: ${PASSWORD}

masquerade:
  type: proxy
  proxy:
    url: ${MASQUERADE_URL}
    rewriteHost: true

quic:
  initStreamReceiveWindow: 8388608
  maxStreamReceiveWindow: 8388608
  initConnReceiveWindow: 20971520
  maxConnReceiveWindow: 20971520
YAML

echo -e "${YELLOW}[5/7] 使用官方脚本安装 Hysteria ${HY_VERSION} ...${NC}"
bash <(curl -fsSL https://get.hy2.sh/) --version ${HY_VERSION}

echo -e "${YELLOW}[6/7] 配置防火墙 (ufw)...${NC}"
ufw allow ${LISTEN_PORT}/udp
echo -e "${GREEN}已允许 UDP ${LISTEN_PORT} 端口${NC}"

echo -e "${YELLOW}[7/7] 重启 Hysteria 服务并应用配置...${NC}"
systemctl stop hysteria-server || true
systemctl start hysteria-server
systemctl enable hysteria-server
sleep 3

if systemctl is-active --quiet hysteria-server; then
    SERVER_IP=$(curl -s ifconfig.me)
    echo -e "\n${GREEN}========================================${NC}"
    echo -e "${GREEN}✓ Hysteria 部署成功!${NC}"
    echo -e "${GREEN}========================================${NC}"
    echo -e "${YELLOW}服务状态:${NC}$(systemctl status hysteria-server --no-pager | grep "Active:")"
    echo -e "${YELLOW}端口监听:${NC}"
    ss -tulnp | grep ":${LISTEN_PORT}" | grep -v grep || echo "  等待端口监听..."
    echo ""
    echo -e "${GREEN}客户端连接信息:${NC}"
    echo -e "  服务器地址:${SERVER_IP}:${LISTEN_PORT}"
    echo -e "  密码:${PASSWORD}"
    echo -e "  协议:Hysteria ${HY_VERSION}"
    echo ""
    echo -e "${YELLOW}常用管理命令:${NC}"
    echo -e "  查看状态: systemctl status hysteria-server"
    echo -e "  查看日志: journalctl -u hysteria-server -f"
    echo -e "  重启服务: systemctl restart hysteria-server"
    echo -e "  停止服务: systemctl stop hysteria-server"
else
    echo -e "${RED}服务启动失败!查看错误日志:${NC}"
    journalctl -u hysteria-server -n 20 --no-pager
    exit 1
fi

然后,把这个·setup-hysteria.sh·脚本丢到服务器上(ssh链接)比如笔者是放在var目录下的

root@vultr:/var# ls
backups  crash  local  log   opt  setup-hysteria.sh  spool
cache    lib    lock   mail  run  snap               tmp

然后 chmod +x setup-hysteria.sh 给权限,再 ./setup-hysteria.sh 就可以一键部署好vpn服务了

如下日志图:

查看服务状态也是在运行的

root@vultr:/var# systemctl status hysteria-server
● hysteria-server.service - Hysteria Server Service (config.yaml)
     Loaded: loaded (/etc/systemd/system/hysteria-server.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2026-04-21 14:17:33 UTC; 2min 34s ago
   Main PID: 8156 (hysteria)
      Tasks: 7 (limit: 1001)
     Memory: 5.9M
        CPU: 57ms
     CGroup: /system.slice/hysteria-server.service
             └─8156 /usr/local/bin/hysteria server --config /etc/hysteria/config.yaml

Apr 21 14:17:33 vultr systemd[1]: Started Hysteria Server Service (config.yaml).
Apr 21 14:17:33 vultr hysteria[8156]: 2026-04-21T14:17:33Z        INFO        server mode
Apr 21 14:17:33 vultr hysteria[8156]: 2026-04-21T14:17:33Z        INFO        server up and running        {"listen": ":443"}
root@vultr:/var#

至此,我们的VPS服务器上的VPN服务就部署好了,接下来,我们在自己的本机电脑上,使用一些客户端工具,就可以使用VPN服务了

3. 使用clash-verge-rev进行订阅VPN服务(通过配置文件的方式)

首先安装clash-verge-rev,这个软件客户端:https://github.com/clash-verge-rev/clash-verge-rev

如下图:

然后准备一个conf.yaml文件,内容如下:

  • 注意:server: 64.176.80.218 就是 VPS服务器的ip
  • password: "password123" 也就是服务器的VPN的密码
  • 等,不赘述
  • 和 !!!setup-hysteria.sh 这个文件里面配置信息要对上!!!
  • rule-providers也可以根据个人情况,适当修改
# ========== 代理节点配置 ==========
proxies:
  - name: "VPS-Hysteria2"
    type: hysteria2
    server: 64.176.80.218
    port: 443
    password: "password123"
    sni: www.bing.com
    skip-cert-verify: true
    # 以下为可选优化参数
    up: "100 Mbps"
    down: "500 Mbps"

# ========== 规则集配置(可选,用于增强分流)==========
rule-providers:
  reject:
    type: http
    behavior: domain
    url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/reject.txt"
    path: ./ruleset/reject.yaml
    interval: 86400

  icloud:
    type: http
    behavior: domain
    url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/icloud.txt"
    path: ./ruleset/icloud.yaml
    interval: 86400

  apple:
    type: http
    behavior: domain
    url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/apple.txt"
    path: ./ruleset/apple.yaml
    interval: 86400

  google:
    type: http
    behavior: domain
    url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/google.txt"
    path: ./ruleset/google.yaml
    interval: 86400

  proxy:
    type: http
    behavior: domain
    url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/proxy.txt"
    path: ./ruleset/proxy.yaml
    interval: 86400

  direct:
    type: http
    behavior: domain
    url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/direct.txt"
    path: ./ruleset/direct.yaml
    interval: 86400

  gfw:
    type: http
    behavior: domain
    url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/gfw.txt"
    path: ./ruleset/gfw.yaml
    interval: 86400

  tld-not-cn:
    type: http
    behavior: domain
    url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/tld-not-cn.txt"
    path: ./ruleset/tld-not-cn.yaml
    interval: 86400

  telegramcidr:
    type: http
    behavior: ipcidr
    url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/telegramcidr.txt"
    path: ./ruleset/telegramcidr.yaml
    interval: 86400

  cncidr:
    type: http
    behavior: ipcidr
    url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/cncidr.txt"
    path: ./ruleset/cncidr.yaml
    interval: 86400

  lancidr:
    type: http
    behavior: ipcidr
    url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/lancidr.txt"
    path: ./ruleset/lancidr.yaml
    interval: 86400

  applications:
    type: http
    behavior: classical
    url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/applications.txt"
    path: ./ruleset/applications.yaml
    interval: 86400

# ========== 代理组配置 ==========
proxy-groups:
  - name: "🚀 节点选择"
    type: select
    proxies:
      - "VPS-Hysteria2"
      - "DIRECT"

  - name: "🎬 流媒体"
    type: select
    proxies:
      - "VPS-Hysteria2"
      - "DIRECT"

  - name: "🤖 AI服务"
    type: select
    proxies:
      - "VPS-Hysteria2"
      - "DIRECT"

# ========== 规则配置 ==========
rules:
  # ===== 1. 规则集分流(如果不想用可以删除本块)=====
  - RULE-SET,applications,DIRECT
  - RULE-SET,icloud,DIRECT
  - RULE-SET,apple,DIRECT
  - RULE-SET,google,🚀 节点选择
  - RULE-SET,proxy,🚀 节点选择
  - RULE-SET,direct,DIRECT
  - RULE-SET,lancidr,DIRECT
  - RULE-SET,cncidr,DIRECT
  - RULE-SET,telegramcidr,🚀 节点选择

  # ===== 2. 国内网站强制直连 =====
  # 通用规则
  - DOMAIN-SUFFIX,cn,DIRECT
  - GEOIP,CN,DIRECT,no-resolve
  - GEOSITE,CN,DIRECT

  # 常见国内网站关键词
  - DOMAIN-KEYWORD,baidu,DIRECT
  - DOMAIN-KEYWORD,taobao,DIRECT
  - DOMAIN-KEYWORD,alipay,DIRECT
  - DOMAIN-KEYWORD,qq,DIRECT
  - DOMAIN-KEYWORD,weixin,DIRECT
  - DOMAIN-KEYWORD,bilibili,DIRECT
  - DOMAIN-KEYWORD,bytedance,DIRECT
  - DOMAIN-KEYWORD,zhihu,DIRECT
  - DOMAIN-KEYWORD,jd,DIRECT
  - DOMAIN-KEYWORD,meituan,DIRECT
  - DOMAIN-KEYWORD,douyin,DIRECT
  - DOMAIN-KEYWORD,pinduoduo,DIRECT

  # 局域网与保留地址
  #- IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
  #- IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
  #- IP-CIDR,172.16.0.0/12,DIRECT,no-resolve
  #- IP-CIDR,127.0.0.0/8,DIRECT,no-resolve
  #- IP-CIDR,100.64.0.0/10,DIRECT,no-resolve
  #- IP-CIDR,17.0.0.0/8,DIRECT,no-resolve

  # ===== 3. AI 服务走代理 =====
  # OpenAI
  - DOMAIN-KEYWORD,openai,🤖 AI服务
  - DOMAIN-SUFFIX,openai.com,🤖 AI服务
  - DOMAIN-SUFFIX,chatgpt.com,🤖 AI服务
  - DOMAIN-SUFFIX,ai.com,🤖 AI服务
  - DOMAIN-SUFFIX,oaistatic.com,🤖 AI服务
  - DOMAIN-SUFFIX,oaiusercontent.com,🤖 AI服务
  - DOMAIN-KEYWORD,chatgpt,🤖 AI服务

  # Anthropic (Claude)
  - DOMAIN-SUFFIX,anthropic.com,🤖 AI服务
  - DOMAIN-SUFFIX,claude.ai,🤖 AI服务

  # Google (Gemini/Bard/DeepMind)
  - DOMAIN-SUFFIX,gemini.google.com,🤖 AI服务
  - DOMAIN-SUFFIX,bard.google.com,🤖 AI服务
  - DOMAIN-SUFFIX,deepmind.google,🤖 AI服务
  - DOMAIN-SUFFIX,deepmind.com,🤖 AI服务
  - DOMAIN-SUFFIX,ai.google.dev,🤖 AI服务
  - DOMAIN-SUFFIX,generativeai.google,🤖 AI服务
  - DOMAIN-SUFFIX,proactivebackend-pa.googleapis.com,🤖 AI服务
  - DOMAIN-KEYWORD,generativelanguage,🤖 AI服务

  # Meta (Llama)
  - DOMAIN-SUFFIX,meta.ai,🤖 AI服务
  - DOMAIN-SUFFIX,llama.com,🤖 AI服务
  - DOMAIN-SUFFIX,llama.meta.com,🤖 AI服务

  # 其他海外AI服务
  - DOMAIN-SUFFIX,perplexity.ai,🤖 AI服务
  - DOMAIN-SUFFIX,pplx.ai,🤖 AI服务
  - DOMAIN-KEYWORD,perplexity,🤖 AI服务
  - DOMAIN-SUFFIX,x.ai,🤖 AI服务
  - DOMAIN-KEYWORD,grok,🤖 AI服务
  - DOMAIN-SUFFIX,poe.com,🤖 AI服务
  - DOMAIN-SUFFIX,you.com,🤖 AI服务

  # Hugging Face (AI模型社区)
  - DOMAIN-SUFFIX,huggingface.co,🤖 AI服务
  - DOMAIN-SUFFIX,hf.co,🤖 AI服务

  # 平台/聚合类AI服务
  - DOMAIN-SUFFIX,openrouter.ai,🤖 AI服务
  - DOMAIN-SUFFIX,together.ai,🤖 AI服务

  # Cursor AI 编辑器
  - DOMAIN-SUFFIX,cursor.com,🤖 AI服务
  - DOMAIN-SUFFIX,cursor.sh,🤖 AI服务
  - DOMAIN-SUFFIX,cursor-cdn.com,🤖 AI服务
  - DOMAIN-SUFFIX,workos.com,🤖 AI服务
  - DOMAIN-SUFFIX,challenges.cloudflare.com,🤖 AI服务

  # Amazon Kiro / Amazon AI 服务
  - DOMAIN-SUFFIX,kiro.dev,🤖 AI服务
  - DOMAIN-SUFFIX,amazonkiro.com,🤖 AI服务
  - DOMAIN-KEYWORD,kiro,🤖 AI服务
  - DOMAIN-SUFFIX,aws.amazon.com,🤖 AI服务
  - DOMAIN-SUFFIX,amazonaws.com,🤖 AI服务
  - DOMAIN-SUFFIX,bedrock.aws,🤖 AI服务
  - DOMAIN-KEYWORD,amazonbedrock,🤖 AI服务
  - DOMAIN-SUFFIX,q.aws.amazon.com,🤖 AI服务
  - DOMAIN-SUFFIX,codecatalyst.aws,🤖 AI服务
  - DOMAIN-SUFFIX,sagemaker.aws,🤖 AI服务

  # 国内AI服务 (默认直连,如需走代理请取消注释并修改策略)
  # - DOMAIN-SUFFIX,deepseek.com,DIRECT
  # - DOMAIN-SUFFIX,yiyan.baidu.com,DIRECT
  # - DOMAIN-SUFFIX,tongyi.aliyun.com,DIRECT
  # - DOMAIN-SUFFIX,doubao.com,DIRECT
  # - DOMAIN-SUFFIX,chatglm.cn,DIRECT
  # - DOMAIN-SUFFIX,xinghuo.xfyun.cn,DIRECT
  # - DOMAIN-SUFFIX,kimi.moonshot.cn,DIRECT
  # - DOMAIN-SUFFIX,yuanbao.tencent.com,DIRECT

  # ===== 4. 流媒体走代理 =====
  - DOMAIN-KEYWORD,youtube,🎬 流媒体
  - DOMAIN-KEYWORD,netflix,🎬 流媒体
  - DOMAIN-KEYWORD,disney,🎬 流媒体
  - DOMAIN-KEYWORD,hbo,🎬 流媒体
  - DOMAIN-KEYWORD,hulu,🎬 流媒体
  - DOMAIN-KEYWORD,spotify,🎬 流媒体
  - DOMAIN-KEYWORD,twitch,🎬 流媒体
  - DOMAIN-SUFFIX,googlevideo.com,🎬 流媒体
  - DOMAIN-SUFFIX,ytimg.com,🎬 流媒体
  - DOMAIN-SUFFIX,ggpht.com,🎬 流媒体
  - DOMAIN-SUFFIX,fastly.com,🎬 流媒体

  # ===== 5. 其他常用国外服务走代理 =====
  - DOMAIN-KEYWORD,github,🚀 节点选择
  - DOMAIN-SUFFIX,github.com,🚀 节点选择
  - DOMAIN-SUFFIX,github.io,🚀 节点选择
  - DOMAIN-SUFFIX,githubassets.com,🚀 节点选择
  - DOMAIN-SUFFIX,githubusercontent.com,🚀 节点选择
  - DOMAIN-KEYWORD,google,🚀 节点选择
  - DOMAIN-KEYWORD,twitter,🚀 节点选择
  - DOMAIN-KEYWORD,facebook,🚀 节点选择
  - DOMAIN-KEYWORD,instagram,🚀 节点选择
  - DOMAIN-KEYWORD,reddit,🚀 节点选择
  - DOMAIN-KEYWORD,telegram,🚀 节点选择
  - DOMAIN-KEYWORD,whatsapp,🚀 节点选择
  - DOMAIN-KEYWORD,zoom,🚀 节点选择
  - DOMAIN-KEYWORD,slack,🚀 节点选择
  - DOMAIN-KEYWORD,notion,🚀 节点选择

  # ===== 6. 最终兜底规则 =====
  # 所有未被上述规则匹配的流量,默认走代理节点
  - MATCH,🚀 节点选择

然后,在clash的订阅这里,新建、Local、随便起个名字,再上传刚刚准备好的订阅conf.yaml配置文件

然后,点击上图的保存按钮,再右键使用之,就订阅好了

而后开启代理

在clash里面也能看到我们的ip已经变成了新加坡了

至此,VPN搞定完毕,就可以正常访问github,用谷歌搜索学习代码知识啦

担心网站被劫持、用户数据泄露?
你只差这一步:部署SSL证书,开启HTTPS加密

随着网络安全形势日益严峻,主流浏览器对非HTTPS网站开始显示“不安全”警告。如果你的网站还在使用HTTP,不仅影响用户体验,更可能错失大量商机。

第一步:选择合适的CA机构和SSL证书

升级第一步,打开JoySSL官网,注册时填写注册码230970,获取大额优惠。

升级的第二步,是申请一张SSL证书。根据你的网站类型和验证需求,可以选择:

  • DV证书(域名验证型) :适合个人博客、中小型展示站,验证快、价格低
  • OV证书(组织验证型) :适合企业官网、电商平台,验证企业身份,显示企业信息
  • EV证书(扩展验证型) :适合金融、支付类网站,地址栏直接显示企业名称,信任度最高

第二步:生成CSR并提交申请

在服务器上生成CSR(证书签名请求)文件,其中包含网站域名和公司信息。将CSR提交给我们,验证通过后即可下载证书文件。不同服务器环境(如Nginx、Apache、IIS、Tomcat等)生成CSR的方式略有差异,但核心步骤一致。

第三步:安装配置SSL证书

下载证书后,根据你的服务器类型进行部署。以常见的Nginx为例,你需要将证书文件和私钥文件放置在指定目录,并在站点配置中开启443端口监听,指定证书路径。Apache则需加载SSL模块并配置虚拟主机。其他服务器环境也有对应的图形化或命令行配置方式。

第四步:设置301重定向

为了将所有HTTP流量自动跳转到HTTPS,需要在网站配置中加入重定向规则。无论是通过Nginx的rewrite指令,还是Apache的.htaccess文件,都可以实现永久重定向(301),确保用户访问旧链接时无缝切换至加密版本,同时避免重复内容影响SEO。

第五步:更新资源链接并配置HSTS

将网页内所有引用的图片、CSS、JS等资源的链接改为HTTPS或协议相对路径(即“//域名/资源”形式),否则浏览器会因混合内容而阻止加载。同时强烈建议开启HSTS(HTTP严格传输安全),该机制会通知浏览器在未来一段时间内强制使用HTTPS访问你的网站,彻底杜绝降级攻击。

第六步:测试验证

部署完成后,可以使用SSL Labs在线工具检测配置是否正确,重点关注证书链完整性、协议支持及加密套件强度,力争达到A+评分。此外,别忘了更新搜索引擎资源平台(如百度搜索资源平台、Google Search Console)中的网站地址,并提交新的HTTPS站点地图,以加速搜索引擎对新协议的收录。

针对卤制品行业“一锅一卤”、依赖人工经验、保质期短且食品安全要求极高的特点,一套成熟的MES(制造执行系统)解决方案不仅仅是软件的安装,更是对生产流程的标准化重塑。
**一、核心痛点与解决思路

二、MES解决方案的四大核心功能模块**
1、生产计划与智能排程 (APS)
卤制品通常具有“短保、多SKU、多门店”的特点,排程极-其复杂。
以销定产: 系统对接前端销售(ERP/POS)和门店订单,自动生成生产需求。
智能排产: 综合考虑卤锅产能、人员班次、原料库存,自动生成最优生产计划。例如,系统能根据订单优先级,自动安排“急单”插队,并动态调整后续生产任务。
2、生产过程精细化管控
这是MES在卤制品行业最关键的环节,重点在于将“经验”转化为“数据”。
配方与投料管理:

防错机制: 系统下发电子配方(BOM),工人通过智能终端扫描原料条码投料,系统自动校验重量和种类,防止错投、漏投。
添-加剂管控: 对食盐、防腐剂等关键添-加剂进行精准称重记录,确保符合食品安全法规。

工艺参数监控 (IoT集成):

自动采集: 通过物联网网关连接卤煮锅、腌制机等设备,实时采集温度、压力、时间、搅拌频率等数据。
电子SOP: 工位屏幕显示标准作业程序,指导工人操作。若卤制温度偏离设定值(如设定100℃,实际95℃),系统自动报警甚至停机,确保每一锅卤味风味一致。

3、全流程质量追溯 (一物一码)
建立“正向可追踪,反向可溯源”的体系,是应对食安检查的刚需。
赋码关联: 在包装环节,利用视觉识别和机械手技术,建立“袋码-箱码-托盘码”的关联关系。
秒级追溯:

反向查询: 输入成品批次,可查原料来源(哪批鸭脖、哪批香料)、生产班组、卤制参数、质检报告。
正向追踪: 若原料出现问题,可瞬间锁定受影响的成品批次及发往的门店,实现精准召回,将损失降至最低。

4、仓储物流与冷链协同
卤制品对新鲜度要求极高,MES需与WMS(仓储管理系统)和TMS(运输管理系统)无缝集成。
效期管理: 严格执行“先进先出”,临期产品自动预警。
冷链监控: 虽然主要在TMS中实现,但MES需记录成品出库时的温度状态。结合绝味等企业的实践,系统需确保从工厂到门店的“24小时鲜达”承诺,实时监控车厢温湿度,异常即报警。

三、万界星空科技AI赋能的MES系统
1、智能动态排程: 系统接收订单后,AI算法会综合考虑设备产能、人员配置、物料库存等多种因素,自动生成最优生产计划。当遇到紧急插单或设备故障等突发情况时,系统能实时动态调整排程,确保订单按时交付,最大化设备利用率。
生产执行透明化: 生产任务可实时下发至工人的移动终端,管理者能随时追踪生产进度。通过实时数据看板,生产现场的进度、设备状态和质量数据一目了然,实现了生产过程的透明化管理。
2、精-准质量控制与工艺管理
AI技术将质量控制从“事-后检验”前移至“事-前预防”和“事-中控制”,确保产品口味与质量的稳定。
AI视觉检测: 利用高分辨率工业相机和深度学习算法,对生产线上的产品进行毫秒级扫描,精准识别包装缺陷、异物、颜色不均等问题,其效率和准确性远超人工目检。
智能工艺控制: 在卤制、腌制等关键工序,AI模型可以根据原料(如肉类)的批次特性(如含水量),自动计算并设定最佳的工艺参数(如卤制时间、温度、加水量),确保每批次产品口味一致。
预测性质量分析: AI模型整合生产、设备、环境等多源数据,提前预测质量风险。例如,分析出特定批次原料结合车间温湿度变化可能导致的产品质构偏差,从而提前预警并建议调整工艺。
3、设备预测性维护与能耗优化
通过AI对设备数据的深度分析,可以实现从被动维修到主动维护的转变,并有效控制能源成本。
预测性维护: AI模型通过分析MES采集的设备振动、温度等实时数据,能够预测设备可能出现的故障,并提前生成维护工单,有效避免了非计划性停机,保障生产连续性。
能耗智能管控: AI模型分析设备能耗与生产负荷、工艺参数之间的关联,找到能耗与效率的最佳平衡点。例如,自动优化卤制设备的温度、风机转速等,在保证产品质量的前提下,可实现5%-15%的能耗降低。
4、全链路追溯与供应链协同
AI与MES的结合,构建了从原料到成品的“一物一码”全链条追溯体系,极大提升了食品安全保障和供应链效率。
精-准追溯: 系统支持从成品到原料的反向追溯和从原料到成品的正向追溯。
供应链优化: AI通过分析历史销售数据、季节性趋势等外部因素,精准预测市场需求,帮助企业优化生产计划和库存水平,有效减少因过度生产或产品变质造成的浪费。
一物一码应用: 为每件产品赋予唯一的追溯码,消费者扫码即可查看产品的“身-份-证”,包括产地、检测报告、生产及运输温控曲线等信息,增强了品牌信任度。

在卤制品行业,AI与制造执行系统(MES)的深度融合正推动着生产管理从“经验驱动”向“数据智能驱动”的变革。这种结合不仅解决了传统生产中的效率、质量和追溯难题,更以前所未有的精度保障了食品安全与产品一致性。


今天上午 10 点南京 S2 地铁开通运营,目前高德地图已经可以正常显示,但是 Apple 地图存在了滞后的情况,但是路线规划已经可以规划出来,出现了比较罕见的未能在地图正常显示的路线的情况。
之前有人争论 Apple 地图只是底图来自高德,算法是 Apple 自己的,现在这种情况就是可以充分证明导航算法其实也是来自高德的。

好多朋友找到我说,大霖,我找到靠谱的接口了,但是怎么接入啊?有没有现成的代码?能不能给个教程?

害,这有啥难的,今天我就给你们整个保姆级的实战教程,3 分钟就能搞定,代码我都给你们写好了,复制过去就能用,看完你就能自己把 GPT-Image-2 接入到你的项目里。

我们就用速创 API 来做演示,毕竟这个是我自己在用的,靠谱,而且接入贼简单。

第一步:注册账号,拿到 API Key
首先,你得先去速创 API 官网注册个账号,这个很简单,用手机号或者邮箱就能注册,30 秒就能搞定。

注册完登录之后,去控制台的密钥管理里,就能拿到你的 API Key 了,这个就是你调用接口的凭证,别泄露给别人就行。

第二步:了解接口参数

速创的接口很简单,两个核心接口,一个是提交生成任务的,一个是查询任务结果的,我把接口文档给你们放这了,你们可以看下:

提交生图任务接口
这个接口是 POST 请求,用来提交你的生图需求,参数很简单:

prompt:就是你的提示词,必填,你要生成什么图,就写这
size:图片的尺寸,可选,默认 auto,支持 1:1、3:2 这些
urls:参考图的 URL,可选,如果你要以图生图的话,就填这个
查询任务结果接口
因为生图是异步的,所以提交任务之后,你需要用这个接口去查结果,参数就一个任务 ID,提交任务的时候会返回给你。

第三步:复制代码,直接运行
好了,接下来就是代码了,我给你们写了 Python 的示例,直接复制就能用,把你的 API Key 填进去就行。

import requests
import json
import time

替换成你自己的API Key

API_KEY = "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

速创API的基础地址

BASE_URL = "https://api.wuyinkeji.com/api/async"

1. 提交生图任务

def submit_task(prompt):

url = f"{BASE_URL}/image_gpt"
headers = {
    "Authorization": API_KEY,
    "Content-Type": "application/json"
}
payload = {
    "prompt": prompt,
    "size": "auto"
}

response = requests.post(url, headers=headers, json=payload)
if response.status_code == 200:
    data = response.json()
    return data.get("id") # 返回任务ID
else:
    print(f"提交失败: {response.text}")
    return None

2. 查询任务结果

def get_result(task_id):

url = f"{BASE_URL}/detail"
params = {
    "key": API_KEY,
    "id": task_id
}

response = requests.get(url, params=params)
if response.status_code == 200:
    data = response.json()
    # 0是处理中,1是成功,2是失败
    if data.get("code") == 1:
        return data.get("data")
    elif data.get("code") == 2:
        print(f"任务失败: {data.get('msg')}")
        return None
    else:
        return None
else:
    print(f"查询失败: {response.text}")
    return None

主流程

if name == "__main__":

prompt = "一只可爱的布偶猫,穿着宇航服,漂浮在绚烂的银河中,照片级真实感,4K高清细节"

print("提交生图任务...")
task_id = submit_task(prompt)
if not task_id:
    exit()

print(f"任务提交成功,任务ID: {task_id},等待结果...")
# 轮询查询结果
while True:
    result = get_result(task_id)
    if result is not None:
        print(f"生成成功!图片URL: {result}")
        break
    elif result is None and get_result is not None:
        # 失败了就退出
        break
    else:
        print("任务处理中,等待2秒...")
        time.sleep(2)

就这么简单!你把这个代码复制过去,把你的 API Key 填进去,直接运行就能用了。

而且你不用担心,就算任务失败了,钱也会自动退给你,不会扣你的钱,你放心调试就行。

对了,这个接口是没有并发限制的,如果你要批量生成图,直接开多线程或者异步调用就行,不用担心限流,随便你怎么造,都没问题。

我自己用这个接口做了个小工具,批量生成电商的主图,一次跑几百个任务,都没出问题,稳的很。

如果你也想试试,赶紧去速创 API 官网注册个账号,把代码拿去跑一下,几分钟就能体验到 GPT-Image-2 的强大了,反正失败了也不扣钱,试试也不吃亏。

有啥问题的话,评论区留言就行,我看到了会回你。

JimuReport AI专题研究 | 2026-04-13 发布,AI 助手 + Claude Code Skills 双管齐下

划重点:现在可以一句话生成大屏了

JimuReport 积木报表旗下 JimuBI 大屏 v2.3.2 上线了两种 AI 生成方式:

  • 方式一:在 Claude Code 里一句话生成整块大屏(新增 jimubi-bigscreen / jimubi-dashboard 两个 Skill)
  • 方式二:在大屏设计器里对话生成组件、改配置(编辑器内置 AI 助手)

把"大屏制作"从"拖控件 + 调 JSON + 改配色"的体力活,变成了"描述 + AI 生成 + AI 迭代"的对话式协作。

JimuBI AI 生成大屏效果


方式一:Claude Code 里一句话生成大屏(0 → 1)

Claude Code 对话生成大屏

Step 1:装 Skill

Skills 仓库地址:https://github.com/jeecgboot/skills

按场景挑对应技能:

  • jimubi-bigscreen — 全屏数据可视化大屏(展厅、监控室、会议汇报)
  • jimubi-dashboard — 栅格布局数据仪表盘(业务日常查看、筛选钻取)
Step 2:一句话描述需求

在 Claude Code 对话框里直接说:

  • "做一个 1920×1080 的销售监控大屏,左上角 KPI,中间地图,右侧排行榜"
  • "做一个展厅用的数字孪生大屏,带 3D 效果和左右两侧实时数据流"
  • "做一个运营看板,KPI 四张卡片,下面是趋势线和环比柱形图"
  • "做一个销售 CRM 仪表盘,顶部按团队筛选,中间订单漏斗,底部客户分布"

Skill 首次运行会提示你提供后台 API 地址和 Token:

Skill 请求 API 地址和 Token

随后进入自动生成过程——选布局、选组件、配数据源、调用 JimuBI 大屏 API 落库:

大屏自动生成过程

生成效果——真的相当惊艳:

一句话生成的大屏成品

打开设计器,大屏立刻就绪。还想继续调?交给方式二的 AI 助手。


方式二:设计器里对话改大屏(1 → 10)

大屏设计器内置 AI 助手

大屏编辑器里内置了 AI 助手,直接在编辑器内对话修改:

  • 生成组件:"左上角加一个销售额 KPI,主色深蓝,带百分比环比"
  • 修改配置:"把这张环形图改成柱状图,X 轴换月份"
  • 批量样式 / 换主题:"所有图表字体加大两号、整块大屏换成科技蓝"

AI 一句话修改组件的配置项:

AI 修改组件配置项演示

过去要懂 ECharts 配置项才能精细调样式——tooltip、series、axisLabel 成百上千的参数。现在一句自然语言全部搞定

  • 对新手:这是"能做出来"的关键
  • 对老手:这是"做得快"的工具

集成方式:改一行版本号

SpringBoot 3:

<dependency>
    <groupId>org.jeecgframework.jimureport</groupId>
    <artifactId>jimubi-spring-boot3-starter</artifactId>
    <version>2.3.2</version>
</dependency>

SpringBoot 2:

<dependency>
    <groupId>org.jeecgframework.jimureport</groupId>
    <artifactId>jimubi-spring-boot-starter</artifactId>
    <version>2.3.2</version>
</dependency>

总结

JimuBI 大屏 v2.3.2 核心做了一件事:用 AI 接管"大屏制作"的整个生命周期。 Skills 管生成,AI 助手管迭代,人只负责打磨。

如果你的团队正在被"做大屏排期两周、改样式还要再两天"卡脖子——这是一个"今天升级,下周效率翻倍"的版本。


本文为 JimuReport AI 专题研究系列文章。

<!-- 发布设置:置顶=是, 推荐=是, 发布时删除第一行大标题 -->

在使用代理IP进行网络请求时,底层依赖的协议决定了数据传输的方式、安全性和适用场景。不同的协议有不同的特点和限制。

本文将从技术角度介绍三种最常见的代理协议:HTTP、HTTPS 和 SOCKS5,并对比它们的差异,帮助开发者根据实际需求选择合适的协议。
运行环境

项目版本
操作系统Ubuntu 22.04 / macOS Ventura
Python3.8+
依赖库requests、PySocks(可选)

一、HTTP 代理

1.1 基本概念
HTTP 代理是最早也是最常见的代理协议之一,专门用于处理 HTTP 协议格式的请求。
工作原理:

  • 客户端向代理服务器发送标准的 HTTP 请求
  • 代理服务器解析请求后转发给目标服务器
  • 目标服务器的响应原路返回
    1.2 代码示例
import requests

# HTTP 代理配置
proxies = {
    'http': 'http://proxy.example.com:8080',
    'https': 'http://proxy.example.com:8080'
}

response = requests.get('http://httpbin.org/ip', proxies=proxies)
print(response.text)

1.3 特点

特性说明
加密❌ 明文传输
支持协议仅 HTTP/HTTPS
性能一般
配置复杂度简单

1.4 适用场景

  • 公开网页数据采集
  • API 接口调用
  • 无需加密的测试环境

    二、HTTPS 代理

    2.1 基本概念
    HTTPS 代理本质上是 HTTP 代理配合 SSL/TLS 加密层,通过 CONNECT 方法建立隧道传输加密数据。
    工作原理:

  • 客户端向代理发送 CONNECT 请求
  • 代理与目标服务器建立 TCP 连接
  • 代理返回 200 Connection Established
  • 客户端与目标服务器进行 TLS 握手
  • 加密数据传输
    2.2 代码示例
import requests

# HTTPS 代理配置(与 HTTP 代理配置方式相同)
proxies = {
    'http': 'http://proxy.example.com:8080',
    'https': 'http://proxy.example.com:8080'
}

response = requests.get('https://httpbin.org/ip', proxies=proxies)
print(response.text)

2.3 CONNECT 方法示例

CONNECT httpbin.org:443 HTTP/1.1
Host: httpbin.org:443
Proxy-Connection: Keep-Alive

HTTP/1.1 200 Connection Established

2.4 特点

2.5 适用场景

  • 需要登录的网站访问
  • 敏感数据传输
  • 现代 Web 应用(绝大多数网站已强制 HTTPS)

    三、SOCKS5 代理

    3.1 基本概念
    SOCKS(Socket Secure)协议工作在会话层,比 HTTP 代理更底层。SOCKS5 是其最新版本,支持 TCP 和 UDP 代理。
    握手流程:

  • 客户端发送认证方法协商请求
  • 服务器回复选定的认证方法
  • 根据方法完成认证(可选)
  • 客户端发送目标地址和端口
  • 服务器建立连接并回复结果

3.2 代码示例
需要安装 PySocks:
pip install PySocks

import requests

# SOCKS5 代理配置
proxies = {
    'http': 'socks5://user:pass@proxy.example.com:1080',
    'https': 'socks5://user:pass@proxy.example.com:1080'
}

response = requests.get('https://httpbin.org/ip', proxies=proxies)
print(response.text)

3.3 使用 socket 层面连接

import socks
import socket

socks.set_default_proxy(socks.SOCKS5, "proxy.example.com", 1080)
socket.socket = socks.socksocket

import urllib.request
response = urllib.request.urlopen('https://httpbin.org/ip')
print(response.read().decode())

3.4 特点

3.5 适用场景

  • 代理非 HTTP 流量(FTP、SMTP、SSH)
  • 在线游戏、VoIP
  • DNS 查询(UDP)
  • 配合代理工具(ProxyChains、Clash)

四、如何选择合适的协议?

def choose_protocol(need_encryption: bool, is_web: bool, need_udp: bool):
    if need_udp:
        return "SOCKS5(UDP 场景)"
    if need_encryption:
        return "HTTPS(加密需求)"
    if is_web:
        return "HTTP(公开网页)"
    return "SOCKS5(通用场景)"

# 示例
print(choose_protocol(need_encryption=True, is_web=True, need_udp=False))
# 输出:HTTPS(加密需求)

这期分享的安全会议论文是来自安全顶级会议之一的​usenix security 2025 best paper​,题目是​We Have a Package for You! A Comprehensive Analysis of Package Hallucinations by Code Generating LLMs)(我们为您准备了一个包裹!代码生成 LLM 对软件包幻觉的全面分析)​,官网链接为 https://www.usenix.org/conference/usenixsecurity25/presentati...

一、研究背景

最近的研究表明,多达 97% 的开发者在某种程度上使用代码生成 LLM,项目中大约 30% 的代码是由 AI 生成的,这些数字反映出代码生成 LLM 在项目开发方面对于效率的显著提升。然而 LLM 存在一个关键问题即存在“幻觉”——生成的在事实上不正确、毫无意义或与输入任务完全无关的输出。

本篇论文聚焦于代码生成过程中 LLM 的包幻觉,如今编程语言高度依赖于集中式的包仓库(如 PyPI 和 npm),而代码生成 LLMs 虽然极大提升了编程效率,但也引入了一种新的威胁——包幻觉,即生成不真实或错误的包推荐。包幻觉是由于事实冲突错误产生的,这种现象可能被攻击者利用,通过故意将恶意软件包命名为与合法软件包相似,从而导致软件供应链的包混淆攻击。文章强调了研究包幻觉的重要性,这是软件安全中一个日益严重的问题。

二、论文工作概述

这篇论文旨在调查“包幻觉”现象,分析其在不同 LLMs 中的表现。研究的主要贡献包括:

  • 包幻觉的普遍性​:文章量化了在不同商业和开源模型中,Python 和 JavaScript 代码生成时包幻觉的发生频率。
  • 模型设置的影响​:研究了细化训练、温度设置和解码策略等因素对幻觉率的影响。
  • 缓解策略​:提出并测试了几种减少包幻觉的策略,旨在不牺牲代码质量的前提下降低幻觉率。

三、实验设计

3.1 数据集收集

文章认为现有代码基准(HumanEval、EvalPlus)提示词数量太少、主题不够“日常”,所以自行设计两套数据量更大、种类更多样的数据集,并且都做了“时间分层”(recent vs all-time)来研究“新知识/新包”对幻觉的影响。

A. Stack Overflow 数据集(更贴近真实用户提问)

  • 选择 Stack Overflow 的“tag”体系:挑选与 Python/JS 相关且问题数 > 5000 的 tag,人工筛出约 240 个 tag。
  • 每个 tag 取点赞最高的 20 个问题,得到 4,800 prompts(每种语言各一份)。
  • 为做“时间 recency”分析:把问题分成 2023 年与 2023 年之前两段,各自取同样策略,最终翻倍到每种语言 9,600 prompts。

B. LLM 生成的数据集(覆盖“包生态主题空间”)

  • 思路:软件任务往往围绕库/包,因此用包仓库的“热门包描述”来生成 prompt,覆盖面更广。
  • 取 Python 与 JS 各 5,000 个下载量最高的包,爬取 PyPI/npm 上的官方描述;再用 Llama-2 70B 把“包描述”改写成“用户会问的编程任务提示词”。
  • 清理:无描述/非英文描述会丢弃,所以最终每种语言大约 4,800 prompts。
  • 同样做时间分层:2023 热门 vs 2023 之前热门;如果某包两边都出现,会从 “all-time” 里移除避免重叠,确保“recent”确实代表近一年流行度上升的主题。

3.2 代码生成场景

A. 模型选择

  • 以 EvalPlus 排行榜作为“代码能力”的参考,选一批商业与开源模型,并且尽量避免同家族低于基础模型的重复微调版本(只保留代表)。
  • GPT 系列(3.5/4/4 Turbo)被视为商业代表;开源模型选取了包括 CodeLlama、DeepSeek Coder、WizardCoder、Mistral、Mixtral、OpenChat 等,总计 16 个模型,如下图,其中 CodeLlama 选取了 7B,13B,34B 三种参数大小,Deepseek 选取了 1.3B,6.7B,33B 三种参数大小。

image.png

B. 语言选择

  • 聚焦 Python + JavaScript:理由是它们最流行且高度依赖中心化包仓库(PyPI/npm),更容易形成“包名 → 安装 → 执行”的供应链风险;而 Java/C/C++ 没有同等形态的中心化开源包仓库依赖(至少不如 PyPI/npm 直接)。

C. 测试环境一致性

  • 开源模型用 Hugging Face transformers 跑,并采用 GPTQ 量化(论文强调对准确率影响可忽略但更贴近普通硬件的可用性)。
  • 每个模型用同一套 system message/输出约束,以减少“提示词差异”对结果的影响。

3.3 幻觉检测

本文并不只靠解析 import/require 来确定“需要安装的包”,因为 import 的是模块名,模块与包并非一一对应,而且很多代码片段不足以唯一推断依赖。因此采用三条启发式来“尽可能贴近用户真实行为”地抽取包名,再去对照仓库列表判断是否存在。

A. 直接抓安装命令

  • 从生成文本/代码里解析 pip installnpm install 命令里出现的包名。
  • 这类输出仅占总输出约 7%,但对攻击最关键,因为用户可能直接复制执行,立刻触发安装恶意包的可能性。

B. 把“生成的代码”再喂回同一个模型,让它列依赖

  • 做法:每份代码样本再作为输入,问同一个模型“运行这段代码需要哪些 packages?”
  • 这模拟用户实际会做的事:代码跑不起来 → 问模型“缺什么包”。

C. 用“原始任务 prompt”问模型需要哪些 packages

  • 做法:不用代码,直接拿最初的任务描述问“完成这个任务需要哪些 packages?”
  • 模拟另一种真实用法:用户可能先问“要装哪些库”,再让模型写代码。

四、实验结果

4.1 包幻觉的普遍性

包幻觉在所有测试的模型中都是普遍存在的,商业模型的包幻觉率相对较低,而开源模型则表现出更高的幻觉率。具体来说:

  • 商业模型(如 GPT-4 Turbo)的幻觉率在 4%-6% 之间。
  • 开源模型(如 CodeLlama、DeepSeek)的幻觉率则高达 21.7%
  • Python 代码的幻觉率(15.8%)低于 JavaScript 代码的幻觉率(21.3%),但两者呈正相关,即同一模型对两种语言的幻觉表现有相似趋势。

4.2 模型设置对幻觉的影响

  • 温度设置:随着温度(模型生成输出的“随机性”)的增加,包幻觉的发生率显著上升。高温度(例如 2)会导致模型生成更多幻觉包,而低温度则有助于减少幻觉。
  • 解码策略:尝试调整解码参数(如 top-p、top-k 和 min-p)对减少包幻觉的影响较小,表明包幻觉并非仅由这些参数引起。
  • 近期主题:模型对于 2023 年后的新包生成的幻觉率更高,表明模型无法实时更新其训练数据,导致对新包的认知产生偏差。

4.3 模型行为的分析

  • 重复幻觉:有 43% 的包幻觉在同一模型的多次查询中重复出现,这表明幻觉不是偶然的,而是具有持久性。这种重复性使得幻觉更容易被恶意攻击者利用。
  • 模型输出的“啰嗦”程度:更多包名的生成(即“啰嗦”模型)通常会导致更高的包幻觉率。

4.4 包幻觉的特征

  • 跨语言幻觉:JavaScript 是唯一显著的跨语言幻觉源头,8.7% 的 Python 幻觉包与 JavaScript 中有效包名匹配。
  • 语义相似性:大多数包幻觉与有效包名在 Levenshtein 距离上相差较大,意味着这些幻觉并非简单的拼写错误,而是生成过程中的复杂错误

五、缓解措施

论文给了基线与三种策略、以及“组合(ensemble)”的对比(核心趋势如下):

  • RAG: 两个模型都明显下降(尤其对 CodeLlama 降幅很大),说明“真实包锚点”是普适有效的方向。
  • Self-Refinement: 对 DeepSeek 更有效,对 CodeLlama 效果很弱;原因与 RQ3 呼应——CodeLlama 在“判别包名真伪”上有偏置,倾向把大多数包都判为 valid,导致自我纠错失灵。
  • Fine-tuning: 幻觉率下降最显著(DeepSeek 甚至压到低于 GPT 系列在主实验中的水平),但​代码质量会掉​,即“安全性/可靠性”与“代码能力”存在现实代价。
  • Ensemble: 把 RAG + Self-Refinement + Fine-tuning 叠加能进一步压低幻觉率,是论文展示的最强组合,但同样会继承 fine-tuning 的质量代价。

六、艾体宝 Mend.io(原 Whitesource)方案的价值

从这篇论文可以发现,即使是主流代码生成模型,也会稳定地产生幻觉包,而且这种现象并不只是偶发噪声,而是可重复、可被攻击者利用的。

而 Mend 的价值不在于从模型内部“消灭幻觉”,而在于在代码进入仓库、CI/CD 和制品流转之前,建立一层​面向依赖和供应链的外部控制面​。Mend 的 SCA/Software Supply Chain Security 能覆盖 repositories、CI/CD pipelines 等环节,并对恶意包与可利用漏洞进行检测和阻断。也就是说,即便前面的 AI 助手犯错,企业仍然可以在后面的工程链路里把风险拦下来。

编者按: 你是否曾好奇,当我们向大语言模型输入一段文字、看着它逐字逐句生成回复时,背后那些动辄千亿参数的神经网络究竟在“计算”什么?它们又是如何在短短几秒内完成如此复杂的推理过程?

我们今天为大家带来的文章,作者的观点是推理引擎的价值不仅在于调度,更在于通过重写模型代码与深度优化底层计算逻辑,将静态的权重转化为高效的智能输出。

作者 | Neutree AI

编译 | 岳扬

01 模型内部机制、KV Cache 与张量并行(Tensor Parallelism)

在 Part 1 中,我们探讨了 Nano-vLLM 的工程架构:请求如何在系统中流转、Scheduler(调度器)如何对 sequences(序列)进行批处理,以及 Block Manager(块管理器)如何追踪 KV Cache 的分配。当时我们特意将模型计算视为一个黑盒。现在,是时候打开这个盒子了。

本部分将深入探究模型内部原理:Token(词元)如何转化为向量、每个 decoder 层内部究竟发生了什么、KV Cache 在 GPU 显存中的物理存储方式,以及张量并行如何将计算任务拆解到多个 GPU 上。 阅读完本节,你将对从 Prompt 进入系统到文本生成输出的全过程建立起完整的认知。

02 模型究竟是什么?

说到“模型”,我们往往想到的是那些权重文件 —— 动辄数十亿参数、体积庞大的二进制文件。但一个真正能跑起来、能做推理的模型,其实需要三个部分协同工作:

  • Vocabulary:token 和其对应 ID 之间的静态映射表。它负责在人类可读的文本与模型实际处理的数值表征之间做双向翻译。
  • Weights:训练过程中学出来的参数,也就是模型积累的“知识”本身。比如一个 7B 模型,就代表它拥有 70 亿个这样的可调参数。
  • Runtime Code:定义如何使用这些权重、把输入一步步转换成输出的执行逻辑。这才是真正落到 GPU 上跑起来的部分。

2.1 为何推理引擎要自己实现模型代码(model code)

你可能会疑惑:既然模型提供方都开源了权重,为什么不干脆把 runtime code(运行时代码)也一起给了?其实很多情况下他们确实给了,但问题是,这份代码往往不是“开箱即用”的。Runtime code 需要针对具体场景做深度优化:训练还是推理?用什么型号的 GPU?跑 FP16 还是 INT4 精度?在一套 A100 集群上训练效果出色的代码,放在单个消费级 GPU 上做推理可能就不那么理想了。

这正是 vLLM 这类推理引擎选择自己重写 model code 的原因。完整的 vLLM 代码库包含了对数十种模型架构的优化实现,涵盖 Qwen、LLaMA**、DeepSeek、Mistral 等。Nano-vLLM 则做了简化,仅支持 Qwen 模型,但背后遵循的工程模式和优化思路,其实是通用的。

03 模型 pipeline

现在,我们来追踪一个 token(词元)在模型中的完整流转过程。

3.1 Embedding:从 Token 到向量

旅程始于 embedding。token ID 不过只是一个数字,比如 1547。嵌入层(embedding layer)在词表中查找这个 ID,并检索出一个向量:一个高维的浮点数数组(Nano-vLLM 使用的 Qwen 模型中为 4096 维)。这个向量被称为隐藏状态(hidden state),是模型对该 token 的内部表征。

为什么是 4096 维?这是一个在表达能力与计算成本之间做了一番权衡的设计选择。更多的维度可以捕捉更细微的语义,但需要更多的计算量和显存占用。

3.2 Decode Layers:魔法发生的地方

随后,隐藏状态(hidden state)会流经一叠解码层,Nano-vLLM 支持的 Qwen 模型共有 24 层。每层执行相同的操作,但使用不同的学习权重,逐层对表征进行精细化加工。不妨这样理解,每一层都在前一层的基础上,让模型对输入的理解再深一度:也许某一层捕捉句法关系,另一层捕捉语义含义,还有一层处理事实知识。(实际上,每一层具体学到什么,是训练过程中自然涌现的结果,并非预先设计。)

这里的关键特性在于:每一层接收的是隐藏状态,输出的也是隐藏状态,而且 shape 始终保持不变(4096 维)。这种统一性使得层与层之间可以堆叠。

3.3 LM Head:从向量回到 Token

经过所有解码层之后,最终的隐藏状态被转换回词表上的概率分布。这是 LM Head(语言模型头)的工作,其功能可以视为嵌入过程的逆向操作。输出是 logits,即对每个可能的下一个 token 的打分,后续的采样环节再根据这些分值,最终选出实际输出的词元。

04 解码层(Decode Layer)的内部构造

每个解码层都包含两大核心模块:注意力机制(Attention)和多层感知机(MLP)。下面我们逐一拆解。

4.1 多头注意力机制(Multi-Head Attention)

注意力机制让每个 token 能够“关注”序列中的其他 token。但现代 LLM 并不使用简单的注意力机制。它们使用多头注意力机制(multi-head attention),将注意力计算拆分到多个并行的“heads”中。

在 Qwen 模型中,共有 32 个 heads,每个处理 128 维的切片(32 × 128 = 4096,即完整的 hidden state 大小)。这不仅仅是把 4096 维切分成 32 组。相反,每个 head 执行一次投影(projection),这是一种通过学习得到的变换方式,将完整的 4096 维输入压缩成该 head 特有的 128 维表征。

可以把它想象成一个工厂,装配线上有 32 个专用工作站。每个工作站接收相同的原材料(完整的 4096 维输入),但使用不同的工具将其塑造成特定形状。一个工作站可能负责“修剪”语法适配度,另一个负责“打磨”语义连贯性,还有一个负责“测量”位置对齐度。但实际上,每个工作站学到什么也是在训练中自然涌现出来的,未必能如此清晰地划分。

每个 head 还参与真正的注意力机制:它计算当前 token 应该关注序列中每个先前 token 的程度。模型就在这里捕捉上下文(context),理解在"The cat sat on the mat. It was comfortable."中,It 指的是"the cat"。

所有 heads 完成计算后,它们的输出被拼接(concatenated)并投影(projected)回 4096 维,生成该层的注意力机制输出。

4.2 MLP:自我优化

MLP(Multi-Layer Perceptron)阶段接收注意力机制的输出并进一步优化。与注意力机制不同,MLP 不看其他 token。它独立处理每个 token 的 hidden state(隐藏状态)。

MLP 首先将 hidden state 从 4096 扩展到一个更大的中间维度(intermediate dimension)(Qwen 中为 11008),应用非线性激活函数,然后压缩回 4096。为什么要这样扩展和压缩呢?

可以把它想象成提升分辨率。4096 维的 hidden state 就像一张压缩图像。扩展到 11008 维就像上采样(upscale):它创造了可添加细节的空间,这些细节由 MLP 的学习权重决定。再压缩回 4096 则是对这种经过信息增强后的表征(enriched representation)的提炼。通过这个过程,模型将训练中的知识融入每个 token 的表征中。

4.3 Dense 架构与 MoE 架构的对比

我们刚才描述的 MLP 是一种 dense 架构:每个 token 都经过同一个 MLP(多层感知机)模块处理。但有些现代模型使用 Mixture of Experts (MoE)这种不同的思路。

在 MoE 中,不是用一个大型 MLP,而是有多个小型“expert” MLPs,比如 8 个。由一个路由网络(router network)负责检查每个输入的 hidden state,并决定由哪些 experts(专家)来处理它。例如,对于任何给定 token,只激活 8 个中的 2 个 experts(专家)。

“expert”这个叫法容易让人联想到这样的专业分工:一个专家负责数学,另一个负责语言,还有一个负责编写代码。实际上,每个 expert 学到什么也是从训练中涌现的,并非经过明确设计。我们很难说清楚 Expert 3 与 Expert 5 有何不同。

那为什么要用 MoE?主要动机是计算效率(computational efficiency),而不是输出质量(output quality)。 有了 MoE,你可以拥有一个总参数量很大(所有 experts 合计)的模型,同时每个 token 只激活其中一部分参数。这大幅减少了每个 token 的计算量。

这部分进行了权衡考量:给定相同的总参数量,dense 模型通常会产生比 MoE 模型更高质量的输出,因为 dense 模型对每个 token 都使用了所有参数。但超大规模下的 dense 模型训练起来计算成本高得令人望而却步。MoE 允许扩展到 dense 架构无法实现的参数量,接受每个参数的效率(per-parameter efficiency)稍低一些,以换取实际的可训练性(practical trainability)。

05 KV Cache:数据平面

在第一部分中,我们将 Block Manager 讨论为 KV 缓存的控制平面,负责在 CPU memory 中追踪分配状态。现在让我们聚焦数据平面:KV 缓存究竟是如何实际存储在 GPU memory 中的。

5.1 什么被缓存了

在 Attention 计算过程中,每个 token 产生两个向量:K(key)和 V(value)。它们用于与后续 token 计算 Attention 分数。为了避免在每一步 decode 时都重新计算所有先前 token 的 K 和 V,我们选择将它们缓存起来。

5.2 物理布局

GPU 上的 KV cache 被组织为一个多维结构:

  • Block 维度:与 Block Manager 的逻辑块对应(例如,每块 256 个 token)
  • Layer 维度:24 个解码层每层都有自己的缓存,因为注意力是在每一层独立计算的
  • K/V 维度:每层两个独立的缓存,一个存 key,一个存 value
  • Token 维度:在每个块内,为每个 token 的缓存向量预留空间

因此,Block Manager 中的一个逻辑块对应 GPU 上 24 × 2 = 48 个物理缓存区域:24 层每层各一个 K 缓存和一个 V 缓存。

5.3 用于缓存访问的 Triton Kernel

Nano-vLLM 不直接通过 CUDA API 操作 GPU 内存,而是使用 Triton Kernel —— 一种高级 GPU 编程语言,编译为高效的 CUDA 代码。这些 Kernel 处理从 KV cache 的读写操作,将 GPU memory 管理的底层复杂性封装起来,让上层逻辑更简洁清晰。

06 张量并行(Tensor Parallelism):计算层面

在第一部分中,我们介绍了张量并行的通信模式,以及 leader 如何通过共享内存(shared memory)广播命令。现在来看看实际计算是如何拆分到各 GPU 上的。

6.1 Attention 中的并行

以 TP=2(两张 GPU)为例。当一个隐藏状态进入 Attention 阶段时:

1)两张 GPU 都接收完整的隐藏状态(4096 维)。这里没有拆分,每张 GPU 都拥有完整的输入。

2)每张 GPU 负责处理一半的 head(注意力头)。GPU 0 处理 head 0-15;GPU 1 处理 head 16-31。

3)每张 GPU 产生部分输出。GPU 0 的输出只包含 head 0-15 的信息;GPU 1 的输出只包含 head 16-31 的信息。

4)通过 All-reduce 合并结果。两张 GPU 交换各自的部分输出并求和,这样两者最终都得到完整的 Attention 输出。

并行发生在 head(注意力头)维度,而非隐藏状态维度。每张 GPU 都看到完整的输入,但只计算分配给它的一部分 head。

6.2 MLP 中的并行

MLP 并行遵循类似的模式:

1)两张 GPU 都接收完整的隐藏状态。

2)中间维度(intermediate dimension)被拆分。如果 MLP 层扩展到 11008 维,每张 GPU 计算 5504 维。

3)每张 GPU 产生部分输出。

4)All-reduce 合并结果。

6.3 通信的开销

张量并行并非没有开销。All-reduce 操作需要 GPU 之间进行通信,这会增加延迟。这就是为什么 TP 在单机多 GPU 且具备高速互联(如 NVLink)的场景下最有效,而在通过网络连接的机器之间使用时,通信延迟会成为主导因素,效果就会大打折扣。

它的优势在于:每块 GPU 只需存储模型权重的一部分(TP=2 时存储一半,TP=8 时存储八分之一)。这使得我们能够运行那些单个 GPU 内存装不下的模型。

07 思考:设计上的权衡取舍

在了解了内部机制之后,让我们来探讨一些常见的设计问题。

7.1 网络层(Layers)数与注意力头(Heads)数分别控制什么?

更多的网络层数通常意味着更深的推理能力。每一层都会对隐藏状态进行一次额外的细化处理。 更多的注意力头数则支持更丰富的注意力模式(attention patterns),为理解词元之间的关系提供更多“视角”。

我们能否为特定的深度推理任务创建一个“窄而深”的模型(注意力头数少、网络层数多)?或者为了覆盖更广的知识而创建一个“宽而浅”的模型(注意力头数多、网络层数少)?研究表明,这种做法的效果并不理想。就像人类学习一样,模型似乎也需要在广度与深度之间取得平衡。极端不平衡的架构往往表现不佳。大多数成功的模型在这些维度之间保持着一个大致均衡的比例。

真正能撬动模型能力的实用杠杆,仍然是训练数据(有哪些知识可用)和训练方法(这些知识能被多有效地习得),而不是追求极端的架构设计。

7.2 为什么 MoE 架构越来越流行?

混合专家模型(MoE)架构的兴起,并非因为它在单位参数下能产出更优的结果。事实恰恰相反:一个 70B 的稠密模型,通常表现会优于同参数量(所有专家参数之和)的 MoE 模型。

MoE 受欢迎,是因为它让规模扩展成为可能。 用当前基础设施训练一个 600B 的稠密模型,计算成本高到难以承受。但一个总参数量 600B、每词元仅激活 50B 参数的 MoE 模型呢?这个是可以训练出来的。尽管单位参数的效率有所损失,但凭借其庞大的总体规模,它可以达到的能力,是任何可训练的稠密模型都无法企及的。

这是一种务实的工程权衡:以单位参数效率的适度下降,换取触及原本无法达到的模型规模。

08 结语

至此,我们已经完整梳理了从输入提示词到生成文本的整个流程:

  • Tokenization 将文本转换为 token ID
  • Embedding 将 token ID 映射为隐藏状态向量
  • Decode layers 通过 Attention(跨词元理解)和 MLP(知识整合)不断细化隐藏状态
  • KV cache 缓存中间 Attention 结果,避免重复计算
  • LM head 将最终隐藏状态转换为 token 概率分布
  • Sampling 从概率分布中选择输出 token
  • Tensor parallelism 让上述所有步骤得以在多张 GPU 间扩展

推理引擎负责统筹整条流水线 —— 从请求调度、内存管理,到协调并行执行;而模型架构则定义了每个步骤内部的具体计算逻辑。

理解这些内部机制,能让看似“魔法”的过程变得清晰可解。大语言模型的本质,其实是一个精密的函数:输入向量,输出向量。所谓的“智能”,源于参数规模的积累、训练数据的质量,以及让这一切高效运转的工程巧思。

无论你是在生产环境部署模型、排查性能问题,还是单纯好奇这些系统如何工作,希望这份基础梳理能为你带来切实的帮助。

END

本期互动内容 🍻

❓文章提到推理引擎要重写 model code 来做深度优化。在你自己的实践中,有没有遇到过“理论可行但工程跑不动”的部署场景?最后是怎么妥协或突破的?

本文经原作者授权,由 Baihai IDP 编译。如需转载译文,请联系获取授权。

原文链接:

https://neutree.ai/blog/nano-vllm-part-2

有一天在打字的时候,我突然想到一件很小的事情:

我每天敲这么多键盘,那我到底更常用的是哪些键?

这个问题本身其实没什么用,但它有一点点“可能和直觉不一样”的感觉。

比如我一直觉得自己主要在用字母区,但如果真的统计出来,会不会空格才是第一?或者回车?

这种事情,如果只是靠感觉,其实永远不会有答案。

但一旦把它变成数据,就完全是另一种东西了。

想着想着,就干脆把这件事做出来了。

image.png

代码跟软件都已经开源了,地址放在最后,感兴趣可以去看看


它一开始其实只是个脚本

最初的想法很简单:

监听键盘 → 做计数 → 输出结果。

按这个思路,一个脚本就能搞定,甚至都不需要什么界面。

但写到一半就发现,这种形态不太成立。

因为它太容易“断掉”了。

只要我关了终端,或者哪天忘记开,它那一段时间的数据就直接没了。而键盘使用这种行为,本来就不是你会刻意去“开始”和“结束”的东西。

如果记录本身需要你去记得,它就有点违背这个事情的初衷。

后来就慢慢变成另一种方向了:让它自己待着,一直在那儿,不需要你管。

于是最后的形态就是一个托盘应用。


为什么会走到客户端这一步

其实我一开始是想避免写客户端的。

不是功能做不到,而是开发体验的问题。传统 GUI 那一套我不太熟,也不太想花时间在那上面。

但“监听键盘”这件事本身就决定了,它不可能是一个网页。

由于边界问题,浏览器拿不到这些数据,所以要么放弃,要么就认真做一个本地应用。

后来是因为看到 Wails V3,才觉得这件事变得顺手了不少。

之前用过 Wails V2,它更像是一个“把网站封装成桌面应用”的壳。

单窗口、靠前端路由模拟多页面、菜单和托盘能力很弱。

而 V3 原生支持了多窗口、系统菜单、托盘、Dock & Taskbar 交互之后,整个应用终于有了“骨架”,从“套壳网页”真正变成了一款原生应用。

完美的符合了我的需求。


真正麻烦的不是展示,而是“你按了什么键”

一开始我以为,最麻烦的会是热力图这种展示层的东西。

结果完全相反。

最绕的地方其实是:怎么知道用户按了哪个键。

监听事件我选择了 robotn/gohook,他本身不提供“监听能力”,它只是把各平台的系统级输入监听 API 做了一层统一封装。

在 Windows 中他封装的是 SetWindowsHookEx

在 Mac 中封装的是 Quartz Event Tap

因此它可以在系统层面上监听原始输入事件,比应用级监听更底层,得到按压情况与虚拟键码。

问题在于,这个“原始事件”不是你直觉里的 A、B、C,而是一串虚拟键码。

虚拟键码就是操作系统为了方便程序开发,给键盘上每个“功能”分配的一个固定的数字编号。它像是按键的身份证号,而不是座位号。

以 Windows 为例:当我们按下键盘上 A 键的那一刻,键盘电路只知道按下去的是物理位置第 0x1E 号的键,它会把 0x1E 这个扫描码发给电脑。

操作系统收到 0x1E 后,会根据当前激活的键盘布局(比如美式键盘)来查表(比如查询到这个物理位置对应的是字母 A)。

于是,它把这个位置信号转换成虚拟键码 0x41(即 VK_A)。

基于这套机制,我们开发者完全不用关心用户用的是哪种键盘硬件、按键的物理位置在哪。只要在程序里看到 0x41,就可以确信:用户按下的是 A 键。

但问题同样也出现在这里,键盘的位置信号传递给系统,而系统把他们转换成虚拟码,这个过程是系统进行的,因此 Windows 跟 Mac 之间并不统一,需要额外进行处理。

微软官网中有针对 Windows 虚拟键码的说明:Virtual-Key Codes

而 Mac 则来自 Carbon.framework 中的 Events.h,记录在《Inside Mac Volume V》第 V-191 页

这件事没有什么优雅解法,只能分开处理。

最后就是用 Go 的 //go:build 把不同平台的映射拆开,各自维护。

逻辑上统一,但实现上不强行合并。


数据怎么存,反而是一个需要控制的点

监听拿到了,接下来就是存。

一想到这个脑子里的第一反应肯定是:按一次,写一次数据库。

但稍微再一琢磨就会明显感觉到问题。

键盘输入是一个非常高频的行为,如果每次都落盘,SQLite 的压力会有点大,而且写入冲突也比较频繁。

后来就换成了一种更“松一点”的方式:

先放在内存里攒着,到一定数量,或者过一段时间,再统一写进去。

严格来说,这会有一点点数据丢失的可能(比如程序突然退出),但换来的是整体的稳定性和更低的开销。

对这种工具来说,我更倾向于后者。


热力图反而没那么复杂

真正开始做展示的时候,反而是最顺的一段。

键盘布局其实是有现成逻辑的,用机械键盘里常说的 Unit(u)就能很好地描述:

普通按键是 1u,空格是 6.25u,一些功能键是 2u、2.75u 这种。

把它当成一个网格去排,然后再把每个键的使用次数映射成颜色深浅,一张热力图就自然出来了。

没有太多技巧,更多是一个“把东西摆对”的过程。


后来补了一点“实时感”

最早版本其实只是统计 + 展示。

但用的时候会觉得,它有点“太安静了”。

所以后面加了一点很轻的反馈,比如按键的时候会有一点变化。

实现上也不复杂,用 Wails 自带的事件机制,把后端的事件往前端推,Vue 那边监听一下就可以了。

这一块写起来反而最像在写前端项目。


写到这里,反而会有点疑问:这东西到底有什么用

项目做完之后,我其实想过这个问题。

它不会帮你提高效率,也不会改变你怎么打字。

你大概率也不会因为某个键用得特别多,就去刻意优化它。

但它提供了一种很微妙的东西:

你可以“看到”自己平时完全不会注意到的行为。

有些结果是符合预期的,有些会有一点点偏差。

这种偏差不大,但挺有意思的。

更像是一种观察,而不是一个工具。


Key Heat

最后把这个东西整理了一下,做成了一个完整的应用,叫 ​Key Heat

它会一直待在托盘里,做的事情其实很克制:

  • 只统计每个键被按了多少次
  • 不记录具体输入内容
  • 没有网络请求

数据只在本地。

如果你也对这种东西有点好奇,可以自己跑一下看看:

LinkedIn 推出认知记忆智能体(Cognitive Memory Agent,CMA),作为其生成式 AI 技术栈的组成部分,旨在构建具备状态感知与上下文理解能力的 AI 系统,使其能够在交互过程中留存并复用知识。该系统主要用于支撑招聘助手(Hiring Assistant)等应用,解决了大语言模型工作流中的一个核心问题:缺乏状态记忆,进而导致无法跨会话保持连贯交互。

CMA 充当应用智能体与底层语言模型之间的共享记忆基础设施层。应用智能体无需通过重复提示词来重建上下文,而是通过这套专用系统来实现记忆的持久化存储、检索与更新。这既实现了跨会话连贯的交互,减少了冗余推理,也能在用户上下文持续变化的生产环境中提供更优质的个性化体验。

会话记忆层示意图(来源:LinkedIn 博客文章

该架构将记忆划分为三个不同层级。情景记忆(Episodic memory)用于捕获交互历史与对话事件,让智能体能够回忆过往的交流内容。语义记忆(Semantic memory)存储从交互中提炼出来的结构化知识,支持对用户、实体及偏好等持久化信息进行推理。程序记忆(Procedural memory)对已习得的工作流程与行为模式进行编码,帮助智能体优化任务执行策略。三层记忆协同作用,使智能体的行为从单次响应升级为长期自适应演进。

LinkedIn 工程师 Xiaofeng Wang 在一篇帖子中指出:

记忆是构建生产级智能体最具挑战性、同时也最具价值的核心模块之一,它能够实现真正的个性化、交互连续性与规模化适配。

CMA 在多智能体系统中同样扮演着关键角色。与让每个智能体各自维护独立上下文不同,CMA 提供了一个共享记忆底座,让负责规划、推理与执行的各类专业智能体可以共同访问。这一共享层减少了状态冗余,提升了协作效率,并确保分布式工作流输出结果的一致性。 

从系统层面来看,CMA 集成了多种检索与生命周期管理机制。近期上下文检索用于保障短期相关性,语义搜索则支持对长期历史交互的调取。通过摘要进行记忆压缩有助于控制存储容量增长,并在规模化场景下维持系统的性能。这些机制也带来了关键的工程挑战,包括相关性排序、过期内容管理以及不断演变的用户上下文的一致性维护。

LinkedIn 杰出工程师 Karthik Ramgopal 强调了智能体系统向持久化上下文转型的重要性,他表示:

优秀的智能体 AI 不是无状态的:它会记忆、适应与积累。实现这一目标的核心能力之一便是突破上下文窗口限制的记忆能力。

在运营层面,持久化记忆系统带来了分布式系统中经典的权衡问题。确定需要存储哪些内容、何时进行检索以及如何处理过期数据已成为保障系统正确性的核心问题。

MLOPS 数据工程师 Subhojit Banerjee 强调:

缓存失效是计算机科学中公认的难题之一,很高兴你们明确提出了这一点。提取这类记忆的挑战在于如何准确识别情景边界、处理内容时效性和解决冲突。

在招聘等面向用户的应用场景中,LinkedIn 还将人工校验融入工作流程。这种人机结合的方式能够确保 AI 生成内容始终贴合用户意图与业务需求,尤其适用于高风险决策场景。

CMA 体现了 AI 系统从无状态生成向有状态、记忆驱动的智能体这一更广泛的架构转变。LinkedIn 将 CMA 定位为构建自适应、个性化、协作式智能体系统的横向平台。这一方向也凸显出业界日益增长的共识:生产级 AI 系统并非仅由模型决定,而是由围绕模型构建的记忆、上下文管理及基础设施层共同定义。

【声明:本文由 InfoQ 翻译,未经许可禁止转载。】

查看英文原文:https://www.infoq.com/news/2026/04/linkedin-cognitive-memory-agent/

介绍

「🍉西瓜备份」是为 iPhone 设计的相册备份 App 。

支持外接硬盘、SMB 、WebDAV 作为远端存储点。

我自己是 immich/群晖用户,但是我不想相册管理也走它们的 mobile App ,有一些自己想要的功能点没满足,所以自己做了个。

优势

  • 原始信息保存

iOS 的照片不是单纯的图库,也不是简单的同名 MOV + 静态图的组合,还有一些七七八八的数据。我想要尽可能原始数据导出/导入,按照 iOS 照片结构导出对应角色,然后再导回去。这个过程里是依赖一个 watermelon manifest 文件来作为索引实现的。

  • PIP 功能支持

用户可以在备份过程中退到后台。

  • 后台备份功能

接入 Wi-Fi 和连上电的时候,就能进行最近两个月照片数据的备份。

  • 支持多个备份节点

重要的照片要备份好几个地方,所以支持多节点切换。

  • 除了支持上传,还支持下载与同步

这个同步需要说明,准确说是本地内容上传上去后,下载远端没有的数据。

  • 兼顾性能与速度

基本是目前能做到兼顾速度还考虑内存容量的状态了,优化好几遍了。

App Store

https://apps.apple.com/app/id6762260596

内购

只有一个,就是 Watermelon Pro ,定价 $3.99

限免时间 2026/04/22-2026/04/30

其他

内购免费,结果大家拿完内购就走了,也不回复。

但是如果是发码,20 个兑换码感觉可以钓 50 个评论。

所以希望大家玩命地评论我这种直接内购全免,对我来说真的很重要。

当然关于产品反馈,比如问题、建议,对我也很重要。