手把手系列 | 使用Milvus、Llama 3、Ollama、LangChain本地设置RAG应用

news2024/9/22 9:56:44

7ff4171d875ae448ffdd0e65a1bcc034.png

随着 Llama、Mistral、Gemma 等开源大语言模型(LLM)的出现,我们越来越能感受到 LLM 的力量,而本地运行基于 LLM 的 RAG 应用的需求越来越强烈。在将应用推至生产环境前,我们往往都需要先本地运行和测试。

因此,本文将介绍如何使用 Ollama、Llama 3 和 Milvus 向量数据库在本地部署一个检索增强生成(RAG)应用。

本文将使用到的软件和工具包括:

  • LangChain:用于创建代理,实现与数据的互动。

  • Ollama:在笔记本电脑中使用 LLM 的强大功能,简化本地操作。

  • Milvus:向量数据库用于高效存储和检索数据。

  • Llama 3:由 Meta 推出的大语言模型,Llama 系列的最新版本。

01.

问答与检索增强生成(RAG)

本文中,我们将使用 RAG 技术搭建一个高级的问答机器人。

02.

什么是 RAG?

RAG,即检索增强生成,是一种通过整合外部数据源来增强大语言模型(LLM)的技术。一个典型的 RAG 应用包括:

  • 索引流水线(Pipeline):用于从外部数据源中摄取数据并对其进行索引,随后加载、拆分并将数据存储在 Milvus 中。

  • 检索和生成:将用户查询转换为 Embedding 向量,然后从 Milvus 中检索相关数据形成上下文,然后 LLM 上下文生成响应。

文本将提供实用的操作指导,向您展示如何使用本地 LLM 构建 RAG 应用。欢迎初学者跟随本指南开始构建自己的问答机器人!

03.

前提条件

开始前,请先确保您已安装:

  • Docker 和 Docker-Compose

  • Milvus  standalone

  • Ollama

04.

设置 RAG 应用

现在开始设置 RAG 应用 :

  • 通过命令 docker-compose up -d 启动 Milvus standalone 实例。该命令将以 Docker 分离(detached)模式启动您的 Milvus 实例,在后台安静运行。

  • 通过命令 ollama pull <模型名称> (例如 ollama pull llama3)获取 LLM 模型。点击此处查看可用模型列表。该命令将下载模型的默认版本(通常是最新且最小的版本)。

  • 通过命令 ollama run <模型名称> 要直接与模型进行交互。

05.

安装依赖

您还需要安装所需的依赖库。如果您直接使用 Github 上的代码,可以使用 Poetry,或者您也可以使用 pip 进行安装。

pip install langchain pymilvus ollama pypdf langchainhub langchain-community langchain-experimental

06.

搭建并运行 RAG 应用

如前文所述,RAG 应用中的重要组成部分就是数据索引。

  1. 使用 PyPDFLoader 导入 PDF 数据。

from langchain_community.document_loaders import PyPDFLoader
loader = PyPDFLoader(
"https://d18rn0p25nwr6d.cloudfront.net/CIK-0001813756/975b3e9b-268e-4798-a9e4-2a9a7c92dc10.pdf"
)
data = loader.load()
  1. 切分数据

使用 RecursiveCharacterTextSplitter 将已加载数据切分为切片。

from langchain.text_splitter import RecursiveCharacterTextSplitter
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=0)
all_splits = text_splitter.split_documents(data)
  1. 使用 Jina 的 Small English embeddings 将文本数据转换为 Embedding 向量并存储在 Milvus 中。

from langchain_community.embeddings.jina import JinaEmbeddings
from langchain.vectorstores.milvus import Milvus
embeddings = JinaEmbeddings(jina_api_key=JINA_AI_API_KEY, model_name="jina-embeddings-v2-small-en"
)
vector_store = Milvus.from_documents(documents=all_splits, embedding=embeddings)

4. 使用 Ollama 轻松在本地加载 LLM(本示例中使用 Meta 的 Llama 3)。

from langchain_community.llms import Ollama
from langchain.callbacks.manager import CallbackManager
from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler
llm = Ollama(
model="llama3",
callback_manager=CallbackManager([StreamingStdOutCallbackHandler()]
),
stop=["<|eot_id|>"],
)

5. 使用 Langchain 搭建问答机器人。构建问答链来处理和响应用户查询。

from langchain import hub
from langchain.chains import RetrievalQA
query = input("\nQuery: ")
prompt = hub.pull("rlm/rag-prompt")   


qa_chain = RetrievalQA.from_chain_type(
    llm, retriever=vectorstore.as_retriever(), chain_type_kwargs={"prompt": prompt}
)
result = qa_chain({"query": query})
print(result)

