Telegram Channel
记录和分享有趣的信息。

Record and share interesting information.

contact: [email protected]
Laisky's Notes
Retrieval_Augmented_Generation_for_Large_Language_Models_A_Survey.pdf
https://laisky.notion.site/Knowledge-Retrieval-Takes-Center-Stage-0583843afb0940cbafc4ce34805a761c?pvs=4

之前分享的那篇论文是对 RAG 的综述。而目前的一个研究方向则是更进了一步,提出了 RCG 的概念。

RAG 是利用 retrieval data 增强 LLM 的能力。而 RCG 则是摒弃 LLM 的内生知识,完全使用 retrieval data 来生成答复。

在 RAG 时代,人们认为 LLM 越大越好,内嵌的知识越全面,对 retrieval data 的利用也就越充分。
但是在 RCG 时代,小型 LLM 也能够取得和大模型相媲美的性能,甚至更好。小模型不再专注于大而全的信息原文,而是专注于对信息抽象认知模式的学习和推理。对于 retrieval data,RAG 的理解能力依赖于 pre-training 数据集和外部数据的重叠。而 RCG 更强调于对未知数据(unseen data)的抽象认知能力。

用人来打比喻,RAG 时代就是一个能力平平但是善用网络的懂王,而 RCG 则是试图塑造一位天资聪颖的人才。 Knowledge Retrieval Takes Center Stage | Notion
帮各位踩个雷,无意中发现了 aihubmix 这个项目,号称可以用 3.5人民币/美元 的低价购买 openai apikey。我去简单看了下,网页就是 oneapi 套皮,后端接口都没改。然后发现一个很严重的问题是这家的模型计费可能存在欺诈,tokens 计算严重偏高,你以为你买了便宜,实际上每次调用都在黑你。
https://youtu.be/dLr--F1Ubko?si=xFcT5fbEU_suzwzr

20 世纪是战争的世纪,第一次世界大战中的各大工业帝国制造了无数的化学炸弹,这些数以千万计的弹药在停战后就失去了用处,其中很大一部分都被直接扔进了海中。

加拿大东部沿海看上去是一片地广人稀的自然胜地。然而因为离欧洲大陆近,在一二战中都是重要的弹药补给线。所以结果可想而知,停战后大量的弹药被直接倾倒进了加拿大东海岸的海洋之中。

这是一个被发现的海洋生物武器抛弃点地图
* https://www.google.com/maps/d/viewer?mid=1NlZ-8xtlviMJ2teJ6hbNKP-9xeU&hl=en_US&ll=46.72459689123628%2C9.221260154931457&z=3
* https://www.google.com/maps/d/viewer?ll=4.967005034105531%2C0&z=2&mid=1ALnyOrN5JQ8H50znwJqI_Sj8IwE

冷战的核军备产生了巨量的核废料,苏联拥有世界上最大的核潜艇舰队,神奇的是这些舰队几乎不产生核废料。不难想象平均每艘船所产生的数百吨核废料都被扔进了哪里。

即使到了现代,以沉船为幌子的排污活动依然非常猖獗。曾经有一艘没能“顺利沉没”的船飘到意大利,人们发现上面竟满载着核废物。

索马里常年内乱,海盗猖獗。据当地的 NGO 救助人员表示当地人出现了很高概率的畸形和癌症,认为这是由于大国趁机往索马里海岸排放高毒性污染物导致的。
https://laisky.notion.site/Prompt-injection-What-s-the-worst-that-can-happen-f149c87d948b449fa3d62fd7e99217c6?pvs=4

很有趣的文章,介绍了常见的 LLM prompt injection 攻击案例。任何会接受外部信息的 LLM 都可以被外部攻击者操作。尤其当这个 LLM 具有 function calling/tools/agents 能力时,相当于也为外部攻击者赋予了这些强大的能力。首当其冲的就是各种基于 RAG 的应用,retriever 获取的内容都可以成为攻击者手中的利刃。

作者在此文以及他的其他文章中屡次表达出悲观的态度,认为 LLM 的 prompt injection 不可避免,我们只能接受这个前提,然后小心谨慎地设计我们的应用。

配图是一个经典的 indirect prompt injection 例子,在网页中插入肉眼不可见的内容,来误导 bing chat 的自动答复。
最近几天都在读这篇论文,关于 LLM RAG 方法的综述。总结了 RAG 技术的发展脉络和应用、评估方法。此文的优点在于非常全面,从预训练、fine-tuning 到 inference 的 RAG 流程都探讨到了。

