当前位置: 首页 > article >正文

从基础到高级:模块化RAG技术全览

模块化RAG技术路线图(Modular RAG Technical Map):从基础Naive RAG 到高级Advanced,再到Modular RAG全方位技术解读

1.RAG 产生

  • 为什么不直接使用 LLM
直接使用LLM的缺陷实际应用的需求
• 幻觉
• 信息过时
• 参数化知识效率低
• 缺乏专业领域的深度知识
• 推理能力弱
• 领域精准问答
• 数据频繁更新
• 生成内容可解释可溯源
• 成本可控
• 数据隐私保护
  • 检索增强生成(Retrieval-Augmented Generation,RAG)

  • LLM 在回答问题或生成文本时,先会从大量文档中检索出相关的信息,然后基于这些信息来生成回答。

  • RAG 方法使得不必为每一个特定的任务重新训练整个大模型,只需要外挂知识库。解决知识更新问题,减少幻觉,具有很好的可解释性。

  • RAG 模型尤其适合知识密集型的任务。(Knowledge-intensive tasks,在解决问题或完成任务时需要大量专业知识或特定信息的任务)

  • 其他优化生成的方式

  • 提示词工程(Prompt Engineering)

    标准 prompt 结构:指令 Instructions + 上下文 Context + 输入 Input data + 输出标识 Output indicator

    优化:

    • one-shot / few-shot,增加例子,优化模型指令遵循、输出格式等。
    • ReAct(Reasoning & Acting), XoT,模型输出 / 输入思考过程,发掘模型推理能力。
  • 微调(Fine-tuning)

需要准备高质量数据集进行训练,模型对领域知识 / 特定任务的理解更好,能够调整模型的输出风格,延迟较低。

  • 预训练阶段的 RAG

前面讲的是生成阶段的 RAG,实际上 RAG 最早应用在预训练阶段,下面是两个例子:

  • FID(Fusion-in-Decoder):arxiv.org/pdf/2007.01…

  • RETRO(Retrieval-Enhanced Transformer):arxiv.org/pdf/2112.04…

在预训练阶段引入了 CCA 段落交叉注意力模块,让小参数模型达到和大参数模型同等生成效果。

  • GPT3/ChatGPT 生成前,大部分研究在预训练和微调阶段,GPT3 发布之后更多研究聚焦在生成阶段。

2.RAG 技术发展

在这里插入图片描述

在这里插入图片描述

2.1 NaiveRAG

2.1.1 检索

关键词检索

各种方式对文档进行分词,通过诸如 BDK tree 等数据结构,将拆解出来的词元(token)进行倒排索引,在检索时也会对检索语句进行同样的分词处理,通过相同词元的匹配进行召回,再通过文本相关性的算法(如 TF-IDF / BM25 等)对结果进行打分排序,最终返回结果。

BM25 是一种广泛应用于信息检索和文本挖掘中的排名函数,用于评估文档与查询之间的相关性。BM25 基于概率检索模型,它通过利用查询中各个词项的出现频率(TF,Term Frequency)和词项在所有文档中的出现频率(DF,Document Frequency)来计算文档对于特定查询的相关性得分。出现频率越高的词分数越低。

向量检索
关键词向量
索引速度
索引大小中等
查询速度(大数据场景)较慢
缩放比例有限
精确匹配的精度完美较低
词元、词组搜索的精度精确较差
语义搜索的精度无法捕获较高

向量模型

  • CohereAI(最强)cohere.com

  • BGE(开源最强)

  • 索引

  • linear 索引是一种暴力检索的索引,查询时所有的数据都会参与计算,所以召回率最高,但是当数据量大时性能较差。

  • Qc(quantization clustering)是一种倒排聚类型索引,通过计算聚类中心点到向量的距离进行召回。在每个聚类下使用量化器对向量进行量化降低向量的精度,提升计算效率,但是对召回率有有一定的损失。

  • HNSW 是 Hierarchical Navigable Small World 的简称,是一种基于分层小世界图检索算法的向量索引,基于 “邻居的邻居大概率时邻居” 的 ANN 算法召回。HNSW 与 QC 相比,不需要经过多次调参即可获得比较好的召回率和查询性能。但是 HNSW 的索引大小要远大于 Qc,内存的开销也远大于 Qc。

  • 全量 Qc + 增量 HNSW:全量构建时选用性能较好的聚类算法,但是由于聚类增加点会产生中心点偏移,非常影响增量准确性,所以增量使用 HNSW 构建一个新的近似最近邻检索图,将两种检索结果 merge。

  • 参考内容:

