网站开发项目计划书模板/十大培训机构教育培训机构哪家好

网站开发项目计划书模板,十大培训机构教育培训机构哪家好,深圳网站开发是什么,没有备案的网站 公司服务器 查到会怎么样简单使用LlamaIndex实现RAG 1 介绍 LlamaIndex是一个专门为大语言模型(LLM)设计的开源数据管理工具,旨在简化和优化LLM在外部数据源中的查询过程。适合在数据索引上构建RAG。 参考的地址 # 官网地址 https://docs.llamaindex.ai/en/stabl…

简单使用LlamaIndex实现RAG

1 介绍

LlamaIndex是一个专门为大语言模型(LLM)设计的开源数据管理工具,旨在简化和优化LLM在外部数据源中的查询过程。适合在数据索引上构建RAG。

参考的地址

# 官网地址
https://docs.llamaindex.ai/en/stable/# 模块介绍
https://docs.llamaindex.ai/en/stable/module_guides/# Github地址
https://github.com/run-llama/llama_index

使用的组件

# Openai like
https://docs.llamaindex.ai/en/stable/api_reference/llms/openai_like/
# OpenLLM,我没测试组件,它继承了OpenAILike
https://docs.llamaindex.ai/en/stable/api_reference/llms/openllm/# 自定义嵌入模型
https://docs.llamaindex.ai/en/stable/module_guides/models/embeddings/#custom-embedding-model# 自定义LLM模型
https://docs.llamaindex.ai/en/stable/module_guides/models/llms/usage_custom/# ChromaVectorStore向量存储
https://docs.llamaindex.ai/en/stable/api_reference/storage/vector_store/chroma/#llama_index.vector_stores.chroma.ChromaVectorStore# Chroma数据库文档
https://docs.trychroma.com/docs/overview/introduction

需要安装的包

⚠️ 我使用的llma-index的版本:0.12.26

pip install llama-index
pip install llama-index-llms-openai-like
pip install llama-index-vector-stores-chroma
pip install chromadb

2 使用官网构建RAG

⚠️ 国内基本无法直接使用,因为需要OpenAI的模型,所以无法直接使用。那就需要根据自己的需求定制。

from llama_index.core import VectorStoreIndex, SimpleDirectoryReader# 加载数据
documents = SimpleDirectoryReader("E:/data").load_data()
# 转化文档
index = VectorStoreIndex.from_documents(documents)
# 构建查询引擎
query_engine = index.as_query_engine()
# 使用
response = query_engine.query("Some question about the data should go here")
print(response)

3 自定义构建RAG

3.1 RAG构建思路

使用LlamaIndex构建RAG的思路如下图,LlamaIndex需要自定义向量模型和类大模型组件。

graph TDA[(1)构建Documet对象列表,读数据文档] --> BB[(2)构建Node对象列表,使用分割器分割Document,其中分割器有SentenceSplitter、TextSplitter等] --> CC[(3)向量化和存储,自定义嵌入模型和存储到数据库中,可以使用SimpleVectorStore、ChromaVectorStore等] --> DD[(4)构建向量索引库,使用VectorStoreIndex构建向量索引] --> EE[(5)构建检索器,用于用户检索输入的prompt] --> FF[(6)构建响应生成器,自定义大模型生成用户输入的prompt] --> GG[(7)构建查询引擎,组合检索器和响应生成器构建查询引擎] --> HH[(8)使用prompt查询和生成数据]

在这里插入图片描述

3.2 自定义RAG

(1) my_document_custorm_engine.py

