Langchain 实现 RAG

RAG 实现包括三部分,文档向量化、相似度搜索和大模型回答,本文将使用 LangChain 进行 RAG 的实现。RAG 中最重要的是向量,向量模型的好坏直接反映到最终结果的好坏,如果不能搜索到相对准确的文档,RAG 就没有起到该有的效果。文章将分为两部分,首先是向量索引以及搜索,然后是与大语言模型的结合。

文档向量化

文档向量化是将文档转为向量,查询时将问题转化为向量,将问题向量与文档向量进行相似度比较,返回相似度较高的内容。比较三个Embedding 模型,分别为 Google 、Conan(腾讯)、JinaAI。

VertexAIEmbeddings

使用 VertexAI 模型,需要安装 Google Cloud 客户端,安装完成之后运行一下两条命令。

gcloud init
gcloud auth application-default login

使用 text-multilingual-embedding-002 多语言 Embedding 模型。https://cloud.google.com/vertex-ai/generative-ai/docs/model-reference/text-embeddings-api

### 使用 LangChain 实现 RAG 为了实现检索增强生成(RAG),可以利用 `langchain_core` 中的相关组件来构建这一流程。具体来说,通过定义数据获取、格式化以及处理逻辑,能够有效地集成检索模块与生成模型。 #### 导入必要的库和函数 首先导入所需的类和方法: ```python from langchain_core.output_parsers import StrOutputParser from langchain_core.runnables import RunnablePassthrough ``` 这些工具可以帮助解析输出并传递输入给后续阶段[^3]。 #### 定义文档格式化器 接着创建一个辅助函数用于整理从数据库或其他来源检索到的信息片段: ```python def format_docs(docs): return "\n\n".join(doc.page_content for doc in docs) ``` 此函数接收一系列文档对象作为参数,并返回由各部分内容组成的字符串形式的内容集合。 #### 构建 RAG 链条 最后一步是组装整个工作流管道,在这里假设已经有一个名为 `retriever` 的实例负责执行实际的数据查找操作;而 `prompt` 和 `llm` 则分别代表提示模板及大型语言模型接口: ```python rag_chain = ( {"context": retriever | format_docs, "question": RunnablePassthrough()} | prompt | llm | StrOutputParser() ) for chunk in rag_chain.stream("What is Task Decomposition?"): print(chunk, end="", flush=True) ``` 上述代码展示了如何将不同环节串联起来形成完整的 RAG 流程:先是从外部资源中提取相关信息,再将其连同用户提问一起送入预训练的语言模型进行最终的回答生成。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值