使用llamaindexLLM大模型构建一个可离线可在线可异步扩展信息的RAG智能问答系统

news2024/9/21 21:24:44

之前对一件事很好奇,为什么去年训练的大模型可以回答今天的新闻内容。答案是使用了知识扩展系统。基本原理是把参考答案和问题一同提给大模型,给他充分的参考信息做回复编辑。
本文教你完成离线版本的智能问答系统搭建。
最近在疯狂找下家,本人精通图形渲染和ai,求捞啊!

基本架构图
在这里插入图片描述
讲一下基本运行流程:

  1. 人工准备数据
  2. 转为嵌入向量
  3. 存入数据库并生成索引
    用户提问流程:
  4. 用户输入问题
  5. 在索引数据库中查询匹配度较高的文本片段
  6. 如果存在就取出作为参考语料的一部分传入大模型
  7. 如果不存在就搜索在线引擎数据,取排名前N个文章作为参考
  8. 大模型输出结果
  9. 用户评价准确度并做语料参考记录

本文没有把所有环节都贴出来,仅实现了扩展参考信息的智能回复能力, 最近在忙着找工作没时间,细节和缺失环节慢慢补全,有问题请直接留言。

一 环境部署

技术栈采用ollama index + llama3.1 + flask
首先下载项目文件,安装关键组件

1.1 LLama3.1 大模型部署

首先需要部署llama3.1大模型,让我们具备基础的互动问答能力,详细步骤可以查看下面这篇文章。请完成部署并确保大模型可以无障碍运行。
添加链接描述

1.2 LLamaIndex部署

部署RAG框架。新建一个requirement.txt填写下列内容,并使用pip install -r requirement.txt来安装
自己安装会有很多版本兼容问题,尽量用我这个安装

hpack==4.0.0
html2text==2024.2.26
htmldate==1.8.1
httpcore==1.0.5
httpx==0.27.0
huggingface-hub==0.23.2
humanfriendly==10.0
hyperframe==6.0.1
llama-cloud==0.0.15
llama-hub==0.0.79.post1
llama-index==0.11.0
llama-index-agent-openai==0.3.0
llama-index-cli==0.3.0
llama-index-core==0.11.0.post1
llama-index-embeddings-fastembed==0.2.0
llama-index-embeddings-openai==0.2.2
llama-index-indices-managed-llama-cloud==0.3.0
llama-index-legacy==0.9.48.post3
llama-index-llms-huggingface==0.3.1
llama-index-llms-ollama==0.3.0
llama-index-llms-openai==0.2.0
llama-index-multi-modal-llms-openai==0.2.0
llama-index-program-openai==0.2.0
llama-index-question-gen-openai==0.2.0
llama-index-readers-file==0.2.0
llama-index-readers-llama-parse==0.2.0
llama-index-readers-web==0.2.0
llama-index-vector-stores-qdrant==0.3.0
llama-parse==0.5.0
ollama==0.3.2
onnx==1.16.2
onnxruntime==1.19.0
pep8==1.7.1
pillow==10.4.0
ply==3.11
portalocker==2.8.2
proglog==0.1.10
protobuf==5.27.3
pyaml==23.12.0
pyasn1-modules==0.2.8
pycocotools==2.0.7
pydantic==2.8.2
pydantic_core==2.20.1
pypdf==4.3.1
termcolor==2.4.0
terminaltables==3.1.10
text-generation==0.7.0
tiktoken==0.7.0
tinysegmenter==0.3
tld==0.13
tokenizers==0.19.1
torch==2.4.0
torchvision==0.19.0
transformers==4.44.2
trafilatura==1.12.1
docx2txt

1.3 部署ES向量数据(这步可以先跳过)

向量数据库用于存储索引index,帮助我们异步保存数据,ES数据库的部署和初阶使用可以看下面这篇文章,完成部署并启动数据库
https://blog.csdn.net/lengyoumo/article/details/141860801

二 功能实现

2.1 先实现一个可以加载网络文章的问答系统

