基于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.mzph.cn/web/53134.shtml

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

相关文章

C++掉血迷宫

目录 开头程序程序的流程图程序游玩的效果下一篇博客要说的东西 开头 大家好&#xff0c;我叫这是我58。 程序 #include <iostream> #include <string> #include <cstring> using namespace std; enum RBYG {R 1,B 2,Y 4,G 7, }; struct heal {int ix…

Linux服务器本地部署Joplin Server并实现手机电脑多端同步文档

文章目录 前言1. 安装Docker2. 自建Joplin服务器3. 搭建Joplin Sever4. 安装cpolar内网穿透5. 创建远程连接的固定公网地址 前言 本文主要介绍如何在自己的服务器上利用docker搭建 Joplin Server&#xff0c;并对同步进行配置&#xff0c;再结合cpolar内网穿透工具实现公网远程…

学习Stable Diffusion使用 Roop插件轻松换脸(附插件)

在今天的分享中&#xff0c;将了解到如何获取并应用StableDiffusion的Roop插件&#xff0c;以达到完美的面部替换效果。 Roop是一款强大的工具&#xff0c;使您能够轻松地交换面孔并达到逼真的效果。 无论是艺术家、内容创作者&#xff0c;还是仅仅想要尝试图像处理的乐趣&am…

关于Vue2里 v-for和v-if一起用的时候会出现的问题

关于Vue2里 v-for和v-if一起用的时候会出现的问题 &#x1f389;&#x1f389;&#x1f389;欢迎来到我的博客,我是一名自学了2年半前端的大一学生,熟悉的技术是JavaScript与Vue.目前正在往全栈方向前进, 如果我的博客给您带来了帮助欢迎您关注我,我将会持续不断的更新文章!!!&…

使用cmd命令窗口操作mongodb

一、效果显示 二、下载MongoDB 1. 在官网下载安装MongoDB 官网网址&#xff1a;Download MongoDB Community Server | MongoDB 我安装的版本是7.0.14(注意安装到空闲磁盘) 三、启动MongoDB服务 1. 配置环境变量 注意替换为你的路径。 2. 在MongoDB的data下创建db文件夹 在…

51单片机应用开发---二进制、十六进制与单片机寄存器之间的关系(跑马灯、流水灯实例)

实现目标 1、掌握二进制与十六进制之间的转换 2、掌握单片机寄存器与二进制、十六进制之间的转换 3、掌握单片机驱动跑马灯、流水灯的原理 一、二进制与十六进制之间的转换 1、二进制 二进制&#xff08;binary&#xff09;&#xff0c; 是在数学和数字电路中以2为基数的…

计算机毕业设计 乡村生活垃圾管理系统的设计与实现 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

Java接口与继承:构建灵活系统的基石

在Java编程语言中&#xff0c;接口&#xff08;Interface&#xff09;是一种定义方法规范的类型&#xff0c;它是一种特殊的抽象类&#xff0c;可以被类实现&#xff08;Implement&#xff09;或被其他接口继承&#xff08;Extend&#xff09;。接口是Java实现多态和模块化设计…

无人机之控制距离篇

无人机的控制距离是一个复杂且多变的概念&#xff0c;它受到多种因素的共同影响。以下是对无人机控制距离及其影响因素的详细分析&#xff1a; 一、无人机控制距离的定义 无人机控制距离指的是遥控器和接收机之间的最远传输距离。这个距离决定了无人机在操作者控制下能够飞行的…

前端实战:使用JS和Canvas实现运算图形验证码(uniapp、微信小程序同样可用)

图形验证码是网站安全防护的重要组成部分&#xff0c;能有效防止自动化脚本进行恶意操作&#xff0c;如何实现一个简单的运算图形验证码&#xff1f;本文封装了一个简单的js类&#xff0c;可以用于生成简单但安全的图形验证码。它支持自定义验证码样式&#xff0c;包括字体大小…

HarmonyOS使用LocationButton获取地理位置

LocationButton LocationKit getAddressesFromLocation方法 步骤&#xff1a; 整合 LocationButton并获取经纬度通过 LocationKit 将经纬度转为地址信息将地址信息渲染到页面上处理异常情况&#xff08;闪退&#xff09; LocationButton({ icon: LocationIconStyle.LINE…

828华为云征文|Flexus云服务器X实例部署宝塔运维面板

本次华为云Flexus云服务器X实例部署宝塔运维面板教学&#xff0c;这次是推陈出新啊 之前的云耀云服务器L实例已经很不错了&#xff0c;大力赞叹华为云的 同时感谢华为云提供优惠卷&#xff0c;只能说白嫖真是太棒了 华为云近期正在筹办华为云828企业节活动&#xff0c;90款免…

Parallels Desktop 20破解版(Mac虚拟机) v20.0.0 for Mac 最新商业版(支持M系列)

Parallels Desktop 20是一款目前功能最强大灵活度最高的虚拟机软件&#xff0c;可运行数千种 Windows 应用程序&#xff0c;如 Microsoft Office、Internet Explorer、Access、Quicken、QuickBooks、Visual Studio&#xff0c;甚至支持对图像要求较高的游戏和 CAD 项目&#xf…

渗透测试综合靶场 DC-2 通关详解

一、准备阶段 准备工具如Kali Linux&#xff0c;下载并设置DC-2靶场机。确保攻击机和靶机在同一网络段&#xff0c;通常设置为桥接模式或NAT模式。 1.1 靶机描述 Much like DC-1, DC-2 is another purposely built vulnerable lab for the purpose of gaining experience in …

python毕业设计作品:python手机数码商城系统毕业设计源代码作品和开题报告(Django框架)

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

算法知识点———并查集

并查集是一种用于管理元素所属集合的数据结构&#xff0c;实现为一个森林&#xff0c;其中每棵树表示一个集合&#xff0c;树中的节点表示对应集合中的元素。并查集支持两种操作&#xff1a; 合并&#xff08;Union&#xff09;&#xff1a;合并两个元素所属集合&#xff08;合…

828华为云征文 | 华为云Flexusx与Docker技术融合,打造个性化WizNote服务

前言 华为云Flexus X实例携手Docker技术&#xff0c;创新融合打造高效个性化WizNote服务。华为云Flexus X实例的柔性算力与Docker的容器化优势相结合&#xff0c;实现资源灵活配置与性能优化&#xff0c;助力企业轻松构建稳定、高效的云端笔记平台。828华为云企业上云节特惠来袭…

【JVM安装MySQL】

环境 > VMware Workstation Pro > CentOS 7 >Navicat Premium Lite > MobaXterm添加 MySQL Yum 仓库 根据操作系统在下载界面选取对应yum库进行下载 wget https://dev.mysql.com/get/mysql80-community-release-el7-9.noarch.rpm在文件下载界面安装 rpm -ivh mysq…

html+css+js网页设计 旅游 穷游10个页面

htmlcssjs网页设计 旅游 穷游10个页面 网页作品代码简单&#xff0c;可使用任意HTML辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作&#xff09;。 获取源码 1&#xff…

苹果CMS插件:优化蜘蛛访问内容,提升百度收录率

确保蜘蛛抓取原始内容 专为苹果CMS设计的广告管理插件&#xff0c;能够智能识别搜索引擎蜘蛛与普通访客&#xff0c;确保蜘蛛访问时展示原始内容&#xff0c;从而提升被百度等搜索引擎收录的几率。 广告显示提升收益 对于普通访客&#xff0c;该插件则优先显示广告内容&#…