2026年4月

产品

1. 做了几个产品

预计要做三个,已经完整两个

2. Youtube AI 视频的导航网站有什么功能

  • 集合 100+的 AI 频道进行每天的跟踪:总频道数、总订阅数、总播放量、总视频数一目了然
  • 对 AI 视频进行排行
  • 对频道进行查看
  • RSS 自动抓取频道和视频数据:YouTube RSS
  • 使用频道 URL 或 @handle 查找任何 YouTube 频道的频道:YouTube 频道 ID 查询工具
  • YouTube 视频的所有信息: YouTube 视频数据查看器

3. YouTube Channel RSS Extractor 是什么?


一个浏览器扩展,用于从 YouTube 频道页面或订阅页面批量提取 RSS 源和频道元数据。项目开源

Chrome Web Store

在 Chrome Web Store 安装

GitHub

项目地址

Q&A

1. 油管视频下载软件还做吗?

其实我一开始是想做一个油管的下载软件的,后来发现市面上有几个开源好用的软件后就放弃了
推荐几款 youtube 视频的开源下载软件: https://mp.weixin.qq.com/s/mjmT1SBWkGOVfImdlUHUPQ

2.为什么要做这些?

我想做 AI 视频,但是不知道做哪个方向。要找一下对标的频道,比如 别人做动物营救 骨头人 kpop 高流量视频进行 AI 分析 复制,然后通过 YPP 赚美刀

我们普通 app 用的 gradle 编译,项目结构也是这样,但是放在 aosp 中编译就不行,
AOSP 这边之所以不能直接吃 implementation(...),依据是官方 Soong 文档和模块类型:AOSP 用的是 Soong/Android.bp ,不是 Gradle ;预编译依赖需要 android_library_import / java_import 这类模块来接。能做个什么改造吗 一套代码两边都能正常使用?

公司用 MacBook ( M1 Pro ),

周内从来不关机,第二天直接用,一般一周重启一次。


家里面 2 台电脑,window10 和 MacBook ( 2012 款),

MacBook 同上,

window10 每次都是睡眠,除非卡的不能动,一般不重启。


体验上,MacBook 省心。

每 9 天里面只需要工作 5 天!接近一半的放假时间!

大家伙觉得怎么样,有搞头吗?是不是很大胆!

(纯周一给大家来个乐子,所以话题也是在每日一笑,勿喷)

Lab4AI大模型实验室是面向AI开发者、科研党与学习者打造的一站式AI实践平台,深度绑定高性能弹性算力,支持模型复现、训练、推理全流程,以按需计费、低价高效破解高端算力紧缺与成本高昂难题;同步Arxiv前沿论文并提供翻译、导读、分析服务,支持各类大模型一键复现与数据集微调,对接孵化资源助力科研成果转化;同时搭载多样化AI在线课程,实现理论学习与代码实操同步推进,全方位覆盖AI研发、科研创新与技能学习全场景需求。

大模型实验室官网链接: https://www.lab4ai.cn/arxiv?utm_source=sf_daily_paper

作者信息

  1. Deepak Kumar:印度理工学院罗克分校计算机科学与工程系
  2. Abhishek Pratap Singh:印度理工学院罗克分校计算机科学与工程系

研究背景

群体情感识别(GAR)是情感计算的重要分支,旨在分析群体中个体的情感模式以揭示集体情感状态,在商业效率、市场营销、团队绩效评估、社会心理学、人机交互、公共安全等领域具有广泛应用价值。
当前自然无约束场景(in-the-wild)下的群体情感识别面临两大核心挑战:

  1. 数据层面:现有大规模标注数据集匮乏,多数数据集仅包含视觉模态、缺少音频与上下文信息,且普遍不同时具备效价标签、离散情感标签与上下文元数据,无法支撑多模态上下文感知建模。
  2. 模型层面:现有方法多依赖视觉特征,极少充分利用场景上下文信息,而大语言模型已证明上下文信息对视频理解的重要性,群体情感识别中上下文建模研究严重不足。
    此外,真实场景视频存在光照差、遮挡、运动模糊、视角多变等问题,进一步增加群体情感捕捉与标注难度。

研究目的

  1. 解决自然场景下群体情感识别缺乏大规模、多模态、带上下文标注的数据集这一核心缺口,构建同时包含视频、音频、上下文信息,且标注效价与离散情感的数据集。
  2. 提出能够有效融合视觉、音频、上下文特征的多模态上下文感知群体情感识别模型,为该领域提供基准方法。
  3. 支撑复杂社会系统中群体情感动态的量化建模与分析,推动群体情感识别在真实场景的应用落地。

本文核心贡献

  1. 构建大规模多模态群体情感数据集GAViD:包含5091个自然场景视频片段,同步提供视频、音频、多模态大模型生成并人工校验的上下文元数据,同时标注三元效价、五类离散情感、情感强度、交互类型与行为线索,是首个同时完备具备三类核心标注的群体情感数据集。
  2. 提出上下文感知群体情感识别网络CAGNet:通过跨模态注意力与门控融合机制,统一建模视觉、音频、上下文信息,可端到端处理视频且能稳健应对模态缺失场景。
  3. 提供完备实验基准:在GAViD数据集上系统对比多种融合策略与现有视频大模型,验证多模态上下文融合的有效性,为后续研究提供可复现的基线与评估方案。
  4. 规范伦理与开源体系:数据集采用CC BY 4.0协议开源,明确禁止监控、画像等非研究用途,配套完整代码与文档,保障研究可复现性。

研究方法

image

1. GAViD数据集构建流程

  1. 数据采集:从YouTube获取知识共享协议(CC BY)授权视频,筛选包含2人及以上群体互动的内容,共得到321个原始视频。
  2. 视频分割:使用FFmpeg将视频切分为平均5秒的片段,每个原始视频最多保留35个片段,初始得到5130个片段。
  3. 数据清洗:剔除无清晰群体结构、人脸不可见、低分辨率、无有效时序信息的片段,最终保留5091个高质量片段,统一为25fps、720p。
  4. 多维度标注:通过Labelbox平台由108名标注者完成标注,每个片段由3人标注,多数投票确定最终标签,意见分歧时引入第4名标注者仲裁;标注内容包括三元效价、五类离散情感、情感强度、交互类型、行为线索,同时校验VideoGPT生成的上下文元数据。
  5. 数据集划分:按原始视频无重叠原则分为训练集3503个、验证集542个、测试集1046个。

2. CAGNet模型设计

  1. 模态专用编码:使用DINOv2提取视觉特征、Wav2Vec 2.0提取音频特征、XLM-RoBERTa提取文本上下文特征,将所有特征映射到768维公共空间。
  2. 跨模态对齐:对视觉-音频、视觉-上下文、音频-上下文三对组合分别使用掩码多头交叉注意力块,实现模态间信息互补与特征对齐。
  3. 门控融合:采用挤压激励门控机制,动态加权不同模态特征,自适应聚焦关键模态信息。
  4. 分类输出:经层归一化、GELU激活、Dropout正则化后,通过两层MLP输出三元效价分类概率。
  5. 鲁棒性设计:训练时随机丢弃单一模态,测试时以零向量替代缺失模态输入,提升模型对模态缺失的适应性。

3. 实验设置

  • 硬件:NVIDIA RTX A5000 GPU
  • 优化器:AdamW,学习率1×10⁻⁴,权重衰减1×10⁻⁴
  • 训练:最多50轮,早停策略(耐心值5),批次大小16,Dropout率0.4
  • 评估指标:准确率(Acc.)、F1分数,对比融合基线模型与Video-GPT、LLaVA-NeXT等视频大模型