import chromadb
from llama_index.core import Document, VectorStoreIndex, get_response_synthesizer
from llama_index.core.node_parser import SentenceSplitter
from llama_index.core.query_engine import RetrieverQueryEngine
from llama_index.core.response_synthesizers import ResponseMode
from llama_index.vector_stores.chroma import ChromaVectorStorefrom my_custom_rag.custom_like_openai import CustomLikeOpenAI# 需要安装的组件
"""
pip install llama-index
pip install llama-index-llms-openai-like
pip install llama-index-vector-stores-chroma
"""from my_custom_rag.custom_embedding import CustomEmbeddings# 自定嵌入模型
my_embedding = CustomEmbeddings()# 构建文档列表,可根据自己的需求设置文本文档列表
document_text = ["河南大学(Henan University),简称“河大”(HENU),位于中国河南省郑州市、开封市,是河南省人民政府与中华人民共和国教育部共建公办高校 [392]、国家“双一流”建设高校 [69],入选国家“111计划” [2]、中西部高校基础能力建设工程 [313]、中国政府奖学金来华留学生接收院校 [388]。","河南大学创立于1912年,始名河南留学欧美预备学校。后历经中州大学、国立开封中山大学、省立河南大学等阶段,1942年升格为国立河南大学 [153]。1952年院系调整 ,校本部更名为河南师范学院。后经开封师范学院、河南师范大学等阶段,1984年恢复河南大学校名 [153]。2000年6月,原河南大学、开封医学高等专科学校、开封师范高等专科学校合并组建新的河南大学 [154]。2012年,河南大学入选第一批卓越医生教育培养计划项目试点高校 [130];入选国家级卓越法律人才教育培养基地 [390];入选第一批国家卓越医生教育培养计划项目试点高校 [391]。","截至2024年6月,学校设有40个学院、93个本科招生专业 、47个硕士学位授权一级学科 、39种硕士专业学位授权类别 、2种博士专业学位授权类别、24个博士学位授权一级学科 、20个博士后科研流动站、13个学科进入ESI世界排名前1% ;有全日制在校生5万余人、教职工4700余人,教师中有院士、学部委员6人,长江学者、国家杰青、“万人计划”领军人才等国家级领军人才26人,国家级青年人才15人;拥有3个国家重点实验室 ,1个国家野外科学观测研究站 ,3个国家地方联合工程研究中心 ,4个河南省实验室 , 5个教育部和农业部重点实验室 [448]。","河南大学软件学院(Henan University Software College)是全国较早、河南省最早成立的软件学院之一,位于中国河南省开封市。学院是国家示范性软件学院联盟成员单位,信息技术新工科产学研联盟首批会员单位,2020 年度获批河南省特色化示范性软件学院,河南省鲲鹏产业学院建设高校。学院设有软件工程系、网络工程系和公共计算机教学中心,拥有“河南省智能数据处理工程研究中心”、“河南省现代网络技术实验教学示范中心”、“河南省智能网络理论与关键技术国际联合实验室”等省级科研教学平台、“河南省高等学校学科(软件工程)引智基地”、“河南省本科高校大学生校外实践教育基地”和“河南省高校优秀基层教学组织”称号。学院独立承建软件工程和网络工程两个本科专业,软件工程专业为国家一流本科专业, 网络工程专业为河南省一流本科专业。同时,拥有“软件工程技术”二级博士学位授权点,电子信息专业具有硕士学位授予权,建有软件工程博士后科研流动站。"
]# 构建LlamaIndex的对象列表
documents = list()
for text in document_text:documents.append(Document(text=text))
# print(documents)# 将LlamaIndex的Document拆分Nodes
parser = SentenceSplitter()
nodes = parser.get_nodes_from_documents(documents)# 使用嵌入模型对node进行嵌入
for node in nodes:node.embedding = my_embedding.get_text_embedding(node.get_content())# 创建Chroma客户端
client = chromadb.Client()# 创建集合
collection = client.create_collection("my-documents")
chroma_vector_store = ChromaVectorStore(chroma_collection=collection)# 存入向量库中
chroma_vector_store.add(nodes)# 使用索引对象
# 注意:VectorStoreIndex必须有向量库支持,否则会报下面的错误
# Cannot initialize from a vector store that does not store text.
vector_index = VectorStoreIndex.from_vector_store(chroma_vector_store, embed_model=my_embedding)# Llama index中的OpenAILike调用千问和Kimi不能使用,一直报参数错误,所以只能自定义了
llm = CustomLikeOpenAI(model="qwen2.5-14b-instruct",api_base="https://dashscope.aliyuncs.com/compatible-mode/v1",api_key = "sk-XXX"
)# 下面的是LlamaIndex中的OpenAILike
# llm = OpenAILike(
#     model="qwen2.5-14b-instruct",
#     base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
#     api_key = "sk-XXX"
# )"""
# 显示构建查询引擎=检索器+响应生成器# 创建检索器,similarity_top_k设置返回值的数量
query_retriever = vector_index.as_retriever(similarity_top_k=1)# 响应生成器有compact(默认模式)、refine、simple_summarize等
response_synthesizer = get_response_synthesizer(llm=llm,response_mode=ResponseMode.COMPACT,# streaming=True
)query_engine = RetrieverQueryEngine(retriever=query_retriever,response_synthesizer=response_synthesizer
)"""
# 隐式构建查询引擎,上面两步可以使用1行构建
query_engine = vector_index.as_query_engine(llm=llm,# streaming=True
)# 如果不使用流式输出,直接打印即可
query_data = query_engine.query("用30字介绍一下河南大学")
print(query_data)# # 使用流式输出
# for text in query_data.response_gen:
#     print(text)
#     pass

(2)custom_embedding.py

自定义嵌入模型

from llama_index.core.base.embeddings.base import Embedding
from llama_index.core.embeddings import BaseEmbedding
from sentence_transformers import SentenceTransformer# 构建向量模型,可根据自己的需求,自定义调用互联网和本地模型等
embedder = SentenceTransformer("E:/model/sentencetransformers/distiluse-base-multilingual-cased-v1")class CustomEmbeddings(BaseEmbedding):def _get_query_embedding(self, query: str) -> Embedding:# 生成嵌入列表return embedder.encode(query).tolist()async def _aget_query_embedding(self, query: str) -> Embedding:# 生成嵌入列表return embedder.encode(query).tolist()def _get_text_embedding(self, text: str) -> Embedding:# 生成嵌入列表return embedder.encode(text).tolist()

(3)custom_like_openai.py

自定义大模型

from typing import Anyfrom llama_index.core.base.llms.types import CompletionResponseGen, LLMMetadata, CompletionResponse
from llama_index.core.llms import CustomLLM
from openai import OpenAI
from pydantic import Fieldclass CustomLikeOpenAI(CustomLLM):model: str = Field(description="自定义模型名称")api_key: str = Field(description="自定义API Key")api_base: str = Field(description="自定义API地址")context_window: int = Field(default=32768, description="上下文窗口大小")temperature: float = Field(ge=0, le=1, default=0.3, description="设置温度,值域须为 [0, 1]")num_output: int = Field(default=8192, description="设置max_tokens")def __init__(self, **data):# 必须调用父类初始化super().__init__(**data)# 创建对象self._client = OpenAI(api_key=self.api_key,base_url=self.api_base)@propertydef metadata(self) -> LLMMetadata:"""Get LLM metadata."""return LLMMetadata(context_window=self.context_window,num_output=self.num_output,model_name=self.model)def complete(self, prompt: str, **kwargs: Any) -> CompletionResponse:"""生成文本:param prompt: 添加提示词:param kwargs: 其他相关参数:return: CompletionResponse"""# 构建生成completion = self._client.chat.completions.create(model=self.model,messages=[{"role": "user", "content": prompt}],temperature=self.temperature,max_tokens=self.num_output)# 返回值return CompletionResponse(text=completion.choices[0].message.content)def stream_complete(self, prompt: str, **kwargs: Any) -> CompletionResponseGen:"""生成流式文本:param prompt: 提示词:param kwargs: 其他参数:return: CompletionResponseGen迭代器"""# 根据需要可以不实现,如果不想实现使用下面代码即可# raise NotImplementedError("Streaming not supported")# 构建数据流stream = self._client.chat.completions.create(model=self.model,messages=[{"role": "user", "content": prompt}],temperature=self.temperature,max_tokens=self.num_output,stream=True)# 遍历数据流for chunk in stream:# 获取新文本delta = chunk.choices[0].delta# 判断数据是否存在if delta.content:yield CompletionResponse(text=delta.content, delta=delta.content)

3.3 其他学习

(1)使用SimpleVectorStore存储

from llama_index.core import Document
from llama_index.core.node_parser import SentenceSplitter
from llama_index.core.vector_stores import SimpleVectorStore, VectorStoreQuery
from sentence_transformers import SentenceTransformer# 构建向量模型
embedder = SentenceTransformer("E:/model/sentencetransformers/distiluse-base-multilingual-cased-v1")# 构建文档列表,可根据自己的需求设置文本文档列表
document_text = ["A man is eating food.","A man is eating a piece of bread.","The girl is carrying a baby.","A man is riding a horse.","A woman is playing violin.","Two men pushed carts through the woods.","A man is riding a white horse on an enclosed ground.","A monkey is playing drums.","A cheetah is running behind its prey.",
]# 构建LlamaIndex的对象列表
documents = list()
for text in document_text:documents.append(Document(text=text))
# print(documents)# 将LlamaIndex的Document拆分Nodes
parser = SentenceSplitter()
nodes = parser.get_nodes_from_documents(documents)# 使用嵌入模型对node进行嵌入
for node in nodes:node.embedding = embedder.encode(node.get_content())
# print(nodes)# 下面一般不会用于生产环境,生产环境一般用向量库
# 基于内存的方式存储向量
simple_vector_store = SimpleVectorStore()
simple_vector_store.add(nodes)# 持久化nodes,默认存储在”./storage“
# simple_vector_store.persist()
# 获取持久化数据
# simple_vector_store = SimpleVectorStore.from_persist_path("./storage/vector_store.json")# # 对查询的文本进行嵌入
query_embed = embedder.encode("A man is eating pasta").tolist()
# 查询到的目标数据
target_data_embed = simple_vector_store.query(VectorStoreQuery(query_embedding=query_embed, similarity_top_k=2))print(target_data_embed)

(2)使用索引VectorStoreIndex

import chromadb
from llama_index.core import Document, VectorStoreIndex
from llama_index.core.node_parser import SentenceSplitter
from llama_index.vector_stores.chroma import ChromaVectorStorefrom my_custom_rag.custom_embedding import CustomEmbeddings# 自定嵌入模型
my_embedding = CustomEmbeddings()# 构建文档列表,可根据自己的需求设置文本文档列表
document_text = ["A man is eating food.","A man is eating a piece of bread.","The girl is carrying a baby.","A man is riding a horse.","A woman is playing violin.","Two men pushed carts through the woods.","A man is riding a white horse on an enclosed ground.","A monkey is playing drums.","A cheetah is running behind its prey.",
]# 构建LlamaIndex的对象列表
documents = list()
for text in document_text:documents.append(Document(text=text))
# print(documents)# 将LlamaIndex的Document拆分Nodes
parser = SentenceSplitter()
nodes = parser.get_nodes_from_documents(documents)# 使用嵌入模型对node进行嵌入
for node in nodes:node.embedding = my_embedding.get_text_embedding(node.get_content())# 创建Chroma客户端
client = chromadb.Client()# 创建集合
collection = client.create_collection("my-documents")
chroma_vector_store = ChromaVectorStore(chroma_collection=collection)# 存入向量库中
chroma_vector_store.add(nodes)# 使用索引对象
# 注意:VectorStoreIndex必须有向量库支持,否则会报下面的错误
# Cannot initialize from a vector store that does not store text.
vector_index = VectorStoreIndex.from_vector_store(chroma_vector_store, embed_model=my_embedding)# 创建检索器,similarity_top_k设置返回值的数量
query_retriever = vector_index.as_retriever(similarity_top_k=1)# 查询数据
query_text = "A man is eating pasta"
retrieve_data = query_retriever.retrieve(query_text)print(retrieve_data)

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

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

相关文章

日报日报流量分析

快捷键 CtrlK,选择需要抓包的网卡 CtrlF可以进行关键字搜索 CtrlM,标记数据包 CtrlShiftN跳到标记处 查看包有多少协议Protocol Hierarchy(协议分级) 搜了一下TCP协议,是互联网最基本的协议&#xff0…

docker-Dify外接Fastgpt知识库

参考地址:https://mp.weixin.qq.com/s/crQrneHZ0sT-c04YanofSw 总体步骤 部署fda(fastgpt-dify-adapter)docker 部署dify,fastgpt在fastgpt创建open apikey,复制知识库id;在dify外接fastgpt知识库; docker安装 下载…

蓝桥杯 之 图论基础+并查集

文章目录 习题联盟X蓝桥幼儿园 图论基础 并查集 并查集,总的来说,操作分为三步初始化(每一个节点的父亲是自己),定义union(index1,index2)函数,定义find(index)函数 并查集详细内容博客 习题 联盟X 联盟X 典型的求解连通分支…

NC,GFS、ICON 数据气象信息可视化--降雨量的实现

随着气象数据的快速发展和应用,气象信息的可视化成为了一项不可或缺的技术手段。它不仅能帮助气象专家快速解读数据,还能为公众提供直观的天气预报信息。今天,我们将从降雨量的可视化出发,带大家一起了解如何实现气象数据的可视化…

质量工程师的2025:从“找bug“到“造质量“的职业进化

想象一下,2025年的某天:阅读原文 早晨,AI测试助手已经自动运行了夜间回归测试,并将可疑问题标记出来 你喝着咖啡,通过质量数据看板分析系统健康度 下午的会议上,你正用业务语言向产品经理解释&#xff1a…

数据大屏点亮工业互联网的智慧之眼

在当今数字化飞速发展的时代,数据已成为企业决策的核心依据,而数据大屏作为数据可视化的重要工具,正逐渐成为工业互联网领域不可或缺的一部分。通过直观、动态的可视化展示,数据大屏能够将复杂的数据转化为易于理解的图表和图形&a…

UE4学习笔记 FPS游戏制作29 更换武器时更换武器的图标

文章目录 制作物体图标UI添加获取武器图标的方法使用事件分发器,通知UI要换枪定义事件分发器调用事件分发器注册事件分发器 制作物体图标UI 在Fpp-UI上添加一个图片,改名为五weaponIcon,勾选SizeToContent,锚点放在右下角,对齐改…

SpringMVC 请求与响应处理详解

引言 在 Java Web 开发中,SpringMVC 作为 Spring 框架的重要模块,提供了强大的请求和响应处理机制。本文将深入探讨 SpringMVC 中请求和响应的处理方式,结合实际案例,帮助开发者更好地理解和应用这些功能。 一、SpringMVC 请求处…

从零开始的 Kafka 学习(四)| 生产消息

1. 生产消息 1.1 生产消息的基本步骤 (一)创建Map类型的配置对象,根据场景增加相应的配置属性: 参数名参数作用类型默认值推荐值bootstrap.servers集群地址,格式为:brokerIP1:端口号,brokerIP2:端口号必…

新手村:逻辑回归-理解04:熵是什么?

新手村:逻辑回归04:熵是什么? 熵是什么? 前置条件 在开始学习逻辑回归中的熵理论之前,需要掌握以下基础知识: 概率论与统计学: 概率分布(如伯努利分布、正态分布)。条件概率和贝叶斯定理。期…

STM32通用定时器结构框图

STM32单片机快速入门 通用定时器框图 TIM9和TIM12 通用定时器框图 TIM9和TIM12 (二) 通用定时器框图

3.28-2 jmeter读取mysql

jmeter操作mysql 1.下载数据驱动,安装数据驱动 (1)存放四个路径 a.jre下的lib C:\Program Files\Java\jre1.8.0_60\lib (2)存放在jre 下的lib 中的ext 路径: C:\Program Files\Java\jre1.8.0_60\lib\…

Postman CORS 测试完全指南:轻松模拟跨域请求,排查 CORS 相关问题

在使用 Postman 进行 API 测试时,通常不会遇到跨域问题,因为 Postman 是一个独立的客户端应用程序,不同于在浏览器中运行的 JavaScript 代码,它没有同源策略(SOP)的限制。跨域资源共享(CORS&…

基于SpringBoot和Vue的SQL TO API平台的设计与实现

文章目录 前言一、系统功能模块二、数据库设计1. 实体属性图1. 实体属性图1.1 职员表1.2 数据源配置表1.3 接口配置表1.4 请求记录表 2. E-R图 三、系统实现1. 登录页面2. 职员管理页面1.1 创建用户1.2 编辑用户 2. 数据源管理2.1 创建数据源2.2 编辑数据源 3. 接口管理3.1 创建…

【Portainer】Docker可视化组件安装

Portainer Portainer 是用于管理容器化环境的一体化平台工程解决方案,提供广泛的定制功能,以满足个人开发人员和企业团队的需求。 官方地址: https://www.portainer.io/ 安装 在 WSL / Docker Desktop 上使用 Docker 安装 Portainer CE 通过命令或UI页…

unity中Xcharts图表鼠标悬浮表现异常

鼠标悬浮在面板附近,只显示单独的一个项目 而且无论鼠标如何移动,根本没有效果。 解决方案: 需要在对应的Canvas上绑定主相机才可以 鼠标移动到项目上就有信息展示了

CentOS 安装LAMP全过程 - 完整步骤与最佳实践

在开始搭建 LAMP 环境之前,需要确保系统已经满足以下条件: 1、操作系统:CentOS 7 或 CentOS 8 2、网络连接:系统必须能够访问互联网以下载所需的软件包 3、权限:需要 root 权限或者通过sudo 提权执行命令 先更新系…

Java基础关键_031_反射(一)

目 录 一、概述 二、获取 Class 的四种方式 1.Class.forName("完整全限定类名") 2.getClass() 3.class 属性 4.通过类加载器获取 三、通过反射机制实例化对象 1.newInstance()(已过时) 2.配置文件利用反射机制实例化对象 四、反射 Cla…

33.[前端开发-JavaScript基础]Day10-常见事件-鼠标事件-键盘事件-定时器-案例

1 window定时器 window定时器方法 setTimeout的使用 setInterval的使用 2 轮播消息提示 案例实战一 – 轮播消息提示 3 关闭隐藏消息 案例实战二 – 关闭隐藏消息 4 侧边栏展示 案例实战三 – 侧边栏展示 5 tab切换实现 案例实战四 – 登录框(作业)…

react ant design树穿梭框实现搜索并展开到子节点、同级节点选择及同时选择数量限制功能

功能点: 点击节点前的箭头,可以手动展开或折叠该节点的子节点。在搜索框中输入关键词,匹配的节点及其父节点会自动展开。清空搜索框后,恢复到用户手动控制的展开状态。勾选节点时仍然遵守 "最多勾选 6 个节点" 和 &quo…