前言

2025,崭新的一年。2025年会把大部分精力投放到AI相关的学习,应用上面。I believe AI will change the world.

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学习路线(持续更新)

整理一下自己的AI学习路线,方便后续回溯,也可以给别人一个学习参考

前置准备

  • 有一个好的生产工具,效率翻倍,这里推荐Mac+配套显示器
  • 使用Chrome,国内用户自查使用方式
  • 使用Github,了解前沿的技术,同时很多开源的模型都可以在这里找到

阅读全文

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

    阅读全文