研究结果

  1. 数据集质量:三元效价标注科恩kappa系数0.72,离散情感系数0.65,标注一致性高、数据可靠;情感分布以中性、快乐为主,符合真实场景规律。
  2. 模型性能:CAGNet在三模态(V+A+C)输入下,测试集效价分类准确率达63.20%,F1分数0.614;使用训练+验证集联合训练后,性能提升至66.21%准确率、0.647 F1分数。
  3. 模态有效性:三模态融合效果显著优于双模态,视觉+音频是最优双模态组合,上下文信息能有效修正模糊场景下的情感预测错误。
  4. 对比结果:CAGNet大幅领先简单融合基线与Video-GPT、LLaVA-NeXT等通用视频大模型,证明专用多模态上下文融合结构的必要性。
  5. 离散情感识别:CAGNet测试集准确率61.33%,F1分数0.458,优于基线模型,具备实用价值。
  6. 模态缺失鲁棒性:随机缺失单一模态时,模型性能仅小幅下降,展现良好的容错能力。

总结与展望

本研究构建了当前规模最大、标注最完备的多模态上下文感知群体情感视频数据集GAViD,并提出CAGNet模型实现视觉、音频、上下文信息的有效融合,在效价分类与离散情感识别任务上取得领先性能,填补了领域内数据与模型的双重缺口,为自然场景下群体情感计算研究提供了关键支撑。

未来展望

  1. 扩展GAViD数据集规模,新增帧级别与个体级别情感标注。
  2. 深入研究更细粒度的时序动态建模,提升模型对群体情感变化的捕捉能力。
  3. 探索域适应方法,推动模型在实时部署场景的应用。
  4. 拓展迁移学习,将方法应用于其他相关情感计算任务。
  5. 持续完善数据集与模型,支持更精准的群体与个体情感联合分析。

在化学品行业,制造执行系统(MES)不仅是连接企业资源计划(ERP)与过程控制系统(PCS/DCS)的桥梁,更是保障生产安全、提升批次准确性、实现合规追溯的“智慧护盾”。针对化工行业高温高压、易燃易爆、配方复杂等特点,我为你梳理了一套全面的MES解决方案。
一、化工行业核心痛点与MES的价值定位
化工生产面临着配方调整频繁、原材料变异性高、监管审计严格以及生产环境危险等独特挑战。传统的纸质记录或人工管理已无法满足现代化工厂对“精度”和“安全”的极致要求。
MES解决方案的核心价值在于:
消除信息孤岛: 打通从订单到交付的全流程数据。
保障批次一致性: 确保每一次投料、每一个反应步骤都严格遵循标准。
筑牢安全防线: 实时监控关键参数,预防事故发生。

二、化工行业MES核心功能模块
1、配方与工艺管理
这是化工生产的“大脑”。万界星空MES将配方数字化,确保正确的配方出现在正确的工作站。
版本控制: 防止未经授权的更改,确保生产使用的是最新、合规的版本。
自动调整: 根据批量大小自动调整原料用量,减少人工计算错误。
电子批记录 (EBR): 自动生成完整的电子批记录,替代纸质记录,为审计做好准备。
2、生产执行与过程控制
MES通过传感器实时采集温度、压力、流量、液位等关键参数,与预设的安全阈值进行比对。
实时监控: 24小时不间断监控反应釜状态,一旦参数异常(如温度漂移),立即触发声光报警并推送至相关人员。
防错机制: 在投料环节,系统可强制校验物料条码,防止投错料或顺序错误。
连锁停机: 在极端异常情况下,MES可触发连锁停机指令,防止事故扩大。
3、质量管理系统
质量是化工企业的生命线。MES将质量检查嵌入到生产工作流中。
全流程质检: 从原材料入库、半成品过程检验到成品出厂,每个环节都有明确的检验标准。
自动拦截: 如果中间品检测结果不合格,MES会自动锁定该批次,阻止其进入下一道工序。
趋势分析: 分析质量数据趋势(如粘度变化),提前发现潜在工艺问题。
4、物料追踪与追溯
利用条形码、RFID等技术,MES实现从原材料到成品的双向追溯。
正向追溯: 发生质量问题时,快速定位受影响的所有成品批次。
反向追溯: 针对特定成品,追溯其使用的所有原料批次、供应商、生产时间及操作人员。
危化品管理: 建立电子台账,实施“双人双锁”校验机制,确保危化品领用合规。
6、设备管理与预测性维护
化工设备(如反应釜、压缩机)的故障可能导致灾难性后果。
数字孪生: 为关键设备建立“数字孪生体”,实时模拟运行状态。
预测性维护: 利用AI分析振动、温度等数据,提前预测设备故障(如轴承磨损),将“事后维修”转变为“事前预防”。
7、能源管理
针对化工行业高能耗的特点,MES提供精细化的能源管控。
分项计量: 建立水、电、汽、气分项计量模型,精准核算每吨产品的能耗成本。
异常诊断: 识别“大马拉小车”、空载运行等能源浪费现象,提供优化建议。
三、化工行业MES系统集成架构
化工MES并非孤立运行的系统,而是需要与上层管理系统及下层控制系统进行紧密集成,以实现信息的高效流转与业务的协同运作。
1、上层管理:企业资源计划(ERP)
MES与ERP系统紧密对接,承接来自ERP的生产计划和物料清单(BOM)信息,确保生产指令的准确下达。同时,MES会将生产现场的完工汇报、实际物料消耗等数据实时反馈给ERP,实现计划与执行的闭环管理。
2、核心执行:制造执行系统(MES)
作为集成架构的核心枢纽,MES主要承担生产调度、质量管理、物料平衡以及生产过程数据采集等关键职能,是连接计划层与控制层的桥梁。
3、下层控制:DCS/PLC/SCADA
MES向下连接分散控制系统(DCS)、可编程逻辑控制器(PLC)及数据采集与监视控制系统(SCADA)。这些系统负责直接控制现场生产设备,而MES则从中实时读取温度、压力等关键工艺参数,实现对生产过程的监控与分析。
4、辅助系统:实验室信息管理系统/质量管理系统(LIMS/QMS)
MES与LIMS/QMS系统集成,利用其专业的实验室管理功能,负责具体的化验数据录入与深度分析,为MES的质量管理模块提供准确的数据支撑。
如果你正在规划或寻找化工MES解决方案,建议关注以下几点:
行业适配性: 选择懂化工工艺(如精细化工、煤化工、炼化)的供应商,如:万界星空科技化工行业MES,避免通用型软件“水土不服”。
数据治理先行: 在系统上线前,必须梳理好物料属性、工艺参数等基础数据,确保数据标准统一。
软硬一体化: 考虑MES与底层传感器、仪表的兼容性,确保数据采集的实时性和准确性。
这套解决方案旨在帮助化工企业从“经验驱动”向“数据驱动”转型,最终实现安全、绿色、智能的制造目标。

在数据规模持续增长、实时性要求不断提升的背景下,分布式缓存数据库已经成为支撑高并发业务的核心基础设施。与此同时,随着技术生态的快速演进,分布式缓存数据库领域也迎来了新一轮创新浪潮。

 

从 Redis 生态的演变到 Valkey 项目的兴起,从传统连接模型到共享连接架构的优化,再到 AI Agent 在运维场景中的落地实践,分布式缓存数据库正经历一场从底层架构到工程范式的系统性升级。

 

为了帮助开发者更好地理解这一轮技术演进,腾讯云 DBTalk 第三期特别策划《「腾讯云 NoSQL」技术解析:分布式缓存数据库在社区开源、内核架构与 AI 工程化的全面演进》主题直播,特邀三位腾讯云 NoSQL 团队分布式缓存数据库产品技术专家,分享开源社区治理、高性能架构设计,以及智能化运维工程的完整技术脉络。

 

