书生大模型课堂笔记 - 第三节课

119 阅读6分钟

相关课程资料:

课程:第三节课

日期:2024.04.17

主题:浦语大模型全链路开源体系

文档链接:课程文档

视频链接:课程视频

课堂重点

什么是RAG

RAG(Retrieval Augmented Generation)技术是一种结合检索和生成的方法,用于提升大型语言模型(LLMs)在知识密集型任务中的性能。RAG通过检索与用户输入相关的信息片段,并结合外部知识库来生成更准确、更丰富的回答。

image.png

RAG的能解决什么问题

  1. 解决大模型在处理知识密集型任务,所难以回答的问题。
  2. 模型训练信息过时问题。
  3. 幻觉,降低模型在遇到不会的问题时,胡言乱语,甚至产生幻觉的问题。
  4. 降低成本,实现外部记忆,可升级,可迭代,提供知识库的二次整理和数据输出。

RAG 工作原理

分为三个部分:索引、检索、生成。

  1. 索引 Indexing:处理外部知识源,将知识源分割为chunk,编码为向量,存储在向量数据库 Vetor-DataBase 中
  2. 检索 Retrieval: 接受用户问题,将问题编码为向量,用这些向量去向量数据库中找到最相关的文档库 top-k chunks
  3. 生成 Generation: 将检索到的文档与原始问题一起作为提示 (Promot)输入到LLM中,生成回答

向量数据库(Vector-DB)

  1. 向量数据库通常将知识库信息进行向量化存储,这些知识信息通过预训练的词句向量模型转换为相同长度的向量,这些向量保存了语料的语义信息。
  2. 用户的数据传入后通过将传入问题向量化,通过向量数据库支持的相似度匹配能力,寻找到知识库中最相似的top k的结果,这时生成的文档信息,将为后面大模型的生成提供重要的提示词。
  3. 如果知识库语料过多,后续应提高文件编码技术(如句子嵌入或者段嵌入)和对数据库进行优化,来支持大规模的向量搜索。

image.png

结合查询内容和提示词

通过向量数据库查询出top k相关语料信息后,通过提示词工程形成模板:

        # Switch languages according to the scenario.
        if self.language == 'zh':
            self.TOPIC_TEMPLATE = '告诉我这句话的主题,直接说主题不要解释:“{}”'
            self.SCORING_QUESTION_TEMPLTE = '“{}”\n请仔细阅读以上内容,判断句子是否是个有主题的疑问句,结果用 0~10 表示。直接提供得分不要解释。\n判断标准:有主语谓语宾语并且是疑问句得 10 分;缺少主谓宾扣分;陈述句直接得 0 分;不是疑问句直接得 0 分。直接提供得分不要解释。'  # noqa E501
            self.SCORING_RELAVANCE_TEMPLATE = '问题:“{}”\n材料:“{}”\n请仔细阅读以上内容,判断问题和材料的关联度,用0~10表示。判断标准:非常相关得 10 分;完全没关联得 0 分。直接提供得分不要解释。\n'  # noqa E501
            self.KEYWORDS_TEMPLATE = '谷歌搜索是一个通用搜索引擎,可用于访问互联网、查询百科知识、了解时事新闻等。搜索参数类型 string, 内容是短语或关键字,以空格分隔。\n你现在是{}交流群里的技术助手,用户问“{}”,你打算通过谷歌搜索查询相关资料,请提供用于搜索的关键字或短语,不要解释直接给出关键字或短语。'  # noqa E501
            self.SECURITY_TEMAPLTE = '判断以下句子是否涉及政治、辱骂、色情、恐暴、宗教、网络暴力、种族歧视等违禁内容,结果用 0~10 表示,不要解释直接给出得分。判断标准:涉其中任一问题直接得 10 分;完全不涉及得 0 分。直接给得分不要解释:“{}”'  # noqa E501
            self.PERPLESITY_TEMPLATE = '“question:{} answer:{}”\n阅读以上对话,answer 是否在表达自己不知道,回答越全面得分越少,用0~10表示,不要解释直接给出得分。\n判断标准:准确回答问题得 0 分;答案详尽得 1 分;知道部分答案但有不确定信息得 8 分;知道小部分答案但推荐求助其他人得 9 分;不知道任何答案直接推荐求助别人得 10 分。直接打分不要解释。'  # noqa E501
            self.SUMMARIZE_TEMPLATE = '{} \n 仔细阅读以上内容,总结得简短有力点'  # noqa E501
            # self.GENERATE_TEMPLATE = '材料:“{}”\n 问题:“{}” \n 请仔细阅读参考材料回答问题,材料可能和问题无关。如果材料和问题无关,尝试用你自己的理解来回答问题。如果无法确定答案,直接回答不知道。'  # noqa E501
            self.GENERATE_TEMPLATE = '材料:“{}”\n 问题:“{}” \n 请仔细阅读参考材料回答问题。'  # noqa E501

将信息输入大模型来由大模型组织成答案信息

image.png

RAG VS 微调(Fine-tuning)

RAGFine-tuning
非参数记忆,利用外部知识库 能够处理知识密集型任务 处理多样化任务参数记忆 需要标注大语料训练进行 可能会导致过拟合,泛化能力下降
适用于开放域问答,实时新闻摘要特定任务,文本生成,文本分类,情感分析等
动态知识更新,处理长尾知识问题模型性能根据特定任务优化
依赖知识库质量和范围,依赖大模型能力需要大量标注数据,对新任务适应较差

茴香豆介绍

image.png

茴香豆核心特性

image.png

茴香豆工作流

image.png

作业

在茴香豆 Web 版中创建自己领域的知识问答助手

  1. 进入到茴香豆web界面时,输入知识库名称和知识库密码,没有当前的知识库时会自动创建。这个就相当于创建我们的向量数据库。

image.png

  1. 创建成功知识库后,知识库支持上传的文件类型还挺丰富的,pdf,word,md,excel都不在话下,这地方我们上传的是pdf文件

image.png

  1. 测试问答任务

image.png

image.png

总结的还算不错,而且还提供了文档中的示例代码等,如果是文档中没有的信息,它就会回答的非常慢

在 InternLM Studio 上部署茴香豆技术助手

搭建环境

image.png

下载代码

image.png

修改配置文件,替换模型路径

image.png

下载语料,设置问题

image.png

创建向量数据库

image.png

image.png

image.png

运行茴香豆

image.png

拒答返回效果

image.png

茴香豆怎么部署到微信群

image.png