新建个脚本 main.py 。把下面这一坨塞进去

	from llama_index.embeddings.fastembed import FastEmbedEmbedding
	from llama_index.core import Settings
	from llama_index.llms.ollama import Ollama
	import torch
	from transformers import AutoModelForCausalLM, AutoTokenizer
	from llama_index.llms.huggingface import HuggingFaceLLM
	from llama_index.core import VectorStoreIndex, SimpleDirectoryReader, Settings
	from llama_index.readers.web import TrafilaturaWebReader
	from llama_index.readers.file import docs
	from llama_index.core.node_parser import SimpleFileNodeParser
	from llama_index.readers.file import FlatReader
	from pathlib import Path

	# 加载本地模型 “ll3.1_cn” 是我们在ollama大模型部署时设置的大模型别名
	llm = Ollama(model="ll3.1_cn", request_timeout=360.0)
	
	Settings.llm = llm
	Settings.chunk_size = 512

	# 加载内嵌模型 此处的目的是将文字向量化,不同语言不同精度需要不同的模型,本文仅用bge-small-en-v1.5举例
    model = AutoModel.from_pretrained("BAAI/bge-small-zh-v1.5")
    #下载分词器
    #tokenizer = AutoTokenizer.from_pretrained("BAAI/bge-small-zh-v1.5")
	# 设置网络文档数据
	webs_addrs = [
	    "https://baijiahao.baidu.com/s?id=1808603340810616842&wfr=spider&for=pc", # 已婚员工与恋人办公室接吻被举报开除
	    "https://baijiahao.baidu.com/s?id=1808607421636901154&wfr=spider&for=pc", 

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

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

相关文章

没参加会议,还要 30000 字的会议材料写总结?用好 AI工具,30 分钟堵住领导的嘴

前段时间本来要参加总公司的重要会议,但由于临时出差错过了。 分公司老总,给了我 10 份会议材料内容,让我学习,并在节后梳理出要点。 结果,一过节就全都给忘记了,咋办?听说最近Kimi出了新玩法…

k8s 部署 jenkins【详细步骤】

文章目录 部署介绍部署步骤第 1 步:创建 namespace第 2 步:创建 ServiceAccount第 3 步:创建持久卷第 4 步:创建 Deployment第 5 步:创建 Service第 6 步:浏览器访问 Jenkins第 7 步:修改默认时区参考⭐ 本文目标:在 k8s 集群中部署一个 jenkins。 部署介绍 🚀 在 K…

内推|京东|后端开发|运维|算法...|北京 更多岗位扫内推码了解,直接投递,跟踪进度

热招岗位 更多岗位欢迎扫描末尾二维码,小程序直接提交简历等面试。实时帮你查询面试进程。 安全运营中心研发工程师 岗位要求 1、本科及以上学历,3年以上的安全相关工作经验; 2、熟悉c/c、go编程语言之一、熟悉linux网络编程和系统编程 3、…

coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?

🏆本文收录于《CSDN问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收…

为什么企业数据资产入表实践少?

​在财政部会计司发布暂行规定之后,数据资产化或者数据要素市场进入加速期。 会计司在22年12月1号首先发布征求意见,经过半年时间迅速迭代后,正式发布了暂行规定。文件第8条规定了国家实行统一的会计制度,任何相关的企业组织都必须…

【网络安全】调试模式获取敏感数据

未经许可,不得转载。 文章目录 漏洞原因步骤PHPPythonASPNode.js漏洞原因 当开发者忘记在生产环境中禁用调试模式,应用在发生错误时,可能会输出详细的错误信息。这些错误信息(比如“error title”或堆栈跟踪)通常包含了应用程序的内部结构、配置甚至数据库连接信息等敏感…

Windows自动化程序开发指南

自动化程序的概念 “自动化程序”指的是通过电脑编程来代替人类手工操作的一类程序或软件。这类程序具有智能性高、应用范围广的优点,但是自动化程序的开发难度大、所用技术杂。 本文对自动化程序开发的各个方面进行讲解。 常见的处理对象 自动化程序要处理的对…

公认最好的跑步耳机分享,选购骨传导运动耳机需注意的五大陷阱!

跑步,不仅是一种锻炼身体的方式,更是一种生活态度的体现。它让我们在汗水中释放压力,在节奏中感受生命的律动。而音乐,作为跑步时的完美伴侣,能够激发我们的运动潜能,让我们的跑步之旅更加愉悦。因此&#…

软件测试自动化面试题(含答案)

1.如何把自动化测试在公司中实施并推广起来的? 选择长期的有稳定模块的项目 项目组调研选择自动化工具并开会演示demo案例,我们主要是演示selenium和robot framework两种。 搭建自动化测试框架,在项目中逐步开展自动化。 把该项目的自动化…

示波器基础知识汇总(2)

系列文章目录 1.元件基础 2.电路设计 3.PCB设计 4.元件焊接 5.板子调试 6.程序设计 7.算法学习 8.编写exe 9.检测标准 10.项目举例 11.职业规划 送给大学毕业后找不到奋斗方向的你(每周不定时更新) 中国计算机技术职业资格网 上海市工程系列计算机专…

SD-WAN解决企业远程服务难题

在当今数字化和全球化的商业环境中,企业不再受限于地理位置。远程工作和分布式团队已成为常态,但随之而来的是对网络连接的更高需求。本文将讨论企业远程服务中的挑战,并介绍一个解决这些挑战的有效方案——SD-WAN。 随着远程工作的增加&…

Buzzer:一款针对eBPF的安全检测与模糊测试工具

关于Buzzer Buzzer是一款功能强大的模糊测试工具链,该工具基于Go语言开发,可以帮助广大研究人员简单高效地开发针对eBPF的模糊测试策略。 功能介绍 下面给出的是当前版本的Buzzer整体架构: 元素解析: 1、ControlUnit&#xff1a…

查看元神操作系统的版本

1. 背景 本文通过元神操作系统的API调用来获取元神系统的版本,并显示在屏幕上。 2. 方法 (1)编写程序 本例先设置系统调用的参数:第一个参数设置为API_OS_VER,表示获取元神操作系统的版本号;第二个参数…

pdf怎么压缩小一些?推荐的几种PDF压缩方法

pdf怎么压缩小一些?在工作中,我们经常处理PDF文件。大文件不仅存储麻烦,还会拖慢传输速度。因此,我们通常希望将这些文件压缩成更小的尺寸。压缩后的文件更便于分享和管理,适用于云存储、社交媒体或其他在线平台&#…

安装node版本管理工具(nvm)、利用nvm安装node

https://github.com/coreybutler/nvm-windows/releases 下载nvm-setup.zip 选择nvm安装路径,注意路径不要有空格和中文。 选择nodejs的安装路径,这里是在E:\nodejs位置创建一个快捷方式,真正的文件在nvm文件下的版本号文件中 点击next&a…

容性负载箱如何测量电容器的容量、电压、泄漏电流和ESR等参数?

容性负载箱是用于测量电容器参数的重要设备。它的主要功能是通过向电容器施加不同的负载,从而测量电容器的容量、电压响应、损耗等关键参数。 具体来说,容性负载箱可以通过以下方式测量电容器的各项参数: 1. 测量电容器的容量:容…

并发工具类(二):CyclicBarrier

1、CyclicBarrier 介绍 从字面上看 CyclicBarrier 就是 一个循环屏障,它也是一个同步助手工具,它允许多个线程 在执行完相应的操作后彼此等待共同到达一个屏障点。 CyclicBarrier可以被循环使用,当屏障点值变为0之后,可以在接下来…

qt配合halcon深度学习网络环境配置

1.开发环境qt6,编译器MSCV2019,网络是halcon的对象检测,halcon用20. 2.建立qt项目 3.到halcon安装目录下复制include,lib这两个文件夹到qt项目中进行引用 4.引用到halcon静态库后,到halcon运行目录下找到静态库对应dll文件&…

浏览器百科:网页存储篇-如何在Chrome打开localStorage窗格(五)

1.引言 在前面的章节中,我们详细介绍了 localStorage 的基本概念、特性及其常用方法,帮助开发者在网页应用中实现数据的持久化存储。为了更好地管理和调试这些存储的数据,了解如何打开和使用浏览器的 localStorage 窗格是非常重要的。本篇文…

js实现lua解释器,类似halcon代码编辑器一行一行解释执行

解释器 只能一行一行执行,不能有一行代码跨越多行,不支持lua的表,只支持for i的循环,支持自定义函数,并且可以跳到函数里面一行一行执行,这里的函数并不是lua的函数,而是由js状态控制执行函数里…