本次直播聚焦三大硬核议题:

 

议题一:腾讯云分布式缓存数据库:从 Redis 到 Valkey  - 开源社区如何快速创新

 

Valkey TSC 成员 Binbin Zhu 将首次分享,在 Redis 许可证变更后,新的 Valkey 项目是如何在厂商中立、社区驱动的模式下实现快速创新。本次演讲将揭示,在开放的社区协作中,工程至上的文化与底层性能优化如何共同驱动项目跨越式发展——从关键架构决策到落地中的务实权衡。观众将了解到 Valkey 背后的设计共识与演进逻辑,以及如何通过社区共建,持续构建面向未来的高吞吐、低延迟系统能力,应对真实生产环境的极限挑战。

 

议题二:腾讯云分布式缓存数据库:Cluster Proxy 共享连接架构深度解析

 

在 Redis/Valkey Cluster 架构中,客户端直连集群节点面临 MOVED/ASK 重定向、连接管理复杂等痛点,因此 Proxy 层应运而生。然而,传统 Proxy 采用“每客户端×每分片”的独立连接模型,在万级客户端场景下会产生连接爆炸问题。本次分享将深入剖析腾讯云数据库 Redis Cluster Proxy 的共享连接架构——如何利用 Redis 协议请求-响应严格有序(FIFO)的特性,实现 Pipeline 多路复用,让多个客户端 Session 共享同一条后端 TCP 连接,最终将连接规模从 O(N×M) 降到 O(N+M)。分享将从设计原理、核心机制、工程挑战与解决方案等角度,完整呈现这一架构的设计思考与实践经验。

 

议题三:腾讯云分布式缓存数据库:AI Agent - 从提示词工程到 Harness 工程

 

2025 年被称为 Agent 元年。腾讯云数据库 NoSQL 团队基于实例监控、故障诊断等运维场景,经历了从提示词工程、上下文工程到结构化 Skill 沉淀的工程化演进。本次分享将介绍各阶段的关键决策与经验教训,以及团队利用 Harness 工程提升开发和测试质量的探索。

 

从开源协作到架构设计,从性能优化到智能运维,本次直播将以体系化视角,帮助开发者理解分布式缓存数据库在社区开源、内核架构与 AI 工程化的全面演进。无论你是开源社区参与者、分布式系统架构师,还是 AI 工程实践者,都能在本次直播中获得具有参考价值的技术洞察。

 

⏰ 4 月 28 日 19:00 准时开播!扫描下方二维码,或点击链接:https://qdrl.qq.com/8cVnQr8L,立即预约直播~

扫码添加企微小助手,一键加入开发者专属企微群,即可免费获取讲师 PPT,助力学习高效进阶!

摘要

  • 检索增强生成(RAG)可以有效将大语言模型的输出与外部知识对齐,但它并不会建模运行时上下文,例如用户身份、会话状态或业务约束,而这些正是企业应用所依赖的关键要素。

  • 上下文增强生成(CAG)是在现有 RAG 流程之上的扩展,通过引入一个显式的上下文管理器,在不需要重新训练模型或改动检索基础设施的前提下,对运行时上下文进行组装和规范化。

  • 在基于 Java 的系统中,这种模式可以通过 Spring Boot 清晰地实现:在现有的检索器和 LLM 服务之上增加一层上下文编排逻辑,从而保持既有的应用结构和部署方式不变。

  • 将“上下文”视为一等架构要素,有助于提升系统的可追踪性和可复现性,使得在受监管或多租户环境中可以清晰解释 AI 响应的生成过程。

  • CAG 模式为以文档为中心的 RAG 原型提供了一条渐进式演进路径,使其发展为具备上下文感知能力的企业级 AI 服务,同时保留已有投入和系统稳定性。

检索增强生成(RAG)已经迅速成为企业系统中集成大语言模型的一种基础模式。通过将语义检索与基于提示的生成结合起来,RAG 可以在不重新训练底层模型的情况下,让应用基于领域知识和最新数据生成更可靠的回答。因此,它已广泛应用于知识助手、内部搜索工具以及客户支持系统等生产场景。

 

随着企业级应用的深入落地,一个反复出现的架构问题逐渐显现:虽然 RAG 能提升事实准确性,但它并不会自动处理企业软件所依赖的运行时上下文,例如用户身份、会话历史、流程状态以及领域约束。这类问题在真实部署中越来越明显,尤其是在受监管或多租户环境中,不同用户和不同情境下,系统必须给出差异化的响应。

 

因此,很多生产系统并不是替代 RAG,而是在其基础上叠加上下文信息,对检索和生成过程进行扩展。本文将这种实践称为“上下文增强生成”(CAG),并介绍 Java 团队如何基于 Spring Boot 对其进行清晰的结构设计与实现。文章重点放在系统设计和生产落地,而不是模型训练或实验性机器学习流程。

 

什么是 RAG,以及它在企业系统中的局限

RAG 已成为将大语言模型与企业数据结合的一种实用基础方案。它通过从外部知识库中检索相关文档,并将其注入到模型提示中,使应用能够生成比仅依赖训练数据更准确、更及时的回答。因此,RAG 已被广泛应用于知识助手、内部搜索工具以及面向客户的支持系统。

 

但在生产环境中,团队逐渐发现,仅靠检索并不能解决 AI 系统嵌入真实业务流程后遇到的诸多问题。尽管 RAG 提升了信息准确性,但它通常将每一次请求视为相对独立的处理单元,并未考虑企业系统所依赖的运行时上下文。

 

一个典型的 RAG 流程包括三个阶段:检索、增强和生成。在检索阶段,向量数据库或搜索引擎返回与查询语义相关的文档;在增强阶段,这些文档会与用户输入组合;最终将构造好的提示传递给语言模型生成结果。

 

这种架构在以文档为中心的场景中表现良好,但企业应用往往需要更多上下文信息,而这些信息并不是单纯通过检索就能获得。即使在查询相同的情况下,运行条件不同,合理的回答也可能不同。

 

例如,回答可能因用户身份和角色的不同而不同,因为信息访问通常受权限控制;也可能依赖会话连续性,即后续问题需要基于前文上下文理解;在很多场景中,领域规则和策略(如合规要求、审批流程或访问控制)也必须参与决策;甚至时间或流程状态也会影响结果,因为在不同阶段,正确答案可能不同。

 

这些问题本质上并不属于“检索”范畴。即使检索结果完全相关,RAG 系统也无法理解答案适用于谁、在什么条件下应该给出,或企业规则应如何影响输出。

 

因此,一旦 RAG 从原型走向生产,团队往往会遇到一类典型问题:回答在事实层面正确,但在上下文上不合适,例如忽略用户角色或流程状态;对于类似问题,不同用户或不同会话之间的回答可能不一致;同时,也很难解释或审计某个回答为何产生。随着时间推移,如果仅通过 prompt 逻辑来强行嵌入业务规则,会不断增加复杂度,但无法真正解决架构层面的缺口。

 

这些局限并不否定 RAG 的价值,而是界定了它的适用范围。RAG 擅长解决“找什么信息”的问题,但并不负责建模企业系统运行所需的上下文。要弥补这一点,需要将“上下文”提升为一等架构要素,而不是简单作为 prompt 的附加信息。

 

CAG 架构模式的组织方式

当团队逐渐意识到“仅靠检索”无法满足需求时,一种更完整的架构模式开始形成:在应用层显式管理运行时上下文,对 RAG 进行扩展。与其将每个请求视为独立的检索问题,不如在调用语言模型之前,将用户、会话和策略等信号与检索结果一起统一组织起来。

 

