2025,崭新的一年。2025年会把大部分精力投放到AI相关的学习,应用上面。I believe AI will change the world.
RAG论文阅读:Searching for Best Practices in Retrieval-Augmented Generation
这篇论文提供了一个RAG实践的框架,介绍了在RAG pipline中每个阶段该如何进行优化。通过这篇论文,可以了解到RAG在检索和生成阶段的核心细节,有助于加深对RAG的了解,为今后的实现提供了一定的指导意义。
RAG论文阅读:Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks
作为RAG领域的经典论文,这篇论文核心讨论了RAG模型,文中提到了RAG-序列模型和RAG-token模型以及其核心原理。同时实验对比了RAG和现有的BERT等在NLP多个任务中的表现,表明了RAG模型的可行性和优越性。接下来,将针对论文核心部分做个人学习总结。
MySQL索引
- 索引的分类
- 哈希表
- 哈希表是提供一种k-v形式的存储数据结构,通过指定key,可以快速取到对应的值,哈希表核心是需要定义好哈希函数,确保映射的唯一性。但是局限是只适用于等值查询的场景,而且哈希函数不好定义。另外哈希表的查询性能也不是很好,只能通过逐个遍历检索数据。
- 二叉树
- 二叉树是一种常见的数据结构,从树根出发,对于树上的每个节点,节点左边的值比当前小,节点右边的值比当前大。为了维持logn的复杂度,就需要利用平衡二叉树,不然树状结构会退化为链表结构。
- 对于大量数据的情况,二叉树的高度也会很高,查询一次数据可能需要进行多次IO操作,性能无法稳定保障。
- B树
- B树就是一个树的节点下可能有多个子节点,节点之间有严格排序规则。B树在新插入数据的时候可以保持自平衡,保障树的高度是最小的,以减少查询数据的IO操作。MYSQL的B树非叶子节点也可以存储着数据。
- 在数据库中,B树很不稳定,有的时候索引可能命中的非叶子节点,IO次数少,有的时候可能是命中的叶子索引,IO次数多,这样无法保证性能的稳定。同时在范围查询的时候,B树实现起来成本也高,数据可能落于不同的节点下面,导致需要多次进行磁盘IO。
- 在有数据变更的时候,树的结构可能会动态调整以保证高度的平衡,树结构的调整会导致出现页分裂或者页合并的情况,同时有可能会往更深层节点进行传递,数据库性能有所影响。
- B+树
- 作为B树的改良版,B+树非叶子节点只会存储指针信息,叶子节点才会存储索引数据。同时叶子节点之间还有指针串联起来。这样能确保所有的索引只会落于叶子节点,以保证性能的稳定,同时由于叶子节点之间有指针连接,所以在范围查询的时候,只需要找到范围起点,然后按照指针进行遍历,就可以快速进行范围检索,无需再次进行IO操作。
- 对于页分裂的场景,B+树一般只会发生在叶子节点之间,不会向更深层节点传递。
- 哈希表
prompt修炼手册
prompt在我们和大模型交互过程中扮演着很重要的一环。简单理解就是GPT是一个知识宝库,我们需要用prompt去告诉大模型我们的诉求,大模型会根据对prompt的理解,生成对应的内容,这里我们通过输入框输出的信息就是我们常说的prompt了。但是prompt的质量也影响着信息生成的质量,学习如何写好prompt对GPT的使用将会大有裨益。
AI学习路线(持续更新)
RAG学习(一)
RAG,英文全称“Retrieval-Augmented Generation”,是一种将信息检索和生成模型相结合的人工智能技术。在信息生成的过程中,利用外部的知识库和文档检索相关的信息,从而提升结果的准确率和可靠性。
RAG的核心分为两步:
- 检索:从知识库(数据库,文档或者网页)上找出对应的数据片段,通常通过一个检索模型实现。
- 生成:将问题和检索到的内容结合起来,生成答案。通过了解大模型训练的基础原理可以知道,模型的训练一般都是在有限的数据下完成的,为了生成具有事实性质的内容等,通常还需要通过额外的干预方式进行二次处理,确保输出更加准确和具体的信息。
针对AI+code的一些个人思考
最近一个月,使用了市面上的一些AI相关的软件,比如字节的MarsCode或者是Github的copilot。个人感觉确实提升了工作效率,可以帮助解决一些重复性的开发工作,但是这个过程中也发现了一些问题:
- AI生成的代码质量参差不齐,有的甚至是错误的,需要自己进行二次确认;
- AI的使用场景有限,只能解决一些简单的问题,不能解决相对复杂的问题;
- AI生成的代码和人的意图可能存在差异,需要通过prompt不断地微调;
当然,这些问题我相信开发者也知道,而且当前的问题应该远远不止于此。不过,随着技术的不断进步,我相信这些问题会慢慢得到优化。
以上是我近期使用的吐槽,不是本次行文的重点,这篇文章,想思考的是AI+编程的未来是怎么样的呢?
MIT 6.824 lab2
实验背景
- 在大部分分布式场景中,往往采用的是多个不同的节点共同运作一个系统,大部分采用的是一主多从的方案,即一个主节点(Leader),多个从节点(Follow)节点。主节点承担着响应客户端请求的职责,主节点需要将数据备份给从节点,防止数据丢失等。然而,集群的运作往往意味着可能出现的不一致问题,本次我们研究讨论的raft算法就是为了解决分布式场景下的一致性问题。
- raft算法是一种一致性算法,相对于比较经典的分布式算法Paxos算法,raft算法比较简单,相对更加容易理解,同时实现成本比Raft算法更低。
- 实验详细说明参照:https://pdos.csail.mit.edu/6.824/labs/lab-raft.html
- 实现代码: https://github.com/Peterliang233/MIT-6.824/tree/main
MIT 6.824 lab1
实验背景
- https://pdos.csail.mit.edu/6.824/labs/lab-mr.html
- 使用Golang利用RPC的方式实现MapReduce操作,通过搭建一个分布式集群,使用一个master来分发不同的任务,不同worker来共同获取任务并执行
- 实现代码:https://github.com/Peterliang233/MIT-6.824