RAG 技术的通俗理解
RAG(Retrieval-Augmented Generation)由两部分构成:
检索增强
(RA)和生成(G)。其核心思想是在生成答案前,先通过检索相关文档或知识库,将检索到的内容与问题结合,再生成更准确的回答。
**检索增强(RA)的作用
RA 部分通过计算问题与文档的相似度,从海量数据中筛选出最相关的片段。这种方式避免了单纯依赖模型记忆的局限性,确保回答基于最新或特定领域的知识。
生成(G)的优化
生成部分在获取检索内容后,将其与问题结合,生成更精准、上下文相关的回答。相比直接生成,RAG 能减少幻觉(hallucination)问题,提高可信度。**
实际应用示例
以图书答疑为例:
情景 1(无检索增强)
**读者问:“书里提到‘认知失调理论’,能解释一下吗?”
答疑者不知道具体是哪本书,仅凭自身知识回答,可能遗漏书中特有观点或语境。**
情景 2(带检索增强)
系统先检索该读者提到的书籍,找到“认知失调理论”相关段落,结合这些内容生成回答。答案会更贴合书中原意,避免主观臆断。
技术优势
动态知识更新:无需重新训练模型,通过更新检索库即可扩展知识。
可解释性:回答可附带检索来源,便于验证。
灵活性:适用于开放域问答、客服、
知识库
等场景。
实现逻辑
检索阶段:用嵌入模型(如BERT)将问题和文档向量化,通过相似度匹配(如余弦相似度)找出
Top-K
相关片段。
生成阶段:将检索内容与问题拼接,输入生成模型(如GPT)生成最终回答。
公式表示:
实现逻辑
检索阶段:用嵌入模型(如BERT)将问题和文档向量化,通过相似度匹配(如余弦相似度)找出Top-K相关片段。
生成阶段:将检索内容与问题拼接,输入生成模型(如GPT)生成最终回答。
公式表示:
其中, 是生成模型, 为用户问题, 为检索到的文本片段。
安装依赖
pip install langchain langchain-community langchain-huggingface unstructured pandas pip install transformers sentence-transformers accelerate pip install faiss-gpu pip install optimum pip install "numpy<2.0"
执行以下代码避免后续
documents = loader.load() 可能的 LookupError 报错。import nltk nltk.download('punkt_tab') # 下载 punkt_tab 分词器数据 nltk.download('averaged_perceptron_tagger') # 下载词性标注器 nltk.download('averaged_perceptron_tagger_eng') # 下载英文词性标注器
文档导入
以当前项目
Guide 文件夹下的指导文章为例,你可以修改 DOC_PATH,替换并构建属于你的向量数据库
。
首先,设置路径并使用
DirectoryLoader 加载文档:你只需要下载
10. Top-K vs Top-P:生成式模型中的采样策略与 Temperature 的影响.md这份文件from langchain.document_loaders import DirectoryLoader # 定义文件所在的路径 DOC_PATH = "../Guide" # 使用 DirectoryLoader 从指定路径加载文件。"*.md" 表示加载所有 .md 格式的文件,这里仅导入文章 10(避免当前文章的演示内容对结果的影响) loader = DirectoryLoader(DOC_PATH, glob="10*.md") # 加载目录中的指定的 .md 文件并将其转换为文档对象列表 documents = loader.load() # 打印查看加载的第一个文档的前200个字的内容 print(documents[0].page_content[:200])
可以修改参数glob来指定想处理的文件,也可以去除这个参数以处理所有文件。
在Python中,glob参数用于匹配特定模式的文件名,类似于Unix shell的通配符规则。以下是关于glob参数的详细说明和常见用法>_<
1. `glob` 参数的核心语法
通配符 | 作用 | 示例 | 匹配结果 |
* | 匹配任意长度字符(不含路径分隔符) | *.md | 所有 .md后缀文件 |
? | 匹配单个字符 | doc?.txt | doc1.txt, doca.txt等 |
[] | 匹配括号内的任意字符 | report[0-9].md | report1.md, report2.md等 |
** | ㅤ | ㅤ | ㅤ |
评论加载中…