尽管不同组织的术语有所不同,但在大规模企业系统中,“文档检索”和“上下文编排”之间的分层已经逐渐清晰。例如,DoorDash 在其基于大语言模型的客服自动化系统中,就明确区分了检索组件和更高层的上下文模块,后者负责整合骑手状态、流程上下文以及业务约束。类似地,微软在 Copilot 的语义索引中,也强调不仅要基于内容进行检索,还要结合组织上下文、权限以及用户特征来生成响应。

 

与此同时,在DZoneMeilisearch等工程社区的讨论中,这种方式通常被称为“上下文增强生成(CAG)”,强调生成效果不仅取决于检索到的文档,还取决于“是谁在问、在什么场景下问,以及受到哪些约束”。不过,这类讨论往往停留在概念层面,缺乏一个可以在企业中稳定落地的架构结构。尤其是在 Java 系统中,状态管理、治理能力和可追踪性本身就是一等需求,更需要清晰的实现方式。

 

本文将 CAG 视为一种架构层面的演进,而不是新的检索技术。实际上,大多数企业系统已经在以非正式的方式使用上下文信息:例如将用户属性拼接到 prompt 中、手动加入对话历史,或通过零散逻辑注入策略文本。CAG 的价值在于将这些做法规范化,使“上下文组装”成为系统中一个明确且可复用的能力。从本质上看,两者的区别可以概括为:RAG 关注“哪些信息相关”,而 CAG 关注“这些信息对谁相关、在什么情境下相关,以及受到哪些约束”。

 

在具体实现上,CAG 并不会替代检索或生成,而是在其旁边引入一个独立的上下文管理器。这个组件负责在构建 prompt 或调度检索之前,收集并规范化运行时信号,例如用户身份、会话历史和领域策略。

 

这种设计会带来重要的架构收益。通过将上下文处理集中在一个组件中,系统可以更清晰地实现关注点分离:检索质量、模型行为和上下文影响可以分别分析,从而提升测试性、可审计性以及后续演进能力。

 

对于企业级 Java 应用而言,这种方式也与既有设计原则天然契合。用户上下文、授权状态以及流程元数据本来就存在于应用层,而不是机器学习基础设施中。CAG 的做法,是将上下文能力保留在业务逻辑附近,由应用架构进行治理,而不依赖具体的 LLM 或向量数据库。

 

在 CAG 架构下,RAG 的核心组件(检索器、向量存储和 LLM 服务)本身并不发生变化。不同之处在于,请求在进入这些组件之前的准备方式。通过在上游引入上下文管理器,团队可以在保持现有 RAG 投入和运行稳定性的前提下,为 AI 交互引入企业级的上下文能力。

 

在 Spring Boot 中实现上下文管理器(企业场景)

图一:在传统 RAG 流程之上叠加的 CAG 架构

 

图一展示了在 Spring Boot 应用中,CAG 如何扩展现有的 RAG 流程。虚线区域表示未发生变化的 RAG 组件(检索器和 LLM 服务),而上下文管理器层则在调用 RAG 流程之前,为请求补充用户、会话和策略等上下文信息。

 

本节说明如何在现有基于 Spring Boot 的 RAG 应用中,通过引入一个轻量级的上下文管理器层来集成 CAG。目标并不是构建完整的演示系统,而是展示企业团队如何在不改变现有检索与生成组件的前提下,为标准 RAG 架构增加显式的上下文处理能力。

 

基于 Spring 的 RAG 系统通常遵循一种成熟结构:文档先被处理并嵌入向量库,在查询时由检索器将相关内容注入到 prompt 中,再发送给 LLM 生成结果。这种架构在使用 Spring AI 构建的生产系统中较为常见,也可以参考InfoQ 关于 Spring Boot + MongoDB + OpenAI 构建 RAG 应用的文章。本文后续均以这一典型流程作为基础假设。

 

CAG 的做法并不是修改该流程,而是在其之上增加一层。

 

企业场景示例

设想一个企业内部的政策助手,供多个部门使用。虽然政策文档是统一的,但具体回答往往需要根据用户角色或部门、当前会话上下文,以及组织内部的信息披露规则进行调整。

 

传统的 RAG 流程可以检索相关政策并生成回答,但不会显式建模这些运行时因素。因此,即便查询相同,在不同上下文下也可能需要不同答案,而这正是企业系统的常见要求。CAG 通过上下文管理器,在调用既有 RAG 流程之前,将用户、会话和策略信息统一组织起来,以满足这一需求。

 

架构说明

如图一所示,在基于 Spring Boot 的应用中,整体结构依然保持清晰。Spring Boot API 继续作为入口,对外接口和交互方式与传统 RAG 系统一致。

 

在应用层中,引入上下文管理器作为独立组件,负责收集运行时信号,包括用户信息、会话历史和策略约束。其职责仅限于对这些上下文进行整理和规范化,然后传递给下游。

 

现有的 RAG 流程(检索器、向量存储和 LLM 服务)保持不变,在图中以虚线区域表示。上下文会影响检索方式和 prompt 构建,但不会改变底层组件本身。

 

这种结构与常见的 Spring RAG 实现方式保持一致,也使得 CAG 更像是一种渐进式扩展,而不是整体重构。

 

上下文管理器的角色

上下文管理器将企业系统中原本分散存在的职责进行了显式化。相比于将上下文逻辑散落在控制器或临时 prompt 模板中,CAG 将其集中在一个独立组件中统一处理。

 

从功能上看,它负责收集用户属性(如角色、部门)、整合会话历史,并应用领域策略或业务约束,最终生成一个统一的上下文对象,在检索和生成阶段一致使用。

 

通过将上下文处理与检索、生成解耦,系统在理解、审计和演进上都会更加清晰。

 

在 Spring Boot 中的集成方式

下面的示例展示了上下文管理器在典型 Spring Boot 请求流程中的位置。作者有意简化了这些示例,并假设系统中已经有一个类似 Spring AI 架构的 RAG 服务。

 

@RestControllerpublic class AiController{private final ContextManager contextManager;    private final RagService ragService;public AiController(ContextManager contextManager, RagService ragService) {        this.contextManager = contextManager;        this.ragService = ragService;    }@PostMapping("/ask")    public String ask(QueryRequest request) {        Context context = contextManager.buildContext(request);        return ragService.generateResponse(request.getQuery(), context);    }}The context manager focuses solely on assembling runtime context: public interface ContextManager{    Context buildContext(QueryRequest request);}
复制代码

 

一个简化的上下文对象通常会包含:

public class Context{    private final UserProfile profile;    private final SessionState session;    private final PolicyConstraints policies;}
复制代码

 

RAG 服务本身的行为不会改变,仍然负责检索和生成。唯一的不同是,在构建 prompt 或执行检索调度时,可以显式使用上下文信息。

 

CAG 作为 RAG 的扩展

需要强调的是,CAG 并不是对 RAG 的替代。检索器、向量存储和 LLM 服务仍按原方式在基于 Spring 的 RAG 应用中运行。上下文管理器只是作为一个附加层,在请求进入 RAG 流程之前进行增强。

 

这种设计带来几个实际好处:现有 RAG 实现无需改动,可以直接复用;由于核心的检索生成组件不变,因此引入过程可以渐进推进,风险较低;同时,上下文逻辑被显式化,更容易测试、审计和分析系统行为。

 

通过将“上下文”提升为一等架构要素,基于 Spring Boot 的系统可以在不大规模改造的前提下,从以文档为中心的 AI 助手演进为具备上下文感知能力的企业服务。

 

最佳实践与注意事项:让 CAG 可用于生产环境

将上下文作为明确的约束

