利用LlamaIndex构建ARG本地知识库

devtools/2024/9/19 17:24:28/ 标签: python, 大模型, 知识库, Llamaindex, ollama

文章目录

    • 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. 启用诊断日志

python">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模型。

python">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文本向量模型

python">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全局配置

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

6. 创建 PGVectorStore

python">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. 从数据库加载数据

python">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. 配置管道

python">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.ppmy.cn/devtools/113062.html

相关文章

【电脑组装】✈️从配置拼装到安装系统组装自己的台式电脑

目录 🍸前言 🍻一、台式电脑基本组成 🍺二、组装 🍹三、安装系统 👋四、系统设置 👀五、章末 🍸前言 小伙伴们大家好,上篇文章分享了在平时开发的时候遇到的一种项目整合情况&…

通信工程学习:什么是HFC混合光纤同轴电缆

HFC:混合光纤同轴电缆 HFC(Hybrid Fiber Coaxial)混合光纤同轴电缆是一种结合了光纤与同轴电缆的宽带接入网技术。以下是对HFC混合光纤同轴电缆的详细解释: 一、HFC混合光纤同轴电缆的定义与概述 定义:HFC是一种结合光…

windows系统docker装milvus向量数据库

首先创建一个文件夹比如milvus,在创建如下文件 docker-compose.yml文件如下: version: 3.5services:etcd:container_name: milvus-etcdimage: quay.io/coreos/etcd:v3.5.5environment:- ETCD_AUTO_COMPACTION_MODErevision- ETCD_AUTO_COMPACTION_RETENTION1000- ETCD_QUOTA_B…

2024.9.11(k8s环境搭建)

一、k8s环境搭建 编号主机名称ip配置1k8s-master192.168.8.1772k8s-node1192.168.8.1783k8s-node2192.168.8.168 1、免密登录 [rootk8s-master ~]# ssh-keygen [rootk8s-master ~]# ssh-copy-id root192.168.8.178 [rootk8s-master ~]# ssh-copy-id root192.168.8.168 2、3台…

解决:Vue3 - defineProps 设置默认值报错问题

目录 1&#xff0c;问题2&#xff0c;分析2.1&#xff0c;按报错提示信息测试2.2&#xff0c;测试 vue-i18n 3&#xff0c;解决 1&#xff0c;问题 使用 defineProps 指定默认值时报错&#xff0c;代码如下&#xff1a; <template><input type"text" :pla…

数据结构(Day13)

一、学习内容 内存空间划分 1、一个进程启动后&#xff0c;计算机会给该进程分配4G的虚拟内存 2、其中0G-3G是用户空间【程序员写代码操作部分】【应用层】 3、3G-4G是内核空间【与底层驱动有关】 4、所有进程共享3G-4G的内核空间&#xff0c;每个进程独立拥有0G-3G的用户空间 …

React项目中使用发布订阅模式

React项目中使用发布订阅模式 1.创建发布订阅器2.在组件中使用发布订阅器3. 订阅数据 发布订阅模式&#xff08;也称观察者模式&#xff09;是一种管理跨组件通信的有效方式&#xff0c;尤其是在不希望直接依赖于特定组件的情况下。这种模式允许一个对象&#xff08;发布者&…

SAP B1 学习笔记 - 易混淆字段名(持续更新中)

背景 在 SAP B1 的单据中&#xff0c;由于同一单据时常对应着多个后台表单&#xff0c;且后台表单内包含的字段信息往往远大于单据显示出来的&#xff0c;在配置时经常出现多个字段混淆、无系统信息提示字段名模糊的情况&#xff0c;这里总结常见的易混淆难查找的后台字段名。…

Linux whereis和which的区别

功能概述 whereis命令 whereis主要用于查找二进制文件、源代码文件和手册页文件的位置。它会在特定的目录列表中查找&#xff0c;这些目录包括二进制文件目录&#xff08;如/bin、/sbin、/usr/bin、/usr/sbin等&#xff09;、源代码目录&#xff08;如/usr/src&#xff09;和手…

C#/.NET/.NET Core技术前沿周刊 | 第 5 期(2024年9.9-9.15)