Havenask为用户提供高性能、低成本、易用的搜索服务,同时具有灵活的定制和开发能力,可以支持算法的快速迭代,帮助客户和开发者量身定做适合自身业务的智能搜索服务,助力业务增长。

havenask.net/#/doc/v1-1-…

分段

为什么要做分段?

  • 长度限制:预训练的语言模型(如 BERT 或 GPT 系列)有输入长度的限制。虽然模型的上下文 token 数逐渐增大,但是模型倾向于理解开头和结尾,忽略中间的 Context
  • 提升检索效率:长文档通常需要更大维度的向量,模型部署、索引大小和计算市场都会增长。
  • 提高检索质量:更精确地定位到文本中与查询最相关的部分,减少噪声。通常基于字数 + 文档结构 + 语义进行分段

2.1.2 生成

大语言模型

本次大部分讲的都是在大语言模型的推理阶段,通过 prompt 中的 context 部分进行增强。

其他模型的 RAG

除了 Transformer 的,也有基于 LSTM、Diffusion、GAN 的大模型可以使用检索增强,例如:

  • Audio:RETRIEVAL-AUGMENTED TEXT-TO-AUDIO GENERATION arxiv.org/pdf/2309.08…
  • Video:Animate-A-Story: Storytelling with Retrieval-Augmented Video Generation arxiv.org/pdf/2307.06…
  • Code……

2.2 AdvancedRAG

上面是 Openai 分享的 RAG 准确率提升路径,可以看出只有检索 + 生成准确率只能达到 45%,为了提升准确率,AdvancedRAG 阶段对检索前中后三个阶段有不同的新方法。

2.2.1 检索前 Pre-Retrival

查询路由 Query Routing

Query Routing 决定需要查询的

(1)引擎,例如查询文档库,还是特定关系数据库。

(2)索引,查询时使用文档摘要索引,还是向量索引。

通常根据配置或者 llm 选择预定义好的检索路径。下面会介绍不同的 query 改写、检索方案,期望通过 queryrouting,将不同类型的 query 分流到适合的流程中。

查询改写 Query Rewrite(✨)

问题与答案并不总是拥有较高的语义相似度,对 Query 进行调整,获得更好的检索效果。

  • Sub-query:多跳问题、对比问题

对比问题:小张和小李的专业有什么共同点?

多跳问题:小张继承的别墅有几层楼?

  • RRR(Rewrite-Retrieve-Read) arxiv.org/pdf/2305.14…

引入改写模块,将对比问题进行拆解,生成适合关键词检索的 query。同时论文中收集最终生成结果的数据作为奖励模型,ft 了改写模型,让小参数的模型可以用于改写,提升改写的速度。

  • DSP(DEMONSTRATE–SEARCH–PREDICT)arxiv.org/pdf/2212.14…

将多跳问题进行拆解为子 query 进行检索和生成,并且在 context 中给模型输入所有 subquery 和检索结果,直到得出正确答案。

  • Multi-query:对于开放领域模糊问题,生成 multiquery 再剪枝TOC(Tree of Clarifications)arxiv.org/pdf/2310.14…

首先用原始的模糊问题(AQ)进行检索,使用检索结果 + 原始问题生成多个可能的清晰问题(DQi),使用清晰问题进行检索生成,将所有的答案汇总做最终生成。如果生成的 DQi 还是不清晰,会递归生成清晰问题(DQij),所以是 Tree of Clarifications。

  • 假设性生成:LLM 生成假设性问题再使用向量检索HyDE(Hypothetical Document Embeddings)arxiv.org/pdf/2212.10…

先使用模型生成假设性的答案,将答案和原始 query 一起进行向量检索。因为答案中包含更丰富的语义,所以会检索到单 query 检索无法召回的内容。

根据 HyDE 的思路,也可以对文档生成假设性问题,使用用户 query 对 Hypo-Query 做向量召回。