引入上下文管理器可以让上下文处理变得显式,但同时也带来了一个新的架构约束。在生产环境中,上下文不应被当作随意拼接的一组属性来处理。用户身份、会话状态和业务约束各自承担不同作用,其变化节奏也不相同。通过清晰的结构划分和责任归属,将这些差异明确下来,有助于避免无意间的耦合,也能让系统在需求不断变化的情况下依然保持可维护性。

 

控制上下文的范围

上下文越多并不一定越好。过多的历史或业务相关元数据会增加延迟、提高推理成本,还可能稀释关键信息。实践中,应优先保留最关键的内容,如近期会话信息、标准化用户属性,以及确实影响结果的业务约束。

 

保持现有 RAG 流程的稳定性

CAG 的一个核心优势在于,它不会改变原有的检索和生成流程。这种分离关系需要被有意识地保留下来。具体来说,上下文相关的逻辑应当只存在于上下文管理器中,而不应该被嵌入到检索器或 LLM 的封装层里。如果将上下文处理分散到这些组件中,不仅会增加系统复杂度,也会模糊不同模块的职责边界。

 

让上下文具备可观测性

一旦上下文开始影响系统行为,可观测性就变成了必需,而不是可选项。如果无法清楚地看到系统在某次请求中实际使用了哪些上下文信息,那么无论是问题排查还是系统治理,都会变得非常困难。

 

在实践中,合理范围控制和脱敏处理后的元数据记录可以用来解决这个问题,帮助团队理解“为什么会生成这个结果”,同时也为审计、合规等场景提供支持。CAG 的价值,很大一部分正体现在让上下文从“隐式存在”变为“显式可见”。

 

针对上下文缺失或不完整的情况进行设计

在企业系统中,数据不完整几乎是常态,而不是例外。用户信息可能缺失,会话历史可能已经过期,策略服务也可能在某些时刻不可用。因此,一个健壮的上下文管理器不应假设所有信息都是齐全的,而应该具备良好的降级能力。例如,在必要时使用默认值,或者在不影响核心逻辑的前提下忽略部分非关键上下文,而不是直接导致整个请求失败。如果设计得当,CAG 不仅不会降低系统稳定性,反而可以提升整体可靠性;反之,如果对上下文依赖过强且缺乏容错机制,就可能引入新的故障点。

 

避免让上下文管理器“过载”

随着 CAG 系统不断演进,一个常见的问题是:上下文管理器逐渐承担越来越多的职责。一旦 CAG 开始包含业务逻辑甚至决策逻辑,上下文管理器就有可能演变为系统瓶颈。更合理的做法是,将其职责限制在“编排和整理上下文”这一层面,也就是负责收集、聚合和规范化数据,而不是对这些数据做业务层面的解释或决策。这样可以保持系统结构的清晰性,同时也有利于测试和长期维护。

 

安全与隐私方面的考虑

上下文中往往包含用户或组织层面的敏感信息,因此安全问题应作为显式设计的一部分。在将上下文信息注入 prompt 之前,应当先进行访问控制、数据最小化处理以及必要的脱敏。CAG 应该强化企业已有的安全与治理机制,而不是绕开这些机制。

 

以渐进方式引入 CAG

在实际落地中,成熟的团队通常不会一次性全面引入 CAG,而是选择分阶段推进。可以先从一个最小化的上下文层开始,只引入少量关键上下文信息,再根据实际效果逐步扩展。这样的方式可以在不影响现有 RAG 系统运行的前提下,对设计假设进行验证,并根据反馈不断调整实现策略。随着系统逐步演进,这种有节奏的推进方式能够帮助团队从以文档为中心的 AI 助手,平滑过渡到具备上下文感知能力的企业级服务。

 

从整体来看,让 CAG 具备生产可用性,关键不在于具体工具的选择,而在于是否具备良好的架构约束。只有在上下文被清晰定义、边界明确、具备可观测性,并且与底层 RAG 流程保持解耦的前提下,团队才能在扩展系统上下文能力的同时,维持既有系统的稳定性和可控性。

 

总结

RAG 已成为将大语言模型与企业数据结合的一种实用基础方案。但随着 AI 系统从原型走向生产,我们可以看到,仅靠检索并不足以满足需求。企业软件本质上是有状态的,受到用户角色、会话连续性和业务约束的影响,而这些因素并未在传统 RAG 中显式建模。

 

CAG 通过引入一个专门的上下文管理层来弥补这一缺口。它并不替代现有的检索器或 LLM 服务,而是在应用层将上下文处理能力显式化——也正是企业上下文本来就存在的地方。这种分层方式既保留了已有的 RAG 投入,又让系统在行为一致性、可追踪性以及 AI 行为和业务契合度方面得到提升。

 

对于使用 Java 和 Spring Boot 的团队来说,CAG 与现有架构模式天然契合。通过明确划分职责——应用层负责上下文组装,RAG 流程负责检索与生成——团队可以以较低成本、较小风险逐步引入 CAG。

 

作者说明:本文基于作者个人的技术研究整理,仅代表个人观点,不对应任何具体组织的实际架构实现。

起因是周六早上突然想玩了,于是下了游戏,发现 20 多年过去了,这游戏本体还不到 6 个 G ,不如手游更新包大。

进游戏之后发现现在都是各种升级任务,秒升 8 、90 级那种,之后找了个攻略肝到了 100 级,涅槃和羽化了。这期间最逆天的事莫过于打怪没有掉落,就是什么都不掉。后来发现官方有公告:“为了打击工作室,优化玩家体验,15 路服务器中的 4 路有掉落,其余都没有掉落”,但是关键问题是,这 4 路服务器根本挤不进去。因此,你就会发现自己的人物基本没有金币来源,只能充钱。

于是我充了 50 ,就当作宴请 20 年前的自己了。充了钱倒是有金币了,但是羽化 100 级后要升级的副本自己都打不了,都需要组队,但是根本没有同级别的独狼,看上去都是工作室或者老板大哥,根本没人组队。外加上 20 年的游戏了,维护做得一塌糊涂,官网职业介绍页面各种 bug 。于是最后我就去做那种纯恶心人的跑图任务了,也就是怀念一下当时跑图的感觉。

但是这两天完全治好了我的赛博 ed ,之前对着各种 3A 游戏目光呆滞,回来玩怀旧网游一玩玩了 2 天,起早贪黑,坐一天腰甚至都不疼了,晚上睡觉甚至不做梦了(估计是累的)。全程就是那种剧情啥也不看,就是做任务升级,一边骂一边玩,可能就像是官方给的那个称谓一样“你郁闷吗玩武林外传,你幸福吗玩武林外传”

最近上班总是没精神,无精打采的,本人又从不喝咖啡,因为喝完以后晚上彻底睡不着觉,害怕了,想问下大家日常都喝点什么补品,或者用什么泡水喝

transformers

官网入口

https://huggingface.co/docs/transformers/v5.5.4/zh/quicktour

pipline用法

from transformers import pipeline

# 中文情感分析(默认正负二分类)
classifier = pipeline("sentiment-analysis",model="uer/roberta-base-finetuned-dianping-chinese")
result = classifier(["今天天气真好!", "这个产品体验太差了,再也不买了"])
print("文本分类结果:", result)

# generator = pipeline("text-generation",
#                      model="THUDM/chatglm3-6b",
#                      trust_remote_code=True,  # 核心参数,解决弹窗问题
# )
# # 生成参数:max_length=最大长度,do_sample=True开启随机生成(更自然)
# result = generator("P-Tuning调优技术的核心优势是", max_length=100, do_sample=True)
# print("文本生成结果:", result[0]["generated_text"])

做运维的同学应该都懂那种感受:kubectl 的敲多了难受,Web Dashboard 寄存于浏览器也有很多限制。

