从零搭建一个可离线使用的可实时更新扩展信息的智能问答系统 llamaindex&LLama3大模型&RAG

之前对一件事很好奇,为什么去年训练的大模型可以回答今天的新闻内容。答案是使用了知识扩展系统。基本原理是把参考答案和问题一同提给大模型,给他充分的参考信息做回复编辑。
本文教你完成离线版本的智能问答系统搭建。有问题请直接留言

最近在疯狂找下家,本人精通图形渲染和ai,求捞啊!

基本架构图
从零搭建一个可离线使用的可实时更新扩展信息的智能问答系统 llamaindex&LLama3大模型&RAG_第1张图片
讲一下基本运行流程:

  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", #五龄童在以色列一博物馆打碎文物
	    "https://baijiahao

你可能感兴趣的:(AI,人工智能,ai,llama,人工智能,llama,factory,大模型)