相关课程资料:
课程:第三节课
日期:2024.04.17
主题:浦语大模型全链路开源体系
文档链接:课程文档
视频链接:课程视频
课堂重点
什么是RAG
RAG(Retrieval Augmented Generation)技术是一种结合检索和生成的方法,用于提升大型语言模型(LLMs)在知识密集型任务中的性能。RAG通过检索与用户输入相关的信息片段,并结合外部知识库来生成更准确、更丰富的回答。
RAG的能解决什么问题
- 解决大模型在处理知识密集型任务,所难以回答的问题。
- 模型训练信息过时问题。
- 幻觉,降低模型在遇到不会的问题时,胡言乱语,甚至产生幻觉的问题。
- 降低成本,实现外部记忆,可升级,可迭代,提供知识库的二次整理和数据输出。
RAG 工作原理
分为三个部分:索引、检索、生成。
- 索引 Indexing:处理外部知识源,将知识源分割为chunk,编码为向量,存储在向量数据库 Vetor-DataBase 中
- 检索 Retrieval: 接受用户问题,将问题编码为向量,用这些向量去向量数据库中找到最相关的文档库 top-k chunks
- 生成 Generation: 将检索到的文档与原始问题一起作为提示 (Promot)输入到LLM中,生成回答
向量数据库(Vector-DB)
- 向量数据库通常将知识库信息进行向量化存储,这些知识信息通过预训练的词句向量模型转换为相同长度的向量,这些向量保存了语料的语义信息。
- 用户的数据传入后通过将传入问题向量化,通过向量数据库支持的相似度匹配能力,寻找到知识库中最相似的top k的结果,这时生成的文档信息,将为后面大模型的生成提供重要的提示词。
- 如果知识库语料过多,后续应提高文件编码技术(如句子嵌入或者段嵌入)和对数据库进行优化,来支持大规模的向量搜索。
结合查询内容和提示词
通过向量数据库查询出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
将信息输入大模型来由大模型组织成答案信息
RAG VS 微调(Fine-tuning)
| RAG | Fine-tuning |
|---|---|
| 非参数记忆,利用外部知识库 能够处理知识密集型任务 处理多样化任务 | 参数记忆 需要标注大语料训练进行 可能会导致过拟合,泛化能力下降 |
| 适用于开放域问答,实时新闻摘要 | 特定任务,文本生成,文本分类,情感分析等 |
| 动态知识更新,处理长尾知识问题 | 模型性能根据特定任务优化 |
| 依赖知识库质量和范围,依赖大模型能力 | 需要大量标注数据,对新任务适应较差 |
茴香豆介绍
茴香豆核心特性
茴香豆工作流
作业
在茴香豆 Web 版中创建自己领域的知识问答助手
- 进入到茴香豆web界面时,输入知识库名称和知识库密码,没有当前的知识库时会自动创建。这个就相当于创建我们的向量数据库。
- 创建成功知识库后,知识库支持上传的文件类型还挺丰富的,pdf,word,md,excel都不在话下,这地方我们上传的是pdf文件
- 测试问答任务
总结的还算不错,而且还提供了文档中的示例代码等,如果是文档中没有的信息,它就会回答的非常慢