所以我自己做了个桌面端的 K8S 工具:Kite Desktop ,基于 Wails v3 ( Go + React ),可以来看看是否合你的胃口。

GitHub: https://github.com/eryajf/kite-desktop

目前 v0.1.8 ,半个月已迭代 9 个版本,持续更新中。

核心功能:

  • 多集群一键切换,kubeconfig 自动发现
  • Pod/Deployment/Service 等全资源可视化管理
  • 内置 Monaco 编辑器直接改 YAML
  • Web 终端,不用再手敲 port-forward
  • 内置 AI Sidecar ,历史会话持久化
  • 快捷键,高频操作支持快捷键,快人一步。

欢迎试用,欢迎 Star ⭐

事由:她的电车在充电桩被拔
我们是晚上 8 点开进充电停车场,插枪,没充电,把码拍下来,然后上楼,等特定点充相对便宜的电,然后到点充结果发现充电不是本车,我们下去看到插在车子的插头在隔壁车上,她马上就气愤,把插头也拔下来插自己车上充电(对方车也是等特定时间充电,所以可以轻易拔),然后就想找对方理论,打电话关机,就各种打电话,最后还是报 110 让对方来处理,当面道歉

处理的结果:当着 JC 的面女朋友在疯狂的跳脚,觉得拔了就是你的问题,就是要让对方承认错误,让对方赔礼道歉,结果双双在争执,对方说看你没在充电就拔下来,JC 开始的意思就是说都有错,我们也是占着不充电,后面是因为看我女朋友和对方一直在争执,JC 就让对方认错了(不情愿)

分歧点:我是那种多一事不如少一事的处理态度,因为我们也拔了对方的车的插头,就像对方做初一我们做十五,我们电还是充电了,我们就是耽误一下上楼下楼的时间,而且我们拔了对方的,对方也充不了电(也相当于是报复了)还有就是时间和精力,从晚上 10 点多从打电话在车身边待了 1 小时,JC 才联系上对方,处理交涉时间 1 小时,从晚上 10 点到 1 点我们才完全结束
她是侵犯了她的权益,她就要去较真,让对方去认错,对方态度不好她就更压一头。说话比较强势,昨晚 JC 都插不上话,平时也有点,开车在路上碰到前面车超车或者慢吞吞或者开红绿灯启动比她快都要争一下)

我们沟通下来:我可能是和她讲道理,我说对方拔了并不影响车子,也没影响我们充电,我们也拔了对方的,对方也充不了电,对方认错从人性来讲,对方做了这样的事思维就觉得没错,你让对方和你认错都会狡辩,而且耽误我们的时间和精力,看似是为难他人,其实也是在为难自己。
她觉得我不管对的错的没有站在她那边,还老是会说她,并不站在她一起说别人指责别人,说我没有把她融入我的世界,我是那个第三视角的人

问问看大家怎么看啊

虽然好久没有分享了,但是几乎每天都会登录看一下,看看大家发啥,聊啥,有没有新的东西?

你们也会这样吗?

早高峰,堵车中,突然就被追尾了,看着不是很严重,有几处油漆磕碰,但是车牌变形了,估计是撞到内部的防撞梁了。
想问问这样的,应该问对方要多少钱?

还有如果对方走强险赔付的话,我可以选择不修车吗?
有没有 有经验的大佬 粗来说说。

不知道怎么插图,囧

AI Agent 使用体验 | JeecgBoot 团队将日常 Claude Code 工作流迁移到 Gemini CLI 的阶段性总结

为什么要换 Gemini CLI

JeecgBoot 低代码团队平时主力用 Claude Code 做代码生成、文档写作、重构脚本。但 Claude 最近实名认证 + 频繁封号的事闹得人心惶惶——身边已经有好几个账号莫名其妙被风控,工作流一断就是一整天。于是团队开始评估备胎方案,正好 Google 发布 Gemini CLI,社区反馈长上下文和推理都不弱,价格也比 Opus 亲民,就拉了一轮对比实测,看看能不能把关键工作流切过去。

不过换之前我们也有顾虑:Gemini CLI 生态比 Claude Code 小太多。Claude Code 发布一年多,围绕它沉淀的 skills、MCP、hooks、第三方工具、踩坑文章和中文教程已经是一个成熟的小生态;Gemini CLI 才出几个月,社区实践、skills 分享、配套脚本都还很稀薄,遇到问题得自己啃英文文档或者翻 GitHub Issues。对于重度依赖 skills 二次开发的团队来说,这个"生态代差"本身就是一个迁移成本——这也是为什么这次只做"能不能用"的小范围评估,而不是直接全量切换。

这篇文章只记录两件事:跑得通的部分,以及踩到的一个知名大坑

一、Skills 机制:一句话能跑的能力直接平迁过来了

Claude Code 的 skills 是团队日常工具链里最常用的一层(jeecg-codegen、jeecg-desform、jeecg-onlform、jimureport、jimubi-bigscreen 等等都是 skills 形式交付的)。换 Gemini CLI 之前最担心的就是这套东西能不能过去。

实测结论:skills 的 Markdown 格式 + 触发词机制,Gemini CLI 能识别和执行,而且一些高复杂度的"一句话"任务都能跑出来:

  • 一句话创建积木报表的分组报表和联动图表 —— 从 SQL 数据源绑定、分组字段配置,到联动图表的维度关联,它能一路走完
  • 一句话创建 Online 表单,并对接积木报表生成打印报表 —— 自动建表 → 配置表单字段 → 关联打印报表模板,流程打通
  • 一句话自动创建数据大屏 —— 组件布局、数据绑定、配色方案都自己搞定

对比维度拉一下:效果比 MiniMax 2.7、智谱 GLM 5.1 这一批国内模型明显更稳定,少数细节要调,但主线流程基本一次过。对于 JeecgBoot 低代码这种重度依赖 skills 的场景,Gemini CLI 的表现算是"可以放心交活"的水准。

二、命令执行能力:基本可用

日常开发里 Agent 跑 shell 命令是高频需求——git 操作、启服务、跑 pytest、做构建。这部分 Gemini CLI 也能胜任:

  • git add / commit / push 链式命令无问题
  • mvn clean installpnpm build 这种长时间任务,它能正确等待输出并根据返回码判定成功/失败
  • 需要管理员权限的操作(比如 Windows 下的 mklink)它会先说明,然后尝试执行

在这一轮里我们并没有感觉到"跟 Claude Code 有本质区别"。真正的分水岭出现在"自动安装 skills + 清理临时文件"这个环节——也是这次事故的起点。

三、一个 ~ 字符,把家目录递归删了

让 Gemini CLI 自动安装 skills 并清理临时文件,最普通的收尾任务。几分钟后看到一段道歉:

非常抱歉!这是一个极其严重的失误。
在"清理目录下临时文件"步骤中,我看到 ls 输出里有一个叫 ~ 的文件夹……

打开 C:\Users\zhang 一看——家目录里几十个 junction、Downloads / Documents、部分软件缓存目录全空了。

实际执行的命令:

Remove-Item -Path google_skills, temp_skills, "~" -Recurse -Force

它想删一个字面量叫 ~ 的文件夹,还特地加了双引号防展开——结果踩到 PowerShell 的经典陷阱-Path 会走 Provider 解析,~ 始终被展开成 $HOME,加不加引号都没用。只有 -LiteralPath./~ 才是字面量。

PowerShell 波浪号陷阱:引号并不能阻止 <code loading=~ 被展开为家目录" title="PowerShell 波浪号陷阱:引号并不能阻止 ~ 被展开为家目录">

换句话说,这条命令实际执行的是 Remove-Item -Path "C:\Users\zhang" -Recurse -Force——递归删除整个家目录。

