RAG 与知识库面试题图文讲义2598 字

Langchain RAG问答应用面试题

·全库 158 / 611

《Langchain RAG问答应用面试题》共 6 页、0.3 万字,通篇围绕 LangChain、prompt、embedding、向量 展开,归在「RAG 与知识库」这一层。

覆盖LangChainpromptembedding向量检索场景

适合手上有一堆资料,要把它变成能问答的知识库的人

目录骨架(1 节)
  1. 二、环境搭建

原 PDF 已逐页还原成图,共 6 页,这里先放前 3 页,其中 1 页识别出了标题。右侧文字由 OCR 按版面重排,可能有个别错字,以图为准;点图可全屏放大。

本讲义目录 · 3 页
  1. 01二、环境搭建
  2. 02loader = TextLoade…
  3. 03Document (page_con…
011 / 3
第 1 页:二、环境搭建
第 1 页

二、环境搭建

一、前言 1.1 介绍

本次选用百度百科—藜麦数据(https://baike.baidu.com/item/藜麦/5843874)模拟个人或企业私域数 据,并基于 langchain 开发框架,实现一种简单的 RAG 问答应用示例。

1.2 软件资源

  • CUDA 11.7
  • Python 3.10
  • pytorch 1.13.1+cu117
  • langchain

2.1 下载代码

$ conda create -n py310_chat python=3.10 $ source activate py310_chat

2.3 安装依赖

$ pip install datasets langchain sentence_transformers tqdm chromadb langchain_wenxin

三、RAG 问答应用实战 3.1 数据构建

藜麦数据(https://baike.baidu.com/item/黎麦 15843874)_保存到藜.txt 文件中。

3.2 本地数据加载

from langchain.document_loaders import TextLoader

022 / 3
第 2 页
第 2 页

loader = TextLoade…

loader = TextLoader (”./藜.txt") documents = loader. load ( documents

[ Document (page_content=’藜(读音 11)麦(Chenopodium\xa0quinoa\xaOWilld.)是藜科藜属 植物。穗部可呈红、紫、黄,植株形状类似灰灰菜,成熟后穗部类似高粱穗。植株大小受环境 及遗传因素影响较大,从 0.3-3 米不等,茎部质地较硬,可分枝可不分。单叶互生,叶片呈鸭掌 状,叶缘分为全缘型与锯齿缘型。藜麦花两性,花序呈伞状、穗状、圆锥状,藜麦种子较小, 呈小圆药片状,直径 1.5-2 毫米,千粒重 1.4-3 克。\xa0 [ 1 ]\xaO\n 原产于南美洲安第斯山脉的哥 伦比亚、厄瓜多尔、秘鲁等中高海拔山区。具有一定的耐早、耐寒、耐盐性,生长范围约为海 平面到海拔 4500 米左右的高原上,最适的高度为海拔 3000-4000 米的高原或山地地区。 \xa0 [ 1 ]\xa0\n 藜麦富含的维生素、多酚、类黄酮类、皂苷和植物甾醇类物质具有多种健康功

3.3 文档分割

文档分割,借助 langchain 的字符分割器,这里采用固定字符长度分割 chunk_size=128

from langchain.text_splitter import CharacterTextSplitter

text_splitter = CharacterTextSplitter (chunk_size=128, chunk_overlap=0)

documents = text_splitter.split_documents (documents) documents

[ Document (page_content='藜(读音 11)麦(Chenopodium\xa0quinoa\xaOWilld.)是藜科藜属 植物。穗部可呈红、紫、黄,植株形状类似灰灰菜,成熟后穗部类似高粱穗。植株大小受环境 及遗传因素影响较大,从 0.3-3 米不等,茎部质地较硬,可分枝可不分。单叶互生,叶片呈鸭掌 状,叶缘分为全缘型与锯齿缘型。藜麦花两性,花序呈伞状、穗状、圆锥状,藜麦种子较小, 呈小圆药片状,直径 1.5-2 毫米,千粒重 1.4-3 克。\xa0 [ 1 ]\xa0\n 原产于南美洲安第斯山脉的哥 伦比亚、厄瓜多尔、秘鲁等中高海拔山区。具有一定的耐旱、耐寒、耐盐性,生长范围约为海 平面到海拔 4500 米左右的高原上,最适的高度为海拔 3000-4000 米的高原或山地地区。 \xa0 [ 1 ]\xaO\n 藜麦富含的维生素、多酚、类黄酮类、皂苷和植物甾醇类物质具有多种健康功 效。藜麦具有高蛋白,其所含脂肪中不饱和脂肪酸占 83%,还是一种低果糖低葡萄糖的食物,能 在糖脂代谢过程中发挥有益功效。\xaO [ 1 ]\xa0\xa0 [ 5 ]\xa0\n 国内藜麦产品的销售以电商为主, 缺乏实体店销售,藜麦市场有待进一步完善。藜麦国际市场需求强劲,发展前景十分广阔。通过 加快品种培育和生产加工设备研发,丰富产品种类,藜麦必将在“调结构,转方式,保增收”的农 业政策落实中发挥重要作用。\xa0 [ 5 ]\xa0\n2022 年 5 月,“超级谷物”藜麦在宁洱县试种成 功。’,metadata={'source’:’./藜.txt'}), Document (page_content=’藜麦是印第安人的传统主食,几乎和水稻同时被驯服有着 6000 多年 的种植和食用历史。藜麦具有相当全面营养成分,并且藜麦的口感口味都容易被人接受。在藜 麦这种营养丰富的粮食滋养下南美洲的印第安人创造了伟大的印加文明,印加人将藜麦尊为粮 食之母。美国人早在 80 年代就将藜麦引入 NASA,作为宇航员的日常口粮,FAO 认定藜麦是唯一一 种单作物即可满足人类所需的全部营养的粮食,并进行藜麦的推广和宣传。2013 年是联合国饮 定的国际藜麦年。以此呼吁人们注意粮食安全和营养均衡。’,metadata={'source’:’./

033 / 3
第 3 页
第 3 页

Document (page_con…

Document (page_content=’繁殖\n 地块选择:应选择地势较高、阳光充足、通风条件好及肥力 较好的地块种植。藜麦不宜重茬,忌连作,应合理轮作倒茬。前以大豆、薯类最好,其次是 玉米、高粱等。\xa0 [ 4 ]\xa0\n 施肥整地:早春土壤刚解冻,趁气温尚低、土壤水分蒸发慢的时 候,施足底肥,达到土肥融合,壮伐蓄水。播种前每降 1 次雨及时耙耱 1 次,做到上虚下实,干 旱时只耙不耕,并进行压实处理。一般每亩(667 平方米/亩,下同)施腐熟农家肥 1000-2000 千 克、硫酸钾型复合肥 20-30 千克。如果土壤比较贫瘠,可适当增加复合肥的施用量。\xaO [ 4 ]’,

3.4 向量化&数据入库

接下来对分割后的数据进行 embedding,并写入数据库。这里选用 m3e-base 作为 embedding 模型,向量数据库选用 Chroma from langchain.embeddings import HuggingFaceBgeEmbeddings from langchain.vectorstores import Chroma

# embedding model:m3e-base model name = “moka-ai/m3e-base”

encode kwargs ={'normalize embeddings’:True } embedding = HuggingFaceBgeEmbeddings ( model_name=model_name, model_kwargs=model_kwargs, encode_kwargs=encode_kwargs,

query_instruction=” 文本生成向量表示用于文本检索”

# load data to Chroma db db = Chroma.from_documents (documents, embedding) # similarity search

db.similarity_search (”藜一般在几月播种?”)

3.5 Prompt 设计

prompti 计,这里只是一个 prompt 的简单示意,在实际业务场景中需要针对场景特点针对性调优。

【任务描述】 请根据用户输入的上下文回答问题,并遵守回答要求。

【背景知识】 {{ context }}

【回答要求】 -你需要严格根据背景知识的内容回答,禁止根据常识和已知信息回答问题。 - 对于不知道的信息,直接回答“未找到相关答案”

资料里没有你的场景?

把你手上的数据和想解决的那个环节发上来,我们按具体情况回,不复述方法论。

发布需求