LangChain知识库构建与RAG设计

RAG:检索增强生成是什么?

RAG的主要流程

Retrieval-Augmented Generation: 检索增强生成

能够根据问题的特点还有上下文, 生成更加个性化和精确的回答

  • 为LLM提供来自外部知识源的额外信息的概念。这允许它们生成更准确和有上下文的答案,同时减少幻觉
  • (1)检索:外部相似搜索 (2)增强:提示词更新 (3)生成:更详细的提示词输入LLM
  • 主要流程: 输入问题-> Retrieval检索向量数据库 -> 得到Context上下文 -> 生成详细的prompt提示 -> 再根据LLM生成对应的回答 -> 最后返回给用户

LangChain中RAG中的Retrieve实现

  • Source: 很多数据源的支持
    • github
    • YouTube
    • discord
    • Twitter
    • PPT等等
  • Loader: 对Source数据源Load到LangChain这个系统里面
  • Transform: 对数据进行向量转化, 对不同数据格式进行转化
  • Embedding: 向量化, 嵌入到向量空间
  • Store: 将向量数据存储到向量数据库里面
  • Retrieve: 通过Retrieve方式进行检索

Loader: 让大模型具备实时学习能力

Loader加载MarkDown文件

# 我是一个markdown加载示例
- 第一项目
- 第二个项目
- 第三个项目

## 第一个项目
AI研习社最厉害专业的AI研究基地

## 第二个项目
AIGC打造未来AI应用天地

## 第三个项目
AI研习社是一个非常牛逼的AI媒体
#使用loader来加载markdown文本
from langchain.document_loaders import TextLoader

loader = TextLoader("loader.md")
loader.load()

输出:

[Document(page_content='# 我是一个markdown加载示例\n- 第一项目\n- 第二个项目\n- 第三个项目\n\n## 第一个项目\nAI研习社最厉害专业的AI研究基地\n\n## 第二个项目\nAIGC打造未来AI应用天地\n\n## 第三个项目\nAI研习社是一个非常牛逼的AI媒体', metadata={'source': 'loader.md'})]

Loader加载CVS文件

loader.csv

#使用loader来加载cvs文件
from langchain.document_loaders.csv_loader import CSVLoader

#loader = CSVLoader(file_path="loader.csv")

loader = CSVLoader(file_path="loader.csv",source_column="Location")
data = loader.load()
print(data)

输出:

[Document(page_content='\ufeffProject: AI GC培训\nDES: 培训课程\nPrice: 500\nPeople: 100\nLocation: 北京', metadata={'source': '北京', 'row': 0}), Document(page_content='\ufeffProject: AI工程师认证\nDES: 微软AI认证\nPrice: 6000\nPeople: 200\nLocation: 西安', metadata={'source': '西安', 'row': 1}), Document(page_content='\ufeffProject: AI应用大会\nDES: AI应用创新大会\nPrice: 200门票\nPeople: 300\nLocation: 深圳', metadata={'source': '深圳', 'row': 2}), Document(page_content='\ufeffProject: AI 应用咨询服务\nDES: AI与场景结合\nPrice: 1000/小时\nPeople: 50\nLocation: 香港', metadata={'source': '香港', 'row': 3}), Document(page_content='\ufeffProject: AI项目可研\nDES: 可行性报告\nPrice: 20000\nPeople: 60\nLocation: 上海', metadata={'source': '上海', 'row': 4})]

Loader加载Excel文件

安装插件:

! pip install "unstructured[xlsx]"

示例:将example目录下的所有*.xlsx文件都加载进来

#某个目录下,有excel文件,我们需要把目录下所有的xlxs文件加载进来
#! pip install "unstructured[xlsx]"

from langchain.document_loaders import DirectoryLoader

#目录下的.html和.rst文件不会被这种loader加载
#loader = DirectoryLoader("目录地址",glob=
### LangChainRAG知识库的关系 LangChain是一个用于构建对话应用的框架,支持多种大型语言模型(LLM),而RAG(检索增强生成技术)是一种提升LLM理解特定领域文本的能力的方法。通过结合这两者,可以创建一个专门针对某一领域的高效问答系统[^1]。 具体来说,在面对大量非结构化数据时,仅依靠传统的大规模预训练模型可能无法很好地处理特定行业的查询请求;然而借助于RAG机制,则可以在接收到用户提问之后先从已有的资料库中找到最相关的片段作为上下文提供给LLM,从而使得后者能够基于更精准的信息作出回应。 ### 如何使用LangChain实现RAG知识库 为了利用LangChain来建立带有RAG功能的知识库,以下是具体的实施方式: #### 准备工作 确保安装了必要的Python包,比如`langchain`和其他依赖项。可以通过pip命令完成这一步骤: ```bash pip install langchain ``` #### 构建索引 对于想要纳入到知识体系内的文件(如问题日志、API文档等),需要预先对其进行解析并转换成适合向量表示的形式。接着把这些向量化后的条目存储在一个高效的搜索引擎里以便后续快速查找相似内容。这部分操作通常由第三方服务或工具协助完成,例如Elasticsearch, Pinecone等。 #### 集成至LangChain管道 一旦有了准备好的索引数据库,就可以将其集成入LangChain的工作流当中去了。下面是一段简化版代码示例展示了这一过程中的核心部分: ```python from langchain import RAGRetriever, LLMChain # 初始化检索器实例并之前设置好的索引相连接 retriever = RAGRetriever(index_name="your_index") # 创建链路对象并将上述定义好的检索组件加入其中 chain = LLMChain(llm=..., retriever=retriever) def query_knowledge_base(question): response = chain.run(prompt=question) return response ``` 这里省略了一些细节配置参数,实际部署时需按照官方文档指引调整相应选项以匹配项目需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值