这锅 Gemini 得背。 它自己在工作目录里生成了一个名为 ~ 的临时文件夹,这种命名本身就暴露了它对 Windows / PowerShell 生态不熟——任何一个有 Windows 经验的工程师都不会起这种文件名。生成了坑,又亲手跳进去,最后把用户家目录端了。AI Agent 执行破坏性命令时,后果被放大了几个量级。

四、几句总结

  • Skills 和基础命令执行:Gemini CLI 基本 OK,低代码团队的日常代码生成工作流可以平迁
  • 生态代差仍是硬伤:Claude Code 的 skills、MCP、社区教程积累更厚,Gemini CLI 目前仍以"能用"为主,还没到"顺手"
  • 涉及系统级 shell 操作时:注意 PowerShell 的 -Path 展开陷阱,尤其是 ~ 这种特殊字符
  • Agent 权限不是"开/关"二元问题:需要分级管理,关键目录必须走人工确认
  • 这次事故不能全怪 Gemini——PowerShell 的这个行为是 Windows 生态的历史包袱,任何 Agent 踩上去都会出事。怪的是我们给它的权限边界太宽了。

最终团队的选择是:Claude Code 仍然是主力(哪怕背着实名认证/封号的不确定性),Gemini CLI 暂时作为备胎,只在项目沙箱内跑、并等待它的生态跟上来。Agent 在进化,我们对 Agent 的信任模型也要跟着进化。这次教训的本质不是"Gemini 不能用",而是任何一个 Agent 第一天都不该拿到用户目录的通行证——就像你不会让新来的实习生第一天就拿 root 密码一样。

大家好,我是 Java陈序员

在工作学习中,经常需要翻阅外文资料,或者识别图片中的文字。翻译软件要么功能单一,要么需要注册付费,翻译、OCR、语音识别多个工具要来回切换,越用越繁琐,大大影响效率。

今天,给大家介绍一款开源的全能翻译和 OCR 工具,即开即用!

关注微信公众号:【Java陈序员】,获取开源项目分享、AI副业分享、超200本经典计算机电子书籍等。

项目介绍

STranslate —— 一款基于 WPF 开发的开源翻译 & OCR 工具,提供多翻译引擎接入、离线 OCR、划词/截图/剪贴板翻译等能力,轻量高效。

功能特色

  • 多引擎聚合翻译:集成 Yandex、Google、腾讯、金山词霸、DeepL、OpenAI 等多种翻译服务
  • 离线 OCR:内置微信 OCR 引擎,无需联网即可精准识别,支持图片翻译,智能还原排版
  • 划词交互:任意界面(网页、PDF、编辑器、软件)选中文字,按 Alt + D 一键翻译,配合静默翻译模式,实现即开即用
  • 高质量语音合成:集成 Edge TTS 高质量语音合成引擎,支持多国语言朗读,语速、音调可调
  • 丰富的插件系统:官方与社区提供丰富的插件,不仅限于翻译,更能拓展 TTS、OCR 及各类自定义服务

快速上手

1、打开下载地址

https://github.com/STranslate/STranslate/releases

2、下载安装包

3、运行安装包进行安装

4、常用快捷键

  • 划词翻译:Alt + D
  • 显示/隐藏主界面:Alt + G

功能体验

  • 文本翻译

  • OCR 识别

  • 服务设置

  • 插件市场

  • 热键设置

可以说,STranslate 是一款强大的效率工具,将翻译和 OCR 等功能结合在一起,无广告、不收费、即开即用,可以说是日常学习工作必备的一款工具!快去下载安装吧~

项目地址:https://github.com/STranslate/STranslate

最后

推荐的开源项目已经收录到 GitHub 项目,欢迎 Star

https://github.com/chenyl8848/great-open-source-project

或者访问网站,进行在线浏览:

https://chencoding.top:8090/#/

我创建了一个开源项目交流群,方便大家在群里交流、讨论开源项目

但是任何人在群里打任何广告,都会被 T 掉

如果你对这个交流群感兴趣或者在使用开源项目中遇到问题,可以通过如下方式进群

关注微信公众号:【Java陈序员】,回复【开源项目交流群】进群,或者通过公众号下方的菜单添加个人微信,并备注【开源项目交流群】,通过后拉你进群

大家的点赞、收藏和评论都是对作者的支持,如文章对你有帮助还请点赞转发支持下,谢谢!

大家好,我是 Java陈序员

在企业开发和日常项目中,文件存储、大文件上传、网盘管理是几乎每个系统都会遇到的刚需场景。从简单的附件管理,到复杂的分片上传、断点续传、多存储介质兼容,自己从零开发不仅成本高、周期长,还容易踩坑。

今天,给大家介绍一款开源文件存储管理系统,十分适合自建网盘!

关注微信公众号:【Java陈序员】,获取开源项目分享、AI副业分享、超200本经典计算机电子书籍等。

项目介绍

free-fs —— 一个基于 Spring Boot 4.x 的企业级文件管理网盘系统后端,专注于提供高性能、高可靠的文件存储和管理服务。

功能特色

  • 完整的文件管理能力:不仅提供上传、下载、预览、重命名、移动、复制等常见的文件管理功能,而且支持文件分享、回收站机制功能
  • 强大的大文件传输:支持分片上传、断点续传、秒传功能,并且支持通过 SSE 技术实时推送上传进度
  • 丰富的在线预览:提供强大的文件在线预览功能,包括图片、文档、音视频、压缩包等类型文件的预览
  • 插件化存储:支持插件化存储(SPI 热插拔),一键切换多种存储介质(本地、云存储等)
  • 企业级安全保障:集成 JWT 认证,基于 Sa-Token 实现细粒度权限控制,以及文件完整性校验

技术栈

  • 后端:Spring Boot 4.0.3 + MyBatis Flex + Sa-Token
  • 数据库:MySQL 8.0/PostgreSQL 14 + Redis
  • 前端:React + TypeScript + Vite
  • 存储:本地存储、阿里云 OSS、华为云 OBS 等

快速上手

环境准备

  • JDK 21+
  • MySQL 8.0+ 或 PostgreSQL 14+
  • Redis
  • Node.js 20.0.0+

服务端

1、克隆或下载项目源码

git clone https://github.com/dromara/free-fs.git

2、将项目以 Maven 的工程形式导入到 IDEA 中

3、创建数据库(MySQL 或者 PostgreSQL 选择一种)

  • MySQL

    CREATE DATABASE `free-fs` CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_general_ci';
  • PostgreSQL

    CREATE DATABASE free-fs ENCODING 'UTF8' LC_COLLATE='zh_CN.UTF-8' LC_CTYPE='zh_CN.UTF-8';

4、导入项目根目录下对应的 SQL 文件到刚创建的数据库中,初始化数据库数据

  • MySQL:_sql/mysql/free-fs.sql
  • PostgreSQL:_sql/postgresql/free-fs_pg.sql

5、修改 fs-admin 模块的 src/main/resources/application-dev.yml 中的数据库、Redis 连接信息

spring:
  datasource:
    type: com.zaxxer.hikari.HikariDataSource
    url: jdbc:mysql://127.0.0.1:3306/free-fs?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver
    # postgresql数据库配置
#    url: jdbc:postgresql://127.0.0.1:5432/free-fs?useUnicode=true&characterEncoding=utf8&useSSL=true&autoReconnect=true&reWriteBatchedInserts=true
#    username: postgres
#    password: postgres
#    driver-class-name: org.postgresql.Driver
  data:
    redis:
      host: 127.0.0.1
      port: 6379
      password:
      database: 0
注意:使用 MySQL 时,注释掉 PostgreSQL 配置,启用 MySQL 配置即可。两种数据库配置互斥,只能选择其中一种。

