利用LlamaIndex构建ARG本地知识库

文章目录

    • 1. 环境准备
    • 2. 启用诊断日志
    • 3. 配置本地模型
    • 4. 配置本地向量模型
    • 5. LlamaIndex全局配置
    • 6. 创建 PGVectorStore
    • 7. 从数据库加载数据
    • 8. 文本分割器: SpacyTextSplitter
    • 9. 配置管道
    • 10. 创建向量存储索引
    • 11 .指定响应模式,以及启用流式响应

在现代的人工智能应用中,如何有效地管理和检索数据是一个重要的课题。LlamaIndex 提供了一种灵活的数据框架,使开发者能够轻松地构建和管理与大型语言模型(LLM)相关的应用。在本文中,我们将深入探讨如何使用 LlamaIndex 创建和检索知识库索引。

1. 环境准备

pip install llama_index
pip install llama-index-llms-ollama
pip install llama-index-embeddings-ollama
pip install llama-index-readers-database
pip install llama-index-vector-stores-postgres
pip install langchain
pip install langchain-core
pip install langchain-text-splitters
pip install spacy

2. 启用诊断日志

import os, logging, sys
logging.basicConfig(stream=sys.stdout, level=logging.INFO)
logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))

3. 配置本地模型

请到 https://ollama.com/安装 Ollama,并下载大模型,比如:Llama 3、 Phi 3、 Mistral、Gemma、qwen等。为了测试方便,我们选用速度更快、效果较好的 qwen2:7B模型。

from llama_index.llms.ollama import Ollama
llm_ollama = Ollama(base_url='http://127.0.0.1:11434',model="qwen2:7b", request_timeout=600.0)

4. 配置本地向量模型

这里选用nomic-embed-text文本向量模型

from llama_index.embeddings.ollama import OllamaEmbedding
nomic_embed_text= OllamaEmbedding(base_url='http://127.0.0.1:11434',model_name='nomic-embed-text')

5. LlamaIndex全局配置


from llama_index.core import Settings
# 指定 LLM
Settings.llm = llm_ollama
# 自定义文档分块
Settings.chunk_size=500
# 指定向量模型
Settings.embed_model = nomic_embed_text

6. 创建 PGVectorStore

vector_store = PGVectorStore.from_params(database="langchat",host="syg-node",password="AaC43.#5",port=5432,user="postgres",table_name="llama_vector_store",embed_dim=768
)
from llama_index.core import StorageContext
storage_context  = StorageContext.from_defaults(vector_store=vector_store
)

7. 从数据库加载数据

from llama_index.readers.database import DatabaseReader
db = DatabaseReader(scheme="mysql",host="syg-node",  # Database Hostport="3206",  # Database Portuser="root",  # Database Userpassword="AaC43.#5",  # Database Passworddbname="stock_db",  # Database Name
)query = f"""
select concat(title,'。\n',summary,'\n',content) as text from tb_article_info where content_flag =1 order by id limit 0,10
"""documents = db.load_data(query=query)
print(f"Loaded {len(documents)} Files")
print(documents[0])

8. 文本分割器: SpacyTextSplitter

安装 zh_core_web_sm模型

## https://github.com/explosion/spacy-models/releases/download/zh_core_web_sm-3.7.0/zh_core_web_sm-3.7.0-py3-none-any.whl
python download zh_core_web_sm
from llama_index.core.node_parser import LangchainNodeParser
from langchain.text_splitter import SpacyTextSplitter
spacy_text_splitter = LangchainNodeParser(SpacyTextSplitter(pipeline="zh_core_web_sm", chunk_size = 512,chunk_overlap = 128
))

9. 配置管道

from llama_index.core.ingestion import IngestionPipeline
pipeline = IngestionPipeline(transformations=[spacy_text_splitter],vector_store=vector_store
)# 生成索引存入向量数据库
nodes = pipeline.run(documents=documents)
print(f"Ingested {len(nodes)} Nodes")

10. 创建向量存储索引

from llama_index.core import VectorStoreIndex
index = VectorStoreIndex(nodes, storage_context=storage_context)

