基于milvus数据库的RAG-Demo

1.上传文本并将文本向量化

import os
from django.conf import settings
from langchain.document_loaders import TextLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter, CharacterTextSplitter
from langchain.vectorstores import Chroma
from langchain.embeddings import DashScopeEmbeddings
from langchain_community.document_loaders import PyPDFLoader, Docx2txtLoaderfrom pymilvus import MilvusClient, DataTypedef get_embedding(text):file_path = os.path.join(settings.BASE_DIR, 'media', text)loader = ''# 判断文件类型if file_path.endswith('.txt'):loader = TextLoader(file_path, encoding='utf-8')elif file_path.endswith('.pdf'):loader = PyPDFLoader(file_path)elif file_path.endswith('.docx'):loader = Docx2txtLoader(file_path)elif file_path.endswith('.doc'):loader = Docx2txtLoader(file_path)elif file_path.endswith('.md'):loader = TextLoader(file_path)docs = loader.load()text_splitter = RecursiveCharacterTextSplitter(chunk_size=150, chunk_overlap=50)chunks = text_splitter.split_documents(docs)# embeddings = DashScopeEmbeddings(model='text-embedding-v1')# db = Chroma.from_documents(chunks, embeddings, persist_directory='./chroma_db')# db.persist()client = MilvusClient(uri="http://127.0.0.1:19530")schema = MilvusClient.create_schema(auto_id=True,enable_dynamic_field=True,)schema.add_field(field_name="f_id", datatype=DataType.INT64, is_primary=True)schema.add_field(field_name="f_vector", datatype=DataType.FLOAT_VECTOR, dim=1536)schema.add_field(field_name="f_content", datatype=DataType.VARCHAR, max_length=5000)# 准备索引参数对象,用于定义集合中的字段索引index_params = client.prepare_index_params()# 为字段f_id添加索引,索引类型为STL_SORTindex_params.add_index(field_name="f_id",index_type="STL_SORT")# 为字段f_vector添加索引,索引类型为IVF_FLAT,距离度量类型为IP,并设置nlist参数index_params.add_index(field_name="f_vector",index_type="IVF_FLAT",metric_type="IP",params={"nlist": 128})# 创建集合t_file,指定其schema,并设置索引参数client.create_collection(collection_name="app02_file",schema=schema,index_params=index_params)chunk_list = list(map(lambda x: x.page_content, chunks))embedding = DashScopeEmbeddings()chunk_embeds = embedding.embed_documents(chunk_list)data = []for i in range(len(chunk_embeds)):data_row = {"f_vector": chunk_embeds[i], "f_content": chunk_list[i]}data.append(data_row)print(data)client.insert(collection_name="app02_file",data=data)return docs

2.将问题向量化并搜索,拼接prompt,使用Agent(代理)