附件的 pdf 里我对比较重要的信息做了标注和笔记,改天有空水篇博客整理一下🐦

整理了一个 slide: https://s3.laisky.com/public/slides/LLM-RAG.slides.html#/
Retrieval_Augmented_Generation_for_Large_Language_Models_A_Survey.pdf
5.7 MB
https://laisky.notion.site/Metrics-for-Information-Retrieval-and-Question-Answering-Pipelines-d5d4e3beb820419ca494596e319befcf

一个笔记,用于度量 LLM RAG Retriever 性能的常用指标。包括 HR, Recall, Precision, MRR, mAP, NDCG, EM, F1 Score, SAS。

Ps. Retriever 也有寻回犬的意思,负责叼回猎物,在 RAG 里则是负责找回有用的附加信息。 Metrics for Information Retrieval and Question Answering Pipelines | Notion
https://youtu.be/V3BafEiqSFg?si=M0sZ9F4tLA5cSzad

最近看了部关于欧美核聚变研究的纪录片,其中一位科学家声称,预计 2035 年可以商业化,2040 年可以全球化。掐指一算,正好我小孩 20 岁步入社会的时候,世界上已经有无限的能源供给了,亦或说,无限的算力。

顺带一提核裂变,越来越多的人认为核裂变发电站是人类走的一条歧路,人总是会犯错的,而裂变站的每一次事故所造成的代价都是无法承受的,法国核能安全研究院估算每一次核事故会造成 3000~15000 亿欧元的损失。而且核裂变发电站的核废料处理也是一个难题。日本福岛核事故对欧美的冲击也是巨大的,毕竟日本人在欧美人心目中一直是“匠人精神”的代表,如果连日本人都搞不定核裂变,那么人们也就很难再相信它了。

但是在聚变等次世代技术真正成熟以前,核裂变是唯一清洁的稳定发电源(地热能、水能也是清洁的稳定能源,但是需要地理条件)。这可能就是人类能源史上的一次阵痛吧。
https://x.com/qq3qiyu/status/1737728033384206710?s=20

看到有人讨论 python requests 的 timeout 问题,简而言之就是发现 requests 的总耗时会超过你设置的 timeout。

其实原理很简单,requests 支持两种 timeout:

* connect timeout: 建立连接的超时时间
* read timeout: 服务端每次响应的超时时间

默认情况下,timeout 设置的是 connect timeout + read timeout,你也可以通过 tuple 的形式分别设置。

需要注意的是,requests 并不支持 total timeout,就是实际上你没法控制这个 requests 请求总共会花多长时间。举一个极端的例子,如果这个服务端总能在每隔 read timeout 内回复点数据,那么这个请求实际上可以耗费无穷长的时间。

requests 官方的解释是,市面上已经有其他控制 total timeout 的包了,requests 没必要再做一个。这个第三方包就是 https://github.com/pnpnpn/timeout-decorator ,它通过设置 ITIMER_REAL 信号来实现对函数总耗时的控制。但是这个包仅支持主线程。

如果你使用 asyncio,那么 asyncio.wait_for 可以很轻松地为 coroutine 设置总耗时。aiohttp 的 timeout 看上去也是 total timeout。

注意:asyncio.wait_for 只是停止等待,杀 coroutine 需要另外手动处理(task.cancel())。被杀的 coroutine 也需要经常通过 await asyncio.sleep(0) 检查自己有没有被杀。
https://laisky.notion.site/The-quantum-state-of-a-TCP-port-29b94af7bedf49beb958045c3c1dbc02

很有趣的关于 linux 上 TCP 本地端口自动分配的文章。

虽然理论上,TCP 连接只要求 (src_ip, src_port, dst_ip, dst_port) 的四元组不同,但实际情况复杂得多,即使使用了 SO_REUSEPORT 也不能保证本地端口一定能被复用,而且虽然 bind(2)/connect(2) 都支持自动分配本地端口,但对应的却是不同的处理逻辑。

这其中的逻辑错综复杂,以至于作者在文章标题中将其戏称为“量子态”。
结论:推荐使用 IP_BIND_ADDRESS_NO_PORT & bind(2) 的方式绑定端口,可以最大化本地端口重用的概率。 The quantum state of a TCP port | Notion
Telegram Channel