6、运行 fs-admin 模块下的主启动类 com.xddcodec.fs.FsAdminApplication 运行服务

前端

1、克隆或下载项目源码

git clone https://github.com/xddcode/free-fs-frontend.git

2、进入项目目录并安装依赖

cd free-fs-frontend

pnpm install

# 推荐使用 pnpm, 如未安装,可使用如下命令安装
npm install pnpm -g 

3、启动服务

pnpm run dev

4、服务启动成功后,浏览器访问

http://localhost:5173/
默认账号/密码:admin/admin.

功能体验

  • 首页

  • 文件管理

  • 文件传输

  • 文件预览

  • 文件分享

  • 云存储配置

  • 回收站

可以说,free-fs 是一款功能全面、技术先进、安全可靠的开源网盘解决方案。如果你需要快速搭建私有云盘或企业文件服务,它能极大减少开发成本,提供媲美商业产品的体验。快去试试吧~

项目地址:https://github.com/dromara/free-fs

最后

推荐的开源项目已经收录到 GitHub 项目,欢迎 Star

https://github.com/chenyl8848/great-open-source-project

或者访问网站,进行在线浏览:

https://chencoding.top:8090/#/

我创建了一个开源项目交流群,方便大家在群里交流、讨论开源项目

但是任何人在群里打任何广告,都会被 T 掉

如果你对这个交流群感兴趣或者在使用开源项目中遇到问题,可以通过如下方式进群

关注微信公众号:【Java陈序员】,回复【开源项目交流群】进群,或者通过公众号下方的菜单添加个人微信,并备注【开源项目交流群】,通过后拉你进群

大家的点赞、收藏和评论都是对作者的支持,如文章对你有帮助还请点赞转发支持下,谢谢!

AI Agent 使用体验 | JeecgBoot 团队将日常 Claude Code 工作流迁移到 Gemini CLI 的阶段性总结

为什么要换 Gemini CLI

JeecgBoot 低代码团队平时主力用 Claude Code 做代码生成、文档写作、重构脚本。但 Claude 最近实名认证 + 频繁封号的事闹得人心惶惶——身边已经有好几个账号莫名其妙被风控,工作流一断就是一整天。于是团队开始评估备胎方案,正好 Google 发布 Gemini CLI,社区反馈长上下文和推理都不弱,价格也比 Opus 亲民,就拉了一轮对比实测,看看能不能把关键工作流切过去。

不过换之前我们也有顾虑:Gemini CLI 生态比 Claude Code 小太多。Claude Code 发布一年多,围绕它沉淀的 skills、MCP、hooks、第三方工具、踩坑文章和中文教程已经是一个成熟的小生态;Gemini CLI 才出几个月,社区实践、skills 分享、配套脚本都还很稀薄,遇到问题得自己啃英文文档或者翻 GitHub Issues。对于重度依赖 skills 二次开发的团队来说,这个"生态代差"本身就是一个迁移成本——这也是为什么这次只做"能不能用"的小范围评估,而不是直接全量切换。

这篇文章只记录两件事:跑得通的部分,以及踩到的一个知名大坑

一、Skills 机制:一句话能跑的能力直接平迁过来了

Claude Code 的 skills 是团队日常工具链里最常用的一层(jeecg-codegen、jeecg-desform、jeecg-onlform、jimureport、jimubi-bigscreen 等等都是 skills 形式交付的)。换 Gemini CLI 之前最担心的就是这套东西能不能过去。

实测结论:skills 的 Markdown 格式 + 触发词机制,Gemini CLI 能识别和执行,而且一些高复杂度的"一句话"任务都能跑出来:

  • 一句话创建积木报表的分组报表和联动图表 —— 从 SQL 数据源绑定、分组字段配置,到联动图表的维度关联,它能一路走完
  • 一句话创建 Online 表单,并对接积木报表生成打印报表 —— 自动建表 → 配置表单字段 → 关联打印报表模板,流程打通
  • 一句话自动创建数据大屏 —— 组件布局、数据绑定、配色方案都自己搞定

对比维度拉一下:效果比 MiniMax 2.7、智谱 GLM 5.1 这一批国内模型明显更稳定,少数细节要调,但主线流程基本一次过。对于 JeecgBoot 低代码这种重度依赖 skills 的场景,Gemini CLI 的表现算是"可以放心交活"的水准。

二、命令执行能力:基本可用

日常开发里 Agent 跑 shell 命令是高频需求——git 操作、启服务、跑 pytest、做构建。这部分 Gemini CLI 也能胜任:

  • git add / commit / push 链式命令无问题
  • mvn clean installpnpm build 这种长时间任务,它能正确等待输出并根据返回码判定成功/失败
  • 需要管理员权限的操作(比如 Windows 下的 mklink)它会先说明,然后尝试执行

在这一轮里我们并没有感觉到"跟 Claude Code 有本质区别"。真正的分水岭出现在"自动安装 skills + 清理临时文件"这个环节——也是这次事故的起点。

三、一个 ~ 字符,把家目录递归删了

让 Gemini CLI 自动安装 skills 并清理临时文件,最普通的收尾任务。几分钟后看到一段道歉:

非常抱歉!这是一个极其严重的失误。
在"清理目录下临时文件"步骤中,我看到 ls 输出里有一个叫 ~ 的文件夹……

打开 C:\Users\zhang 一看——家目录里几十个 junction、Downloads / Documents、部分软件缓存目录全空了。

实际执行的命令:

Remove-Item -Path google_skills, temp_skills, "~" -Recurse -Force

它想删一个字面量叫 ~ 的文件夹,还特地加了双引号防展开——结果踩到 PowerShell 的经典陷阱-Path 会走 Provider 解析,~ 始终被展开成 $HOME,加不加引号都没用。只有 -LiteralPath./~ 才是字面量。

PowerShell 波浪号陷阱:引号并不能阻止 <code loading=~ 被展开为家目录" title="PowerShell 波浪号陷阱:引号并不能阻止 ~ 被展开为家目录">

换句话说,这条命令实际执行的是 Remove-Item -Path "C:\Users\zhang" -Recurse -Force——递归删除整个家目录。

这锅 Gemini 得背。 它自己在工作目录里生成了一个名为 ~ 的临时文件夹,这种命名本身就暴露了它对 Windows / PowerShell 生态不熟——任何一个有 Windows 经验的工程师都不会起这种文件名。生成了坑,又亲手跳进去,最后把用户家目录端了。AI Agent 执行破坏性命令时,后果被放大了几个量级。

四、几句总结

  • Skills 和基础命令执行:Gemini CLI 基本 OK,低代码团队的日常代码生成工作流可以平迁
  • 生态代差仍是硬伤:Claude Code 的 skills、MCP、社区教程积累更厚,Gemini CLI 目前仍以"能用"为主,还没到"顺手"
  • 涉及系统级 shell 操作时:注意 PowerShell 的 -Path 展开陷阱,尤其是 ~ 这种特殊字符
  • Agent 权限不是"开/关"二元问题:需要分级管理,关键目录必须走人工确认
  • 这次事故不能全怪 Gemini——PowerShell 的这个行为是 Windows 生态的历史包袱,任何 Agent 踩上去都会出事。怪的是我们给它的权限边界太宽了。

最终团队的选择是:Claude Code 仍然是主力(哪怕背着实名认证/封号的不确定性),Gemini CLI 暂时作为备胎,只在项目沙箱内跑、并等待它的生态跟上来。Agent 在进化,我们对 Agent 的信任模型也要跟着进化。这次教训的本质不是"Gemini 不能用",而是任何一个 Agent 第一天都不该拿到用户目录的通行证——就像你不会让新来的实习生第一天就拿 root 密码一样。