前言 C#/.NET/.NET Core技术前沿周刊&#xff0c;你的每周技术指南针&#xff01;记录、追踪C#/.NET/.NET Core领域、生态的每周最新、最实用、最有价值的技术文章、社区动态、优质项目和学习资源等。让你时刻站在技术前沿&#xff0c;助力技术成长与视野拓宽。 欢迎投稿&…

Taro + Vue 的 CSS Module 解决方案

一、开启模块化配置 Taro 中内置了 CSS Modules 的支持&#xff0c;但默认是关闭的。如果需要开启使用&#xff0c;请先在编译配置中添加如下配置&#xff1a; weapp: {module: {postcss: {// css modules 功能开关与相关配置cssModules: {enable: true, // 默认为 false&…

【C++知识扫盲】------初识命名空间

在 C 中&#xff0c;using namespace std; 和 std:: 都与命名空间的使用相关。命名空间是为了防止不同库或模块中的同名符号&#xff08;函数、变量等&#xff09;发生冲突的机制。 1. std:: std:: 是用于访问 C 标准库中定义符号的前缀。std 代表标准&#xff08;standard&a…

AI创意引擎:优化Prompt提示词的高效提问技巧

AI内容创作的精髓&#xff1a;提示词&#xff08;Prompt&#xff09; 在AI领域中&#xff0c;提示词&#xff08;Prompt&#xff09;是与模型沟通的关键工具。提示词不仅决定了AI生成内容的方向和质量&#xff0c;还在优化模型输出、提升用户体验中扮演着至关重要的角色。因此…

HTTPS和HTTP区别是什么?

HTTP和HTTPS是两种协议&#xff0c;分别是HyperText Transfer Protocol和HyperText Transfer Protocol Secure。 HTTPS还经常被称为HTTP over SSL或者HTTP over TSL&#xff0c;HTTPS经由HTTP进行通信&#xff0c;但利用SSL/TLS来加密数据包。 他们的区别主要由以下几个方面&…

Git常用指令整理【新手入门级】【by慕羽】

Git 是一个分布式版本控制系统&#xff0c;主要用于跟踪和管理源代码的更改。它允许多名开发者协作&#xff0c;同时提供了强大的功能来管理项目的历史记录和不同版本。本文主要记录和整理&#xff0c;个人理解的Git相关的一些指令和用法 文章目录 一、git安装 & 创建git仓…

如何用Appium实现移动端UI自动化测试?

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 Appium是一个开源跨平台移动应用自动化测试框架。 既然只是想学习下Appium如何入门&#xff0c;那么我们就直奔主题。文章结构如下&#xff1a; 为什么要使用App…

计算机毕业设计:Java体育成绩管理系统开题报告+源代码效果图

博主介绍&#xff1a;黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者&#xff0c;CSDN博客专家&#xff0c;在线教育专家&#xff0c;CSDN钻石讲师&#xff1b;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程&#xff…

OpenCV-上下采样

文章目录 一&#xff0c;简介二、下采样&#xff08;Downsampling&#xff09;三、上采样&#xff08;Upsampling&#xff09;四、代码实现1.图像读取2.下采样3.上采样4.拉普拉斯金字塔 五、应用 一&#xff0c;简介 高斯金字塔是图像处理、计算机视觉和信号处理中常用的一项技…

快人一步迅为LPDDR5版本瑞芯微RK3588核心板升级了

性能强--iTOP-3588开发板采用瑞芯微RK3588处理器&#xff0c;是全新一代ALoT高端应用芯片&#xff0c;采用8nm LP制程&#xff0c;搭载八核64位CPU&#xff0c;四核Cortex-A76和四核Cortex-A55架构&#xff0c;主频高达2.4GHZ&#xff0c;8GB内存&#xff0c;32GB EMMC。四核心…

JAVA学习笔记05-Character

package day01; public class CharacterDemo { public static void main(String[] args) { // char 占用2个字节 char temp A; System.out.println(temp); System.out.println((int)temp); char t1 \; // 特殊符号有特殊含义,不…