肖恩技术周刊(第 30 期):2024的尾声
周刊内容: 对一周内阅读的资讯或技术内容精品(个人向)进行总结,分类大致包含“业界资讯”、“技术博客”、“开源项目”和“学习资源”等。
更新时间: 周一
历史收录: 技术周刊合集
订阅方式: 微信公众号“肖恩聊技术”,除周刊外还有更多原创技术博文,欢迎关注👏🏻~
开篇图
2024就要结束了,大家年初定的目标都完成了吗?俺今年达成了新“五子登科”中的第四子——孩子,就差一个票子了。不过最后这个难度太大,不知道什么时候才能俱全。
业界资讯
DeepSeek-V3 首个版本上线并开源
DeepSeek-V3 首个版本宣布正式上线并同步开源,用户可登录 chat.deepseek.com 进行使用。
API 服务已同步更新,接口配置无需改动。当前版本的 DeepSeek-V3 暂不支持多模态输入输出。模型 API 服务定价将调整为每百万输入 tokens 0.5 元(缓存命中)/2 元(缓存未命中),每百万输出 tokens 8 元。
根据介绍,DeepSeek-V3 为自研 MoE 模型,671B 参数,激活 37B,在 14.8T token 上进行了预训练。“多项评测成绩超越了 Qwen2.5-72B 和 Llama-3.1-405B 等其他开源模型,并在性能上和世界顶尖的闭源模型 GPT-4o 以及 Claude-3.5-Sonnet 不分伯仲。”
维基百科2024年大事记
维基百科发布的2024年大事记,内容很多建议阅读原文。
人类最快探测器与太阳上演最近距离接触
帕克太阳探测器(PSP)创造了历史,首次到达距离太阳表面仅610万公里的地方,以192公里每秒的速度飞越近日点,刷新了人造物体的最高飞行速度记录。PSP的主要目标是观测太阳日冕,收集数据以深入了解太阳风的起源和演化。探测器自主控制飞跃,预计NASA将在12月27日收到返回信号。PSP是人类历史上飞行速度最快的航天器,也是首个接触太阳的航天器,以天体物理学家尤金·纽曼·帕克命名,携带四种仪器研究磁场、等离子体和高能粒子。探测器采用厚碳复合材料防护罩,可承受近1377摄氏度的高温。PSP依靠金星重力辅助降低轨道近日点,已完成多次飞跃金星和近日点的操作,取得了多项科学发现。
技术博客
RAG七十二式:2024年度RAG清单
2024年,RAG领域的发展呈现出多样化的趋势,涉及从年初的ModularRAG和GraphRAG到年末的图表理解、多模态RAG等多个方向。文章提供了一个全面的概览,包括系统介绍、论文摘要和项目链接,旨在帮助读者快速掌握RAG的最新进展。以下是核心内容的简洁总结:
文章首先介绍了GraphReader,这是一个基于图的智能体系统,通过构建知识网络处理长文本,有效解决了“迷路”问题。接着,探讨了MM-RAG,这是一个多模态机器学习系统,强调了在推荐系统、虚拟助手等领域的应用前景。
CRAG通过轻量级检索评估器和网络搜索改进检索文档质量,提升了生成文本的准确性和可靠性。RAPTOR引入了递归嵌入、聚类和总结文本块的方法,构建具有不同总结级别的树,以检索整合信息。
T-RAG结合了RAG与微调的开源LLM,使用树结构表示组织内的实体层次结构,解决了数据隐私问题。RAT在生成初始思维链后,利用检索信息逐个修订每个思维步骤,提高了长时生成任务的性能。
RAFT提高了模型在特定领域内“开卷”环境中回答问题的能力,通过训练模型忽略无关文档,并逐字引用相关文档。Adaptive-RAG根据查询复杂程度动态选择最适合的检索增强策略,平衡迭代式和单步检索增强型LLMs。
HippoRAG是一个新颖的检索框架,灵感来源于人类长期记忆的海马体索引理论,实现对新经验的知识整合。RAE检索经过编辑的事实,通过上下文学习优化语言模型,提高编辑准确性并减轻幻觉问题。
RAGCache为RAG量身定制的多级动态缓存系统,组织检索到的知识中间状态,最小化端到端延迟。GraphRAG基于图的文本索引构建,推导出实体知识图,预生成社区摘要,整合成完整答案。
Java程序中的潜在危机: 深入探讨NullPointerException
本文探讨了Java中NullPointerException(空指针异常)的复杂性和处理机制。文章首先回顾了空引用的历史,由Tony Hoare在ALGOL W语言中引入,并被Java继承。Java虚拟机(JVM)并不主动检测空引用,而是通过类似Try-Catch的机制,在空引用发生时抛出异常。在操作系统层面,Linux使用SIGSEGV信号处理无效内存访问,JVM通过捕获此信号来识别NullPointerException。
文章进一步讨论了JDK在减少NullPointerException方面的改进。JDK8引入了Optional类,以更安全的方式处理可能为null的值。从JDK14开始,NullPointerException的错误信息更加详细,帮助开发者快速定位问题。然而,使用信号量来处理空引用存在性能风险,尤其是在JNI代码中捕获SIGSEGV信号可能会干扰JVM的异常处理机制。总体而言,尽管NullPointerException是Java中的常见错误,但其背后的处理机制体现了JVM的设计哲学和操作系统层面的复杂交互。
揭秘 git 子模块(英文)
本文旨在阐明git子模块的工作原理和使用技巧。子模块是嵌套在另一个仓库中的完整仓库,它们总是指向特定提交,且git不会自动更新子模块。文章通过实例演示了不理解子模块可能导致的问题,并详细解释了git如何通过树对象指向子模块的特定提交来跟踪它们。
文章强调了理解git diff在子模块中的含义的重要性,并指导如何更新子模块。介绍了关键的子模块命令,如git submodule add添加子模块,git submodule update更新子模块,以及git submodule init初始化子模块。还提到了git submodule update --recursive用于递归更新所有子模块,以及git config submodule.recurse true设置自动更新子模块。
最后,文章讨论了.gitmodules文件,它记录子模块的基本信息,如URL,并可指定子模块跟踪的分支。作者希望读者通过本文能够消除对git子模块的困惑,并能有效地使用它们。
开源项目
univer:文档编辑软件全栈框架
Univer是一个全栈框架,用于跨 Web 和服务器创建和编辑电子表格、文档和幻灯片。
h5-Dooring:H5低代码平台
H5-Dooring是一个强大的、开源的、免费的H5视觉页面LowCode平台,旨在让H5制作像搭积木一样简单, 轻松搭建H5页面, H5网站, PC端网站。
PowerToys:Windows实用工具集
PowerToys是微软提供的一套工具,用于优化和简化Windows体验,以提高生产力。
工具推荐
OldMapsOnline:世界历史地图集
OldMapsOnline是一个提供历史地图的平台,用户可以通过它来探索和浏览不同时期的地图。
逗逗:AI游戏伙伴
逗逗是一个提供AI游戏伙伴的平台,旨在为用户提供懂游戏更懂你的AI伙伴。
cobalt:简洁的媒体下载器
Cobalt是一个媒体下载器,旨在简化下载公共内容的过程,不包含任何广告或追踪器,强调用户友好和高效。用户只需粘贴链接即可下载文件,Cobalt不缓存任何内容,类似于一个高级代理。
学习资源
anthropic-cookbook:Claude使用指南
提供了代码和指南,帮助开发者使用人工智能工具Claude。
随便看看
2024年AI盘点:投资高歌猛进、基础设施重构、技术采用加速
2024年AI领域发展迅速,投资和并购活动频繁,特别是在基础设施和基础模型层。AI技术栈的各个层面均取得显著进步,AI在企业中的应用开始显现实际投资回报,特别是在代码生成、客户服务和搜索方面。随着AI智能体的普及,AI技术的应用范围将进一步扩大。
AI基础设施经历重大改造,推理需求因多模态应用和模型架构演变而增长。模型开发从大型预训练模型转向更小、更专业的模型,以提高效率和灵活性。AI投资持续增长,但需注意投资者的高期望可能与市场现实不符。
AI的快速采用引发监管、版权和知识产权等问题的讨论。全球范围内,AI被视为主权问题,各国关注AI生态系统的区域化发展。AI技术的发展和应用正成为全球竞争的新焦点。
编程十年的感悟
作者对自己十年编程生涯的深刻反思。作者从C语言起步,经历了技术变迁,强调了持续学习的重要性。他提到,英语是获取最前沿技术的关键,也是国际交流的桥梁,对职业发展至关重要。并提倡独立思考,不要盲目听从他人,而应形成自己的见解。他建议先快速实现最小可行产品,让用户尽早体验,而不是一开始就追求完美。在选择工具时,作者认为最顺手的工具才是最好的,不必过分追求所谓的“最好”。他分享了自己从孤傲到主动交流的转变,认识到人际关系对职业发展的重要性。作者提醒,代码只是工具,不是万能的,程序员也需要学会营销自己。他强调与优秀同事共事的重要性,可以提升技术能力和建立高质量人脉。最后,作者提醒注意身体健康,因为编程工作可能导致职业病。总的来说,作者认为程序员的核心竞争力在于解决问题的能力,而不仅仅是编写代码。
长期软件开发(英文)
文章探讨了长期软件开发的关键要素。他强调了减少依赖、重视测试、控制复杂性、编写简单代码、谨慎选择技术、重视日志记录和性能监控、详细文档记录、保持团队稳定以及考虑开源的重要性。作者认为,长期项目应严格限制依赖,因为依赖可能会随时间变化而带来风险。他提倡编写易于理解和维护的代码,避免过早优化,并定期重构以保持代码简洁。技术选择应基于实际需求而非流行趋势,并且要对新技术持谨慎态度。良好的日志记录对于解决长期运行软件中的问题至关重要。文档不仅应涵盖代码,还应包括设计哲学和决策背后的“为什么”。团队稳定性对于项目成功至关重要,应通过雇佣和培养员工来保持。如果可能,开源可以提高代码质量并促进项目透明度。最后,定期检查依赖项的健康状态,以提前发现并解决问题。这些建议旨在帮助软件项目在长期内保持可维护性和稳定性。