07.

运行 RAG 应用

通过命令 python rag_ollama.py 运行 RAG 应用。

以下为回答示例:

Query: What is this document about?
The document appears to be a 104 Cover Page Interactive Data File for an SEC filing. It contains information about the company's financial statements and certifications.{'query': 'What is this document about?', 'result': "The document appears to be a 104 Cover Page Interactive Data File for an SEC filing. It contains information about the company's financial statements and certifications."}

我们已成功使用 Ollama、Llama 3、Langchain 和 Milvus 搭建了一个复杂的问答机器人。我们搭建的不应用不仅可以高效处理大规模数据集,还能够在本地针对用户问题进行回答。

欢迎了解 Milvus 及其 GitHub 代码仓库,并通过微信群交流分享 Milvus 使用经验!

相关链接:

  • Milvus  standalone:

    https://milvus.io/docs/install_standalone-docker-compose.md

  • Ollama 可用模型列表:

    https://ollama.com/library

推荐阅读

3a9695e5f70406ce22ed1946bfe37a8e.png

6a27369a9f1d49baaf235b350dc2836b.png

6e0c87e93ddd289f84141a9d6b646f32.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2057710.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[鹏城杯 2022]简单的php

题目源代码 <?phpshow_source(__FILE__); $code $_GET[code]; if(strlen($code) > 80 or preg_match(/[A-Za-z0-9]|\|"||\ |,|\.|-|\||\/|\\|<|>|\$|\?|\^|&|\|/is,$code)){die( Hello); }else if(; preg_replace(/[^\s\(\)]?\((?R)?\)/, , $code…

qemu启动iso/vmdk转换为qcow2镜像

安装qemu安装 https://qemu.weilnetz.de/w64/ 下载链接 Rock安装 https://rockylinux.org/zh-CN/download 下载&#xff0c;可以使用360等国产浏览器&#xff0c;可能自带加速功能&#xff0c;我这里使用最小版本 安装后在vmware中启动&#xff0c;无ip解决方案 执行命令 n…

OV SSL证书:增强网站信任与安全的重要保障

随着互联网的快速发展&#xff0c;电子商务、在线金融等行业的繁荣&#xff0c;网络安全问题日益凸显。为了确保用户数据的安全性和传输过程中的加密性&#xff0c;SSL证书&#xff08;Secure Sockets Layer&#xff09;成为了保护网站安全的重要工具。其中&#xff0c;OV SSL证…

跨平台无缝编辑,2024年免费视频剪辑工具全解析

在众多视频剪辑工具中&#xff0c;免费视频剪辑软件凭借其易用性、功能丰富性以及零成本的优势&#xff0c;赢得了广大用户的青睐。今天&#xff0c;就让我们一起盘点那些2024年大家都在用的免费视频剪辑软件&#xff0c;探索它们如何助力我们轻松实现创意梦想。 1.福昕视频剪…

基于springboot的太原学院商铺管理系统--论文pf

TOC springboot486基于springboot的太原学院商铺管理系统--论文pf 第1章 绪论 1.1 研究背景 互联网概念的产生到如今的蓬勃发展&#xff0c;用了短短的几十年时间就风靡全球&#xff0c;使得全球各个行业都进行了互联网的改造升级&#xff0c;标志着互联网浪潮的来临。在这…

机器人策略学习的Game Changer?伯克利提出Body Transformer

过去几年间&#xff0c;Transformer 架构已经取得了巨大的成功&#xff0c;同时其也衍生出了大量变体&#xff0c;比如擅长处理视觉任务的 Vision Transformer&#xff08;ViT&#xff09;。本文要介绍的 Body Transformer&#xff08;BoT&#xff09; 则是非常适合机器人策略学…

大语言模型 (LLM)是什么_

01.语言模型与大语言模型 2023年&#xff0c;让整个人类最为振奋的AI技术就是ChatGPT。“大语言模型&#xff08;Large Language Model&#xff09;”这个词也随之映入人们的眼帘。ChatGPT让人觉得惊艳之处&#xff0c;能够结合上下文&#xff0c;像人一样有逻辑性地回答问题&…

用Python在Ashare获取金融数据官方文档解读

Ashare&#xff0c;也被写作AKShare&#xff0c;是一个基于Python的开源完全免费的财经数据接口库。它的主要目的是为用户提供股票、期货、期权、基金、外汇、债券、指数、加密货币等金融产品的基本面数据、实时和历史行情数据、衍生数据的采集、清洗和落地的一整套工具。AKSha…

智慧空调离线语音控制方案:NRK3301芯片的深度解析与应用

随着AI技术的大爆发和智能家居的风潮&#xff0c;语音交互已成为智能家居产品的一项必备技能&#xff0c;在家电、音箱、穿戴设备乃至墙壁开关等贴近生活的产品中应用越来越广泛&#xff0c;智能语音识别是当前最热门的方案之一。 九芯智能顺应家居行业智能语音交互市场需求&a…

平面设计艺术:从基础到精通

平面设计是一门结合视觉艺术与技术技能的学科&#xff0c;旨在通过视觉元素传达信息和美感。本文将为初学者提供一个全面的平面设计入门指南&#xff0c;涵盖基础理论、设计流程和实用技巧。在平面设计中&#xff0c;创意和技术相辅相成。设计师使用强大的平面设计工具&#xf…

【C++】入门篇一

【C】入门篇一 一 .缺省参数1.缺省参数的概念2. 缺省参数分类 二. 函数重载1. 函数重载概念2.函数重载代码举例 三.引用1.引用的概念2. 引用特性3. 常引用4. 使用场景(1). 做参数(2). 做返回值 5. 传值、传引用效率比较6. 引用和指针的区别7.引用和指针的不同点 一 .缺省参数 …

实验十 编写子程序《汇编语言》- 王爽

一. 显示字符串 1. 需求 显示字符串是现实工作中经常要用到的功能&#xff0c;应该编写一个通用的子程序来实现这个功能。我们应该提供灵活的调用接口&#xff0c;使用者可以决定显示的位置&#xff08;行、列&#xff09;、内容和颜色。 子程序描述 名称&#xff1a;show_str…

【目标检测】Transformers在小目标检测中的应用:最新技术的基准测试和调查

《Transformers in Small Object Detection: A Benchmark and Survey of State-of-the-Art》 Transformers在小目标检测中的应用&#xff1a;最新技术的基准测试和调查 原文&#xff1a;https://arxiv.org/abs/2309.04902 1 研究背景和目的 小目标检测&#xff08;SOD&#x…

calico安装

3.20 版本 https://blog.csdn.net/weixin_42094245/article/details/131633980 手动创建了/var/lib/calico/nodename 手动更新了这2个资源 ll /etc/cni 摆烂了 装个3.8.0的 curl 172.30.30.64:32568 curl: (7) Failed connect to 172.30.30.64:32568; Connection timed o…

修复线上问题,又造成了个Bug

项目场景 这是一位朋友给我分享的实际线上问题&#xff0c;看似简单却害了项目再次造出一个bug来。 场景&#xff1a;线上环境中&#xff0c;需要查询某某业务数据&#xff0c;条件是状态&#xff0c;之前产品只要求查两个状态的&#xff0c;但现在让他再多查一个状态的。 自…

编程思维模式比编程语言内容等更重要也更难传授-2024-机器人篇

历程 在2015年起步&#xff0c;然后不断迭代更新优化。 2019&#xff1a;机器人编程实践-ROS2基础与应用- 第四版纲要 里面的重点就是机器人编程的方法论&#xff01; 2022&#xff1a;机器人编程实践-ROS2基础与应用-第⑦版 2022&#xff1a;ROS2机器人编程实践基础与应用…

macOS系统(intel)编译MAVSDK安卓平台so库

1.克隆mavsdk源码: git clone https://github.com/mavlink/MAVSDK.git --recursive 生成makefile前先手动修改protobuf版本为最新的(如:27.3) 下载的与你安装的版本要一致: 手动编译并安装libLZMA与openssl 如proto文件有修改,需要手动运行 ./tools/generate_from_protoc.sh重…

9 正则表达式:Java爬虫和正则表达式、String中的正则表达式方法(基本语法7)

文章目录 前言一、正则表达式1 [ ] 语法(1)[ABC] 和 [^ABC](2)[A-Z]和[a-zA-Z]小总结2 特殊字符语法(\w 这些)3 数量符4 \ 、()、 |5 锚点 ^ 和 $,\b,\B6 (?i) : 忽略其后面的大小写 ---- 这个Java是可以的,其他语言我不知道(正则表达式虽然大多通用,但也有部分是…

2018年高教社杯全国大学生数学建模竞赛(ABCD题)题目及附件

数学建模练习&#xff0c;老师发了一个2018年的C题论文&#xff0c;让我们复现&#xff0c;结果找题目附件找好长时间&#xff0c;都是泪……好在最后找到了&#xff0c;给大家分享一下。 2018年的数学建模C题不知道官网的链接打不开了已经&#xff0c;找附件找了好长时间………

第1章-03-VS Code开发工具安装

🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年CSDN全站百大博主。 🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。 🏆本文已收录于专栏:Web爬虫入门与实战精讲。 🎉欢迎 👍点赞✍评论⭐收…