11 .指定响应模式,以及启用流式响应

index = VectorStoreIndex.from_vector_store(vector_store=vector_store,embed_model=nomic_embed_text)
query_engine = index.as_query_engine(response_mode='tree_summarize', streaming=True)
res = query_engine.query("孩子连着上七天八天的课,确实挺累的")
res.print_response_stream()

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

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

相关文章

基于鸿蒙API10的RTSP播放器(九:进度总结)

一、前言 基于鸿蒙API10和三方库ijkpalyer2.0.4,实现RTSP流的流畅播放,支持H.264和H.265硬编码,既可以在基于X86的模拟机上运行,也可以在基于armabi-v7a的真机上运行。 二、已实现功能 视频画面尺寸调整(2:1比例&am…

【前后端】大文件切片上传

Ruoyi框架上传文件_若依微服务框架 文件上传-CSDN博客 原理介绍 大文件上传时,如果直接上传整个文件,可能会因为文件过大导致上传失败、服务器超时或内存溢出等问题。因此,通常采用文件切片(Chunking)的方式来解决这些…

React 中的事件绑定与参数传递

React 中的事件绑定与参数传递 语法&#xff1a;on 事件类型 { 事件处理程序 }&#xff0c;整体上遵循驼峰命名法 function App() {const handleClick () > {console.log(点击了按钮);}return (<div><button onClick{handleClick}>点击我</button><…

DB-GPT部署和试用

前言 DB-GPT是一个开源的AI原生数据应用开发框架(AI Native Data App Development framework with AWEL(Agentic Workflow Expression Language) and Agents)。 目的是构建大模型领域的基础设施&#xff0c;通过开发多模型管理(SMMF)、Text2SQL效果优化、RAG框架以及优化、Mu…

Element UI入门笔记(个人向)

Element UI入门笔记 将页面分割为一级菜单、二级菜单、导航栏三个部分&#xff1b;使用npm下载安装&#xff0c;使用语句npm i element-ui -s; 布局组件 el-form 用于创建和管理表单&#xff1b;从属性上看&#xff1a; :model&#xff1a;用于双向数据绑定&#xff0c;将表单…

打造古风炫酷个人网页:用HTML和CSS3传递笔墨韵味

需要用到的背景大家可以自己找喜欢的风格!!! 当然俺把俺用的背景放到文章最后了哦&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 感谢关注和支持 长期更新哦~~~ 1. 简洁的页面布局&#xff1a;保持优雅和对称 在古风设计中&#xff0c;布局的对称性非常重要…

Linux - 探秘/proc/sys/net/ipv4/ip_local_port_range

文章目录 Pre概述默认值及其意义评估需求如何调整临时修改永久修改测试和验证 修改的潜在影响 Pre Linux - 探秘 Linux 的 /proc/sys/vm 常见核心配置 计划&#xff1a; 简要解释 /proc/sys/net/ipv4/ip_local_port_range 文件的功能和作用。介绍该文件的默认值及其影响。说明…

螺丝、螺母、垫片等紧固件常用类型详细介绍

螺钉、螺母、垫片等紧固件介绍 螺钉 杯头内六角 首先介绍一下杯头内六角&#xff0c;杯头内六角是我们用的最常见的一种螺钉&#xff0c;如果你对选择螺钉没有什么想法&#xff0c;可以直接无脑选杯头内六角去使用。 比如说我们有一个零件加工了通孔&#xff0c;另一个零件加…

QT信号槽原理是什么,如何去使用它?

QT的信号槽&#xff08;Signals and Slots&#xff09;机制是QT框架的核心特性之一&#xff0c;它提供了一种对象间通信的方式&#xff0c;使得QT的部件可以在不知道彼此详细实现的情况下相互通信。这种机制在图形用户界面编程中尤为重要&#xff0c;因为它有助于降低对象间的耦…

Vue3.0组合式API:setup()函数

1、什么是组合式API Vue 3.0 中新增了组合式 API 的功能&#xff0c;它是一组附加的、基于函数的 API&#xff0c;可以更加灵活地组织组件代码。通过组合式 API 可以使用函数而不是声明选项的方式来编写 Vue 组件。因此&#xff0c;使用组合式 API 可以将组件代码编写为多个函…

CPU 和 GPU:为什么GPU更适合深度学习?

目录 什么是 CPU &#xff1f; 什么是 GPU &#xff1f; GPU vs CPU 差异性对比分析 GPU 是如何工作的 &#xff1f; GPU 与 CPU 是如何协同工作的 &#xff1f; GPU vs CPU 类型解析 GPU 应用于深度学习 什么是 CPU &#xff1f; CPU&#xff08;中央处理器&#xff09;…

股票量化接口api,国内股票期权怎么交易

炒股自动化&#xff1a;申请官方API接口&#xff0c;散户也可以 python炒股自动化&#xff08;0&#xff09;&#xff0c;申请券商API接口 python炒股自动化&#xff08;1&#xff09;&#xff0c;量化交易接口区别 Python炒股自动化&#xff08;2&#xff09;&#xff1a;获取…

git push : RPC failed; HTTP 400 curl 22 The requested URL returned error: 400

git push 出现RPC failed; HTTP 400 curl 22 The requested URL returned error: 400 问题 git push Enumerating objects: 11, done. Counting objects: 100% (11/11), done. Delta compression using up to 8 threads Compressing objects: 100% (10/10), done. error: RPC …

vscode对python进行多卡调试

在 VSCode 中对 Python 进行多卡&#xff08;多GPU&#xff09;调试&#xff0c;尤其是对于深度学习任务&#xff08;例如使用 PyTorch 或 TensorFlow&#xff09;&#xff0c;你需要结合 VSCode 的调试功能与分布式训练框架来实现。多卡调试通常意味着你要调试并行的计算任务&…

对中文进行文本分类的常用方法

一&#xff1a;关键词分类和基于规则的分类 关键词分类和基于规则的分类是两种常见的文本分类方法&#xff0c;它们可以应用于中文文本的分类。下面我将详细介绍这两种方法&#xff1a; 关键词分类 原理&#xff1a;这种方法通过识别文本中出现的特定关键词或短语来确定文本的…

STM32常用数据采集滤波算法

例如&#xff0c;STM32进行滤波处理时&#xff0c;主要目的是处理数据采集过程中可能产生的噪声和尖刺信号。这些噪声可能来自电源干扰、传感器自身的不稳定性或其他外部因素。 1.一阶互补滤波 方法&#xff1a;取a0~1,本次滤波结果&#xff08;1-a&#xff09;本次采样值a上…

基于 jenkins 的持续集成、持续部署方案

工具介绍 python3.12 fastapi 0.92.0 uvicorn 开发部署web项目&#xff1b;git gitee 实现代码版本管理&#xff1b;jenkins docker 实现持续集成、持续部署&#xff1b;centos7 作为jenkins服务器 & 部署服务器&#xff1b;有条件的可以再启动一台服务器作为部署测试…

学习笔记(一)

前言 一、对象 1、由类建模而成&#xff0c;是消息、数据和行为的组合 2、可以接收和发送消息&#xff0c;并利用消息进行彼此的交互。消息要包含传送给对象接收的信息 3、类的实例化&#xff1a;把类转换为对象的过程叫类的实例化。 4、对象的特性 (1) 对象有状态&#…

RabbitMQ Spring客户端使用

注解声明式队列和交换机 java自带序列化工具类&#xff0c;将java对象序列化为字节数组&#xff0c;用于网络传输。 jdk序列号存在缺陷&#xff0c;&#xff08;不安全&#xff0c;占用空间大等&#xff09; 推荐使用JSON的序列化&#xff1a; springboot扫描包使配置生效&…

MaintenanceController

目录 1、 MaintenanceController 1.1、 维修项目设置 1.2、 /// 查询修理大类 1.3、 /// 修改 MaintenanceController using QXQPS.Models; using QXQPS.Vo; using System; using System.Collections.Generic; using System.Linq; using System.Web; using Sys…