from langchain.agents import tool
from langchain.agents import load_tools
from langchain.agents import AgentType
from langchain.agents import initialize_agent
class testView(APIView):def get(self, request):query = request.query_params.get('query', None)llm = Tongyi()@tool('t1')def t1(query: str):"""当你需要查询数据库时才会使用这个工具"""client = MilvusClient(uri="http://127.0.0.1:19530", db_name="default")embedding = DashScopeEmbeddings(model="text-embedding-v1")question = embedding.embed_query(query)ret = client.search(collection_name='app02_file',data=[question],limit=3,  # Max. number of search results to returnoutput_fields=["f_content"])promptTemplate = PromptTemplate.from_template("请根据下面内容总结回答\n{text}\n问题:{question}")text = ""for content in ret[0]:text = text + content["entity"]["f_content"]prompt = promptTemplate.format(text=text, question=query)print(prompt)return prompttools = [t1]agent = initialize_agent(tools,llm,agent=AgentType.STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION,verbose=True,)ret = agent.run(query)return Response({'response': ret})

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

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

相关文章

【JAVA入门】Day47 - 线程

【JAVA入门】Day47 - 线程 文章目录 【JAVA入门】Day47 - 线程一、并发和并行二、多线程的实现方式2.1 继承 Thread 类的方式2.2 实现 Runnable 接口的方式2.3 利用 Callable 接口实现 三、Thread 类中常见的成员方法四、线程的调度和优先级4.1 抢占式调度4.2 优先级4.3 守护线…

如何不终止容器退出Docker Bash会话

如何不终止容器退出Docker Bash会话 💖The Begin💖点点关注,收藏不迷路💖 当通过docker exec进入Docker容器的bash会话后,如果想退出但不停止容器,可以使用快捷键组合: 按下Ctrl+P然后紧接着按下Ctrl+Q。 这个操作会让你从bash会话中“分离”出来,但容器会继续运行…

Zabbix 部署----安装 Zabbix(监控服务器)

目录 zabbix 官网: 1、准备一台虚拟机 1.整理配置yum源(192.xx.xx.10) 2.设置主机名(192.xx.xx.10) 3.防火墙 4.selinux 2、准备Zabbix-repo 使用阿里提供的zabbixYUM源 3、安装Zabbix服务器 4、初始化数据库 1.安装数据库 2.启动数据库 3.授权zabbix账号 4.初始化…

解决使用nvm ls命令没有出现*的问题

一、引言 在输命令的时候不知道手误写了什么导致node命令用不了,查看环境变量配的nvm对应的路径没问题,试过网上说的修改文件夹名字但是没有用!! 输入 nvm ls 显示已下载的node版本,发现前面没有* 输入nvm use 使用其中…

【macOS】【zsh报错】zsh: command not found: python

【macOS】【zsh Error】zsh: command not found: python 本地已经安装了Python,且能在Pycharm中编译Python程序并运行。 但是,在macOS终端,运行Python,报错。 首先要确认你在macOS系统下,是否安装了Python。 如果安…

去噪扩散隐式模型

dataset_name "datasets/oxford-102-flowers/" dataset_repetitions 2 # 数据集重复 num_epochs 25 image_size 64 # 模型训练和生成图像的大小 # KID 内核初始距离 kid_image_size 75 # 从噪声中逐步“去噪”或“扩散”到最终图像所需的步骤数。 kid_diffusi…

NEMESIS: NORMALIZING THE SOFT-PROMPT VECTORS OF VISION-LANGUAGE MODELS

文章汇总 发现的现象 动机的描述 Norm增加会导致性能下降,Norm降低会导致性能上升。于是作者提出: 我们需要规范化VLMs中的软提示吗? 实验验证 在左图中的紫色块中可以看到,随着模型性能的上升,Norm value会不断下降。 解决…

C语言 | Leetcode C语言题解之第419题棋盘上的战舰

题目&#xff1a; 题解&#xff1a; int countBattleships(char** board, int boardSize, int* boardColSize){int row boardSize;int col boardColSize[0];int ans 0;for (int i 0; i < row; i) {for (int j 0; j < col; j) {if (board[i][j] X) {if (i > 0 &…

ant vue3 datePicker默认显示英文

改前&#xff1a; 改后&#xff1a; 处理方法&#xff1a; 在App.vue页加上以下导入即可 import dayjs from dayjs; import dayjs/locale/zh-cn dayjs.locale(zh-cn); 如图&#xff1a;

电力电塔电线缺陷检测数据集 voc yolo

电力 电塔电线缺陷检测数据集 10000张 带标注 voc yolo 电力电塔电线缺陷检测数据集 数据集描述 该数据集旨在用于电力电塔和电线的缺陷检测任务&#xff0c;涵盖多种常见的缺陷类型。数据集包含了大量的图像及其对应的标注信息&#xff0c;可用于训练计算机视觉模型&#x…

如何搭建虚拟机Ubuntu?

1.创建新虚拟机 2.进入新建虚拟机向导&#xff0c;选择稍后安装 3. 选择Linux中的Ubuntu 4.为虚拟机命名设置路径 5. 设置磁盘容量大小 6.选择自定义硬件 7.设置设备状态 8.完成Ubuntu虚拟机创建

【Verilog学习日常】—牛客网刷题—Verilog快速入门—VL24

边沿检测 有一个缓慢变化的1bit信号a&#xff0c;编写一个程序检测a信号的上升沿给出指示信号rise&#xff0c;当a信号出现下降沿时给出指示信号down。 注&#xff1a;rise,down应为单脉冲信号&#xff0c;在相应边沿出现时的下一个时钟为高&#xff0c;之后恢复到0&#xff0…

Pandas_数据结构详解

1.创建DataFrame对象 概述 DataFrame是一个表格型的结构化数据结构&#xff0c;它含有一组或多组有序的列&#xff08;Series&#xff09;&#xff0c;每列可以是不同的值类型&#xff08;数值、字符串、布尔值等&#xff09;。 DataFrame是Pandas中的最基本的数据结构对象&am…

【kafka-04】kafka线上问题以及高效原理

Kafka系列整体栏目 内容链接地址【一】afka安装和基本核心概念https://zhenghuisheng.blog.csdn.net/article/details/142213307【二】kafka集群搭建https://zhenghuisheng.blog.csdn.net/article/details/142253288【三】springboot整合kafka以及核心参数详解https://zhenghui…

中间件安全(二)

本文仅作为学习参考使用&#xff0c;本文作者对任何使用本文进行渗透攻击破坏不负任何责任。 前言: 前文链接&#xff1a;中间件安全&#xff08;一&#xff09; 本文主要讲解Couchdb数据库未授权越权漏洞&#xff08;CVE-2017-12635&#xff09;。 靶场链接&#xff1a;Vu…

【内网渗透】最保姆级的春秋云镜Privilege打靶笔记

目录 flag1 flag2 flag3 flag4 flag1 fscan扫外网 访问./www.zip拿到源码 tools/content-log.php存在任意文件读取 根据提示读到Jenkins初始管理员密码 ./tools/content-log.php?logfile../../../../../../../../../ProgramData/Jenkins/.jenkins/secrets/initialAdminP…

Docker UI强大之处?

DockerUI是一款由国内开发者打造的优秀Docker可视化管理工具。它拥有简洁直观的用户界面&#xff0c;使得Docker主机管理、集群管理和任务编排变得轻松简单。DockerUI不仅能展示资源利用率、系统信息和更新日志&#xff0c;还提供了镜像管理功能&#xff0c;帮助用户高效清理中…

Spring Boot 整合 MyBatis 的详细步骤(两种方式)

1. Spring Boot 配置 MyBatis 的详细步骤 1、首先&#xff0c;我们创建相关测试的数据库&#xff0c;数据表。如下&#xff1a; CREATE DATABASE springboot_mybatis USE springboot_mybatisCREATE TABLE monster ( id int not null auto_increment, age int not null, birthda…

Vue 实现高级穿梭框 Transfer 封装

文章目录 01 基础信息1.1. 技术栈1.2. 组件设计a. 竖版设计稿b. 横版设计稿 02 技术方案&#xff08;1&#xff09;初定义数据&#xff08;2&#xff09;注意事项&#xff08;3&#xff09;逻辑草图 03 代码示例3.1. 组件使用3.2. 组件源码./TransferPlus/index.vue./TransferP…

动物识别系统Python+卷积神经网络算法+TensorFlow+人工智能+图像识别+计算机毕业设计项目

一、介绍 动物识别系统。本项目以Python作为主要编程语言&#xff0c;并基于TensorFlow搭建ResNet50卷积神经网络算法模型&#xff0c;通过收集4种常见的动物图像数据集&#xff08;猫、狗、鸡、马&#xff09;然后进行模型训练&#xff0c;得到一个识别精度较高的模型文件&am…