![外链图片

  • 找到复杂问题的上层概念 / 原理Step-Back prompting arxiv.org/pdf/2310.06…

「小美 2010 年在哪里上学」-> 「小美的教育经历」

  • Text-to-SQL:查询关系数据库
  • Text-to-Cypher:查询知识图谱
记忆 Memory
  • 短期记忆和 DST(Dialogue Status Tracking)用户在一个 session 下的会话,通常会根据时间或者 DST 方法来拆分 session。
  • 长期记忆
    • 记忆召回
    • 记忆总结
    • 生成用户画像

2.2.2 检索 & 索引构建

稀疏检索和稠密检索的结合
  • 使用混合索引(Hybrid Index)来存储文档。混合索引是一种同时包含词项索引(Term Index)和向量索引(Vector Index)的索引结构。词项索引用于存储文档中出现的词项及其频率等信息。向量索引用于存储文档经过深度学习模型转换后得到的向量。这样可以在查询时根据不同的需求选择使用词项索引还是向量索引。

  • 使用双层检索(Two-stage Retrieval)来执行查询。双层检索是一种先使用词项索引进行粗排(Coarse Ranking),再使用向量索引进行精排(Fine Ranking)的查询方法。粗排用于从海量文档中快速筛选出一批候选文档。精排用于从候选文档中进一步筛选出最相关的文档。这样可以在保证查询效率的同时提高查询质量。

  • 使用多路检索(Multi-stage Retrieval)来执行查询。多路检索是一种使用多个不同类型或来源的索引进行检索,并将各个检索结果进行融合(Fusion)或重排(Re-ranking)的查询

  • BGE M3 - 内置 Hybrid Index

    • 同时集成了稠密检索、稀疏检索、多向量检索三大能力,一站式支撑不同语义检索场景(Multi-Functionality)

    • 支持超过 100 种语言的语义表示及检索任务,多语言、跨语言能力全面领先(Multi-Lingual)

    • 最高支持 8192 长度的输入文本,高效实现句子、段落、篇章、文档等不同粒度的检索任务(Multi-Granularity)

  • BGE模型网址:github.com/FlagOpen/Fl…

通用语义向量模型BGE-M3,支持超过100种语言,具备领先的多语言、跨语言检索能力,全面且高质量地支撑“句子”、“段落”、“篇章”、“文档”等不同粒度的输入文本,最大输入长度为 8192,并且一站式集成了稠密检索、稀疏检索、多向量检索三种检索功能,在多个评测基准中达到最优水平。

BGE-M3是首个集多语言(Multi-Linguality)、多粒度(Multi-Granularity)、多功能(Multi-Functionality)三大技术特征于一体的语义向量模型,极大提升了语义向量模型在现实世界的可用性。

  1. 多语言(Multi-Linguality)

BGE-M3训练集包含100+种以上语言,既包含每种语言内部的语义匹配任务(Language X to Language X),又包含不同语言之间的语义匹配任务(Language X to Language Y)。丰富且优质的训练数据帮助BGE-M3建立了出色的多语言检索(Multi-Lingual Retrieval)与跨语言检索能力(Cross-Lingual Retrieval)。

  1. 多功能(Multi-Functionality) 不同于传统的语义向量模型,BGE-M3既可以借助特殊token [CLS]的输出向量用以来完成稠密检索(Dense Retrieval)任务,又可以利用其他一般性token的输出向量用以支持稀疏检索(Sparse Retrieval)与多向量检索(Multi-vector Retrieval)。三种检索功能的高度集成使得BGE-M3可以一站式服务不同的现实场景,如语义搜索、关键字搜索、重排序。同时,无需使用多个模型进行多个推理,BGE-M3一次推理就可以得到多个不同模式的输出,无需额外开销,并能高效支持混合检索,联合三种检索模式可获得更加精准的检索结果。

  2. 多粒度(Multi-Granularity)

BGE-M3目前可以处理最大长度为8192 的输入文本,极大地满足了社区对于长文档检索的需求。在训练BGE-M3时,智源研究员在现有长文本检索数据集的基础之上,通过模型合成的方式获取了大量文本长度分布多样化的训练数据。与此同时,BGE-M3通过改进分批(batch)与缓存(cache)策略,使得训练过程具备足够高的吞吐量与负样本规模,从而确保了训练结果的质量。基于数据与算法双层面的优化处理,BGE-M3得以高质量的支持“句子”、“段落”、“篇章”、“文档”等不同粒度的输入文本。

分段优化
  • sliding window找到对于文档 + 向量模型最合适的分段长度,在无法使用文档结构切分的情况下,使用滑动窗口切分,保证每段语义完整。

  • small-to-big将相邻的段落合并,让上下文更连贯将较短的段落补充为较长的段落,让 prompt 中的语义更完整。

元信息抽取
  • 文档关键信息,例如发表时间、作者、标题,文档库信息。

  • 段落关键信息,例如多级标题、相关 query,summary,relatedQueries

  • 实体抽取

将抽取到的信息作为独立查询条件,或者加入向量化字段,提升检索效果。

KG 知识图谱在 RAG 中的应用
  • 使用 KG 增强文档结构表达和检索(Knowledge Graph Prompting for Multi-Document Question Answering)arxiv.org/pdf/2308.11…

  • 使用 LLM 抽取实体创建图谱,检索子图检索过程:

(1)搜索 Query 中相关的实体,获取这个实体(默认 2 层)的子图,根据子图生成 Prompt 的 context【噪声多】

(2)通过 NL2Cypher 生成 query 查询 KG【可能没有结果】

(3)将两种召回结果合并

2.3 检索后 Post-Retrieval

重排

为什么要重排:检索阶段为了处理大量数据,使用聚类或者 ANN 近似最近邻算法,使用的向量模型会有性能考虑,不能保证精确度,所以需要重排来提升检索精准度。

打分方式:除了使用相关性模型(cohere/bge)外,还会结合传统的检索分数(BM25)或自定义的特征(文档质量分、点击量)综合评分。测评结果:

此外还有一些其他适应 LLM 的 reranker,例如 haystack 的:

  • Diversity Reranker:选择最相关的文档,然后选择剩余文档中与已选择文档中最不相关的。让模型生成更有广度和深度。
  • LostInTheMiddleReranker: [1 2 3 4 5 6 7 8 9 10] -> [1 3 5 7 9 10 8 6 4 2]

Prompt 优化

  • prompt 信息压缩,可以用 NLP 小模型做,减少上下文长度和噪声。
  • 根据不同场景选择 prompt 模板。

2.4 ModularRAG

随着 RAG 领域发展和更多工程上的应用,RAG 框架需要更多加多样化和灵活,因此需要抽象为「模块化 RAG」。

模块增强 Augmented Module

链路增强 Augmented Process

modularRAG 阶段除了不断沉淀模块以外,还包括如何更好的组织这些模块进行生成。advancedRAG 阶段主要解决的问题是「检索什么内容」,modularRAG 需要解决「什么时候检索」的问题。以下是三种循环检索 - 生成的方式:

RecursiveRAG 请看前文介绍的 Tree of Clarification

IterativeRAG

arxiv.org/pdf/2305.15…

先用原始 query 检索生成,然后将生成结果 + 原始 query 进行第二轮检索生成,N 次迭代或 llm 判断可以回答问题后停止。

AdaptiveRAG
  • FLARE:模型生成低置信度 token 时停止生产,或者用 prompt 指示模型不确定时停止生成。用当前有疑问的语句生成问题进行检索,再根据检索到的内容继续生成。

  • Self-RAG:

    • fine-tune 模型,让模型理解什么时候需要检索。
    • 当模型认为需要检索,生成特殊的 token。
    • 此时停止生成,根据生成的新问题检索。
    • 用模型对生成结果进行评判,将选择的最优生成结果作为 context 继续生成。

3.RAG 评估

3.1 检索评估:评估查询检索到的文本块的质量

medium.com/relari/a-pr…

纯检索指标

  • 精准率(Precision):衡量信号与噪音的比例——检索到的相关文档 / 所有检索到的文档。
  • 召回率(Recall):衡量完整性——检索到的相关文档 / 所有相关文档。我们认为召回率是检索领域的北极星指标。这是因为只有当我们有足够的信心,相信检索到的上下文完整到足以回答问题时,检索系统对于生成任务来说才是可接受的。
  • F1 分数:精确率和召回率的调和平均值。

检索 & 重排指标

  • 平均倒数排名(Mean Reciprocal Rank, MRR): MRR 计算的是最相关文档的倒数排名的平均值。如果正确答案的排名是高的(即排名接近第一位),则倒数值会大。MRR 值的范围是 0 到 1,值越高表示检索系统性能越好。
  • 平均精确率均值(Mean Average Precision, MAP): MAP 首先计算每个查询的平均精确率,然后对所有查询的平均精确率进行平均。这里的 “精确率” 是指在每个排名阶段检索到的相关文档数量占到目前为止所有检索到的文档数量的比例。MAP 考虑了所有相关文档,并且对检索结果的排序非常敏感,值越高,表示检索系统的排名性能越好。
  • 归一化折损累计增益(Normalized Discounted Cumulative Gain, NDCG): NDCG 倾向于赋予排在前面的相关文档更高的权重,是一种位置敏感的度量方法。NDCG 先计算一个未经归一化的折扣累积增益(Discounted Cumulative Gain, DCG),然后用这个值除以一个理想状态(即最佳排名顺序)下的 DCG,从而得到归一化的值。NDCG 的值范围在 0 到 1 之间,越接近 1 表示检索性能越佳,特别是在前面几个结果的质量方面。

在这里插入图片描述

大模型&AI产品经理如何学习

求大家的点赞和收藏,我花2万买的大模型学习资料免费共享给你们,来看看有哪些东西。

1.学习路线图

在这里插入图片描述

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

2.视频教程

网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己整理的大模型视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。

在这里插入图片描述

在这里插入图片描述

(都打包成一块的了,不能一一展开,总共300多集)

因篇幅有限,仅展示部分资料,需要点击下方图片前往获取

3.技术文档和电子书

这里主要整理了大模型相关PDF书籍、行业报告、文档,有几百本,都是目前行业最新的。
在这里插入图片描述

4.LLM面试题和面经合集

这里主要整理了行业目前最新的大模型面试题和各种大厂offer面经合集。
在这里插入图片描述

👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
在这里插入图片描述

1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集

👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

在这里插入图片描述

大模型&AI产品经理如何学习

求大家的点赞和收藏,我花2万买的大模型学习资料免费共享给你们,来看看有哪些东西。

1.学习路线图

在这里插入图片描述

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

2.视频教程

网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己整理的大模型视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。

在这里插入图片描述

在这里插入图片描述

(都打包成一块的了,不能一一展开,总共300多集)

因篇幅有限,仅展示部分资料,需要点击下方图片前往获取

3.技术文档和电子书

这里主要整理了大模型相关PDF书籍、行业报告、文档,有几百本,都是目前行业最新的。
在这里插入图片描述

4.LLM面试题和面经合集

这里主要整理了行业目前最新的大模型面试题和各种大厂offer面经合集。
在这里插入图片描述

👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
在这里插入图片描述

1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集

👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

在这里插入图片描述


http://www.kler.cn/a/309082.html

相关文章:

  • Jetpack 之 Ink API初探
  • Axure设计之文本编辑器制作教程
  • Spring Boot 2.x 和 Druid 多数据源整合 dm
  • HBase理论_背景特点及数据单元及与Hive对比
  • 【Vue】Vue3.0(十九)Vue 3.0 中一种组件间通信方式-自定义事件
  • 【网络工程】计算机硬件概述
  • 【云原生监控】Prometheus之Alertmanager报警
  • 线性基速通
  • 哪款宠物空气净化器是除浮毛王者?希喂、范罗士、霍尼韦尔宠物空气净化器实测
  • 爬坑--docker构建容器ssh连接容器环境变量会发生变化
  • Redis的IO模型
  • 计算机网络分层结构解析:OSI与TCP/IP模型
  • Blender渲染太慢怎么办?blender云渲染已开启
  • 在设计开发中,如何提高网站的用户体验?
  • Qt开发技巧(四)“tr“使用,时间类使用,Qt容器取值,类对象的删除,QPainter画家类,QString的转换,用好 QVariant类型
  • Vite项目中eslint的简单配置
  • Amazon 正式官宣取消居家上班(WFH)
  • Ubuntu apt 命令全面讲解
  • 行业机遇!程序员:如何选择适合自己的就业方向?
  • linux--防火墙
  • 【Android】处理线程中未捕获的异常
  • python加载chgcar, aeccar压缩数据
  • FRP之简单粗暴官方搭建【超详细教程】【排坑】【包括官网下载地址】【伸手党福利】
  • 容器镜像同步工具image-migrator
  • 第14章 存储器的保护
  • Linux网络子系统TCP篇 二